diff options
Diffstat (limited to 'clientloop.c')
-rw-r--r-- | clientloop.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/clientloop.c b/clientloop.c index d8def78bd..bc50f0bca 100644 --- a/clientloop.c +++ b/clientloop.c | |||
@@ -59,7 +59,7 @@ | |||
59 | */ | 59 | */ |
60 | 60 | ||
61 | #include "includes.h" | 61 | #include "includes.h" |
62 | RCSID("$OpenBSD: clientloop.c,v 1.112 2003/06/28 16:23:06 deraadt Exp $"); | 62 | RCSID("$OpenBSD: clientloop.c,v 1.113 2003/09/19 17:43:35 markus Exp $"); |
63 | 63 | ||
64 | #include "ssh.h" | 64 | #include "ssh.h" |
65 | #include "ssh1.h" | 65 | #include "ssh1.h" |
@@ -139,7 +139,6 @@ leave_non_blocking(void) | |||
139 | if (in_non_blocking_mode) { | 139 | if (in_non_blocking_mode) { |
140 | (void) fcntl(fileno(stdin), F_SETFL, 0); | 140 | (void) fcntl(fileno(stdin), F_SETFL, 0); |
141 | in_non_blocking_mode = 0; | 141 | in_non_blocking_mode = 0; |
142 | fatal_remove_cleanup((void (*) (void *)) leave_non_blocking, NULL); | ||
143 | } | 142 | } |
144 | } | 143 | } |
145 | 144 | ||
@@ -150,7 +149,6 @@ enter_non_blocking(void) | |||
150 | { | 149 | { |
151 | in_non_blocking_mode = 1; | 150 | in_non_blocking_mode = 1; |
152 | (void) fcntl(fileno(stdin), F_SETFL, O_NONBLOCK); | 151 | (void) fcntl(fileno(stdin), F_SETFL, O_NONBLOCK); |
153 | fatal_add_cleanup((void (*) (void *)) leave_non_blocking, NULL); | ||
154 | } | 152 | } |
155 | 153 | ||
156 | /* | 154 | /* |
@@ -844,8 +842,7 @@ client_channel_closed(int id, void *arg) | |||
844 | id, session_ident); | 842 | id, session_ident); |
845 | channel_cancel_cleanup(id); | 843 | channel_cancel_cleanup(id); |
846 | session_closed = 1; | 844 | session_closed = 1; |
847 | if (in_raw_mode()) | 845 | leave_raw_mode(); |
848 | leave_raw_mode(); | ||
849 | } | 846 | } |
850 | 847 | ||
851 | /* | 848 | /* |
@@ -1034,11 +1031,8 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id) | |||
1034 | if (!isatty(fileno(stderr))) | 1031 | if (!isatty(fileno(stderr))) |
1035 | unset_nonblock(fileno(stderr)); | 1032 | unset_nonblock(fileno(stderr)); |
1036 | 1033 | ||
1037 | if (received_signal) { | 1034 | if (received_signal) |
1038 | if (in_non_blocking_mode) /* XXX */ | ||
1039 | leave_non_blocking(); | ||
1040 | fatal("Killed by signal %d.", (int) received_signal); | 1035 | fatal("Killed by signal %d.", (int) received_signal); |
1041 | } | ||
1042 | 1036 | ||
1043 | /* | 1037 | /* |
1044 | * In interactive mode (with pseudo tty) display a message indicating | 1038 | * In interactive mode (with pseudo tty) display a message indicating |
@@ -1387,3 +1381,17 @@ client_init_dispatch(void) | |||
1387 | else | 1381 | else |
1388 | client_init_dispatch_15(); | 1382 | client_init_dispatch_15(); |
1389 | } | 1383 | } |
1384 | |||
1385 | /* client specific fatal cleanup */ | ||
1386 | void | ||
1387 | fatal(const char *fmt,...) | ||
1388 | { | ||
1389 | va_list args; | ||
1390 | |||
1391 | va_start(args, fmt); | ||
1392 | do_log(SYSLOG_LEVEL_FATAL, fmt, args); | ||
1393 | va_end(args); | ||
1394 | leave_raw_mode(); | ||
1395 | leave_non_blocking(); | ||
1396 | _exit(255); | ||
1397 | } | ||