---------- Forwarded message ----------
From: Karel Zak <[email protected]>
Date: Mon, Sep 26, 2011 at 6:52 PM
Subject: Re: agetty not show username as I input on a serial term
To: xinglp <[email protected]>
Cc: [email protected]


On Fri, Sep 02, 2011 at 02:26:17PM +0800, xinglp wrote:
> When I  login  on a serial term,  I type username, but nothing appear
> on the screen, just as input password.

[...]

> It looks like the "ECHO bit in termios.c_cflag" was not properly set
> before the get_logname() been called.

The code incorrectly checks c_cflag, but the ECHO is c_lflag flag
constant.

See the patch below. Thanks!

   Karel


From b9261127260ff2a8efbdc6e5f9d00ec7f736b445 Mon Sep 17 00:00:00 2001
From: Karel Zak <[email protected]>
Date: Mon, 26 Sep 2011 12:34:10 +0200
Subject: [PATCH] agetty: test ECHO on c_lflag

Reported-by: xinglp <[email protected]>
Addresses: http://bugzilla.redhat.com/show_bug.cgi?id=739522
Signed-off-by: Karel Zak <[email protected]>
---
 term-utils/agetty.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/term-utils/agetty.c b/term-utils/agetty.c
index 8398015..75c2b14 100644
--- a/term-utils/agetty.c
+++ b/term-utils/agetty.c
@@ -1466,7 +1466,7 @@ static char *get_logname(struct options *op,
struct termios *tp, struct chardata
                       case '#':
                               cp->erase = ascval; /* set erase character */
                               if (bp > logname) {
-                                       if ((tp->c_cflag & (ECHO)) == 0)
+                                       if ((tp->c_lflag & ECHO) == 0)
                                               write_all(1,
erase[cp->parity], 3);
                                       bp--;
                               }
@@ -1475,7 +1475,7 @@ static char *get_logname(struct options *op,
struct termios *tp, struct chardata
                       case '@':
                               cp->kill = ascval;              /* set
kill character */
                               while (bp > logname) {
-                                       if ((tp->c_cflag & (ECHO)) == 0)
+                                       if ((tp->c_lflag & ECHO) == 0)
                                               write_all(1,
erase[cp->parity], 3);
                                       bp--;
                               }
@@ -1487,7 +1487,7 @@ static char *get_logname(struct options *op,
struct termios *tp, struct chardata
                                       break;
                               if ((size_t)(bp - logname) >=
sizeof(logname) - 1)
                                       log_err(_("%s: input overrun"), op->tty);
-                               if ((tp->c_cflag & (ECHO)) == 0)
+                               if ((tp->c_lflag & ECHO) == 0)
                                       write_all(1, &c, 1);    /* echo
the character */
                               *bp++ = ascval;                 /* and
store it */
                               break;
--
1.7.6
-- 
http://linuxfromscratch.org/mailman/listinfo/lfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to