]> granicus.if.org Git - sudo/commitdiff
Make EOF handling while reading the password prompt more like getpass(3).
authorTodd C. Miller <Todd.Miller@sudo.ws>
Tue, 9 Oct 2018 20:20:13 +0000 (14:20 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Tue, 9 Oct 2018 20:20:13 +0000 (14:20 -0600)
We now return the password as long as at least one character has
been read.  Previously, EOF at the password prompt was treated as
if nothing was entered.

doc/sudo.cat
doc/sudo.man.in
doc/sudo.mdoc.in
src/tgetpass.c

index 8fdeb0ae31577d935e5cda4b9413691c31374728..b026fd4c20e29081c36c014da0066781cc73bb79 100644 (file)
@@ -284,7 +284,6 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      -\b-S\bS, -\b--\b-s\bst\btd\bdi\bin\bn
                  Write the prompt to the standard error and read the password
                  from the standard input instead of using the terminal device.
-                 The password must be followed by a newline character.
 
      -\b-s\bs, -\b--\b-s\bsh\bhe\bel\bll\bl
                  Run the shell specified by the SHELL environment variable if
@@ -659,4 +658,4 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
      file distributed with s\bsu\bud\bdo\bo or https://www.sudo.ws/license.html for
      complete details.
 
-Sudo 1.8.26                     October 7, 2018                    Sudo 1.8.26
+Sudo 1.8.26                     October 8, 2018                    Sudo 1.8.26
index 360d02590bc66b11e1a41256c28328ad584bb44f..bd534e6ca623f45a1e8bc1426d5c3088f874c0a1 100644 (file)
@@ -20,7 +20,7 @@
 .\" Agency (DARPA) and Air Force Research Laboratory, Air Force
 .\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
 .\"
-.TH "SUDO" "8" "October 7, 2018" "Sudo @PACKAGE_VERSION@" "System Manager's Manual"
+.TH "SUDO" "8" "October 8, 2018" "Sudo @PACKAGE_VERSION@" "System Manager's Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -553,7 +553,6 @@ the specified
 \fB\-S\fR, \fB\--stdin\fR
 Write the prompt to the standard error and read the password from the
 standard input instead of using the terminal device.
-The password must be followed by a newline character.
 .TP 12n
 \fB\-s\fR, \fB\--shell\fR
 Run the shell specified by the
index 541e669eaa34b4fbc2bbc7b8059ab18d0fbbf820..7fdc4ce3ec10f014b22f162cdc1ba503c90be6b8 100644 (file)
@@ -19,7 +19,7 @@
 .\" Agency (DARPA) and Air Force Research Laboratory, Air Force
 .\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
 .\"
-.Dd October 7, 2018
+.Dd October 8, 2018
 .Dt SUDO @mansectsu@
 .Os Sudo @PACKAGE_VERSION@
 .Sh NAME
@@ -499,7 +499,6 @@ the specified
 .It Fl S , -stdin
 Write the prompt to the standard error and read the password from the
 standard input instead of using the terminal device.
-The password must be followed by a newline character.
 .It Fl s , -shell
 Run the shell specified by the
 .Ev SHELL
index 655e69f7505ad3dc045d292696a2b9ead286bdab..989f91eaaf78e73abf2326f967c9341955366ac8 100644 (file)
@@ -396,21 +396,26 @@ getln(int fd, char *buf, size_t bufsiz, int feedback,
        }
     }
 
-    if (nr != 1) {
-       if (nr == 0) {
-           *errval = TGP_ERRVAL_NOPASSWORD;
-       } else if (nr == -1) {
-           if (errno == EINTR) {
-               if (signo[SIGALRM] == 1)
-                   *errval = TGP_ERRVAL_TIMEOUT;
-           } else {
-               *errval = TGP_ERRVAL_READERROR;
-           }
+    switch (nr) {
+    case -1:
+       /* Read error */
+       if (errno == EINTR) {
+           if (signo[SIGALRM] == 1)
+               *errval = TGP_ERRVAL_TIMEOUT;
+       } else {
+           *errval = TGP_ERRVAL_READERROR;
        }
        debug_return_str(NULL);
+    case 0:
+       /* EOF is only an error if no bytes were read. */
+       if (left == bufsiz - 1) {
+           *errval = TGP_ERRVAL_NOPASSWORD;
+           debug_return_str(NULL);
+       }
+       /* FALLTHROUGH */
+    default:
+       debug_return_str_masked(buf);
     }
-
-    debug_return_str_masked(buf);
 }
 
 static void