]> granicus.if.org Git - shadow/commitdiff
Kill the child process group, rather than just the immediate child;
authorColin Watson <cjwatson@ubuntu.com>
Sun, 28 Jul 2013 12:38:12 +0000 (14:38 +0200)
committerbubulle <bubulle@debian.org>
Sun, 28 Jul 2013 12:38:12 +0000 (14:38 +0200)
this is needed now that su no longer starts a controlling terminal
when not running an interactive shell (closes: Debian#713979)

ChangeLog
src/su.c

index 2ad5dffcd23080e3c8822dc6b896bd24feb33b01..1b90ceea93db3039e6ce537164e94059d506f19d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,11 @@
        * configure.in: Prepare for next point release 4.2.
        * if using the static char* for pw_dir, strdup it so
          pw_free() can be used. (Closes: Debian#691459) 
+       * Kill the child process group, rather than just the 
+         immediate child; this is needed now that su no
+         longer starts a controlling terminal when not running an
+         interactive shell (closes: Debian#713979)
+         Thansk to Colin Watson for the patch.
 
 2012-05-25  Nicolas François  <nicolas.francois@centraliens.net>
 
index 0e9d807fe331d7b5cababb2ee4440f5b2ffbee8a..98ea6de3b8f9fbbe36d53837e8c5a0e34c90e261 100644 (file)
--- a/src/su.c
+++ b/src/su.c
@@ -181,7 +181,7 @@ static bool iswheel (const char *username)
 static RETSIGTYPE kill_child (int unused(s))
 {
        if (0 != pid_child) {
-               (void) kill (pid_child, SIGKILL);
+               (void) kill (-pid_child, SIGKILL);
                (void) fputs (_(" ...killed.\n"), stderr);
        } else {
                (void) fputs (_(" ...waiting for child to terminate.\n"),
@@ -370,7 +370,7 @@ static void prepare_pam_close_session (void)
                (void) fputs ("\n", stderr);
                (void) fputs (_("Session terminated, terminating shell..."),
                              stderr);
-               (void) kill (pid_child, caught);
+               (void) kill (-pid_child, caught);
        }
 
        ret = pam_close_session (pamh, 0);