From e58df973a99d4cff49fcd8c03fc90bae8dbf7205 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 9 Feb 2009 12:59:39 +0000 Subject: [PATCH] Delete any pwstars we wrote after the user hits return. That way there is no record on screen as to the user's password length. --- tgetpass.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tgetpass.c b/tgetpass.c index 9bc68b7a7..31336439f 100644 --- a/tgetpass.c +++ b/tgetpass.c @@ -214,11 +214,11 @@ sudo_askpass(prompt) extern int term_erase, term_kill; static char * -getln(fd, buf, bufsiz, stars) +getln(fd, buf, bufsiz, feedback) int fd; char *buf; size_t bufsiz; - int stars; + int feedback; { size_t left = bufsiz; ssize_t nr = -1; @@ -234,7 +234,7 @@ getln(fd, buf, bufsiz, stars) nr = read(fd, &c, 1); if (nr != 1 || c == '\n' || c == '\r') break; - if (stars) { + if (feedback) { if (c == term_kill) { while (cp > buf) { (void) write(fd, "\b \b", 3); @@ -255,6 +255,13 @@ getln(fd, buf, bufsiz, stars) *cp++ = c; } *cp = '\0'; + if (feedback) { + /* erase stars */ + while (cp > buf) { + (void) write(fd, "\b \b", 3); + --cp; + } + } return(nr == 1 ? buf : NULL); } -- 2.40.0