Blob Blame History Raw
From 0dddfd5e738232403220b0d18888f94fa0032a59 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Wed, 17 Oct 2012 12:17:39 -0400
Subject: [PATCH 11/36] Don't destroy stdin/stdout/stderr if we don't fork.

I like being able to read my error messages.

Signed-off-by: Peter Jones <pjones@redhat.com>
---
 src/daemon.c | 59 +++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 33 insertions(+), 26 deletions(-)

diff --git a/src/daemon.c b/src/daemon.c
index 77fff90..a31c063 100644
--- a/src/daemon.c
+++ b/src/daemon.c
@@ -890,33 +890,38 @@ daemonize(cms_context *cms_ctx, int do_fork)
 		exit(1);
 	}
 
-	int fd = open("/dev/zero", O_RDONLY);
-	close(STDIN_FILENO);
-	rc = dup2(fd, STDIN_FILENO);
-	if (rc < 0) {
-		ctx.backup_cms->log(ctx.backup_cms, ctx.priority|LOG_ERR,
-			"pesignd: could not set up standard input: %m");
-		exit(1);
-	}
-	close(fd);
+	if (do_fork) {
+		int fd = open("/dev/zero", O_RDONLY);
+		close(STDIN_FILENO);
+		rc = dup2(fd, STDIN_FILENO);
+		if (rc < 0) {
+			ctx.backup_cms->log(ctx.backup_cms,
+				ctx.priority|LOG_ERR,
+				"pesignd: could not set up standard input: %m");
+			exit(1);
+		}
+		close(fd);
 
-	fd = open("/dev/null", O_WRONLY);
-	close(STDOUT_FILENO);
-	rc = dup2(fd, STDOUT_FILENO);
-	if (rc < 0) {
-		ctx.backup_cms->log(ctx.backup_cms, ctx.priority|LOG_ERR,
-			"pesignd: could not set up standard output: %m");
-		exit(1);
-	}
+		fd = open("/dev/null", O_WRONLY);
+		close(STDOUT_FILENO);
+		rc = dup2(fd, STDOUT_FILENO);
+		if (rc < 0) {
+			ctx.backup_cms->log(ctx.backup_cms,
+				ctx.priority|LOG_ERR,
+				"pesignd: could not set up standard output: %m");
+			exit(1);
+		}
 
-	close(STDERR_FILENO);
-	rc = dup2(fd, STDERR_FILENO);
-	if (rc < 0) {
-		ctx.backup_cms->log(ctx.backup_cms, ctx.priority|LOG_ERR,
-			"pesignd: could not set up standard error: %m");
-		exit(1);
+		close(STDERR_FILENO);
+		rc = dup2(fd, STDERR_FILENO);
+		if (rc < 0) {
+			ctx.backup_cms->log(ctx.backup_cms,
+				ctx.priority|LOG_ERR,
+				"pesignd: could not set up standard error: %m");
+			exit(1);
+		}
+		close(fd);
 	}
-	close(fd);
 
 	prctl(PR_SET_NAME, "pesignd", 0, 0, 0);
 
@@ -963,13 +968,15 @@ daemonize(cms_context *cms_ctx, int do_fork)
 
 	cms_set_pw_callback(ctx.backup_cms, get_password_fail);
 	cms_set_pw_data(ctx.backup_cms, NULL);
-	ctx.backup_cms->log = daemon_logger;
+	if (do_fork)
+		ctx.backup_cms->log = daemon_logger;
 
 	rc = handle_events(&ctx);
 
 	status = NSS_Shutdown();
 	if (status != SECSuccess) {
-		fprintf(stderr, "NSS_Shutdown failed: %s\n",
+		ctx.backup_cms->log(ctx.backup_cms, ctx.priority|LOG_ERR,
+			"NSS_Shutdown failed: %s\n",
 			PORT_ErrorToString(PORT_GetError()));
 		exit(1);
 	}
-- 
1.7.12.1