]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Make sure positional arguments end up in right place
authorAki Tuomi <aki.tuomi@dovecot.fi>
Sun, 27 Aug 2017 09:57:51 +0000 (12:57 +0300)
committerTimo Sirainen <tss@dovecot.fi>
Tue, 5 Sep 2017 13:13:39 +0000 (16:13 +0300)
Otherwise -- is placed into wrong place and breaks command line
reparsing in legacy functions.

src/doveadm/doveadm-cmd.c

index c6b143733e449a3e3c37e8a8e03b8f652eb3eb9c..313cd0a2f37c7e1d2fe689a63f7f22f4d4da455f 100644 (file)
@@ -360,6 +360,9 @@ doveadm_cmd_params_to_argv(const char *name, int pargc, const struct doveadm_cmd
 
        for(i=0;i<pargc;i++) {
                const char *optarg = NULL;
+               ARRAY_TYPE(const_string) *target = argv;
+               if ((params[i].flags & CMD_PARAM_FLAG_POSITIONAL) != 0)
+                       target = &pargv;
                /* istreams are special */
                i_assert(params[i].type != CMD_PARAM_ISTREAM);
                if (params[i].value_set) {
@@ -374,22 +377,19 @@ doveadm_cmd_params_to_argv(const char *name, int pargc, const struct doveadm_cmd
                        }
                        /* CMD_PARAM_BOOL is implicitly handled above */
                        if (params[i].type == CMD_PARAM_STR) {
-                               array_append(argv, &params[i].value.v_string,1);
+                               array_append(target, &params[i].value.v_string,1);
                        } else if (params[i].type == CMD_PARAM_INT64) {
                                const char *tmp = t_strdup_printf("%lld",
                                        (long long)params[i].value.v_int64);
-                               array_append(argv, &tmp, 1);
+                               array_append(target, &tmp, 1);
                        } else if (params[i].type == CMD_PARAM_IP) {
                                const char *tmp = net_ip2addr(&params[i].value.v_ip);
-                               array_append(argv, &tmp, 1);
+                               array_append(target, &tmp, 1);
                        } else if (params[i].type == CMD_PARAM_ARRAY) {
                                array_foreach(&params[i].value.v_array, cptr) {
                                        if (array_add_opt)
                                                array_append(argv, &optarg, 1);
-                                       if ((params[i].flags & CMD_PARAM_FLAG_POSITIONAL) == 0)
-                                               array_append(argv, cptr, 1);
-                                       else
-                                               array_append(&pargv, cptr, 1);
+                                       array_append(target, cptr, 1);
                                }
                        }
                }