From: Timo Sirainen Date: Wed, 16 Apr 2003 14:24:12 +0000 (+0300) Subject: Crashfix if there was some errors while opening mailbox X-Git-Tag: 1.1.alpha1~4743 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=67b785ce2485243c490f0a8b0753ac4a5d347265;p=thirdparty%2Fdovecot%2Fcore.git Crashfix if there was some errors while opening mailbox --HG-- branch : HEAD --- diff --git a/src/pop3/client.c b/src/pop3/client.c index 62e25a27e0..c8e34d15c2 100644 --- a/src/pop3/client.c +++ b/src/pop3/client.c @@ -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; } diff --git a/src/pop3/client.h b/src/pop3/client.h index cdf3dce666..74c51e4da9 100644 --- a/src/pop3/client.h +++ b/src/pop3/client.h @@ -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 */ diff --git a/src/pop3/main.c b/src/pop3/main.c index 33123c11a2..59d2ba3ac9 100644 --- a/src/pop3/main.c +++ b/src/pop3/main.c @@ -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);