diff options
author | Philip Guenther <guenther@cvs.openbsd.org> | 2015-07-16 02:46:50 +0000 |
---|---|---|
committer | Philip Guenther <guenther@cvs.openbsd.org> | 2015-07-16 02:46:50 +0000 |
commit | 5947bfb9f3526d85e406b328e8aa422d79b599c7 (patch) | |
tree | bcd9aa9409601834f2fd2fb2e0bd598e6d9b6fc3 /lib | |
parent | d5e922159c175e038c3503b8b4210d6a9648c9fc (diff) |
After reading a password with terminal echo off, restore the terminal to
its original state instead of blindly turning echo on.
problem reported on the openssl-dev list by William Freeman
ok miod@ beck@
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libssl/src/crypto/ui/ui_openssl.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/libssl/src/crypto/ui/ui_openssl.c b/lib/libssl/src/crypto/ui/ui_openssl.c index a46534e3e56..b3d2971a026 100644 --- a/lib/libssl/src/crypto/ui/ui_openssl.c +++ b/lib/libssl/src/crypto/ui/ui_openssl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ui_openssl.c,v 1.23 2014/07/13 00:10:47 deraadt Exp $ */ +/* $OpenBSD: ui_openssl.c,v 1.24 2015/07/16 02:46:49 guenther Exp $ */ /* Written by Richard Levitte (richard@levitte.org) and others * for the OpenSSL project 2001. */ @@ -134,7 +134,7 @@ /* Define globals. They are protected by a lock */ static struct sigaction savsig[NX509_SIG]; -static struct termios tty_orig, tty_new; +static struct termios tty_orig; static FILE *tty_in, *tty_out; static int is_a_tty; @@ -325,7 +325,8 @@ open_console(UI *ui) static int noecho_console(UI *ui) { - memcpy(&(tty_new), &(tty_orig), sizeof(tty_orig)); + struct termios tty_new = tty_orig; + tty_new.c_lflag &= ~ECHO; if (is_a_tty && (tcsetattr(fileno(tty_in), TCSANOW, &tty_new) == -1)) return 0; @@ -335,9 +336,7 @@ noecho_console(UI *ui) static int echo_console(UI *ui) { - memcpy(&(tty_new), &(tty_orig), sizeof(tty_orig)); - tty_new.c_lflag |= ECHO; - if (is_a_tty && (tcsetattr(fileno(tty_in), TCSANOW, &tty_new) == -1)) + if (is_a_tty && (tcsetattr(fileno(tty_in), TCSANOW, &tty_orig) == -1)) return 0; return 1; } |