]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Remove global cmd_ctx variable
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 12 Oct 2022 14:06:38 +0000 (17:06 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 24 Oct 2022 07:07:15 +0000 (07:07 +0000)
src/doveadm/doveadm-mail-server.c
src/doveadm/doveadm-mail.c
src/doveadm/doveadm-mail.h

index 3eb180b446ecbe3c2c8d7a3aad336bbe570b8170..5418d108ae9696c9ef11ea6686ea37b7621f0e07 100644 (file)
@@ -37,6 +37,7 @@ struct doveadm_proxy_redirect {
 struct doveadm_mail_server_cmd {
        struct doveadm_server *server;
        struct doveadm_client *conn;
+       struct doveadm_mail_cmd_context *cmd_ctx;
        char *username;
 
        ARRAY(struct doveadm_proxy_redirect) redirect_path;
@@ -57,7 +58,6 @@ struct doveadm_server_request {
 
 static HASH_TABLE(char *, struct doveadm_server *) servers;
 static pool_t server_pool;
-static struct doveadm_mail_cmd_context *cmd_ctx;
 static bool internal_failure = FALSE;
 static ARRAY(struct doveadm_server_request) doveadm_server_request_queue;
 
@@ -65,6 +65,7 @@ static void doveadm_cmd_callback(const struct doveadm_server_reply *reply,
                                 void *context);
 static void doveadm_mail_server_handle(struct doveadm_server *server,
                                       struct doveadm_client *conn,
+                                      struct doveadm_mail_cmd_context *cmd_ctx,
                                       const char *username,
                                       bool print_username);
 
@@ -302,6 +303,7 @@ doveadm_cmd_redirect_finish(struct doveadm_mail_server_cmd *servercmd,
                            enum auth_proxy_ssl_flags ssl_flags,
                            const char **error_r)
 {
+       struct doveadm_mail_cmd_context *cmd_ctx = servercmd->cmd_ctx;
        struct doveadm_server *new_server;
        struct doveadm_client *conn;
        struct doveadm_proxy_redirect *redirect;
@@ -369,6 +371,7 @@ doveadm_cmd_redirect_relookup(struct doveadm_mail_server_cmd *servercmd,
                              const char *host, in_port_t port,
                              const char *destuser, const char **error_r)
 {
+       struct doveadm_mail_cmd_context *cmd_ctx = servercmd->cmd_ctx;
        struct auth_proxy_settings proxy_set;
        const char *const *fields, *auth_socket_path;
        pool_t auth_pool;
@@ -424,6 +427,7 @@ static int doveadm_cmd_redirect(struct doveadm_mail_server_cmd *servercmd,
                                const char *destination)
 {
        struct doveadm_server *orig_server = servercmd->server;
+       struct doveadm_mail_cmd_context *cmd_ctx = servercmd->cmd_ctx;
        const struct doveadm_client_settings *client_set =
                doveadm_client_get_settings(servercmd->conn);
        struct ip_addr ip;
@@ -494,6 +498,7 @@ static void doveadm_cmd_callback(const struct doveadm_server_reply *reply,
 {
        struct doveadm_mail_server_cmd *servercmd = context;
        struct doveadm_client *conn = servercmd->conn;
+       struct doveadm_mail_cmd_context *cmd_ctx = servercmd->cmd_ctx;
        struct doveadm_server *server = servercmd->server;
        struct doveadm_server_request *request;
        int ret;
@@ -544,7 +549,7 @@ static void doveadm_cmd_callback(const struct doveadm_server_reply *reply,
                                                  request);
                        array_delete(&doveadm_server_request_queue, idx, 1);
 
-                       doveadm_mail_server_handle(server, conn,
+                       doveadm_mail_server_handle(server, conn, cmd_ctx,
                                                   request_copy.username,
                                                   request_copy.print_username);
                        doveadm_server_request_free(&request_copy);
@@ -557,6 +562,7 @@ static void doveadm_cmd_callback(const struct doveadm_server_reply *reply,
 
 static void doveadm_mail_server_handle(struct doveadm_server *server,
                                       struct doveadm_client *conn,
+                                      struct doveadm_mail_cmd_context *cmd_ctx,
                                       const char *username,
                                       bool print_username)
 {
@@ -585,6 +591,7 @@ static void doveadm_mail_server_handle(struct doveadm_server *server,
        servercmd = i_new(struct doveadm_mail_server_cmd, 1);
        servercmd->conn = conn;
        servercmd->server = server;
+       servercmd->cmd_ctx = cmd_ctx;
        servercmd->username = i_strdup(username);
        servercmd->cmdline = i_strdup(str_c(cmd));
        servercmd->input = cmd_ctx->cmd_input;
@@ -601,7 +608,9 @@ static void doveadm_mail_server_handle(struct doveadm_server *server,
                           doveadm_cmd_callback, servercmd);
 }
 
-static int doveadm_mail_server_request_queue_handle_next(const char **error_r)
+static int
+doveadm_mail_server_request_queue_handle_next(struct doveadm_mail_cmd_context *cmd_ctx,
+                                             const char **error_r)
 {
        struct doveadm_server_request *request, request_copy;
        struct doveadm_client *conn;
@@ -616,7 +625,7 @@ static int doveadm_mail_server_request_queue_handle_next(const char **error_r)
                internal_failure = TRUE;
                return -1;
        }
-       doveadm_mail_server_handle(request_copy.server, conn,
+       doveadm_mail_server_handle(request_copy.server, conn, cmd_ctx,
                                   request_copy.username,
                                   request_copy.print_username);
        doveadm_server_request_free(&request_copy);
@@ -748,9 +757,6 @@ int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
                doveadm_print_is_initialized() && !ctx->iterate_single_user;
        int ret;
 
-       i_assert(cmd_ctx == ctx || cmd_ctx == NULL);
-       cmd_ctx = ctx;
-
        doveadm_mail_cmd_extra_fields_parse(ctx);
        ret = doveadm_mail_server_user_get_host(ctx, &proxy_set, &socket_path,
                                                &referral, error_r);
@@ -798,7 +804,7 @@ int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
                   connections. */
                if (doveadm_clients_count() < limit &&
                    array_count(&doveadm_server_request_queue) > 0) {
-                       if (doveadm_mail_server_request_queue_handle_next(error_r) < 0)
+                       if (doveadm_mail_server_request_queue_handle_next(ctx, error_r) < 0)
                                return -1;
                        continue;
                }
@@ -818,7 +824,7 @@ int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
                        internal_failure = TRUE;
                        return -1;
                } else {
-                       doveadm_mail_server_handle(server, conn,
+                       doveadm_mail_server_handle(server, conn, ctx,
                                                   proxy_set.username,
                                                   print_username);
                        doveadm_client_unref(&conn);
@@ -835,15 +841,13 @@ int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
        return DOVEADM_MAIL_SERVER_FAILED() ? -1 : 1;
 }
 
-void doveadm_mail_server_flush(void)
+void doveadm_mail_server_flush(struct doveadm_mail_cmd_context *ctx)
 {
        struct doveadm_server_request *request;
        const char *error;
 
-       if (!hash_table_is_created(servers)) {
-               cmd_ctx = NULL;
+       if (!hash_table_is_created(servers))
                return;
-       }
 
        /* flush the queue */
        unsigned int limit = I_MAX(doveadm_settings->doveadm_worker_count, 1);
@@ -857,8 +861,8 @@ void doveadm_mail_server_flush(void)
 
                if (array_count(&doveadm_server_request_queue) == 0)
                        break;
-               if (doveadm_mail_server_request_queue_handle_next(&error) < 0) {
-                       e_error(cmd_ctx->cctx->event, "%s", error);
+               if (doveadm_mail_server_request_queue_handle_next(ctx, &error) < 0) {
+                       e_error(ctx->cctx->event, "%s", error);
                        break;
                }
        }
@@ -869,9 +873,9 @@ void doveadm_mail_server_flush(void)
 
        doveadm_clients_destroy_all();
        if (master_service_is_killed(master_service))
-               e_error(cmd_ctx->cctx->event, "Aborted");
+               e_error(ctx->cctx->event, "Aborted");
        if (DOVEADM_MAIL_SERVER_FAILED())
-               doveadm_mail_failed_error(cmd_ctx, MAIL_ERROR_TEMP);
+               doveadm_mail_failed_error(ctx, MAIL_ERROR_TEMP);
 
        /* queue may not be empty if something failed */
        array_foreach_modifiable(&doveadm_server_request_queue, request)
@@ -879,5 +883,4 @@ void doveadm_mail_server_flush(void)
        array_free(&doveadm_server_request_queue);
        hash_table_destroy(&servers);
        pool_unref(&server_pool);
-       cmd_ctx = NULL;
 }
index d0e43828b7309f4efd69ddd4295729820b87ed89..956b85ebe30c01470f3231245b5f8d2a993b986c 100644 (file)
@@ -676,7 +676,7 @@ doveadm_mail_cmd_exec(struct doveadm_mail_cmd_context *ctx,
                ctx->service_flags |= MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP;
                doveadm_mail_all_users(ctx, wildcard_user);
        }
-       doveadm_mail_server_flush();
+       doveadm_mail_server_flush(ctx);
        doveadm_mail_cmd_deinit(ctx);
        doveadm_print_flush();
 
index 2112cab172132462c19c930a6250f1c11e81636e..70c011b8ae1f82cbb8bcd3fa0de89e407d51f050 100644 (file)
@@ -123,7 +123,7 @@ int doveadm_mail_single_user(struct doveadm_mail_cmd_context *ctx,
                             const char **error_r);
 int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
                             const char **error_r);
-void doveadm_mail_server_flush(void);
+void doveadm_mail_server_flush(struct doveadm_mail_cmd_context *ctx);
 
 /* Request input stream to be read (from stdin). This must be called from
    the command's init() function. */