Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
reap children in sigchld handler
[rsync/rsync.git]
/
clientserver.c
diff --git
a/clientserver.c
b/clientserver.c
index
044f86d
..
00efea4
100644
(file)
--- a/
clientserver.c
+++ b/
clientserver.c
@@
-63,7
+63,7
@@
int start_socket_client(char *host, char *path, int argc, char *argv[])
}
if (*path == '/') {
}
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;
}
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: OK") == 0) break;
+
+ if (strcmp(line,"@RSYNCD: EXIT") == 0) exit(0);
+
rprintf(FINFO,"%s\n", line);
}
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];
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);
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);
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);
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);
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);
}
}
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);
p = lp_include_from(i);
add_exclude_file(p, 1, 1);
@@
-374,6
+384,8
@@
static void send_listing(int fd)
for (i=0;i<n;i++)
if (lp_list(i))
io_printf(fd, "%-15s\t%s\n", lp_name(i), lp_comment(i));
for (i=0;i<n;i++)
if (lp_list(i))
io_printf(fd, "%-15s\t%s\n", lp_name(i), lp_comment(i));
+
+ io_printf(fd, "@RSYNCD: EXIT\n");
}
/* this is called when a socket connection is established to a client
}
/* this is called when a socket connection is established to a client
@@
-492,7
+504,7
@@
int daemon_main(void)
rsyserr(FLOG, errno, "failed to create pid file %s", pid_file);
exit_cleanup(RERR_FILEIO);
}
rsyserr(FLOG, errno, "failed to create pid file %s", pid_file);
exit_cleanup(RERR_FILEIO);
}
- s
l
printf(pidbuf, sizeof(pidbuf), "%d\n", pid);
+ s
n
printf(pidbuf, sizeof(pidbuf), "%d\n", pid);
write(fd, pidbuf, strlen(pidbuf));
close(fd);
}
write(fd, pidbuf, strlen(pidbuf));
close(fd);
}