dovecot-2.0: dsync: Fixed giving dsync command as a path to a bi...

dovecot at dovecot.org dovecot at dovecot.org
Sat Jul 10 20:11:58 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/1f9080e9a530
changeset: 11774:1f9080e9a530
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Jul 10 17:59:11 2010 +0100
description:
dsync: Fixed giving dsync command as a path to a binary without parameters.

diffstat:

 src/dsync/dsync.c |  33 ++++++++++++++++++++++-----------
 1 files changed, 22 insertions(+), 11 deletions(-)

diffs (65 lines):

diff -r f93507788bc3 -r 1f9080e9a530 src/dsync/dsync.c
--- a/src/dsync/dsync.c	Sat Jul 10 17:38:48 2010 +0100
+++ b/src/dsync/dsync.c	Sat Jul 10 17:59:11 2010 +0100
@@ -57,24 +57,33 @@
 	}
 }
 
+static void
+mirror_get_remote_cmd_line(char **argv, const char *const **cmd_args_r)
+{
+	ARRAY_TYPE(const_string) cmd_args;
+	unsigned int i;
+	const char *p;
+
+	t_array_init(&cmd_args, 16);
+	for (i = 0; argv[i] != NULL; i++) {
+		p = argv[i];
+		array_append(&cmd_args, &p, 1);
+	}
+
+	p = "server"; array_append(&cmd_args, &p, 1);
+	(void)array_append_space(&cmd_args);
+	*cmd_args_r = array_idx(&cmd_args, 0);
+}
+
 static bool mirror_get_remote_cmd(char **argv, const char *const **cmd_args_r)
 {
 	ARRAY_TYPE(const_string) cmd_args;
-	unsigned int i;
 	const char *p, *user, *host;
 
-	t_array_init(&cmd_args, 8);
 	if (argv[1] != NULL) {
 		/* more than one parameter, so it contains a full command
 		   (e.g. ssh host dsync) */
-		for (i = 0; argv[i] != NULL; i++) {
-			p = argv[i];
-			array_append(&cmd_args, &p, 1);
-		}
-
-		p = "server"; array_append(&cmd_args, &p, 1);
-		(void)array_append_space(&cmd_args);
-		*cmd_args_r = array_idx(&cmd_args, 0);
+		mirror_get_remote_cmd_line(argv, cmd_args_r);
 		return TRUE;
 	}
 
@@ -93,7 +102,8 @@
 		      backwards compatibility.
 		   b) script/path */
 		argv = p_strsplit(pool_datastack_create(), argv[0], " ");
-		return mirror_get_remote_cmd(argv, cmd_args_r);
+		mirror_get_remote_cmd_line(argv, cmd_args_r);
+		return TRUE;
 	}
 
 	/* [user@]host */
@@ -107,6 +117,7 @@
 
 	/* we'll assume virtual users, so in user at host it really means not to
 	   give ssh a username, but to give dsync -u user parameter. */
+	t_array_init(&cmd_args, 8);
 	array_append(&cmd_args, &ssh_cmd, 1);
 	array_append(&cmd_args, &host, 1);
 	p = "dsync"; array_append(&cmd_args, &p, 1);


More information about the dovecot-cvs mailing list