=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/sftp.c,v retrieving revision 1.183 retrieving revision 1.184 diff -u -r1.183 -r1.184 --- src/usr.bin/ssh/sftp.c 2018/04/10 00:10:49 1.183 +++ src/usr.bin/ssh/sftp.c 2018/04/13 05:04:12 1.184 @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.183 2018/04/10 00:10:49 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.184 2018/04/13 05:04:12 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -231,7 +231,24 @@ errno = olderrno; } +/*ARGSUSED*/ static void +sigchld_handler(int sig) +{ + int save_errno = errno; + pid_t pid; + const char msg[] = "\rConnection closed. \n"; + + /* Report if ssh transport process dies. */ + while ((pid = waitpid(sshpid, NULL, WNOHANG)) == -1 && errno == EINTR) + continue; + if (pid == sshpid) + (void)write(STDERR_FILENO, msg, sizeof(msg) - 1); + + errno = save_errno; +} + +static void help(void) { printf("Available commands:\n" @@ -2192,6 +2209,7 @@ if (err != 0) break; } + signal(SIGCHLD, SIG_DFL); free(remote_path); free(startdir); free(conn); @@ -2248,6 +2266,7 @@ signal(SIGTSTP, suspchild); signal(SIGTTIN, suspchild); signal(SIGTTOU, suspchild); + signal(SIGCHLD, sigchld_handler); close(c_in); close(c_out); }