diff options
Diffstat (limited to 'sshpty.c')
-rw-r--r-- | sshpty.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -20,6 +20,7 @@ RCSID("$OpenBSD: sshpty.c,v 1.1 2001/03/04 01:46:30 djm Exp $"); | |||
20 | 20 | ||
21 | #include "sshpty.h" | 21 | #include "sshpty.h" |
22 | #include "log.h" | 22 | #include "log.h" |
23 | #include "misc.h" | ||
23 | 24 | ||
24 | /* Pty allocated with _getpty gets broken if we do I_PUSH:es to it. */ | 25 | /* Pty allocated with _getpty gets broken if we do I_PUSH:es to it. */ |
25 | #if defined(HAVE__GETPTY) || defined(HAVE_OPENPTY) | 26 | #if defined(HAVE__GETPTY) || defined(HAVE_OPENPTY) |
@@ -93,16 +94,19 @@ pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, int namebuflen) | |||
93 | */ | 94 | */ |
94 | int ptm; | 95 | int ptm; |
95 | char *pts; | 96 | char *pts; |
97 | mysig_t old_signal; | ||
96 | 98 | ||
97 | ptm = open("/dev/ptmx", O_RDWR | O_NOCTTY); | 99 | ptm = open("/dev/ptmx", O_RDWR | O_NOCTTY); |
98 | if (ptm < 0) { | 100 | if (ptm < 0) { |
99 | error("/dev/ptmx: %.100s", strerror(errno)); | 101 | error("/dev/ptmx: %.100s", strerror(errno)); |
100 | return 0; | 102 | return 0; |
101 | } | 103 | } |
104 | old_signal = mysignal(SIGCHLD, SIG_DFL); | ||
102 | if (grantpt(ptm) < 0) { | 105 | if (grantpt(ptm) < 0) { |
103 | error("grantpt: %.100s", strerror(errno)); | 106 | error("grantpt: %.100s", strerror(errno)); |
104 | return 0; | 107 | return 0; |
105 | } | 108 | } |
109 | mysignal(SIGCHLD, old_signal); | ||
106 | if (unlockpt(ptm) < 0) { | 110 | if (unlockpt(ptm) < 0) { |
107 | error("unlockpt: %.100s", strerror(errno)); | 111 | error("unlockpt: %.100s", strerror(errno)); |
108 | return 0; | 112 | return 0; |