RFR: JDK-8194750,Console.readPassword does not save/restore tty settings

Xueming Shen xueming.shen at oracle.com
Mon Apr 16 19:18:41 UTC 2018


On 4/13/18, 8:04 PM, Martin Buchholz wrote:
> This is trickier than I expected, since you have to manage 
> saving/restoring around each call to readPassword AND have an exit 
> hook to restore in case the user never gets around to responding to 
> the prompt.
>
> I see in the old code echo returns a boolean that you would think 
> could be used to restore.  You want to save/restore around each 
> readPassword AND around the entire java program.  It still seems right 
> to restore after every readpassword, using the returned value from 
> echo (which the suggested fix ignores!).  But also, the very first 
> time readPassword is called, you create an exit hook to restore the 
> value known at that time.  So you need echo0 as well ... or do you ... 
> maybe you just need to keep track of a single state variable for you 
> to do first-time setup.
>
Updated to use a local flag for each "echo-off" setting for 
readPassword(), so the
echo will not be turned on after readpw if its initial status is off 
before readpw.

Still keep the global one & exit-hook for use scenario that someone 
ctrl-D to exit
or the vm gets -kill signal during passwd reading.

webrev has been updated accordingly (with the updates based on other 
comments).

http://cr.openjdk.java.net/~sherman/8194750/webrev

Thanks!
Sherman


> +    return tio.c_lflag&  ECHO;
> Pedantically, functions returning jboolean should return only JNI_TRUE 
> and JNI_FALSE.  I would do:
> return (tio.c_lflag&  ECHO) != 0;
> although there's the even more pedantic
>
> return ((tio.c_lflag & ECHO) != 0) ? JNI_TRUE : JNI_FALSE;
>
> typo: chosole
>
>



More information about the core-libs-dev mailing list