From 88a7773be13d94e97c9fef45cdc85dd01e1448c0 Mon Sep 17 00:00:00 2001 From: millert Date: Tue, 18 Oct 2016 12:41:22 +0000 Subject: Install a signal handler for tty-generated signals and wait for the ssh child to suspend before suspending sftp. This lets ssh restore the terminal mode as needed when it is suspended at the password prompt. OK dtucker@ --- usr.bin/ssh/sftp.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'usr.bin/ssh/sftp.c') diff --git a/usr.bin/ssh/sftp.c b/usr.bin/ssh/sftp.c index c34e8367e4d..063cd2d8c98 100644 --- a/usr.bin/ssh/sftp.c +++ b/usr.bin/ssh/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.176 2016/09/12 01:22:38 deraadt Exp $ */ +/* $OpenBSD: sftp.c,v 1.177 2016/10/18 12:41:22 millert Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -208,6 +208,18 @@ killchild(int signo) _exit(1); } +/* ARGSUSED */ +static void +suspchild(int signo) +{ + if (sshpid > 1) { + kill(sshpid, signo); + while (waitpid(sshpid, NULL, WUNTRACED) == -1 && errno == EINTR) + continue; + } + kill(getpid(), SIGSTOP); +} + /* ARGSUSED */ static void cmd_interrupt(int signo) @@ -2171,6 +2183,9 @@ connect_to_server(char *path, char **args, int *in, int *out) signal(SIGTERM, killchild); signal(SIGINT, killchild); signal(SIGHUP, killchild); + signal(SIGTSTP, suspchild); + signal(SIGTTIN, suspchild); + signal(SIGTTOU, suspchild); close(c_in); close(c_out); } -- cgit v1.2.3-59-g8ed1b