X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/15b7b73d7dd5dc3a70943e40551dabce74bb629f..6f82f7a6f67bd9f5dd88bc3977c1f633405244f0:/clientserver.c diff --git a/clientserver.c b/clientserver.c index 044f86dc..dd383d0b 100644 --- a/clientserver.c +++ b/clientserver.c @@ -63,7 +63,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[]) } if (*path == '/') { - rprintf(FERROR,"ERROR: The remote path must start with a module name\n"); + rprintf(FERROR,"ERROR: The remote path must start with a module name not a /\n"); return -1; } @@ -117,6 +117,9 @@ 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); + rprintf(FINFO,"%s\n", line); } @@ -141,7 +144,7 @@ static int rsync_module(int fd, int i) char *argv[MAX_ARGS]; char **argp; char line[MAXPATHLEN]; - uid_t uid = (uid_t)-2; + uid_t uid = (uid_t)-2; /* canonically "nobody" */ gid_t gid = (gid_t)-2; char *p; char *addr = client_addr(fd); @@ -196,7 +199,7 @@ static int rsync_module(int fd, int i) if (!name_to_uid(p, &uid)) { if (!isdigit(*p)) { rprintf(FERROR,"Invalid uid %s\n", p); - io_printf(fd,"@ERROR: invalid uid\n"); + io_printf(fd,"@ERROR: invalid uid %s\n", p); return -1; } uid = atoi(p); @@ -206,12 +209,19 @@ static int rsync_module(int fd, int i) if (!name_to_gid(p, &gid)) { if (!isdigit(*p)) { rprintf(FERROR,"Invalid gid %s\n", p); - io_printf(fd,"@ERROR: invalid gid\n"); + io_printf(fd,"@ERROR: invalid gid %s\n", p); return -1; } gid = atoi(p); } } + + /* TODO: If we're not root, but the configuration requests + * that we change to some uid other than the current one, then + * log a warning. */ + + /* TODO: Perhaps take a list of gids, and make them into the + * supplementary groups. */ p = lp_include_from(i); add_exclude_file(p, 1, 1); @@ -251,13 +261,13 @@ static int rsync_module(int fd, int i) if (am_root) { if (setgid(gid)) { - rsyserr(FERROR, errno, "setgid %d failed", gid); + rsyserr(FERROR, errno, "setgid %d failed", (int) gid); io_printf(fd,"@ERROR: setgid failed\n"); return -1; } if (setuid(uid)) { - rsyserr(FERROR, errno, "setuid %d failed", uid); + rsyserr(FERROR, errno, "setuid %d failed", (int) uid); io_printf(fd,"@ERROR: setuid failed\n"); return -1; } @@ -374,6 +384,8 @@ static void send_listing(int fd) for (i=0;i