- 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.
return rsync_module(f_in, f_out, i, addr, host);
}
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];
{
char *pid_file = lp_pid_file();
char pidbuf[16];
int fd;
if (!pid_file || !*pid_file)
return;
cleanup_set_pid(pid);
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) {
+ 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);
}
rsyserr(FLOG, errno, "failed to create pid file %s", pid_file);
exit_cleanup(RERR_FILEIO);
}
pid_t pid = fork();
if (pid) {
pid_t pid = fork();
if (pid) {
+ if (pid < 0) {
+ fprintf(stderr, "failed to fork: %s\n", strerror(errno));
+ exit_cleanup(RERR_FILEIO);
+ }
/* detach from the terminal */
#ifdef HAVE_SETSID
setsid();
/* detach from the terminal */
#ifdef HAVE_SETSID
setsid();
+ 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;
if (is_a_socket(STDIN_FILENO)) {
int i;
- create_pid_file(getpid());