applied simple nohang patch from Wayne Davison
[rsync/rsync.git] / clientserver.c
index 044f86d..1baa1e0 100644 (file)
@@ -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;
        }
 
@@ -141,7 +141,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 +196,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 +206,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);
@@ -492,7 +499,7 @@ int daemon_main(void)
                    rsyserr(FLOG, errno, "failed to create pid file %s", pid_file);
                    exit_cleanup(RERR_FILEIO);
                }
-               slprintf(pidbuf, sizeof(pidbuf), "%d\n", pid);
+               snprintf(pidbuf, sizeof(pidbuf), "%d\n", pid);
                write(fd, pidbuf, strlen(pidbuf));
                close(fd);
        }