Restore old signal handlers before tty settings. That way SIGTTOU
is at its original value if sudo_term_restore() should fail.
This commit is contained in:
@@ -189,20 +189,7 @@ restart:
|
|||||||
}
|
}
|
||||||
|
|
||||||
restore:
|
restore:
|
||||||
/* Restore old tty settings and signals. */
|
/* Restore old signal handlers. */
|
||||||
if (!ISSET(flags, TGP_ECHO)) {
|
|
||||||
for (;;) {
|
|
||||||
/* Restore old tty settings if possible. */
|
|
||||||
if (sudo_term_restore(input, 1) || errno != EINTR)
|
|
||||||
break;
|
|
||||||
/* Received SIGTTOU, suspend the process. */
|
|
||||||
if (suspend(SIGTTOU, callback) == -1) {
|
|
||||||
if (input != STDIN_FILENO)
|
|
||||||
(void) close(input);
|
|
||||||
debug_return_ptr(NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
(void) sigaction(SIGALRM, &savealrm, NULL);
|
(void) sigaction(SIGALRM, &savealrm, NULL);
|
||||||
(void) sigaction(SIGINT, &saveint, NULL);
|
(void) sigaction(SIGINT, &saveint, NULL);
|
||||||
(void) sigaction(SIGHUP, &savehup, NULL);
|
(void) sigaction(SIGHUP, &savehup, NULL);
|
||||||
@@ -212,6 +199,21 @@ restore:
|
|||||||
(void) sigaction(SIGTTIN, &savettin, NULL);
|
(void) sigaction(SIGTTIN, &savettin, NULL);
|
||||||
(void) sigaction(SIGTTOU, &savettou, NULL);
|
(void) sigaction(SIGTTOU, &savettou, NULL);
|
||||||
(void) sigaction(SIGPIPE, &savepipe, NULL);
|
(void) sigaction(SIGPIPE, &savepipe, NULL);
|
||||||
|
|
||||||
|
/* Restore old tty settings. */
|
||||||
|
if (!ISSET(flags, TGP_ECHO)) {
|
||||||
|
for (;;) {
|
||||||
|
/* Restore old tty settings if possible. */
|
||||||
|
if (sudo_term_restore(input, 1) || errno != EINTR)
|
||||||
|
break;
|
||||||
|
/* Received SIGTTOU, suspend the process. */
|
||||||
|
signo[SIGTTOU] = 0;
|
||||||
|
if (suspend(SIGTTOU, callback) == -1) {
|
||||||
|
pass = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (input != STDIN_FILENO)
|
if (input != STDIN_FILENO)
|
||||||
(void) close(input);
|
(void) close(input);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user