From: Timo Sirainen Date: Mon, 8 Aug 2016 16:25:05 +0000 (+0300) Subject: doveadm: Fixed -A and -u wildcard handling with server connections. X-Git-Tag: 2.3.0.rc1~3208 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2593d6105ecd92f6cd874ed1e3c0faefb37e699b;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Fixed -A and -u wildcard handling with server connections. --- diff --git a/src/doveadm/client-connection.c b/src/doveadm/client-connection.c index ce296a283c..d77a399e3c 100644 --- a/src/doveadm/client-connection.c +++ b/src/doveadm/client-connection.c @@ -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; diff --git a/src/doveadm/doveadm-cmd.h b/src/doveadm/doveadm-cmd.h index e599d16abb..ec54f41413 100644 --- a/src/doveadm/doveadm-cmd.h +++ b/src/doveadm/doveadm-cmd.h @@ -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; diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index a430df8cea..6785b3c73b 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -572,7 +572,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); @@ -586,6 +587,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 */ @@ -952,7 +955,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) { @@ -961,16 +967,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) { diff --git a/src/doveadm/doveadm-mail.h b/src/doveadm/doveadm-mail.h index 1450f876ba..b115ff661e 100644 --- a/src/doveadm/doveadm-mail.h +++ b/src/doveadm/doveadm-mail.h @@ -97,6 +97,8 @@ struct doveadm_mail_cmd_context { bool iterate_single_user:1; /* We're going through all users (not set for wildcard usernames) */ bool iterate_all_users:1; + /* Add username header to all replies */ + bool add_username_header:1; /* Running from CLI doveadm (not doveadm-server) */ bool cli:1; };