summaryrefslogtreecommitdiff
path: root/clientloop.c
diff options
context:
space:
mode:
Diffstat (limited to 'clientloop.c')
-rw-r--r--clientloop.c26
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"
62RCSID("$OpenBSD: clientloop.c,v 1.112 2003/06/28 16:23:06 deraadt Exp $"); 62RCSID("$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 */
1386void
1387fatal(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}