Mercurial > dovecot > core-2.2
changeset 11774:1f9080e9a530 HEAD
dsync: Fixed giving dsync command as a path to a binary without parameters.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 10 Jul 2010 17:59:11 +0100 |
parents | f93507788bc3 |
children | d9d1272d99b7 |
files | src/dsync/dsync.c |
diffstat | 1 files changed, 22 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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 bool mirror_get_remote_cmd(char **argv, const char *const **cmd_args_r) +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; 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@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);