From 2a2bf4b7711ff5e912f67c582941021279f9233a 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 | 1 + src/imap/imap-master-client.c | 5 ++--- src/imap/main.c | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index 82f01e1aad..f6cd485288 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -216,6 +216,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 75700de639..229d1d52d8 100644 --- a/src/imap/imap-client.h +++ b/src/imap/imap-client.h @@ -255,6 +255,7 @@ 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 lda_settings *lda_set); +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 cdadf03b23..5beb01a1de 100644 --- a/src/imap/imap-master-client.c +++ b/src/imap/imap-master-client.c @@ -231,9 +231,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 e62e2360ea..f750c443d6 100644 --- a/src/imap/main.c +++ b/src/imap/main.c @@ -292,7 +292,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 */ @@ -337,7 +337,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)