From e208631a5b488a8bc6d0ad1d0a71a60faab2266e Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 11 Aug 2007 16:53:31 +0000 Subject: [PATCH] Improved the arg-checking of a daemon command. --- main.c | 38 ++++++++++++++------------------------ options.c | 4 ++-- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/main.c b/main.c index d30350d1..0e765fb0 100644 --- a/main.c +++ b/main.c @@ -37,7 +37,6 @@ extern int am_daemon; extern int inc_recurse; extern int blocking_io; extern int remove_source_files; -extern int daemon_over_rsh; extern int need_messages_from_generator; extern int kluge_around_eof; extern int do_stats; @@ -75,6 +74,7 @@ extern struct filter_list_struct server_filter_list; int local_server = 0; int new_root_dir = 0; +int daemon_over_rsh = 0; mode_t orig_umask = 0; int batch_gen_fd = -1; @@ -1092,16 +1092,9 @@ static int start_client(int argc, char *argv[]) "--files-from hostname is not the same as the transfer hostname\n"); exit_cleanup(RERR_SYNTAX); } - if (rsync_port) { - if (!shell_cmd) { - return start_socket_client(shell_machine, - shell_path, - argc, argv); - } - daemon_over_rsh = 1; - } - am_sender = 0; + if (rsync_port) + daemon_over_rsh = shell_cmd ? 1 : -1; } else { /* source is local, check dest arg */ am_sender = 1; @@ -1128,14 +1121,8 @@ static int start_client(int argc, char *argv[]) } shell_machine = NULL; shell_path = p; - } else if (rsync_port) { - if (!shell_cmd) { - return start_socket_client(shell_machine, - shell_path, - argc, argv); - } - daemon_over_rsh = 1; - } + } else if (rsync_port) + daemon_over_rsh = shell_cmd ? 1 : -1; } } else { /* read_batch */ local_server = 1; @@ -1146,6 +1133,15 @@ static int start_client(int argc, char *argv[]) } } + /* for remote source, only single dest arg can remain ... */ + if (!am_sender && argc > 1) { + usage(FERROR); + exit_cleanup(RERR_SYNTAX); + } + + if (daemon_over_rsh < 0) + return start_socket_client(shell_machine, shell_path, argc, argv); + if (password_file && !daemon_over_rsh) { rprintf(FERROR, "The --password-file option may only be " "used when accessing an rsync daemon.\n"); @@ -1169,12 +1165,6 @@ static int start_client(int argc, char *argv[]) shell_path ? shell_path : ""); } - /* for remote source, only single dest arg can remain ... */ - if (!am_sender && argc > 1) { - usage(FERROR); - exit_cleanup(RERR_SYNTAX); - } - /* ... or no dest at all */ if (!am_sender && argc == 0) list_only |= 1; diff --git a/options.c b/options.c index 63a9e12c..82fb24c7 100644 --- a/options.c +++ b/options.c @@ -25,6 +25,7 @@ extern int module_id; extern int sanitize_paths; +extern int daemon_over_rsh; extern struct filter_list_struct filter_list; extern struct filter_list_struct server_filter_list; @@ -95,7 +96,6 @@ int recurse = 0; int allow_inc_recurse = 1; int xfer_dirs = -1; int am_daemon = 0; -int daemon_over_rsh = 0; int do_stats = 0; int do_progress = 0; int keep_partial = 0; @@ -1616,7 +1616,7 @@ void server_options(char **args,int *argc) /* This should always remain first on the server's command-line. */ args[ac++] = "--server"; - if (daemon_over_rsh) { + if (daemon_over_rsh > 0) { args[ac++] = "--daemon"; *argc = ac; /* if we're passing --daemon, we're done */ -- 2.34.1