]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Fix imapc_client_login usage
authorAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 5 Apr 2017 09:47:24 +0000 (12:47 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 6 Apr 2017 17:22:41 +0000 (20:22 +0300)
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

index fa26fb766556fec1794388b9664049e199c0594f..399968ea93b1ae3097adb2d8c6f5926a6c597b2c 100644 (file)
@@ -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 *
index b904870d89b720efb0681908e008eeab8f3e43dd..0e5a720ecb606523b235f0ac10192de1ea5fba19 100644 (file)
@@ -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 {
index e001ba37160baef7cdee25a0f80312d755fb4761..ed106d78c7d53ae728c30d456772da0b9b8c5768 100644 (file)
@@ -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);
 
index f4c2774389987045ecb93bad6ae9d66f790be4ef..8b005c25b1d420afd21113727c937f52faee7087 100644 (file)
@@ -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 */