In openpam_ttyconv(3), wait to print the prompt until after we're ready

to accept input.  Otherwise, there is a small but non-zero chance that
input provided after the prompt appears is discarded when we flush the
tty buffer.

Submitted by:	Brooks Davis <brooks@freebsd.org>


git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@948 185d5e19-27fe-0310-9dcf-9bff6b9f3609
This commit is contained in:
Dag-Erling Smørgrav 2020-11-19 05:41:15 +00:00
parent e0e3406a78
commit a967883b9c
3 changed files with 12 additions and 6 deletions

View File

@ -18,6 +18,7 @@ ideas:
Ankita Pal <pal.ankita.ankita@gmail.com> Ankita Pal <pal.ankita.ankita@gmail.com>
Baptiste Daroussin <bapt@freebsd.org> Baptiste Daroussin <bapt@freebsd.org>
Brian Fundakowski Feldman <green@freebsd.org> Brian Fundakowski Feldman <green@freebsd.org>
Brooks Davis <brooks@freebsd.org>
Christos Zoulas <christos@netbsd.org> Christos Zoulas <christos@netbsd.org>
Daniel Richard G. <skunk@iskunk.org> Daniel Richard G. <skunk@iskunk.org>
Darren J. Moffat <darren.moffat@sun.com> Darren J. Moffat <darren.moffat@sun.com>

View File

@ -1,3 +1,8 @@
OpenPAM ??? 2020-07-??
- BUGFIX: Fix race condition in openpam_ttyconv(3) when used with
expect scripts.
============================================================================
OpenPAM Tabebuia 2019-02-24 OpenPAM Tabebuia 2019-02-24
- BUGFIX: Fix off-by-one bug in pam_getenv(3) which was introduced in - BUGFIX: Fix off-by-one bug in pam_getenv(3) which was introduced in

View File

@ -94,12 +94,6 @@ prompt_tty(int ifd, int ofd, const char *message, char *response, int echo)
int pos, ret; int pos, ret;
char ch; char ch;
/* write prompt */
if (write(ofd, message, strlen(message)) < 0) {
openpam_log(PAM_LOG_ERROR, "write(): %m");
return (-1);
}
/* turn echo off if requested */ /* turn echo off if requested */
slflag = 0; /* prevent bogus uninitialized variable warning */ slflag = 0; /* prevent bogus uninitialized variable warning */
if (!echo) { if (!echo) {
@ -115,6 +109,12 @@ prompt_tty(int ifd, int ofd, const char *message, char *response, int echo)
} }
} }
/* write prompt */
if (write(ofd, message, strlen(message)) < 0) {
openpam_log(PAM_LOG_ERROR, "write(): %m");
return (-1);
}
/* install signal handlers */ /* install signal handlers */
caught_signal = 0; caught_signal = 0;
action.sa_handler = &catch_signal; action.sa_handler = &catch_signal;