summaryrefslogtreecommitdiff
path: root/libpam_misc
diff options
context:
space:
mode:
Diffstat (limited to 'libpam_misc')
-rw-r--r--libpam_misc/misc_conv.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/libpam_misc/misc_conv.c b/libpam_misc/misc_conv.c
index ded256b2..52d647ab 100644
--- a/libpam_misc/misc_conv.c
+++ b/libpam_misc/misc_conv.c
@@ -180,7 +180,18 @@ static int read_string(int echo, const char *prompt, char **retstr)
D(("<failed to set alarm>"));
break;
} else {
- nc = read(STDIN_FILENO, line, INPUTSIZE-1);
+ if (have_term)
+ nc = read(STDIN_FILENO, line, INPUTSIZE-1);
+ else /* we must read one line only */
+ for (nc = 0; nc < INPUTSIZE-1 && (nc?line[nc-1]:0) != '\n';
+ nc++) {
+ int rv;
+ if ((rv=read(STDIN_FILENO, line+nc, 1)) != 1) {
+ if (rv < 0)
+ nc = rv;
+ break;
+ }
+ }
if (have_term) {
(void) tcsetattr(STDIN_FILENO, TCSADRAIN, &term_before);
if (!echo || expired) /* do we need a newline? */