]> granicus.if.org Git - shadow/commitdiff
* NEWS, src/login.c: Do not trust the current utmp entry's ut_line
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Fri, 17 Apr 2009 20:40:26 +0000 (20:40 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Fri, 17 Apr 2009 20:40:26 +0000 (20:40 +0000)
to set PAM_TTY.

ChangeLog
NEWS
src/login.c

index 46f51fbcf1a81a4d8b22481de8cf79f32a4ba374..9bd3f942220baa9bd85d1a5056c8c24f13490b82 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,17 +1,22 @@
+2009-04-17  Paul Szabo  <psz@maths.usyd.edu.au>
+
+       * NEWS, src/login.c: Do not trust the current utmp entry's ut_line
+       to set PAM_TTY.
+
 2009-04-15  Nicolas François  <nicolas.francois@centraliens.net>
 
        * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
        * po/*.po, man/po/*.po: Updated PO files.
        * configure.in: Updated version number.
 
-2009-04-15  Peter Vrabec <pvrabec@redhat.com>
+2009-04-15  Peter Vrabec  <pvrabec@redhat.com>
 
        * NEWS, src/userdel.c: Fixed SE Linux support. semanage should be
        called at the end.
        * src/useradd.c: Always call selinux_update_mapping() (i.e.
        semanage), not only when -Z is used.
 
-2009-04-15  Peter Vrabec <pvrabec@redhat.com>
+2009-04-15  Peter Vrabec  <pvrabec@redhat.com>
 
        * NEWS, srclib/getlong.c: Fix parsing of octal numbers.
 
diff --git a/NEWS b/NEWS
index e200ca832a959bcaa6fe4973fb368e8d8e4c2374..39aa7f0c58a90ce06fc13aa3edad82f2198699f8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,11 @@
 $Id$
 
+shadow-4.1.3.1 -> shadow-4.1.3.2                                       UNRELEASED
+
+- login
+  * Do not trust the current utmp entry's ut_line to set PAM_TTY. This could
+    lead to DOS attacks.
+
 shadow-4.1.3 -> shadow-4.1.3.1                                         2009-04-15
 
 *** security:
index 2ba452aa23fcb561b41bfdbc0df62a27f460a128..afa1876cc798aec77ba046abb0493c800e43072f 100644 (file)
@@ -416,6 +416,7 @@ static RETSIGTYPE alarm_handler (unused int sig)
  */
 int main (int argc, char **argv)
 {
+       const char *tmptty;
        char tty[BUFSIZ];
 
 #ifdef RLOGIN
@@ -479,7 +480,13 @@ int main (int argc, char **argv)
         * entry (will not overwrite remote hostname).  --marekm
         */
        checkutmp (!amroot);
-       STRFCPY (tty, utent.ut_line);
+
+       tmptty = ttyname (0);
+       if (NULL == tmptty) {
+               tmptty = "UNKNOWN";
+       }
+       STRFCPY (tty, tmptty);
+
 #ifndef USE_PAM
        is_console = console (tty);
 #endif
@@ -1093,7 +1100,7 @@ int main (int argc, char **argv)
 
 #ifndef USE_PAM                        /* pam_lastlog handles this */
        if (getdef_bool ("LASTLOG_ENAB")) {     /* give last login and log this one */
-               dolastlog (&lastlog, &pwent, utent.ut_line, hostname);
+               dolastlog (&lastlog, &pwent, tty, hostname);
        }
 #endif
 
@@ -1147,7 +1154,7 @@ int main (int argc, char **argv)
        if (getppid() == 1) {
                setsid();
                if (ioctl(0, TIOCSCTTY, 1) != 0) {
-                       fprintf (stderr,_("TIOCSCTTY failed on %s"),tty);
+                       fprintf (stderr, _("TIOCSCTTY failed on %s"), tty);
                }
        }