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);