From 4cf9cf959ae3bfe7a0ed91927c4c7919a7c09b76 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 15 Feb 2018 18:15:16 +0200 Subject: [PATCH] imap: Add client_create_finish() to finish namespace creation. --- src/imap/imap-client.c | 7 +++++++ src/imap/imap-client.h | 2 ++ src/imap/imap-master-client.c | 5 ++--- src/imap/main.c | 4 ++-- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index 175c356817..e8cc6069a2 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -223,6 +223,13 @@ struct client *client_create(int fd_in, int fd_out, const char *session_id, return client; } +int client_create_finish(struct client *client, const char **error_r) +{ + if (mail_namespaces_init(client->user, error_r) < 0) + return -1; + return 0; +} + void client_command_cancel(struct client_command_context **_cmd) { struct client_command_context *cmd = *_cmd; diff --git a/src/imap/imap-client.h b/src/imap/imap-client.h index fc5edb7ba1..d53dc1624d 100644 --- a/src/imap/imap-client.h +++ b/src/imap/imap-client.h @@ -257,6 +257,8 @@ struct client *client_create(int fd_in, int fd_out, const char *session_id, struct mail_storage_service_user *service_user, const struct imap_settings *set, const struct smtp_submit_settings *smtp_set); +/* Finish creating the client. Returns 0 if ok, -1 if there's an error. */ +int client_create_finish(struct client *client, const char **error_r); void client_destroy(struct client *client, const char *reason) ATTR_NULL(2); /* Disconnect client connection */ diff --git a/src/imap/imap-master-client.c b/src/imap/imap-master-client.c index f487d2c4e1..d7dd8359e6 100644 --- a/src/imap/imap-master-client.c +++ b/src/imap/imap-master-client.c @@ -233,9 +233,8 @@ imap_master_client_input_args(struct connection *conn, const char *const *args, } client->imap_client_created = TRUE; - if (mail_namespaces_init(imap_client->user, &error) < 0) { - i_error("imap-master(%s): mail_namespaces_init() failed: %s", - input.username, error); + if (client_create_finish(imap_client, &error) < 0) { + i_error("imap-master(%s): %s", input.username, error); client_destroy(imap_client, error); return -1; } diff --git a/src/imap/main.c b/src/imap/main.c index 782da13d58..9b5e435ea0 100644 --- a/src/imap/main.c +++ b/src/imap/main.c @@ -319,7 +319,7 @@ static void main_stdio_run(const char *username) client_add_input_capability(client, input_buf->data, input_buf->used); } - if (mail_namespaces_init(client->user, &error) < 0) + if (client_create_finish(client, &error) < 0) i_fatal("%s", error); client_add_input_finalize(client); /* client may be destroyed now */ @@ -369,7 +369,7 @@ login_client_connected(const struct master_login_client *login_client, login_client->auth_req.data_size); /* finish initializing the user (see comment in main()) */ - if (mail_namespaces_init(client->user, &error) < 0) { + if (client_create_finish(client, &error) < 0) { if (write_full(login_client->fd, MSG_BYE_INTERNAL_ERROR, strlen(MSG_BYE_INTERNAL_ERROR)) < 0) if (errno != EAGAIN && errno != EPIPE)