Improved the arg-checking of a daemon command.
authorWayne Davison <wayned@samba.org>
Sat, 11 Aug 2007 16:53:31 +0000 (16:53 +0000)
committerWayne Davison <wayned@samba.org>
Sat, 11 Aug 2007 16:53:31 +0000 (16:53 +0000)
main.c
options.c

diff --git a/main.c b/main.c
index d30350d..0e765fb 100644 (file)
--- 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;
index 63a9e12..82fb24c 100644 (file)
--- 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 */