From 391d8de6222c87d423622265d02a224ea9d353ef Mon Sep 17 00:00:00 2001
From: Roy Marples <roy@marples.name>
Date: Thu, 28 Feb 2008 21:26:53 +0000
Subject: close fd doesn't seem good enough - whereas fcntl does the job.

---
 src/rc/runscript.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/rc/runscript.c b/src/rc/runscript.c
index eb1f9904..33f814d3 100644
--- a/src/rc/runscript.c
+++ b/src/rc/runscript.c
@@ -425,6 +425,14 @@ static bool svc_exec (const char *arg1, const char *arg2)
 		/* If the below call fails due to not enough ptys then we don't
 		 * prefix the output, but we still work */
 		openpty (&master_tty, &slave_tty, NULL, &tt, &ws);
+
+		if (master_tty >= 0 &&
+		    (flags = fcntl (master_tty, F_GETFD, 0)) == 0)
+		     fcntl (master_tty, F_SETFD, flags | FD_CLOEXEC);
+
+		if (slave_tty >=0 &&
+		    (flags = fcntl (slave_tty, F_GETFD, 0)) == 0)
+		     fcntl (slave_tty, F_SETFD, flags | FD_CLOEXEC);
 	}
 
 	service_pid = fork();
@@ -432,12 +440,8 @@ static bool svc_exec (const char *arg1, const char *arg2)
 		eerrorx ("%s: fork: %s", service, strerror (errno));
 	if (service_pid == 0) {
 		if (slave_tty >= 0) {
-			close (master_tty);
-
 			dup2 (slave_tty, 1);
 			dup2 (slave_tty, 2);
-			if (slave_tty > 2)
-				close (slave_tty);
 		}
 
 		if (exists (RC_SVCDIR "/runscript.sh")) {
-- 
cgit v1.2.3