changeset 21900:de92e4fbb7c9

global: Fix imapc_client_login usage
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Wed, 05 Apr 2017 12:47:24 +0300
parents d3f92c9be7d4
children a44b05748869
files src/auth/passdb-imap.c src/lib-imap-client/imapc-client.c src/lib-imap-client/imapc-client.h src/lib-storage/index/imapc/imapc-storage.c
diffstat 4 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/passdb-imap.c	Wed Apr 05 12:09:57 2017 +0300
+++ b/src/auth/passdb-imap.c	Wed Apr 05 12:47:24 2017 +0300
@@ -104,8 +104,8 @@
 	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 *
--- a/src/lib-imap-client/imapc-client.c	Wed Apr 05 12:09:57 2017 +0300
+++ b/src/lib-imap-client/imapc-client.c	Wed Apr 05 12:47:24 2017 +0300
@@ -173,7 +173,9 @@
 
 	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 @@
 
 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 @@
 }
 
 
-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 {
--- a/src/lib-imap-client/imapc-client.h	Wed Apr 05 12:09:57 2017 +0300
+++ b/src/lib-imap-client/imapc-client.h	Wed Apr 05 12:47:24 2017 +0300
@@ -178,8 +178,7 @@
 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);
 
--- a/src/lib-storage/index/imapc/imapc-storage.c	Wed Apr 05 12:09:57 2017 +0300
+++ b/src/lib-storage/index/imapc/imapc-storage.c	Wed Apr 05 12:47:24 2017 +0300
@@ -257,7 +257,7 @@
 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 @@
 	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 */