Mercurial > dovecot > core-2.2
changeset 12457:490138318288
doveadm server: Fixes to command/parameter handling.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 23 Nov 2010 15:30:32 +0000 |
parents | 8c14551c5e26 |
children | 10c2540e91b9 |
files | src/doveadm/doveadm-mail-server.c src/doveadm/doveadm-mail.c src/doveadm/doveadm-mail.h src/doveadm/main.c |
diffstat | 4 files changed, 15 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/doveadm-mail-server.c Tue Nov 23 15:30:06 2010 +0000 +++ b/src/doveadm/doveadm-mail-server.c Tue Nov 23 15:30:32 2010 +0000 @@ -121,6 +121,8 @@ str_append_c(cmd, '\t'); str_tabescape_write(cmd, username); + str_append_c(cmd, '\t'); + str_tabescape_write(cmd, cmd_ctx->cmd->name); for (i = 0; cmd_ctx->args[i] != NULL; i++) { str_append_c(cmd, '\t'); str_tabescape_write(cmd, cmd_ctx->args[i]); @@ -159,7 +161,8 @@ } int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx, - struct mail_storage_service_user *user) + struct mail_storage_service_user *user, + const char **error_r) { const struct mail_storage_service_input *input; struct doveadm_server *server; @@ -178,9 +181,8 @@ if (userdb_field_find(input->userdb_fields, "proxy") != NULL) { host = userdb_field_find(input->userdb_fields, "host"); if (host == NULL) { - i_error("user %s: Proxy is missing destination host", - input->username); - return 0; + *error_r = "Proxy is missing destination host"; + return -1; } } else { host = doveadm_settings->doveadm_socket_path; @@ -201,6 +203,7 @@ username_dup = i_strdup(input->username); array_append(&server->queue, &username_dup, 1); } + *error_r = "doveadm server failure"; return DOVEADM_MAIL_SERVER_FAILED() ? -1 : 0; }
--- a/src/doveadm/doveadm-mail.c Tue Nov 23 15:30:06 2010 +0000 +++ b/src/doveadm/doveadm-mail.c Tue Nov 23 15:30:32 2010 +0000 @@ -204,10 +204,8 @@ if (doveadm_settings->doveadm_worker_count > 0 && !doveadm_server) { /* execute this command via doveadm server */ - T_BEGIN { - ret = doveadm_mail_server_user(ctx, service_user); - mail_storage_service_user_free(&service_user); - } T_END; + ret = doveadm_mail_server_user(ctx, service_user, error_r); + mail_storage_service_user_free(&service_user); return ret < 0 ? -1 : 1; } @@ -322,7 +320,6 @@ if (ret < 0) i_error("Failed to iterate through some users"); mail_storage_service_deinit(&ctx->storage_service); - doveadm_mail_server_flush(); } static void @@ -374,7 +371,6 @@ service_flags |= MAIL_STORAGE_SERVICE_FLAG_DEBUG; ctx = doveadm_mail_cmd_init(cmd); - ctx->args = (const void *)argv; getopt_args = t_strconcat("Au:", ctx->getopt_args, NULL); username = getenv("USER"); @@ -403,6 +399,7 @@ i_fatal("doveadm %s: Unknown parameter: %s", cmd->name, argv[0]); } + ctx->args = (const void *)argv; ctx->iterate_single_user = !ctx->iterate_all_users && wildcard_user == NULL; @@ -418,6 +415,7 @@ service_flags |= MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP; doveadm_mail_all_users(ctx, argv, wildcard_user, service_flags); } + doveadm_mail_server_flush(); ctx->v.deinit(ctx); doveadm_print_flush();
--- a/src/doveadm/doveadm-mail.h Tue Nov 23 15:30:06 2010 +0000 +++ b/src/doveadm/doveadm-mail.h Tue Nov 23 15:30:32 2010 +0000 @@ -85,7 +85,8 @@ char *argv[], const char *username, enum mail_storage_service_flags service_flags); int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx, - struct mail_storage_service_user *user); + struct mail_storage_service_user *user, + const char **error_r); void doveadm_mail_server_flush(void); int doveadm_mailbox_find_and_sync(struct mail_user *user, const char *mailbox,
--- a/src/doveadm/main.c Tue Nov 23 15:30:06 2010 +0000 +++ b/src/doveadm/main.c Tue Nov 23 15:30:32 2010 +0000 @@ -19,7 +19,8 @@ struct client_connection *doveadm_client; int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx ATTR_UNUSED, - struct mail_storage_service_user *user ATTR_UNUSED) + struct mail_storage_service_user *user ATTR_UNUSED, + const char **error_r ATTR_UNUSED) { /* this function should be called only by doveadm client code */ i_unreached();