Masking a password masked at the 3215 console should be possible :

1) In drivers/s390/char/con3215.c, if the driver detects that ECHO is
off for the underlying TTY, then issue X'0E' instead of X'0A'  for the
read CCW (in raw3215_mk_read_req() ?)
2) When prompted for a password, press ENTER (or whatever your 3270 SEND
AID key may be) first, enter your password and then press ENTER again..
If you type the password directly without first sending ATTN, the X'0E'
will be issued too late and the input area won't be masked (that's
because, contrary to a real 3215, on VM, you don't have to ATTN before
you type something) :

Scenario 1 (good) :
User invokes the SEND AID key on an empty INPUT area -> CP issues read
modified to console and posts I/O with ATTN in SCSW to virtual machine
Driver issues CCW with X'0E'. VM turns the input area into a masked
input area and displays 'VM READ..' in the status area
User types something (masked)
User types SEND AID key. CP issues READ MODIFIED again and completes
virtual I/O with CE+DE
Driver translates & pushes data up the TTY stack

Scenario 2 (bad) :
User invokes the SEND key with the Password in the Input area -
Unmasked.. -> CP Issues Read Modified, keep the entered line in a buffer
and posts I/O with ATTN in SCSW to virtual machine
Driver issues CCW with X'0E'.. VM Completes the I/O immediately with
CE+DE since data is already there
Driver translates & pushes data up the TTY stack

Another advantage here is that it should prevent the password from being
present in the retrieve ring.

So something like this may work :

--- drivers/s390/char/con3215.c.old     2007-10-03 01:07:07.000000000 +0200
+++ drivers/s390/char/con3215.c 2007-10-03 01:08:22.000000000 +0200
@@ -165,7 +165,10 @@
       }

       ccw = req->ccws;
-       ccw->cmd_code = 0x0A; /* read inquiry */
+       if(raw->tty->termios->l_flags & ECHO)
+               ccw->cmd_code = 0x0A; /* read inquiry */
+       else
+               ccw->cmd_code = 0x0E; /* read inhibit */
       ccw->flags = 0x20;    /* ignore incorrect length */
       ccw->count = 160;
       ccw->cda = (__u32) __pa(raw->inbuf);

(Note : untested.. Didn't even try to compile it.. Furthermore, I'm note
familiar enough with linux drivers to know if raw->tty &
raw->tty->termios are always populated)..

--Ivan

----------------------------------------------------------------------
For LINUX-390 subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: INFO LINUX-390 or visit
http://www.marist.edu/htbin/wlvindex?LINUX-390

Reply via email to