diff options
Diffstat (limited to 'libpam_misc/misc_conv.c')
-rw-r--r-- | libpam_misc/misc_conv.c | 13 |
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? */ |