close fd doesn't seem good enough - whereas fcntl does the job.

This commit is contained in:
Roy Marples 2008-02-28 21:26:53 +00:00
parent 15fd2f3acc
commit 391d8de622

View File

@ -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")) {