From 3f6f1cd15cf496ef0e575867a35cfb6e9a79cf99 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 15 Sep 2015 10:30:36 -0600 Subject: [PATCH] When a terminal device is closed, SIGHUP is sent to the controlling process associated with that terminal. It is not sent to the entire process group so sudo needs to relay SIGHUP to the command when it is not being run in a new pty. Bug #719 --- src/exec.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/exec.c b/src/exec.c index c9a3712d7..aeedf8dc2 100644 --- a/src/exec.c +++ b/src/exec.c @@ -407,6 +407,8 @@ sudo_execute(struct command_details *details, struct command_status *cstat) #endif if (sudo_sigaction(SIGTERM, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGTERM); + if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); if (sudo_sigaction(SIGALRM, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGALRM); if (sudo_sigaction(SIGPIPE, &sa, NULL) != 0) @@ -424,8 +426,7 @@ sudo_execute(struct command_details *details, struct command_status *cstat) * When not running the command in a pty, we do not want to * forward signals generated by the kernel that the child will * already have received either by virtue of being in the - * controlling tty's process group (SIGINT, SIGQUIT) or because - * the session is terminating (SIGHUP). + * controlling tty's process group (SIGINT, SIGQUIT). */ #ifdef SA_SIGINFO if (!log_io) { @@ -433,8 +434,6 @@ sudo_execute(struct command_details *details, struct command_status *cstat) sa.sa_sigaction = handler_user_only; } #endif - if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); if (sudo_sigaction(SIGINT, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGINT); if (sudo_sigaction(SIGQUIT, &sa, NULL) != 0) -- 2.40.0