aboutsummaryrefslogtreecommitdiffstats
path: root/clientserver.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2006-09-09 17:59:02 +0000
committerWayne Davison <wayned@samba.org>2006-09-09 17:59:02 +0000
commit503114a78223b8f5ebaed787aa68496984a3e4d9 (patch)
tree5fc9214f450bad6e646a7d978ec7b6840ba13b3c /clientserver.c
parent71f9e4673e5991f3ee149e8d41d5767371589fcb (diff)
downloadandroid_external_rsync-503114a78223b8f5ebaed787aa68496984a3e4d9.tar.gz
android_external_rsync-503114a78223b8f5ebaed787aa68496984a3e4d9.tar.bz2
android_external_rsync-503114a78223b8f5ebaed787aa68496984a3e4d9.zip
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.
Diffstat (limited to 'clientserver.c')
-rw-r--r--clientserver.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/clientserver.c b/clientserver.c
index 162ed8e6..00c492b1 100644
--- a/clientserver.c
+++ b/clientserver.c
@@ -418,17 +418,18 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
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);
}
@@ -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. */
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");
@@ -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);
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);
@@ -462,9 +464,8 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
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);