From 8b39a3c6faf5a76ec7bbd7d0c78456e3f1b8559c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 9 Jun 2010 11:00:12 -0400 Subject: [PATCH] Ignore SIGPIPE for "sudo -S" --HG-- branch : 1.7 --- tgetpass.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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); -- 2.40.0