# HG changeset patch # User Timo Sirainen # Date 1458106472 -39600 # Node ID d009614d609a2a00a0a73fd9a509e7b7b2ab47dd # Parent 6d82e2d02ef9b1aa9f1b9f5fbc8cfc7215065c9d doveadm sync: Don't allow -R parameter. -R implicitly enabled doveadm backup mode, which wasn't supposed to happen. diff -r 6d82e2d02ef9 -r d009614d609a src/doveadm/doveadm-dsync.c --- a/src/doveadm/doveadm-dsync.c Mon Feb 29 19:29:14 2016 +0200 +++ b/src/doveadm/doveadm-dsync.c Wed Mar 16 16:34:32 2016 +1100 @@ -38,7 +38,7 @@ #include #include -#define DSYNC_COMMON_GETOPT_ARGS "+1a:dDEfg:l:m:n:NO:Pr:Rs:t:T:Ux:" +#define DSYNC_COMMON_GETOPT_ARGS "+1a:dDEfg:l:m:n:NO:Pr:s:t:T:Ux:" #define DSYNC_REMOTE_CMD_EXIT_WAIT_SECS 30 /* The broken_char is mainly set to get a proper error message when trying to convert a mailbox with a name that can't be used properly translated between @@ -1042,13 +1042,9 @@ return TRUE; } -static struct doveadm_mail_cmd_context *cmd_dsync_alloc(void) +static void cmd_dsync_init_common(struct dsync_cmd_context *ctx) { - struct dsync_cmd_context *ctx; - - ctx = doveadm_mail_cmd_alloc(struct dsync_cmd_context); ctx->io_timeout_secs = DSYNC_DEFAULT_IO_STREAM_TIMEOUT_SECS; - ctx->ctx.getopt_args = DSYNC_COMMON_GETOPT_ARGS; ctx->ctx.v.parse_arg = cmd_mailbox_dsync_parse_arg; ctx->ctx.v.preinit = cmd_dsync_preinit; ctx->ctx.v.init = cmd_dsync_init; @@ -1060,18 +1056,27 @@ DOVEADM_PRINT_HEADER_FLAG_HIDE_TITLE); p_array_init(&ctx->exclude_mailboxes, ctx->ctx.pool, 4); p_array_init(&ctx->namespace_prefixes, ctx->ctx.pool, 4); +} + +static struct doveadm_mail_cmd_context *cmd_dsync_alloc(void) +{ + struct dsync_cmd_context *ctx; + + ctx = doveadm_mail_cmd_alloc(struct dsync_cmd_context); + ctx->ctx.getopt_args = DSYNC_COMMON_GETOPT_ARGS; + cmd_dsync_init_common(ctx); return &ctx->ctx; } static struct doveadm_mail_cmd_context *cmd_dsync_backup_alloc(void) { - struct doveadm_mail_cmd_context *_ctx; struct dsync_cmd_context *ctx; - _ctx = cmd_dsync_alloc(); - ctx = (struct dsync_cmd_context *)_ctx; + ctx = doveadm_mail_cmd_alloc(struct dsync_cmd_context); ctx->backup = TRUE; - return _ctx; + ctx->ctx.getopt_args = DSYNC_COMMON_GETOPT_ARGS"R"; + cmd_dsync_init_common(ctx); + return &ctx->ctx; } static int @@ -1182,7 +1187,7 @@ struct doveadm_mail_cmd cmd_dsync_mirror = { cmd_dsync_alloc, "sync", - "[-1fPRU] [-l ] [-r ] [-m ] [-g ] [-n | -N] [-x ] [-s ] -d|" + "[-1fPU] [-l ] [-r ] [-m ] [-g ] [-n | -N] [-x ] [-s ] -d|" }; struct doveadm_mail_cmd cmd_dsync_backup = { cmd_dsync_backup_alloc, "backup",