changeset 21710:5fd93439cda7

doveadm: Ensure -- is added to command line before positional arguments for non-mails commands as well Was forgotten from 967efe37d1f10a28c0a086cc5919d4ce8917bed8
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Mon, 27 Feb 2017 20:38:43 +0200
parents 27554e9ede9f
children 5fe535e0972a
files src/doveadm/doveadm-cmd.c
diffstat 1 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/doveadm-cmd.c	Mon Feb 27 19:12:32 2017 +0200
+++ b/src/doveadm/doveadm-cmd.c	Mon Feb 27 20:38:43 2017 +0200
@@ -321,6 +321,10 @@
 	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 */
@@ -349,11 +353,20 @@
 				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);
 }