From: Timo Sirainen Date: Thu, 12 Jan 2012 21:09:25 +0000 (+0200) Subject: dsync: Fixed handling -u parameter in backwards compatibility dsync mode. X-Git-Tag: 2.1.rc4~55 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3dccddb8a313bfdb405e06ada244d871b2cb77e;p=thirdparty%2Fdovecot%2Fcore.git dsync: Fixed handling -u parameter in backwards compatibility dsync mode. --- diff --git a/src/doveadm/dsync/doveadm-dsync.c b/src/doveadm/dsync/doveadm-dsync.c index 8086aa5469..636b960354 100644 --- a/src/doveadm/dsync/doveadm-dsync.c +++ b/src/doveadm/dsync/doveadm-dsync.c @@ -389,10 +389,10 @@ void doveadm_dsync_main(int *_argc, char **_argv[]) int argc = *_argc; const char *getopt_str; char **argv = *_argv; - char **new_argv, *mailbox = NULL, *alt_char = NULL; + char **new_argv, *mailbox = NULL, *alt_char = NULL, *username = NULL; char *p, *dup, new_flags[6]; int max_argc, src, dest, i, j; - bool flag_f = FALSE, flag_R = FALSE, flag_m, flag_C, has_arg; + bool flag_f = FALSE, flag_R = FALSE, flag_m, flag_u, flag_C, has_arg; bool backup_flag = FALSE; p = strrchr(argv[0], '/'); @@ -402,7 +402,7 @@ void doveadm_dsync_main(int *_argc, char **_argv[]) /* @UNSAFE: this is called when the "doveadm" binary is called as "dsync" (for backwards compatibility) */ - max_argc = argc + 5; + max_argc = argc + 7; new_argv = calloc(sizeof(char *), max_argc); new_argv[0] = argv[0]; dest = 1; @@ -413,7 +413,7 @@ void doveadm_dsync_main(int *_argc, char **_argv[]) if (argv[src][0] != '-') break; - flag_m = FALSE; flag_C = FALSE; has_arg = FALSE; + flag_m = FALSE; flag_C = FALSE; has_arg = FALSE; flag_u = FALSE; dup = strdup(argv[src]); for (i = j = 1; argv[src][i] != '\0'; i++) { switch (argv[src][i]) { @@ -429,6 +429,9 @@ void doveadm_dsync_main(int *_argc, char **_argv[]) case 'm': flag_m = TRUE; break; + case 'u': + flag_u = TRUE; + break; default: p = strchr(getopt_str, argv[src][i]); if (p != NULL && p[1] == ':') @@ -448,6 +451,11 @@ void doveadm_dsync_main(int *_argc, char **_argv[]) i_fatal("-m missing parameter"); mailbox = argv[++src]; } + if (flag_u) { + if (src+1 == argc) + i_fatal("-u missing parameter"); + username = argv[++src]; + } if (flag_C) { if (src+1 == argc) i_fatal("-C missing parameter"); @@ -504,6 +512,10 @@ void doveadm_dsync_main(int *_argc, char **_argv[]) if (mailbox != NULL) new_argv[dest++] = mailbox; } + if (username != NULL) { + new_argv[dest++] = "-u"; + new_argv[dest++] = username; + } /* rest of the parameters */ for (; src < argc; src++)