Skip to content

Commit

Permalink
imap: When running standalone, delay initializing namespaces until PR…
Browse files Browse the repository at this point in the history
…EAUTH is sent

Most importantly this makes the code paths similar for standalone and
non-standalone clients, which is needed by the following commits.
  • Loading branch information
sirainen committed Feb 19, 2018
1 parent 0dfea86 commit aeb142d
Showing 1 changed file with 16 additions and 23 deletions.
39 changes: 16 additions & 23 deletions src/imap/main.c
Expand Up @@ -229,14 +229,6 @@ client_add_input_finalize(struct client *client)
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)
Expand Down Expand Up @@ -292,15 +284,17 @@ static void main_stdio_run(const char *username)
&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 */
}

Expand Down Expand Up @@ -395,7 +389,15 @@ int main(int argc, char *argv[])
};
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;

Expand All @@ -416,16 +418,7 @@ int main(int argc, char *argv[])
} 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,
Expand Down

0 comments on commit aeb142d

Please sign in to comment.