extern int verbose;
extern int quiet;
+extern int output_motd;
extern int list_only;
extern int am_sender;
extern int am_server;
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;
if (am_root) {
p = lp_uid(i);
if (!name_to_uid(p, &uid)) {
- if (!isdigit(*(unsigned char *)p)) {
+ if (!isDigit(p)) {
rprintf(FLOG, "Invalid uid %s\n", p);
io_printf(f_out, "@ERROR: invalid uid %s\n", p);
return -1;
p = lp_gid(i);
if (!name_to_gid(p, &gid)) {
- if (!isdigit(*(unsigned char *)p)) {
+ if (!isDigit(p)) {
rprintf(FLOG, "Invalid gid %s\n", p);
io_printf(f_out, "@ERROR: invalid gid %s\n", p);
return -1;
parse_rule(&server_filter_list, p, MATCHFLG_WORD_SPLIT,
XFLG_ABS_IF_SLASH | XFLG_OLD_PREFIXES);
- log_init();
+ log_init(1);
#ifdef HAVE_PUTENV
if (*lp_prexfer_exec(i) || *lp_postxfer_exec(i)) {
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 (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 (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);
}
* 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");
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);
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);
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");
}
} 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");
if (bind_address == NULL && *lp_bind_address())
bind_address = lp_bind_address();
- log_init();
+ log_init(0);
rprintf(FLOG, "rsyncd version %s starting, listening on port %d\n",
RSYNC_VERSION, rsync_port);