]> granicus.if.org Git - shadow/commitdiff
* src/login.c: If we cannot get the terminal configuration, do not
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Wed, 22 Apr 2009 20:12:06 +0000 (20:12 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Wed, 22 Apr 2009 20:12:06 +0000 (20:12 +0000)
change the terminal configuration. setup_tty() is just a best
effort configuration of the terminal.
* src/login.c: Ignore failures when setting the terminal
configuration.
* src/login.c: Fail if the ERASECHAR or KILLCHAR configurations
are not compatible with a cc_t type.

ChangeLog
src/login.c

index 4f4ae8994054d9f282ddfc2b3de44db5004038b7..6fcbd8fff4dd990f106fd9b5582c209dedf99330 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: If we cannot get the terminal configuration, do not
+       change the terminal configuration. setup_tty() is just a best
+       effort configuration of the terminal.
+       * src/login.c: Ignore failures when setting the terminal
+       configuration.
+       * src/login.c: Fail if the ERASECHAR or KILLCHAR configurations
+       are not compatible with a cc_t type.
+
 2009-04-22  Paul Szabo  <psz@maths.usyd.edu.au>
 
        * src/login.c: utent might be NULL after get_current_utmp().
index 251b526ce0e4e303bdc9069fd279cbbbd28e6932..3791a0cf34cab1455fd9b2760814f3b858f5c6f8 100644 (file)
@@ -165,8 +165,10 @@ static void usage (void)
 static void setup_tty (void)
 {
        TERMIO termio;
+       int erasechar;
+       int killchar;
 
-       GTTY (0, &termio);      /* get terminal characteristics */
+       if (GTTY (0, &termio) == 0) {   /* get terminal characteristics */
 
        /*
         * Add your favorite terminal modes here ...
@@ -185,14 +187,32 @@ static void setup_tty (void)
 #endif
 
        /* leave these values unchanged if not specified in login.defs */
-       termio.c_cc[VERASE] = getdef_num ("ERASECHAR", termio.c_cc[VERASE]);
-       termio.c_cc[VKILL] = getdef_num ("KILLCHAR", termio.c_cc[VKILL]);
+       erasechar = getdef_num ("ERASECHAR", (int) termio.c_cc[VERASE]);
+       killchar = getdef_num ("KILLCHAR", (int) termio.c_cc[VKILL]);
+       termio.c_cc[VERASE] = (cc_t) erasechar;
+       termio.c_cc[VKILL] = (cc_t) killchar;
+       /* Make sure the values were valid.
+        * getdef_num cannot validate this.
+        */
+       if (erasechar != termio.c_cc[VERASE]) {
+               fprintf (stderr,
+                        _("configuration error - cannot parse %s value: '%d'"),
+                        "ERASECHAR", erasechar);
+               exit (1);
+       }
+       if (killchar != termio.c_cc[VKILL]) {
+               fprintf (stderr,
+                        _("configuration error - cannot parse %s value: '%d'"),
+                        "KILLCHAR", killchar);
+               exit (1);
+       }
 
        /*
         * ttymon invocation prefers this, but these settings won't come into
         * effect after the first username login 
         */
-       STTY (0, &termio);
+       (void) STTY (0, &termio);
+       }
 }