added --backup-dir option from Bob Edwards
[rsync/rsync.git] / clientserver.c
index 8425243..8c55807 100644 (file)
@@ -36,6 +36,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[])
        char *p, *user=NULL;
        extern int remote_version;
        extern int am_sender;
+       extern struct in_addr socket_address;
 
        if (*path == '/') {
                rprintf(FERROR,"ERROR: The remote path must start with a module name\n");
@@ -52,7 +53,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[])
        if (!user) user = getenv("USER");
        if (!user) user = getenv("LOGNAME");
 
-       fd = open_socket_out(host, rsync_port);
+       fd = open_socket_out(host, rsync_port, &socket_address);
        if (fd == -1) {
                exit_cleanup(RERR_SOCKETIO);
        }
@@ -100,7 +101,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[])
        }
        io_printf(fd,"\n");
 
-       if (remote_version > 17 && !am_sender)
+       if (remote_version >= 22 || (remote_version > 17 && !am_sender))
                io_start_multiplex_in(fd);
 
        return client_run(fd, fd, -1, argc, argv);
@@ -315,9 +316,17 @@ static int rsync_module(int fd, int i)
        argp = argv + optind;
        optind = 0;
 
-       if (remote_version > 17 && am_sender)
+       if (remote_version >= 22 || (remote_version > 17 && am_sender))
                io_start_multiplex_out(fd);
 
+       if (read_only) {
+               extern int am_sender;
+               if (!am_sender) {
+                       rprintf(FERROR,"ERROR: module is read only\n");
+                       return -1;
+               }
+       }
+
        if (!ret) {
                option_error();
        }
@@ -433,8 +442,6 @@ int daemon_main(void)
                        open("/dev/null", O_RDWR);
                }
 
-               set_nonblocking(STDIN_FILENO);
-
                return start_daemon(STDIN_FILENO);
        }