]> granicus.if.org Git - sudo/commitdiff
Catch SIGTTIN and SIGTTOU too and treat them like SIGTSTP.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 15 Dec 2001 05:40:12 +0000 (05:40 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 15 Dec 2001 05:40:12 +0000 (05:40 +0000)
tgetpass.c

index 03bff7bfb28bd83b45fb67539461284fe2badef6..7353d265715c963e8c4d082f888b26df4c8d4a82 100644 (file)
@@ -139,7 +139,8 @@ tgetpass(prompt, timeout, flags)
     int timeout;
     int flags;
 {
-    sigaction_t sa, saveint, savehup, savequit, saveterm, savetstp;
+    sigaction_t sa, saveint, savehup, savequit, saveterm;
+    sigaction_t savetstp, savettin, savettou;
     static char buf[SUDO_PASS_MAX + 1];
     int input, output, save_errno;
     struct TERM term, oterm;
@@ -164,11 +165,13 @@ restart:
     sigemptyset(&sa.sa_mask);
     sa.sa_flags = 0;           /* don't restart system calls */
     sa.sa_handler = handler;
-    (void)sigaction(SIGINT, &sa, &saveint);
-    (void)sigaction(SIGHUP, &sa, &savehup);
-    (void)sigaction(SIGQUIT, &sa, &savequit);
-    (void)sigaction(SIGTERM, &sa, &saveterm);
-    (void)sigaction(SIGTSTP, &sa, &savetstp);
+    (void) sigaction(SIGINT, &sa, &saveint);
+    (void) sigaction(SIGHUP, &sa, &savehup);
+    (void) sigaction(SIGQUIT, &sa, &savequit);
+    (void) sigaction(SIGTERM, &sa, &saveterm);
+    (void) sigaction(SIGTSTP, &sa, &savetstp);
+    (void) sigaction(SIGTTIN, &sa, &savettin);
+    (void) sigaction(SIGTTOU, &sa, &savettou);
 
     /* Turn echo off/on as specified by flags.  */
     if (term_getattr(input, &oterm) == 0) {
@@ -198,6 +201,8 @@ restart:
     (void) sigaction(SIGQUIT, &savequit, NULL);
     (void) sigaction(SIGTERM, &saveterm, NULL);
     (void) sigaction(SIGTSTP, &savetstp, NULL);
+    (void) sigaction(SIGTTIN, &savettin, NULL);
+    (void) sigaction(SIGTTOU, &savettou, NULL);
     if (input != STDIN_FILENO)
        (void) close(input);
 
@@ -207,9 +212,12 @@ restart:
      */
     if (signo) {
        kill(getpid(), signo); 
-       if (signo == SIGTSTP) {
-           signo = 0;
-           goto restart;
+       switch (signo) {
+           case SIGTSTP:
+           case SIGTTIN:
+           case SIGTTOU:
+               signo = 0;
+               goto restart;
        }
     }