diff options
author | Darren Tucker <dtucker@zip.com.au> | 2006-06-25 08:25:25 +1000 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2006-06-25 08:25:25 +1000 |
commit | 144e8d60cd3dcfdbf23c6df06617adf28b1235b8 (patch) | |
tree | d5f2d0a42de6557c30053d5d44108837266ca2f2 /serverloop.c | |
parent | 03890e44cd4814c2a9909febe5130fef722c7f4b (diff) |
- (dtucker) [channels.c serverloop.c] Apply the bug #1102 workaround to ptys
only, otherwise sshd can hang exiting non-interactive sessions.
Diffstat (limited to 'serverloop.c')
-rw-r--r-- | serverloop.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/serverloop.c b/serverloop.c index e370f63a3..18f1a10bd 100644 --- a/serverloop.c +++ b/serverloop.c | |||
@@ -394,7 +394,8 @@ process_input(fd_set *readset) | |||
394 | #ifndef PTY_ZEROREAD | 394 | #ifndef PTY_ZEROREAD |
395 | } else if (len <= 0) { | 395 | } else if (len <= 0) { |
396 | #else | 396 | #else |
397 | } else if (len < 0 || (len == 0 && errno != 0)) { | 397 | } else if ((!isatty(fdout) && len <= 0) || |
398 | (isatty(fdout) && (len < 0 || (len == 0 && errno != 0)))) { | ||
398 | #endif | 399 | #endif |
399 | fdout_eof = 1; | 400 | fdout_eof = 1; |
400 | } else { | 401 | } else { |
@@ -411,7 +412,8 @@ process_input(fd_set *readset) | |||
411 | #ifndef PTY_ZEROREAD | 412 | #ifndef PTY_ZEROREAD |
412 | } else if (len <= 0) { | 413 | } else if (len <= 0) { |
413 | #else | 414 | #else |
414 | } else if (len < 0 || (len == 0 && errno != 0)) { | 415 | } else if ((!isatty(fderr) && len <= 0) || |
416 | (isatty(fderr) && (len < 0 || (len == 0 && errno != 0)))) { | ||
415 | #endif | 417 | #endif |
416 | fderr_eof = 1; | 418 | fderr_eof = 1; |
417 | } else { | 419 | } else { |