]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Crashfix if there was some errors while opening mailbox
authorTimo Sirainen <tss@iki.fi>
Wed, 16 Apr 2003 14:24:12 +0000 (17:24 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 16 Apr 2003 14:24:12 +0000 (17:24 +0300)
--HG--
branch : HEAD

src/pop3/client.c
src/pop3/client.h
src/pop3/main.c

index 62e25a27e013254a21d1705d71d32068bdd885be..c8e34d15c2821b5601328c66342e7934f234ab44 100644 (file)
@@ -103,7 +103,7 @@ static int init_mailbox(struct client *client)
        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,21 +119,24 @@ struct client *client_create(int hin, int hout, struct mailbox *mailbox)
 
        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;
+       storage->set_callbacks(storage, &mail_storage_callbacks, client);
 
-       mailbox->storage->set_callbacks(mailbox->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 cdf3dce6661acf66978a1addc6f25679e55f246a..74c51e4da997ff4e2f9fd4948a3cd13203d2096f 100644 (file)
@@ -27,7 +27,7 @@ struct client {
 
 /* 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 33123c11a2e341720ec7efc2d2b581849a4ae166..59d2ba3ac956e4cf86b5e76f64ed5e1bb0b707bb 100644 (file)
@@ -56,11 +56,10 @@ static void drop_privileges(void)
        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 @@ static void main_init(void)
                }
        }
 
-       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 @@ int main(int argc __attr_unused__, char *argv[], char *envp[])
         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);