summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sftp.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/sftp.c b/sftp.c
index 1b5c92498..af6e3a69a 100644
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp.c,v 1.176 2016/09/12 01:22:38 deraadt Exp $ */ 1/* $OpenBSD: sftp.c,v 1.177 2016/10/18 12:41:22 millert Exp $ */
2/* 2/*
3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> 3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
4 * 4 *
@@ -232,6 +232,18 @@ killchild(int signo)
232 232
233/* ARGSUSED */ 233/* ARGSUSED */
234static void 234static void
235suspchild(int signo)
236{
237 if (sshpid > 1) {
238 kill(sshpid, signo);
239 while (waitpid(sshpid, NULL, WUNTRACED) == -1 && errno == EINTR)
240 continue;
241 }
242 kill(getpid(), SIGSTOP);
243}
244
245/* ARGSUSED */
246static void
235cmd_interrupt(int signo) 247cmd_interrupt(int signo)
236{ 248{
237 const char msg[] = "\rInterrupt \n"; 249 const char msg[] = "\rInterrupt \n";
@@ -2213,6 +2225,9 @@ connect_to_server(char *path, char **args, int *in, int *out)
2213 signal(SIGTERM, killchild); 2225 signal(SIGTERM, killchild);
2214 signal(SIGINT, killchild); 2226 signal(SIGINT, killchild);
2215 signal(SIGHUP, killchild); 2227 signal(SIGHUP, killchild);
2228 signal(SIGTSTP, suspchild);
2229 signal(SIGTTIN, suspchild);
2230 signal(SIGTTOU, suspchild);
2216 close(c_in); 2231 close(c_in);
2217 close(c_out); 2232 close(c_out);
2218} 2233}