Tim Waugh eb20fc
--- coreutils-5.93/src/su.c.setsid	2005-11-14 10:35:48.000000000 +0000
Tim Waugh eb20fc
+++ coreutils-5.93/src/su.c	2005-11-14 10:53:03.000000000 +0000
Tim Waugh eb20fc
@@ -497,6 +497,8 @@
Tim Waugh eb20fc
   if (child == 0) {  /* child shell */
Tim Waugh eb20fc
   change_identity (pw);
Tim Waugh eb20fc
   pam_end(pamh, 0);
Tim Waugh eb20fc
+  if (command)
Tim Waugh eb20fc
+    setsid ();
Tim Waugh eb20fc
 #endif
Tim Waugh eb20fc
 
Tim Waugh eb20fc
   if (simulate_login)
Tim Waugh eb20fc
@@ -551,13 +553,27 @@
Tim Waugh eb20fc
     sigemptyset(&action.sa_mask);
Tim Waugh eb20fc
     action.sa_flags = 0;
Tim Waugh eb20fc
     sigemptyset(&ourset);
Tim Waugh eb20fc
-    if (sigaddset(&ourset, SIGTERM)
Tim Waugh eb20fc
-        || sigaddset(&ourset, SIGALRM)
Tim Waugh eb20fc
-        || sigaction(SIGTERM, &action, NULL)
Tim Waugh eb20fc
-        || sigprocmask(SIG_UNBLOCK, &ourset, NULL)) {
Tim Waugh eb20fc
+    if (command)
Tim Waugh eb20fc
+      {
Tim Waugh eb20fc
+	if (sigaddset(&ourset, SIGINT) || sigaddset(&ourset, SIGQUIT))
Tim Waugh eb20fc
+	  {
Tim Waugh eb20fc
+	    fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
Tim Waugh eb20fc
+	    caught = 1;
Tim Waugh eb20fc
+	  }
Tim Waugh eb20fc
+      }
Tim Waugh eb20fc
+    if (!caught && (sigaddset(&ourset, SIGTERM)
Tim Waugh eb20fc
+		    || sigaddset(&ourset, SIGALRM)
Tim Waugh eb20fc
+		    || sigaction(SIGTERM, &action, NULL)
Tim Waugh eb20fc
+		    || sigprocmask(SIG_UNBLOCK, &ourset, NULL))) {
Tim Waugh eb20fc
       fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
Tim Waugh eb20fc
       caught = 1;
Tim Waugh eb20fc
     }
Tim Waugh eb20fc
+    if (!caught && command && (sigaction(SIGINT, &action, NULL)
Tim Waugh eb20fc
+			       || sigaction(SIGQUIT, &action, NULL)))
Tim Waugh eb20fc
+      {
Tim Waugh eb20fc
+	fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
Tim Waugh eb20fc
+	caught = 1;
Tim Waugh eb20fc
+      }
Tim Waugh eb20fc
   }
Tim Waugh eb20fc
   if (!caught) {
Tim Waugh eb20fc
     do {