If there is no lchown(), don't try to set the user & group of a symlink.
[rsync/rsync.git] / clientserver.c
index ac99ae4..ec74054 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;
@@ -50,6 +51,7 @@ extern char *bind_address;
 extern struct exclude_list_struct server_exclude_list;
 extern char *exclude_path_prefix;
 extern char *config_file;
+extern char *files_from;
 
 char *auth_user;
 
@@ -87,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)
@@ -461,6 +466,8 @@ static int rsync_module(int f_in, int f_out, int i)
                 * get the error back to the client.  This means getting
                 * the protocol setup finished first in later versions. */
                setup_protocol(f_out, f_in);
+               if (files_from && !am_sender && strcmp(files_from, "-") != 0)
+                       write_byte(f_out, 0);
                io_start_multiplex_out();
        }
 
@@ -470,8 +477,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);
 
@@ -595,6 +605,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",