X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/cae95647a4355ff81f044ef001c6332f138fa171..fca9a9b0f044a9ef93cea27dadc01ecd56d1274c:/clientserver.c diff --git a/clientserver.c b/clientserver.c index c8676f64..43d9e541 100644 --- a/clientserver.c +++ b/clientserver.c @@ -38,9 +38,15 @@ extern int sanitize_paths; * Run a client connected to an rsyncd. The alternative to this * function for remote-shell connections is do_cmd(). * - * After initial server startup, hands over to client_run(). + * After negotiating which module to use and reading the server's + * motd, this hands over to client_run(). Telling the server the + * module will cause it to chroot/setuid/etc. + * + * Instead of doing a transfer, the client may at this stage instead + * get a listing of remote modules and exit. * * @return -1 for error in startup, or the result of client_run(). + * Either way, it eventually gets passed to exit_cleanup(). **/ int start_socket_client(char *host, char *path, int argc, char *argv[]) { @@ -69,7 +75,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[]) * See http://lists.samba.org/pipermail/rsync/2000-September/002744.html */ if (shell_cmd) { - rprintf(FERROR, "WARNING: --rsh or -e option ignored when " + rprintf(FINFO, "WARNING: --rsh or -e option ignored when " "connecting to rsync daemon\n"); /* continue */ } @@ -155,10 +161,14 @@ int start_socket_client(char *host, char *path, int argc, char *argv[]) exit(0); } - if (strncmp(line, "@ERROR", 6) == 0) + if (strncmp(line, "@ERROR", 6) == 0) { rprintf(FERROR,"%s\n", line); - else + /* This is always fatal; the server will now + * close the socket. */ + return RERR_STARTCLIENT; + } else { rprintf(FINFO,"%s\n", line); + } } kludge_around_eof = False; @@ -236,7 +246,7 @@ static int rsync_module(int fd, int i) if (am_root) { p = lp_uid(i); if (!name_to_uid(p, &uid)) { - if (!isdigit(*p)) { + if (!isdigit(* (unsigned char *) p)) { rprintf(FERROR,"Invalid uid %s\n", p); io_printf(fd,"@ERROR: invalid uid %s\n", p); return -1; @@ -246,7 +256,7 @@ static int rsync_module(int fd, int i) p = lp_gid(i); if (!name_to_gid(p, &gid)) { - if (!isdigit(*p)) { + if (!isdigit(* (unsigned char *) p)) { rprintf(FERROR,"Invalid gid %s\n", p); io_printf(fd,"@ERROR: invalid gid %s\n", p); return -1;