diff options
author | Ben Lindstrom <mouring@eviladmin.org> | 2002-12-23 02:01:55 +0000 |
---|---|---|
committer | Ben Lindstrom <mouring@eviladmin.org> | 2002-12-23 02:01:55 +0000 |
commit | f49dbff61d9729962b91b293ec65d85d810dbd26 (patch) | |
tree | c34d7779dffeeb6e429a0a7367794083540f2f1f | |
parent | 44adb8fed9214d209eb8d7d47d5adb053c69f190 (diff) | |
download | openssh-git-f49dbff61d9729962b91b293ec65d85d810dbd26.tar.gz |
- markus@cvs.openbsd.org 2002/11/18 16:43:44
[clientloop.c]
don't overwrite SIG{INT,QUIT,TERM} handler if set to SIG_IGN;
e.g. if ssh is used for backup; report Joerg Schilling; ok millert@
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | clientloop.c | 16 |
2 files changed, 16 insertions, 6 deletions
@@ -6,6 +6,10 @@ Simplify the code and check for errors using fstat(2). Problem reported by Mauricio Sanchez, markus@ ok. + - markus@cvs.openbsd.org 2002/11/18 16:43:44 + [clientloop.c] + don't overwrite SIG{INT,QUIT,TERM} handler if set to SIG_IGN; + e.g. if ssh is used for backup; report Joerg Schilling; ok millert@ 20021205 - (djm) PERL-free fixpaths from stuge-openssh-unix-dev@cdy.org @@ -841,4 +845,4 @@ save auth method before monitor_reset_key_state(); bugzilla bug #284; ok provos@ -$Id: ChangeLog,v 1.2516 2002/12/23 02:00:23 mouring Exp $ +$Id: ChangeLog,v 1.2517 2002/12/23 02:01:55 mouring Exp $ diff --git a/clientloop.c b/clientloop.c index 2c030e71..fcd75d2d 100644 --- a/clientloop.c +++ b/clientloop.c @@ -59,7 +59,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: clientloop.c,v 1.104 2002/08/22 19:38:42 stevesk Exp $"); +RCSID("$OpenBSD: clientloop.c,v 1.105 2002/11/18 16:43:44 markus Exp $"); #include "ssh.h" #include "ssh1.h" @@ -888,10 +888,16 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id) client_init_dispatch(); - /* Set signal handlers to restore non-blocking mode. */ - signal(SIGINT, signal_handler); - signal(SIGQUIT, signal_handler); - signal(SIGTERM, signal_handler); + /* + * Set signal handlers, (e.g. to restore non-blocking mode) + * but don't overwrite SIG_IGN, matches behaviour from rsh(1) + */ + if (signal(SIGINT, SIG_IGN) != SIG_IGN) + signal(SIGINT, signal_handler); + if (signal(SIGQUIT, SIG_IGN) != SIG_IGN) + signal(SIGQUIT, signal_handler); + if (signal(SIGTERM, SIG_IGN) != SIG_IGN) + signal(SIGTERM, signal_handler); if (have_pty) signal(SIGWINCH, window_change_handler); |