perror("pterm: pipe");
exit(1);
}
+ cloexec(pipefd[0]);
+ cloexec(pipefd[1]);
pid = fork();
if (pid < 0) {
perror("pterm: fork");
}
if (pid == 0) {
- int i;
/*
* We are the child.
*/
dup2(slavefd, 0);
dup2(slavefd, 1);
dup2(slavefd, 2);
+ close(slavefd);
setsid();
#ifdef TIOCSCTTY
- ioctl(slavefd, TIOCSCTTY, 1);
+ ioctl(0, TIOCSCTTY, 1);
#endif
pgrp = getpid();
- tcsetpgrp(slavefd, pgrp);
+ tcsetpgrp(0, pgrp);
setpgid(pgrp, pgrp);
close(open(pty->name, O_WRONLY, 0));
setpgid(pgrp, pgrp);
- /* Close everything _else_, for tidiness. */
- for (i = 3; i < 1024; i++)
- close(i);
{
char *term_env_var = dupprintf("TERM=%s", cfg->termtype);
putenv(term_env_var);
add234(ptys_by_pid, pty);
}
- if (pty_signal_pipe[0] < 0 && pipe(pty_signal_pipe) < 0) {
- perror("pipe");
- exit(1);
+ if (pty_signal_pipe[0] < 0) {
+ if (pipe(pty_signal_pipe) < 0) {
+ perror("pipe");
+ exit(1);
+ }
+ cloexec(pty_signal_pipe[0]);
+ cloexec(pty_signal_pipe[1]);
}
pty_uxsel_setup(pty);