Ignore SIGPIPE for "sudo -S"
This commit is contained in:
@@ -81,7 +81,7 @@ char *
|
|||||||
tgetpass(const char *prompt, int timeout, int flags)
|
tgetpass(const char *prompt, int timeout, int flags)
|
||||||
{
|
{
|
||||||
sigaction_t sa, savealrm, saveint, savehup, savequit, saveterm;
|
sigaction_t sa, savealrm, saveint, savehup, savequit, saveterm;
|
||||||
sigaction_t savetstp, savettin, savettou;
|
sigaction_t savetstp, savettin, savettou, savepipe;
|
||||||
char *pass;
|
char *pass;
|
||||||
static char *askpass;
|
static char *askpass;
|
||||||
static char buf[SUDO_PASS_MAX + 1];
|
static char buf[SUDO_PASS_MAX + 1];
|
||||||
@@ -144,6 +144,10 @@ restart:
|
|||||||
(void) sigaction(SIGTTIN, &sa, &savettin);
|
(void) sigaction(SIGTTIN, &sa, &savettin);
|
||||||
(void) sigaction(SIGTTOU, &sa, &savettou);
|
(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)
|
if (prompt)
|
||||||
(void) write(output, prompt, strlen(prompt));
|
(void) write(output, prompt, strlen(prompt));
|
||||||
|
|
||||||
@@ -167,6 +171,7 @@ restart:
|
|||||||
(void) sigaction(SIGTSTP, &savetstp, NULL);
|
(void) sigaction(SIGTSTP, &savetstp, NULL);
|
||||||
(void) sigaction(SIGTTIN, &savettin, NULL);
|
(void) sigaction(SIGTTIN, &savettin, NULL);
|
||||||
(void) sigaction(SIGTTOU, &savettou, NULL);
|
(void) sigaction(SIGTTOU, &savettou, NULL);
|
||||||
|
(void) sigaction(SIGTTOU, &savepipe, NULL);
|
||||||
if (input != STDIN_FILENO)
|
if (input != STDIN_FILENO)
|
||||||
(void) close(input);
|
(void) close(input);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user