Commit 503114a7 authored by Wayne Davison's avatar Wayne Davison

Added the RSYNC_PID environment variable for the pre-/post-xfer

commands so that the pre-xfer command has a unique ID it can
use to cache information for the post-xfer command.
parent 71f9e467
...@@ -418,17 +418,18 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host) ...@@ -418,17 +418,18 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
return -1; return -1;
} }
if (pid) { if (pid) {
char *ret1, *ret2; if (asprintf(&p, "RSYNC_PID=%ld", (long)pid) > 0)
putenv(p);
if (wait_process(pid, &status, 0) < 0) if (wait_process(pid, &status, 0) < 0)
status = -1; status = -1;
if (asprintf(&ret1, "RSYNC_RAW_STATUS=%d", status) > 0) if (asprintf(&p, "RSYNC_RAW_STATUS=%d", status) > 0)
putenv(ret1); putenv(p);
if (WIFEXITED(status)) if (WIFEXITED(status))
status = WEXITSTATUS(status); status = WEXITSTATUS(status);
else else
status = -1; status = -1;
if (asprintf(&ret2, "RSYNC_EXIT_STATUS=%d", status) > 0) if (asprintf(&p, "RSYNC_EXIT_STATUS=%d", status) > 0)
putenv(ret2); putenv(p);
system(lp_postxfer_exec(i)); system(lp_postxfer_exec(i));
_exit(status); _exit(status);
} }
...@@ -438,6 +439,8 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host) ...@@ -438,6 +439,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. */ * send us the user's request via a pipe. */
if (*lp_prexfer_exec(i)) { if (*lp_prexfer_exec(i)) {
int fds[2]; int fds[2];
if (asprintf(&p, "RSYNC_PID=%ld", (long)getpid()) > 0)
putenv(p);
if (pipe(fds) < 0 || (pre_exec_pid = fork()) < 0) { if (pipe(fds) < 0 || (pre_exec_pid = fork()) < 0) {
rsyserr(FLOG, errno, "pre-xfer exec preparation failed"); rsyserr(FLOG, errno, "pre-xfer exec preparation failed");
io_printf(f_out, "@ERROR: pre-xfer exec preparation failed\n"); io_printf(f_out, "@ERROR: pre-xfer exec preparation failed\n");
...@@ -451,9 +454,8 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host) ...@@ -451,9 +454,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); len = read_arg_from_pipe(fds[0], buf, BIGPATHBUFLEN);
if (len <= 0) if (len <= 0)
_exit(1); _exit(1);
if (asprintf(&p, "RSYNC_REQUEST=%s", buf) < 0) if (asprintf(&p, "RSYNC_REQUEST=%s", buf) > 0)
out_of_memory("rsync_module"); putenv(p);
putenv(p);
for (j = 0; ; j++) { for (j = 0; ; j++) {
len = read_arg_from_pipe(fds[0], buf, len = read_arg_from_pipe(fds[0], buf,
BIGPATHBUFLEN); BIGPATHBUFLEN);
...@@ -462,9 +464,8 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host) ...@@ -462,9 +464,8 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
break; break;
_exit(1); _exit(1);
} }
if (asprintf(&p, "RSYNC_ARG%d=%s", j, buf) < 0) if (asprintf(&p, "RSYNC_ARG%d=%s", j, buf) > 0)
out_of_memory("rsync_module"); putenv(p);
putenv(p);
} }
close(fds[0]); close(fds[0]);
close(STDIN_FILENO); close(STDIN_FILENO);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment