Honor the new omit_dir_times var.
[rsync/rsync.git] / clientserver.c
index 339c15d..58a2f2c 100644 (file)
@@ -43,6 +43,7 @@ extern int filesfrom_fd;
 extern int remote_protocol;
 extern int protocol_version;
 extern int io_timeout;
+extern int select_timeout;
 extern int orig_umask;
 extern int no_detach;
 extern int default_af_hint;
@@ -88,6 +89,9 @@ int start_socket_client(char *host, char *path, int argc, char *argv[])
                *p = '\0';
        }
 
+       if (rsync_port == 0)
+               rsync_port = RSYNC_PORT;
+
        fd = open_socket_out_wrapped(host, rsync_port, bind_address,
                                     default_af_hint);
        if (fd == -1)
@@ -108,7 +112,7 @@ int start_inband_exchange(char *user, char *path, int f_in, int f_out,
        char *p;
 
        if (argc == 0 && !am_sender)
-               list_only = 1;
+               list_only |= 1;
 
        if (*path == '/') {
                rprintf(FERROR,
@@ -121,19 +125,6 @@ int start_inband_exchange(char *user, char *path, int f_in, int f_out,
        if (!user)
                user = getenv("LOGNAME");
 
-       /* set daemon_over_rsh to false since we need to build the
-        * true set of args passed through the rsh/ssh connection;
-        * this is a no-op for direct-socket-connection mode */
-       daemon_over_rsh = 0;
-       server_options(sargs, &sargc);
-
-       sargs[sargc++] = ".";
-
-       if (path && *path)
-               sargs[sargc++] = path;
-
-       sargs[sargc] = NULL;
-
        io_printf(f_out, "@RSYNCD: %d\n", protocol_version);
 
        if (!read_line(f_in, line, sizeof line - 1)) {
@@ -150,6 +141,25 @@ int start_inband_exchange(char *user, char *path, int f_in, int f_out,
        if (protocol_version > remote_protocol)
                protocol_version = remote_protocol;
 
+       if (list_only && protocol_version >= 29)
+               list_only |= 2;
+
+       /* set daemon_over_rsh to false since we need to build the
+        * true set of args passed through the rsh/ssh connection;
+        * this is a no-op for direct-socket-connection mode */
+       daemon_over_rsh = 0;
+       server_options(sargs, &sargc);
+
+       sargs[sargc++] = ".";
+
+       if (path && *path)
+               sargs[sargc++] = path;
+
+       sargs[sargc] = NULL;
+
+       if (verbose > 1)
+               print_child_argv(sargs);
+
        p = strchr(path,'/');
        if (p) *p = 0;
        io_printf(f_out, "%s\n", path);
@@ -473,8 +483,11 @@ static int rsync_module(int f_in, int f_out, int i)
                exit_cleanup(RERR_UNSUPPORTED);
        }
 
-       if (lp_timeout(i))
+       if (lp_timeout(i)) {
                io_timeout = lp_timeout(i);
+               if (io_timeout < select_timeout)
+                       select_timeout = io_timeout;
+       }
 
        start_server(f_in, f_out, argc, argp);
 
@@ -598,6 +611,11 @@ int daemon_main(void)
        if (!lp_load(config_file, 1))
                exit_cleanup(RERR_SYNTAX);
 
+       if (rsync_port == 0 && (rsync_port = lp_rsync_port()) == 0)
+               rsync_port = RSYNC_PORT;
+       if (bind_address == NULL && *lp_bind_address())
+               bind_address = lp_bind_address();
+
        log_init();
 
        rprintf(FLOG, "rsyncd version %s starting, listening on port %d\n",