From: Aki Tuomi Date: Wed, 5 Apr 2017 09:47:24 +0000 (+0300) Subject: global: Fix imapc_client_login usage X-Git-Tag: 2.2.29.rc1~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1909058aca75527d2783ca58b7a8bc1ddb56b3cf;p=thirdparty%2Fdovecot%2Fcore.git global: Fix imapc_client_login usage --- diff --git a/src/auth/passdb-imap.c b/src/auth/passdb-imap.c index fa26fb7665..399968ea93 100644 --- a/src/auth/passdb-imap.c +++ b/src/auth/passdb-imap.c @@ -104,8 +104,8 @@ passdb_imap_verify_plain(struct auth_request *auth_request, request->verify_callback = callback; auth_request_ref(auth_request); - imapc_client_login(request->client, passdb_imap_login_callback, - request); + imapc_client_set_login_callback(request->client, passdb_imap_login_callback, request); + imapc_client_login(request->client); } static struct passdb_module * diff --git a/src/lib-imap-client/imapc-client.c b/src/lib-imap-client/imapc-client.c index b904870d89..0e5a720ecb 100644 --- a/src/lib-imap-client/imapc-client.c +++ b/src/lib-imap-client/imapc-client.c @@ -173,7 +173,9 @@ static void imapc_client_run_pre(struct imapc_client *client) array_foreach(&client->conns, connp) { imapc_connection_ioloop_changed((*connp)->conn); - imapc_connection_connect((*connp)->conn, NULL, NULL); + if (imapc_connection_get_state((*connp)->conn) == IMAPC_CONNECTION_STATE_DISCONNECTED) + imapc_connection_connect((*connp)->conn, client->login_callback, + client->login_context); } if (io_loop_is_running(client->ioloop)) @@ -196,6 +198,7 @@ static void imapc_client_run_post(struct imapc_client *client) void imapc_client_run(struct imapc_client *client) { + i_assert(client->login_callback != NULL); imapc_client_run_pre(client); imapc_client_run_post(client); } @@ -268,15 +271,16 @@ imapc_client_get_unboxed_connection(struct imapc_client *client) } -void imapc_client_login(struct imapc_client *client, - imapc_command_callback_t *callback, void *context) +void imapc_client_login(struct imapc_client *client) { struct imapc_client_connection *conn; + i_assert(client->login_callback); i_assert(array_count(&client->conns) == 0); conn = imapc_client_add_connection(client); - imapc_connection_connect(conn->conn, callback, context); + imapc_connection_connect(conn->conn, + client->login_callback, client->login_context); } struct imapc_logout_ctx { diff --git a/src/lib-imap-client/imapc-client.h b/src/lib-imap-client/imapc-client.h index e001ba3716..ed106d78c7 100644 --- a/src/lib-imap-client/imapc-client.h +++ b/src/lib-imap-client/imapc-client.h @@ -178,8 +178,7 @@ void imapc_client_set_login_callback(struct imapc_client *client, imapc_command_callback_t *callback, void *context); /* Explicitly login to server (also done automatically). */ -void imapc_client_login(struct imapc_client *client, - imapc_command_callback_t *callback, void *context); +void imapc_client_login(struct imapc_client *client); /* Send a LOGOUT and wait for disconnection. */ void imapc_client_logout(struct imapc_client *client); diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index f4c2774389..8b005c25b1 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -257,7 +257,7 @@ imapc_storage_client_login_callback(const struct imapc_command_reply *reply, static void imapc_storage_client_login(struct imapc_storage_client *client, struct mail_user *user, const char *host) { - imapc_client_login(client->client, imapc_storage_client_login_callback, client); + imapc_client_login(client->client); if (!user->namespaces_created) { /* we're still initializing the user. wait for the login to finish, so we can fail the user creation @@ -340,6 +340,9 @@ int imapc_storage_client_create(struct mail_namespace *ns, client->client = imapc_client_init(&set); imapc_client_register_untagged(client->client, imapc_storage_client_untagged_cb, client); + + imapc_client_set_login_callback(client->client, imapc_storage_client_login_callback, client); + if ((ns->flags & NAMESPACE_FLAG_LIST_PREFIX) != 0 && (imapc_set->parsed_features & IMAPC_FEATURE_DELAY_LOGIN) == 0) { /* start logging in immediately */