Blob Blame History Raw
autofs-5.1.4 - move close stdio descriptors to become_daemon()

From: Ian Kent <raven@themaw.net>

Move the stdio file descriptor close to the become_daemon() function
as closing these file descriptors, ie. detaching from ttys, is part
of the preperation for becoming a system daemon.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG          |    1 +
 daemon/automount.c |   27 ++++++++++++++++++++++++++-
 include/log.h      |    1 -
 lib/log.c          |   30 ------------------------------
 4 files changed, 27 insertions(+), 32 deletions(-)

--- autofs-5.0.7.orig/CHANGELOG
+++ autofs-5.0.7/CHANGELOG
@@ -314,6 +314,7 @@
 - add NULL check in prepare_attempt_prefix().
 - update build info with systemd.
 - use flags for startup boolean options.
+- move close stdio descriptors to become_daemon().
 
 25/07/2012 autofs-5.0.7
 =======================
--- autofs-5.0.7.orig/daemon/automount.c
+++ autofs-5.0.7/daemon/automount.c
@@ -1220,6 +1220,8 @@ static void become_daemon(unsigned int f
 		}
 		log_to_stderr();
 	} else {
+		int nullfd;
+
 		if (open_pipe(start_pipefd) < 0) {
 			fprintf(stderr, "%s: failed to create start_pipefd.\n",
 				program);
@@ -1263,7 +1265,30 @@ static void become_daemon(unsigned int f
 			close(start_pipefd[1]);
 			exit(*pst_stat);
 		}
-		log_to_syslog();
+
+		/* Redirect all our file descriptors to /dev/null */
+		nullfd = open("/dev/null", O_RDWR);
+		if (nullfd < 0) {
+			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+			fprintf(stderr, "cannot open /dev/null: %s", estr);
+			res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
+			close(start_pipefd[1]);
+			exit(*pst_stat);
+		}
+
+		if (dup2(nullfd, STDIN_FILENO) < 0 ||
+		    dup2(nullfd, STDOUT_FILENO) < 0 ||
+		    dup2(nullfd, STDERR_FILENO) < 0) {
+			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+			fprintf(stderr,
+				"redirecting file descriptors failed: %s", estr);
+			res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
+			close(start_pipefd[1]);
+			exit(*pst_stat);
+		}
+
+		open_log();
+		close(nullfd);
 	}
 
 	/* Write pid file if requested */
--- autofs-5.0.7.orig/include/log.h
+++ autofs-5.0.7/include/log.h
@@ -36,7 +36,6 @@ extern void set_log_debug_ap(struct auto
 extern void set_mnt_logging(unsigned global_logopt);
 
 extern void open_log(void);
-extern void log_to_syslog(void);
 extern void log_to_stderr(void);
  
 extern void log_info(unsigned int, const char* msg, ...);
--- autofs-5.0.7.orig/lib/log.c
+++ autofs-5.0.7/lib/log.c
@@ -314,36 +314,6 @@ void open_log(void)
 	return;
 }
 
-void log_to_syslog(void)
-{
-	char buf[MAX_ERR_BUF];
-	int nullfd;
-
-	open_log();
-
-	/* Redirect all our file descriptors to /dev/null */
-	nullfd = open("/dev/null", O_RDWR);
-	if (nullfd < 0) {
-		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
-		fprintf(stderr, "cannot open /dev/null: %s", estr);
-		exit(1);
-	}
-
-	if (dup2(nullfd, STDIN_FILENO) < 0 ||
-	    dup2(nullfd, STDOUT_FILENO) < 0 ||
-	    dup2(nullfd, STDERR_FILENO) < 0) {
-		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
-		fprintf(stderr,
-			"redirecting file descriptors failed: %s", estr);
-		exit(1);
-	}
-
-	if (nullfd > 2)
-		close(nullfd);
-
-	return;
-}
-
 void log_to_stderr(void)
 {
 	if (syslog_open) {