]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Fixed -A and -u wildcard handling with server connections.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 8 Aug 2016 16:25:05 +0000 (19:25 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 8 Aug 2016 16:53:26 +0000 (19:53 +0300)
src/doveadm/client-connection.c
src/doveadm/doveadm-cmd.h
src/doveadm/doveadm-mail.c
src/doveadm/doveadm-mail.h

index 72a20c44e9c6d72cd7feadb15c107fafea93a7b5..3a49a0cc4583d0bcbd643d44db12bbe65a74d88a 100644 (file)
@@ -292,6 +292,7 @@ static bool client_handle_command(struct client_connection *conn, char **args)
        }
        memset(&cctx, 0, sizeof(cctx));
        cctx.cli = FALSE;
+       cctx.tcp_server = TRUE;
 
        cctx.local_ip = conn->local_ip;
        cctx.remote_ip = conn->remote_ip;
index e599d16abbf7401a6c0655bce85c2bacc989f728..ec54f414139cbb9e005e9345c8801191cdfafac8 100644 (file)
@@ -77,6 +77,7 @@ struct doveadm_cmd_context {
 
        const char *username;
        bool cli;
+       bool tcp_server;
        struct ip_addr local_ip, remote_ip;
        in_port_t local_port, remote_port;
        struct client_connection *conn;
index 3044d10eef6cf376d373aa10bf7f6f5859ad37b5..11a213b236309dc2e522b5ee981c6bacce53a86b 100644 (file)
@@ -573,7 +573,8 @@ doveadm_mail_cmd_exec(struct doveadm_mail_cmd_context *ctx,
 
        ctx->iterate_single_user =
                !ctx->iterate_all_users && wildcard_user == NULL;
-       if (doveadm_print_is_initialized() && !ctx->iterate_single_user) {
+       if (doveadm_print_is_initialized() &&
+           (!ctx->iterate_single_user || ctx->add_username_header)) {
                doveadm_print_header("username", "Username",
                                     DOVEADM_PRINT_HEADER_FLAG_STICKY |
                                     DOVEADM_PRINT_HEADER_FLAG_HIDE_TITLE);
@@ -587,6 +588,8 @@ doveadm_mail_cmd_exec(struct doveadm_mail_cmd_context *ctx,
                        ctx->service_flags |= MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP;
                }
 
+               if (ctx->add_username_header)
+                       doveadm_print_sticky("username", cctx->username);
                ret = doveadm_mail_single_user(ctx, cctx, &error);
                if (ret < 0) {
                        /* user lookup/init failed somehow */
@@ -953,7 +956,10 @@ doveadm_cmd_ver2_to_mail_cmd_wrapper(struct doveadm_cmd_context *cctx)
                        continue;
 
                if (strcmp(arg->name, "all-users") == 0) {
-                       mctx->iterate_all_users = arg->value.v_bool;
+                       if (cctx->tcp_server)
+                               mctx->add_username_header = TRUE;
+                       else
+                               mctx->iterate_all_users = arg->value.v_bool;
                        fieldstr = "-A";
                        array_append(&full_args, &fieldstr, 1);
                } else if (strcmp(arg->name, "socket-path") == 0) {
@@ -962,16 +968,21 @@ doveadm_cmd_ver2_to_mail_cmd_wrapper(struct doveadm_cmd_context *cctx)
                                doveadm_settings->doveadm_worker_count = 1;
                } else if (strcmp(arg->name, "user") == 0) {
                        mctx->service_flags |= MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
-                       mctx->cur_username = arg->value.v_string;
+                       if (!cctx->tcp_server)
+                               mctx->cur_username = arg->value.v_string;
 
                        fieldstr = "-u";
                        array_append(&full_args, &fieldstr, 1);
                        array_append(&full_args, &arg->value.v_string, 1);
-                       if (strchr(mctx->cur_username, '*') != NULL ||
-                           strchr(mctx->cur_username, '?') != NULL) {
-                               wildcard_user = mctx->cur_username;
-                               mctx->cur_username = NULL;
-                       } else {
+                       if (strchr(arg->value.v_string, '*') != NULL ||
+                           strchr(arg->value.v_string, '?') != NULL) {
+                               if (cctx->tcp_server)
+                                       mctx->add_username_header = TRUE;
+                               else {
+                                       wildcard_user = arg->value.v_string;
+                                       mctx->cur_username = NULL;
+                               }
+                       } else if (!cctx->tcp_server) {
                                cctx->username = mctx->cur_username;
                        }
                } else if (strcmp(arg->name, "user-file") == 0) {
index fce8204fdcd7ef4a4ce211ce205c421ef87dcf2a..a15c8fa4605235dd66bf59c9b3cd233c2293946b 100644 (file)
@@ -97,6 +97,8 @@ struct doveadm_mail_cmd_context {
        unsigned int iterate_single_user:1;
        /* We're going through all users (not set for wildcard usernames) */
        unsigned int iterate_all_users:1;
+       /* Add username header to all replies */
+       unsigned int add_username_header:1;
        /* Running from CLI doveadm (not doveadm-server) */
        unsigned int cli:1;
 };