[dovecot-cvs] dovecot/src/pop3 client.c,1.5,1.6 client.h,1.2,1.3 main.c,1.3,1.4

cras at procontrol.fi cras at procontrol.fi
Wed Apr 16 18:24:14 EEST 2003


Update of /home/cvs/dovecot/src/pop3
In directory danu:/tmp/cvs-serv9287/pop3

Modified Files:
	client.c client.h main.c 
Log Message:
Crashfix if there was some errors while opening mailbox



Index: client.c
===================================================================
RCS file: /home/cvs/dovecot/src/pop3/client.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- client.c	30 Jan 2003 19:52:39 -0000	1.5
+++ client.c	16 Apr 2003 14:24:12 -0000	1.6
@@ -103,7 +103,7 @@
 	return FALSE;
 }
 
-struct client *client_create(int hin, int hout, struct mailbox *mailbox)
+struct client *client_create(int hin, int hout, struct mail_storage *storage)
 {
 	struct client *client;
 
@@ -119,20 +119,23 @@
 
 	client->io = io_add(hin, IO_READ, client_input, client);
         client->last_input = ioloop_time;
+	client->storage = storage;
 
-	client->storage = mailbox->storage;
-	client->mailbox = mailbox;
-
-	mailbox->storage->set_callbacks(mailbox->storage,
-					&mail_storage_callbacks, client);
+	storage->set_callbacks(storage, &mail_storage_callbacks, client);
 
-	i_assert(my_client == NULL);
-	my_client = client;
+	client->mailbox = storage->open_mailbox(storage, "INBOX", FALSE, FALSE);
+	if (client->mailbox == NULL) {
+		client_send_line(client, "-ERR No INBOX for user.");
+		return NULL;
+	}
 
 	if (!init_mailbox(client)) {
 		client_destroy(client);
-		client = NULL;
+		return NULL;
 	}
+
+	i_assert(my_client == NULL);
+	my_client = client;
 
 	return client;
 }

Index: client.h
===================================================================
RCS file: /home/cvs/dovecot/src/pop3/client.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- client.h	27 Jan 2003 06:44:49 -0000	1.2
+++ client.h	16 Apr 2003 14:24:12 -0000	1.3
@@ -27,7 +27,7 @@
 
 /* Create new client with specified input/output handles. socket specifies
    if the handle is a socket. */
-struct client *client_create(int hin, int hout, struct mailbox *mailbox);
+struct client *client_create(int hin, int hout, struct mail_storage *storage);
 void client_destroy(struct client *client);
 
 /* Disconnect client connection */

Index: main.c
===================================================================
RCS file: /home/cvs/dovecot/src/pop3/main.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- main.c	10 Apr 2003 22:37:25 -0000	1.3
+++ main.c	16 Apr 2003 14:24:12 -0000	1.4
@@ -56,11 +56,10 @@
 	restrict_access_by_env(!IS_STANDALONE());
 }
 
-static void main_init(void)
+static int main_init(void)
 {
 	struct client *client;
 	struct mail_storage *storage;
-	struct mailbox *mailbox;
 	const char *mail;
 
 	lib_init_signals(sig_quit);
@@ -95,11 +94,8 @@
 		}
 	}
 
-	mailbox = storage->open_mailbox(storage, "INBOX", FALSE, FALSE);
-	if (mailbox == NULL)
-		i_fatal("No INBOX for user");
-
-	client = client_create(0, 1, mailbox);
+	client = client_create(0, 1, storage);
+	return client != NULL;
 }
 
 static void main_deinit(void)
@@ -129,8 +125,8 @@
         process_title_init(argv, envp);
 	ioloop = io_loop_create(system_pool);
 
-	main_init();
-        io_loop_run(ioloop);
+	if (main_init())
+		io_loop_run(ioloop);
 	main_deinit();
 
 	io_loop_destroy(ioloop);




More information about the dovecot-cvs mailing list