# HG changeset patch # User Timo Sirainen # Date 1518711200 -7200 # Node ID 700827777c0b52437d21e19de48719d0a2017161 # Parent 4e340516a8ceaf3e4303c54ffd8b41981fddf2e7 imap: When running standalone, delay initializing namespaces until PREAUTH is sent Most importantly this makes the code paths similar for standalone and non-standalone clients, which is needed by the following commits. diff -r 4e340516a8ce -r 700827777c0b src/imap/main.c --- a/src/imap/main.c Mon Feb 19 14:44:04 2018 +0200 +++ b/src/imap/main.c Thu Feb 15 18:13:20 2018 +0200 @@ -229,14 +229,6 @@ client_continue_pending_input(client); } -static void -client_add_input(struct client *client, const unsigned char *client_input, - size_t client_input_size) -{ - client_add_input_capability(client, client_input, client_input_size); - client_add_input_finalize(client); -} - int client_create_from_input(const struct mail_storage_service_input *input, int fd_in, int fd_out, struct client **client_r, const char **error_r) @@ -292,15 +284,17 @@ &client, &error) < 0) i_fatal("%s", error); - /* TODO: the following could make use of - client_add_input_{capability,finalize} */ input_base64 = getenv("CLIENT_INPUT"); if (input_base64 == NULL) - client_add_input(client, NULL, 0); + client_add_input_capability(client, NULL, 0); else { const buffer_t *input_buf = t_base64_decode_str(input_base64); - client_add_input(client, input_buf->data, input_buf->used); + client_add_input_capability(client, input_buf->data, input_buf->used); } + + if (mail_namespaces_init(client->user, &error) < 0) + i_fatal("%s", error); + client_add_input_finalize(client); /* client may be destroyed now */ } @@ -395,7 +389,15 @@ }; struct master_login_settings login_set; enum master_service_flags service_flags = 0; - enum mail_storage_service_flags storage_service_flags = 0; + enum mail_storage_service_flags storage_service_flags = + /* + * We include MAIL_STORAGE_SERVICE_FLAG_NO_NAMESPACES so + * that the mail_user initialization is fast and we can + * quickly send back the OK response to LOGIN/AUTHENTICATE. + * Otherwise we risk a very slow namespace initialization to + * cause client timeouts on login. + */ + MAIL_STORAGE_SERVICE_FLAG_NO_NAMESPACES; const char *username = NULL, *auth_socket_path = "auth-master"; int c; @@ -416,16 +418,7 @@ } else { service_flags |= MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN; storage_service_flags |= - MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT | - MAIL_STORAGE_SERVICE_FLAG_NO_NAMESPACES; - - /* - * We include MAIL_STORAGE_SERVICE_FLAG_NO_NAMESPACES so - * that the mail_user initialization is fast and we can - * quickly send back the OK response to LOGIN/AUTHENTICATE. - * Otherwise we risk a very slow namespace initialization to - * cause client timeouts on login. - */ + MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT; } master_service = master_service_init("imap", service_flags,