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
Moved the code that checks for finished file-lists, for finished "redo"
[rsync/rsync.git]
/
clientserver.c
diff --git
a/clientserver.c
b/clientserver.c
index
162ed8e
..
0f92451
100644
(file)
--- a/
clientserver.c
+++ b/
clientserver.c
@@
-24,12
+24,14
@@
extern int verbose;
extern int quiet;
extern int verbose;
extern int quiet;
+extern int output_motd;
extern int list_only;
extern int am_sender;
extern int am_server;
extern int am_daemon;
extern int am_root;
extern int rsync_port;
extern int list_only;
extern int am_sender;
extern int am_server;
extern int am_daemon;
extern int am_root;
extern int rsync_port;
+extern int ignore_errors;
extern int kluge_around_eof;
extern int daemon_over_rsh;
extern int sanitize_paths;
extern int kluge_around_eof;
extern int daemon_over_rsh;
extern int sanitize_paths;
@@
-109,7
+111,7
@@
int start_socket_client(char *host, char *path, int argc, char *argv[])
return ret ? ret : client_run(fd, fd, -1, argc, argv);
}
return ret ? ret : client_run(fd, fd, -1, argc, argv);
}
-int start_inband_exchange(char *user, char *path, int f_in, int f_out,
+int start_inband_exchange(c
onst c
har *user, char *path, int f_in, int f_out,
int argc)
{
int i;
int argc)
{
int i;
@@
-205,7
+207,10
@@
int start_inband_exchange(char *user, char *path, int f_in, int f_out,
return -1;
}
return -1;
}
- rprintf(FINFO, "%s\n", line);
+ /* This might be a MOTD line or a module listing, but there is
+ * no way to differentiate it. The manpage mentions this. */
+ if (output_motd)
+ rprintf(FINFO, "%s\n", line);
}
kluge_around_eof = 0;
}
kluge_around_eof = 0;
@@
-240,7
+245,9
@@
static char *finish_pre_exec(pid_t pid, int fd, char *request,
if (wait_process(pid, &status, 0) < 0
|| !WIFEXITED(status) || WEXITSTATUS(status) != 0) {
char *e;
if (wait_process(pid, &status, 0) < 0
|| !WIFEXITED(status) || WEXITSTATUS(status) != 0) {
char *e;
- if (asprintf(&e, "pre-xfer exec returned failure (%d)\n", status) < 0)
+ if (asprintf(&e, "pre-xfer exec returned failure (%d)%s%s\n",
+ status, status < 0 ? ": " : "",
+ status < 0 ? strerror(errno) : "") < 0)
out_of_memory("finish_pre_exec");
return e;
}
out_of_memory("finish_pre_exec");
return e;
}
@@
-336,7
+343,7
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
if (am_root) {
p = lp_uid(i);
if (!name_to_uid(p, &uid)) {
if (am_root) {
p = lp_uid(i);
if (!name_to_uid(p, &uid)) {
- if (!is
digit(*(unsigned char *)
p)) {
+ if (!is
Digit(
p)) {
rprintf(FLOG, "Invalid uid %s\n", p);
io_printf(f_out, "@ERROR: invalid uid %s\n", p);
return -1;
rprintf(FLOG, "Invalid uid %s\n", p);
io_printf(f_out, "@ERROR: invalid uid %s\n", p);
return -1;
@@
-346,7
+353,7
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
p = lp_gid(i);
if (!name_to_gid(p, &gid)) {
p = lp_gid(i);
if (!name_to_gid(p, &gid)) {
- if (!is
digit(*(unsigned char *)
p)) {
+ if (!is
Digit(
p)) {
rprintf(FLOG, "Invalid gid %s\n", p);
io_printf(f_out, "@ERROR: invalid gid %s\n", p);
return -1;
rprintf(FLOG, "Invalid gid %s\n", p);
io_printf(f_out, "@ERROR: invalid gid %s\n", p);
return -1;
@@
-418,17
+425,18
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
return -1;
}
if (pid) {
return -1;
}
if (pid) {
- char *ret1, *ret2;
+ if (asprintf(&p, "RSYNC_PID=%ld", (long)pid) > 0)
+ putenv(p);
if (wait_process(pid, &status, 0) < 0)
status = -1;
if (wait_process(pid, &status, 0) < 0)
status = -1;
- if (asprintf(&
ret1
, "RSYNC_RAW_STATUS=%d", status) > 0)
- putenv(
ret1
);
+ if (asprintf(&
p
, "RSYNC_RAW_STATUS=%d", status) > 0)
+ putenv(
p
);
if (WIFEXITED(status))
status = WEXITSTATUS(status);
else
status = -1;
if (WIFEXITED(status))
status = WEXITSTATUS(status);
else
status = -1;
- if (asprintf(&
ret2
, "RSYNC_EXIT_STATUS=%d", status) > 0)
- putenv(
ret2
);
+ if (asprintf(&
p
, "RSYNC_EXIT_STATUS=%d", status) > 0)
+ putenv(
p
);
system(lp_postxfer_exec(i));
_exit(status);
}
system(lp_postxfer_exec(i));
_exit(status);
}
@@
-438,6
+446,8
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
* send us the user's request via a pipe. */
if (*lp_prexfer_exec(i)) {
int fds[2];
* send us the user's request via a pipe. */
if (*lp_prexfer_exec(i)) {
int fds[2];
+ if (asprintf(&p, "RSYNC_PID=%ld", (long)getpid()) > 0)
+ putenv(p);
if (pipe(fds) < 0 || (pre_exec_pid = fork()) < 0) {
rsyserr(FLOG, errno, "pre-xfer exec preparation failed");
io_printf(f_out, "@ERROR: pre-xfer exec preparation failed\n");
if (pipe(fds) < 0 || (pre_exec_pid = fork()) < 0) {
rsyserr(FLOG, errno, "pre-xfer exec preparation failed");
io_printf(f_out, "@ERROR: pre-xfer exec preparation failed\n");
@@
-451,9
+461,8
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
len = read_arg_from_pipe(fds[0], buf, BIGPATHBUFLEN);
if (len <= 0)
_exit(1);
len = read_arg_from_pipe(fds[0], buf, BIGPATHBUFLEN);
if (len <= 0)
_exit(1);
- if (asprintf(&p, "RSYNC_REQUEST=%s", buf) < 0)
- out_of_memory("rsync_module");
- putenv(p);
+ if (asprintf(&p, "RSYNC_REQUEST=%s", buf) > 0)
+ putenv(p);
for (j = 0; ; j++) {
len = read_arg_from_pipe(fds[0], buf,
BIGPATHBUFLEN);
for (j = 0; ; j++) {
len = read_arg_from_pipe(fds[0], buf,
BIGPATHBUFLEN);
@@
-462,9
+471,8
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
break;
_exit(1);
}
break;
_exit(1);
}
- if (asprintf(&p, "RSYNC_ARG%d=%s", j, buf) < 0)
- out_of_memory("rsync_module");
- putenv(p);
+ if (asprintf(&p, "RSYNC_ARG%d=%s", j, buf) > 0)
+ putenv(p);
}
close(fds[0]);
close(STDIN_FILENO);
}
close(fds[0]);
close(STDIN_FILENO);
@@
-502,7
+510,7
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
return -1;
}
return -1;
}
- if (!push_dir("/")) {
+ if (!push_dir("/"
, 0
)) {
rsyserr(FLOG, errno, "chdir %s failed\n",
lp_path(i));
io_printf(f_out, "@ERROR: chdir failed\n");
rsyserr(FLOG, errno, "chdir %s failed\n",
lp_path(i));
io_printf(f_out, "@ERROR: chdir failed\n");
@@
-510,7
+518,7
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
}
} else {
}
} else {
- if (!push_dir(lp_path(i))) {
+ if (!push_dir(lp_path(i)
, 0
)) {
rsyserr(FLOG, errno, "chdir %s failed\n",
lp_path(i));
io_printf(f_out, "@ERROR: chdir failed\n");
rsyserr(FLOG, errno, "chdir %s failed\n",
lp_path(i));
io_printf(f_out, "@ERROR: chdir failed\n");
@@
-619,6
+627,8
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
verbose = 0; /* future verbosity is controlled by client options */
ret = parse_arguments(&argc, (const char ***) &argv, 0);
quiet = 0; /* Don't let someone try to be tricky. */
verbose = 0; /* future verbosity is controlled by client options */
ret = parse_arguments(&argc, (const char ***) &argv, 0);
quiet = 0; /* Don't let someone try to be tricky. */
+ if (lp_ignore_errors(module_id))
+ ignore_errors = 1;
if (filesfrom_fd == 0)
filesfrom_fd = f_in;
if (filesfrom_fd == 0)
filesfrom_fd = f_in;
@@
-673,7
+683,7
@@
static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
if (!ret || err_msg) {
if (err_msg)
if (!ret || err_msg) {
if (err_msg)
- r
printf(FERROR, err_msg
);
+ r
write(FERROR, err_msg, strlen(err_msg)
);
else
option_error();
msleep(400);
else
option_error();
msleep(400);