From: David Dykstra Date: Wed, 24 Mar 1999 16:39:07 +0000 (+0000) Subject: The "pid file" was getting created mode 666, not applying the umask X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/commitdiff_plain/ad517ce5b33eb59873ec8468af704f43867cd8cb?hp=1f8413449dc6430e59b7383c25454de72503f007 The "pid file" was getting created mode 666, not applying the umask because at that point in the program the umask is set to 0. Now creating the file with mode (666 & ~orig_umask). --- diff --git a/clientserver.c b/clientserver.c index 9e79538e..ace360b4 100644 --- a/clientserver.c +++ b/clientserver.c @@ -417,6 +417,7 @@ static int start_daemon(int fd) int daemon_main(void) { extern char *config_file; + extern int orig_umask; char *pid_file; if (is_a_socket(STDIN_FILENO)) { @@ -447,16 +448,19 @@ int daemon_main(void) rprintf(FINFO,"rsyncd version %s starting\n",VERSION); if (((pid_file = lp_pid_file()) != NULL) && (*pid_file != '\0')) { - FILE *f; + char pidbuf[16]; + int fd; int pid = (int) getpid(); cleanup_set_pid(pid); - if ((f = fopen(lp_pid_file(), "w")) == NULL) { + if ((fd = do_open(lp_pid_file(), O_WRONLY|O_CREAT|O_TRUNC, + 0666 & ~orig_umask)) == -1) { cleanup_set_pid(0); fprintf(stderr,"failed to create pid file %s\n", pid_file); exit_cleanup(RERR_FILEIO); } - fprintf(f, "%d\n", pid); - fclose(f); + slprintf(pidbuf, sizeof(pidbuf), "%d\n", pid); + write(fd, pidbuf, strlen(pidbuf)); + close(fd); } start_accept_loop(rsync_port, start_daemon);