From dd589118d0108f78e33ad302df0bc316ce84bf4a Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Mon, 1 Oct 2007 02:25:54 +0000 Subject: [PATCH] - Set config_file to a default filename if it is NULL. - Changed create_pid_file() to fail if the pidfile already exists, which makes the daemon exit with an error. - Output errors about a failure to open the config file or the lock file to (a still open) stderr. - We now notice (and complain) if fork() fails. --- clientserver.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/clientserver.c b/clientserver.c index 4c636664..700a126d 100644 --- a/clientserver.c +++ b/clientserver.c @@ -839,18 +839,20 @@ int start_daemon(int f_in, int f_out) return rsync_module(f_in, f_out, i, addr, host); } -static void create_pid_file(pid_t pid) +static void create_pid_file(void) { char *pid_file = lp_pid_file(); char pidbuf[16]; + pid_t pid = getpid(); int fd; if (!pid_file || !*pid_file) return; cleanup_set_pid(pid); - if ((fd = do_open(pid_file, O_WRONLY|O_CREAT|O_TRUNC, 0666 & ~orig_umask)) == -1) { + if ((fd = do_open(pid_file, O_WRONLY|O_CREAT|O_EXCL, 0666 & ~orig_umask)) == -1) { 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); } @@ -866,10 +868,15 @@ static void become_daemon(void) pid_t pid = fork(); if (pid) { - create_pid_file(pid); + if (pid < 0) { + fprintf(stderr, "failed to fork: %s\n", strerror(errno)); + exit_cleanup(RERR_FILEIO); + } _exit(0); } + create_pid_file(); + /* detach from the terminal */ #ifdef HAVE_SETSID setsid(); @@ -890,6 +897,13 @@ static void become_daemon(void) int daemon_main(void) { + if (!config_file) { + if (am_server && am_root <= 0) + config_file = RSYNCD_USERCONF; + else + config_file = RSYNCD_SYSCONF; + } + if (is_a_socket(STDIN_FILENO)) { int i; @@ -910,7 +924,7 @@ int daemon_main(void) } if (no_detach) - create_pid_file(getpid()); + create_pid_file(); else become_daemon(); -- 2.34.1