X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/cae95647a4355ff81f044ef001c6332f138fa171..136ac7ecec03339837e4b70f3128fd3609d37374:/clientserver.c diff --git a/clientserver.c b/clientserver.c index c8676f64..2babcffc 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[]) { @@ -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;