]> granicus.if.org Git - sudo/commitdiff
Ignore SIGPIPE for "sudo -S"
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 9 Jun 2010 15:00:12 +0000 (11:00 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 9 Jun 2010 15:00:12 +0000 (11:00 -0400)
--HG--
branch : 1.7

tgetpass.c

index 7e2f2009a0075103c57fd7f8d4e6d208a446c3d6..ed7e43561c2d3f75af7b83f741121578d25ff527 100644 (file)
@@ -82,7 +82,7 @@ tgetpass(prompt, timeout, flags)
     int flags;
 {
     sigaction_t sa, savealrm, saveint, savehup, savequit, saveterm;
-    sigaction_t savetstp, savettin, savettou;
+    sigaction_t savetstp, savettin, savettou, savepipe;
     char *pass;
     static char buf[SUDO_PASS_MAX + 1];
     int i, input, output, save_errno, neednl = 0, need_restart;
@@ -134,6 +134,10 @@ restart:
     (void) sigaction(SIGTTIN, &sa, &savettin);
     (void) sigaction(SIGTTOU, &sa, &savettou);
 
+    /* Ignore SIGPIPE in case stdin is a pipe and TGP_STDIN is set */
+    sa.sa_handler = SIG_IGN;
+    (void) sigaction(SIGPIPE, &sa, &savepipe);
+
     if (prompt)
        (void) write(output, prompt, strlen(prompt));
 
@@ -157,6 +161,7 @@ restart:
     (void) sigaction(SIGTSTP, &savetstp, NULL);
     (void) sigaction(SIGTTIN, &savettin, NULL);
     (void) sigaction(SIGTTOU, &savettou, NULL);
+    (void) sigaction(SIGTTOU, &savepipe, NULL);
     if (input != STDIN_FILENO)
        (void) close(input);