]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Ensure -- is added to command line before positional arguments for non-mails...
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 27 Feb 2017 18:38:43 +0000 (20:38 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 27 Feb 2017 18:38:43 +0000 (20:38 +0200)
Was forgotten from 967efe37d1f10a28c0a086cc5919d4ce8917bed8

src/doveadm/doveadm-cmd.c

index 89450f5cc43237e8d53bbf9e13c66ca5b2cb28b0..aa6daed95f58964576f1e0152ad9b7f44fa6b827 100644 (file)
@@ -320,6 +320,10 @@ doveadm_cmd_params_to_argv(const char *name, int pargc, const struct doveadm_cmd
        const char * const * cptr;
        i_assert(array_count(argv) == 0);
        array_append(argv, &name, 1);
+
+       ARRAY_TYPE(const_string) pargv;
+       t_array_init(&pargv, 8);
+
        for(i=0;i<pargc;i++) {
                const char *optarg = NULL;
                /* istreams are special */
@@ -348,11 +352,20 @@ doveadm_cmd_params_to_argv(const char *name, int pargc, const struct doveadm_cmd
                                array_foreach(&params[i].value.v_array, cptr) {
                                        if (array_add_opt)
                                                array_append(argv, &optarg, 1);
-                                       array_append(argv, cptr, 1);
+                                       if ((params[i].flags & CMD_PARAM_FLAG_POSITIONAL) == 0)
+                                               array_append(argv, cptr, 1);
+                                       else
+                                               array_append(&pargv, cptr, 1);
                                }
                        }
                }
        }
+
+       if (array_count(&pargv) > 0) {
+               const char *dashdash = "--";
+               array_append(argv, &dashdash, 1);
+               array_append_array(argv, &pargv);
+       }
        array_append_zero(argv);
 }