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]);
}
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;
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;
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;
}
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;
}
if (ret < 0)
i_error("Failed to iterate through some users");
mail_storage_service_deinit(&ctx->storage_service);
- doveadm_mail_server_flush();
}
static void
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");
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;
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();
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,
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();