From: Todd C. Miller Date: Wed, 9 Jun 2010 15:00:12 +0000 (-0400) Subject: Ignore SIGPIPE for "sudo -S" X-Git-Tag: SUDO_1_7_3~94 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8b39a3c6faf5a76ec7bbd7d0c78456e3f1b8559c;p=sudo Ignore SIGPIPE for "sudo -S" --HG-- branch : 1.7 --- diff --git a/tgetpass.c b/tgetpass.c index 7e2f2009a..ed7e43561 100644 --- a/tgetpass.c +++ b/tgetpass.c @@ -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);