summaryrefslogtreecommitdiff
path: root/src/rc/runscript.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rc/runscript.c')
-rw-r--r--src/rc/runscript.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/rc/runscript.c b/src/rc/runscript.c
index eb1f990..33f814d 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")) {