Ignore SIGPIPE for "sudo -S"

This commit is contained in:
Todd C. Miller
2010-06-09 10:59:51 -04:00
parent afb3f9dbf5
commit 82a56e421f

View File

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