X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a254fd97982bbff8e060da9a62a799cd836d9ee0..fdf88d7574cfd4fba8f4cb8b2a84168b57e456e8:/clientserver.c diff --git a/clientserver.c b/clientserver.c index 5667b1d5..0ba2d0cd 100644 --- a/clientserver.c +++ b/clientserver.c @@ -38,7 +38,12 @@ 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(). **/ @@ -147,7 +152,13 @@ int start_socket_client(char *host, char *path, int argc, char *argv[]) if (strcmp(line,"@RSYNCD: OK") == 0) break; - if (strcmp(line,"@RSYNCD: EXIT") == 0) exit(0); + if (strcmp(line,"@RSYNCD: EXIT") == 0) { + /* This is sent by recent versions of the + * server to terminate the listing of modules. + * We don't want to go on and transfer + * anything; just exit. */ + exit(0); + } if (strncmp(line, "@ERROR", 6) == 0) rprintf(FERROR,"%s\n", line);