char *cmdline;
struct istream *input;
bool streaming;
+ bool print_username;
};
struct doveadm_server_request {
struct doveadm_server *server;
struct doveadm_client_settings set;
const char *username;
+ bool print_username;
};
static HASH_TABLE(char *, struct doveadm_server *) servers;
void *context);
static void doveadm_mail_server_handle(struct doveadm_server *server,
struct doveadm_client *conn,
- const char *username);
+ const char *username,
+ bool print_username);
static void doveadm_server_request_free(struct doveadm_server_request *request)
{
struct doveadm_mail_server_cmd *servercmd)
{
string_t *str = t_str_new(size);
+ if (servercmd->print_username) {
+ doveadm_print_sticky("username", servercmd->username);
+ servercmd->print_username = FALSE;
+ }
if (!finished) {
servercmd->streaming = TRUE;
str_append_tabunescaped(str, data, size);
array_delete(&doveadm_server_request_queue, idx, 1);
doveadm_mail_server_handle(server, conn,
- request_copy.username);
+ request_copy.username,
+ request_copy.print_username);
doveadm_server_request_free(&request_copy);
doveadm_client_unref(&conn);
break;
static void doveadm_mail_server_handle(struct doveadm_server *server,
struct doveadm_client *conn,
- const char *username)
+ const char *username,
+ bool print_username)
{
struct doveadm_mail_server_cmd *servercmd;
string_t *cmd;
servercmd->username = i_strdup(username);
servercmd->cmdline = i_strdup(str_c(cmd));
servercmd->input = cmd_ctx->cmd_input;
+ servercmd->print_username = print_username;
if (servercmd->input != NULL)
i_stream_ref(servercmd->input);
doveadm_client_set_print(conn, doveadm_cmd_print_callback,
return -1;
}
doveadm_mail_server_handle(request_copy.server, conn,
- request_copy.username);
+ request_copy.username,
+ request_copy.print_username);
doveadm_server_request_free(&request_copy);
doveadm_client_unref(&conn);
return 0;
struct doveadm_server_request *request;
struct auth_proxy_settings proxy_set;
const char *server_name, *socket_path, *referral;
+ bool print_username =
+ doveadm_print_is_initialized() && !ctx->iterate_single_user;
int ret;
i_assert(cmd_ctx == ctx || cmd_ctx == NULL);
ctx->cctx->proxy_redirect_reauth = proxy_set.redirect_reauth;
- /* server sends the sticky headers for each row as well,
- so undo any sticks we might have added already */
- doveadm_print_unstick_headers();
-
struct doveadm_client_settings conn_set = {
.socket_path = socket_path,
.hostname = proxy_set.host,
return -1;
} else {
doveadm_mail_server_handle(server, conn,
- proxy_set.username);
+ proxy_set.username,
+ print_username);
doveadm_client_unref(&conn);
}
} else {
request->pool = pool_alloconly_create("doveadm server request", 256);
request->server = server;
request->username = p_strdup(request->pool, proxy_set.username);
+ request->print_username = print_username;
doveadm_client_settings_dup(&conn_set, &request->set, request->pool);
}
*error_r = "doveadm server failure";
return ret;
}
+ if (doveadm_print_is_initialized() && !ctx->iterate_single_user)
+ doveadm_print_sticky("username", cctx->username);
+
if (ctx->v.prerun != NULL) {
if (ctx->v.prerun(ctx, ctx->cur_service_user, error_r) < 0) {
mail_storage_service_user_unref(&ctx->cur_service_user);
continue;
}
cctx->username = user;
- doveadm_print_sticky("username", user);
T_BEGIN {
ret = doveadm_mail_next_user(ctx, &error);
if (ret < 0)
ctx->iterate_single_user =
!ctx->iterate_all_users && wildcard_user == NULL;
- if (doveadm_print_is_initialized() &&
- (!ctx->iterate_single_user || ctx->add_username_header)) {
+ if (doveadm_print_is_initialized() && !ctx->iterate_single_user) {
doveadm_print_header("username", "Username",
DOVEADM_PRINT_HEADER_FLAG_STICKY |
DOVEADM_PRINT_HEADER_FLAG_HIDE_TITLE);
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, &error);
if (ret < 0) {
/* user lookup/init failed somehow */
const char *value_str;
if (doveadm_cmd_param_flag(cctx, "all-users")) {
- if (tcp_server)
- mctx->add_username_header = TRUE;
- else
+ if (!tcp_server)
mctx->iterate_all_users = TRUE;
}
if (strchr(value_str, '*') != NULL ||
strchr(value_str, '?') != NULL) {
- if (tcp_server)
- mctx->add_username_header = TRUE;
- else {
+ if (!tcp_server) {
*wildcard_user_r = value_str;
cctx->username = NULL;
}