X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b4de848d75b5bc289f13c4f47a4f78d4c876b1a2..9411292489496984c8d5d9a446bf071afac3866d:/clientserver.c?ds=sidebyside diff --git a/clientserver.c b/clientserver.c index b891d79a..5002959c 100644 --- a/clientserver.c +++ b/clientserver.c @@ -603,7 +603,8 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host) status = -1; if (asprintf(&p, "RSYNC_EXIT_STATUS=%d", status) > 0) putenv(p); - system(lp_postxfer_exec(i)); + if (system(lp_postxfer_exec(i)) < 0) + status = -1; _exit(status); } } @@ -974,20 +975,23 @@ static void create_pid_file(void) char *pid_file = lp_pid_file(); char pidbuf[16]; pid_t pid = getpid(); - int fd; + int fd, len; if (!pid_file || !*pid_file) return; cleanup_set_pid(pid); if ((fd = do_open(pid_file, O_WRONLY|O_CREAT|O_EXCL, 0666 & ~orig_umask)) == -1) { + failure: cleanup_set_pid(0); fprintf(stderr, "failed to create pid file %s: %s\n", pid_file, strerror(errno)); rsyserr(FLOG, errno, "failed to create pid file %s", pid_file); exit_cleanup(RERR_FILEIO); } snprintf(pidbuf, sizeof pidbuf, "%ld\n", (long)pid); - write(fd, pidbuf, strlen(pidbuf)); + len = strlen(pidbuf); + if (write(fd, pidbuf, len) != len) + goto failure; close(fd); }