From: Timo Sirainen Date: Fri, 5 Dec 2014 02:39:11 +0000 (+0200) Subject: doveadm: Avoid calling init() in doveadm binary if the command is sent to doveadm... X-Git-Tag: 2.2.16.rc1~179 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b7feed47b94d484b3e7e0aef2b78ea09433aeaa;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Avoid calling init() in doveadm binary if the command is sent to doveadm-server. The init() is still always called when -A or -u *wildcards* are used though. I'm not sure if that can be delayed. At least all commands should be verified that they don't rely on the current init() location. --- diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index 9a0627e751..6f99a19416 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -266,7 +266,7 @@ static struct doveadm_mail_cmd_context *cmd_force_resync_alloc(void) } static int -doveadm_mail_next_user(struct doveadm_mail_cmd_context *ctx, +doveadm_mail_next_user(struct doveadm_mail_cmd_context *ctx, bool init_user, const struct mail_storage_service_input *input, const char **error_r) { @@ -285,6 +285,14 @@ doveadm_mail_next_user(struct doveadm_mail_cmd_context *ctx, if (ret != 0) return ret; + if (init_user) { + /* call init() after we've checked whether we want to do this + via doveadm-server or not */ + ctx->v.init(ctx, ctx->args); + if (hook_doveadm_mail_init != NULL) + hook_doveadm_mail_init(ctx); + } + ret = mail_storage_service_lookup(ctx->storage_service, input, &ctx->cur_service_user, &error); if (ret <= 0) { @@ -330,11 +338,7 @@ int doveadm_mail_single_user(struct doveadm_mail_cmd_context *ctx, ctx->storage_service_input = *input; ctx->storage_service = mail_storage_service_init(master_service, NULL, ctx->service_flags); - ctx->v.init(ctx, ctx->args); - if (hook_doveadm_mail_init != NULL) - hook_doveadm_mail_init(ctx); - - return doveadm_mail_next_user(ctx, input, error_r); + return doveadm_mail_next_user(ctx, TRUE, input, error_r); } static void sig_die(const siginfo_t *si, void *context ATTR_UNUSED) @@ -379,7 +383,7 @@ doveadm_mail_all_users(struct doveadm_mail_cmd_context *ctx, char *argv[], ctx->cur_username = user; doveadm_print_sticky("username", user); T_BEGIN { - ret = doveadm_mail_next_user(ctx, &input, &error); + ret = doveadm_mail_next_user(ctx, FALSE, &input, &error); if (ret < 0) i_error("%s", error); else if (ret == 0)