From 82a56e421f9ba4831585be2357bce69fbb391de1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 9 Jun 2010 10:59:51 -0400 Subject: [PATCH] Ignore SIGPIPE for "sudo -S" --- src/tgetpass.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/tgetpass.c b/src/tgetpass.c index 55e45b468..48e8f0f23 100644 --- a/src/tgetpass.c +++ b/src/tgetpass.c @@ -81,7 +81,7 @@ char * tgetpass(const char *prompt, int timeout, 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 *askpass; static char buf[SUDO_PASS_MAX + 1]; @@ -144,6 +144,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)); @@ -167,6 +171,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);