diff options
Diffstat (limited to 'sshd.c')
-rw-r--r-- | sshd.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -42,7 +42,7 @@ | |||
42 | */ | 42 | */ |
43 | 43 | ||
44 | #include "includes.h" | 44 | #include "includes.h" |
45 | RCSID("$OpenBSD: sshd.c,v 1.255 2002/06/30 21:59:45 deraadt Exp $"); | 45 | RCSID("$OpenBSD: sshd.c,v 1.256 2002/07/19 15:43:33 markus Exp $"); |
46 | 46 | ||
47 | #include <openssl/dh.h> | 47 | #include <openssl/dh.h> |
48 | #include <openssl/bn.h> | 48 | #include <openssl/bn.h> |
@@ -303,9 +303,6 @@ grace_alarm_handler(int sig) | |||
303 | { | 303 | { |
304 | /* XXX no idea how fix this signal handler */ | 304 | /* XXX no idea how fix this signal handler */ |
305 | 305 | ||
306 | /* Close the connection. */ | ||
307 | packet_close(); | ||
308 | |||
309 | /* Log error and exit. */ | 306 | /* Log error and exit. */ |
310 | fatal("Timeout before authentication for %s.", get_remote_ipaddr()); | 307 | fatal("Timeout before authentication for %s.", get_remote_ipaddr()); |
311 | } | 308 | } |
@@ -589,6 +586,8 @@ privsep_preauth(void) | |||
589 | if (pid == -1) { | 586 | if (pid == -1) { |
590 | fatal("fork of unprivileged child failed"); | 587 | fatal("fork of unprivileged child failed"); |
591 | } else if (pid != 0) { | 588 | } else if (pid != 0) { |
589 | fatal_remove_cleanup((void (*) (void *)) packet_close, NULL); | ||
590 | |||
592 | debug2("Network child is on pid %ld", (long)pid); | 591 | debug2("Network child is on pid %ld", (long)pid); |
593 | 592 | ||
594 | close(pmonitor->m_recvfd); | 593 | close(pmonitor->m_recvfd); |
@@ -602,6 +601,10 @@ privsep_preauth(void) | |||
602 | while (waitpid(pid, &status, 0) < 0) | 601 | while (waitpid(pid, &status, 0) < 0) |
603 | if (errno != EINTR) | 602 | if (errno != EINTR) |
604 | break; | 603 | break; |
604 | |||
605 | /* Reinstall, since the child has finished */ | ||
606 | fatal_add_cleanup((void (*) (void *)) packet_close, NULL); | ||
607 | |||
605 | return (authctxt); | 608 | return (authctxt); |
606 | } else { | 609 | } else { |
607 | /* child */ | 610 | /* child */ |
@@ -649,6 +652,8 @@ privsep_postauth(Authctxt *authctxt) | |||
649 | if (pmonitor->m_pid == -1) | 652 | if (pmonitor->m_pid == -1) |
650 | fatal("fork of unprivileged child failed"); | 653 | fatal("fork of unprivileged child failed"); |
651 | else if (pmonitor->m_pid != 0) { | 654 | else if (pmonitor->m_pid != 0) { |
655 | fatal_remove_cleanup((void (*) (void *)) packet_close, NULL); | ||
656 | |||
652 | debug2("User child is on pid %ld", (long)pmonitor->m_pid); | 657 | debug2("User child is on pid %ld", (long)pmonitor->m_pid); |
653 | close(pmonitor->m_recvfd); | 658 | close(pmonitor->m_recvfd); |
654 | monitor_child_postauth(pmonitor); | 659 | monitor_child_postauth(pmonitor); |