changes from 1.2.4 branch
authorKen Raeburn <raeburn@mit.edu>
Thu, 7 Mar 2002 00:28:22 +0000 (00:28 +0000)
committerKen Raeburn <raeburn@mit.edu>
Thu, 7 Mar 2002 00:28:22 +0000 (00:28 +0000)
* loginpaths.h [_PATH_DEFPATH]: Undefine LPATH and RPATH unconditionally before
redefining them.

* login.c (main): If the supplied name is longer than the utmp buffer, don't
bother trying it as a username.
(dolastlog): Don't assume lastlog.ll_time is a time_t.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@14234 dc483132-0cff-0310-8789-dd5450dbe970

src/appl/bsd/ChangeLog
src/appl/bsd/login.c
src/appl/bsd/loginpaths.h

index b99e79047af8367cc57a424a98fb86cd5987c94e..985823c515a1623bc99a7e3aded248fb2b6da1a1 100644 (file)
@@ -1,3 +1,12 @@
+2002-03-05  Ken Raeburn  <raeburn@mit.edu>
+
+       * loginpaths.h [_PATH_DEFPATH]: Undefine LPATH and RPATH
+       unconditionally before redefining them.
+
+       * login.c (main): If the supplied name is longer than the utmp
+       buffer, don't bother trying it as a username.
+       (dolastlog): Don't assume lastlog.ll_time is a time_t.
+
 2002-02-27  Ken Raeburn  <raeburn@mit.edu>
 
        * fieldbits.h: Deleted.
index 6ee629dd33b244b658df60de24d370a69dac8304..dee36247a5141218a06844a89db3c16233a5823d 100644 (file)
@@ -1186,8 +1186,13 @@ int main(argc, argv)
        }
     argc -= optind;
     argv += optind;
-    if (*argv)
-       username = *argv;
+    /* Throw away too-long names, they can't be usernames.  */
+    if (*argv) {
+       if (strlen (*argv) <= UT_NAMESIZE)
+           username = *argv;
+       else
+           fprintf (stderr, "login name '%s' too long\n", *argv);
+    }
 
 #if !defined(POSIX_TERMIOS) && defined(TIOCLSET)
     ioctlval = 0;
@@ -2142,6 +2147,7 @@ void dolastlog(hostname, quiet, tty)
 {
 #if defined(HAVE_LASTLOG_H) || (defined(BSD) && (BSD >= 199103))
     struct lastlog ll;
+    time_t lltime;
     int fd;
 
     if ((fd = open(LASTLOG, O_RDWR, 0)) >= 0) {
@@ -2150,7 +2156,9 @@ void dolastlog(hostname, quiet, tty)
            if ((read(fd, (char *)&ll, sizeof(ll)) == sizeof(ll)) &&
                (ll.ll_time != 0)) {
 
-               printf("Last login: %.*s ", 24-5, (char *)ctime(&ll.ll_time));
+               /* .ll_time may not be a time_t.  */
+               lltime = ll.ll_time;
+               printf("Last login: %.*s ", 24-5, (char *)ctime(&lltime));
 
                if (*ll.ll_host != '\0')
                    printf("from %.*s\n", (int) sizeof(ll.ll_host), 
@@ -2160,7 +2168,8 @@ void dolastlog(hostname, quiet, tty)
            }
            (void)lseek(fd, (off_t)pwd->pw_uid * sizeof(ll), SEEK_SET);
        }
-       (void) time(&ll.ll_time);
+       (void) time(&lltime);
+       ll.ll_time = lltime;
 
        (void) strncpy(ll.ll_line, tty, sizeof(ll.ll_line));
        ll.ll_line[sizeof(ll.ll_line) - 1] = '\0';
index 95c868829a2de64005fcfe87cad20d505d73b9a8..0f2580bb929cad00f50ee539e6765e58f31f0b33 100644 (file)
 #endif
 
 #ifdef _PATH_DEFPATH
-#ifdef LPATH
 #undef LPATH
-#endif
 #define LPATH _PATH_DEFPATH
-#ifdef RPATH
 #undef RPATH
-#endif 
 #define RPATH _PATH_DEFPATH
 #endif