]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
- (djm) Bug #110: bogus error messages in lastlog_get_entry(). Fix based
authorDamien Miller <djm@mindrot.org>
Tue, 7 Jan 2003 05:46:58 +0000 (16:46 +1100)
committerDamien Miller <djm@mindrot.org>
Tue, 7 Jan 2003 05:46:58 +0000 (16:46 +1100)
   on one by peak@argo.troja.mff.cuni.cz

ChangeLog
loginrec.c

index 28c3400321775e293dc96a4451c6e6f1b1cb6383..0ab9043a1dd64752263ad4f1bbcf9ad36f1a7deb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,8 @@
  - (djm) Bug #26: Use local mkstemp() rather than glibc's silly one. Fixes
    Can't pass KRB4 TGT passing. Fix from: jan.iven@cern.ch
  - (djm) Fix Bug #442 for PAM case
+ - (djm) Bug #110: bogus error messages in lastlog_get_entry(). Fix based
+   on one by peak@argo.troja.mff.cuni.cz
 
 20030103
  - (djm) Bug #461: ssh-copy-id fails with no arguments. Patch from 
      save auth method before monitor_reset_key_state(); bugzilla bug #284;
      ok provos@
 
-$Id: ChangeLog,v 1.2544 2003/01/07 05:15:20 djm Exp $
+$Id: ChangeLog,v 1.2545 2003/01/07 05:46:58 djm Exp $
index a0d14dbdf5613baaa04b121700ce197f90d96836..0a5fefad364ce482fa11dd24b88526dac6004d92 100644 (file)
 #include "log.h"
 #include "atomicio.h"
 
-RCSID("$Id: loginrec.c,v 1.45 2003/01/03 03:42:28 djm Exp $");
+RCSID("$Id: loginrec.c,v 1.46 2003/01/07 05:46:58 djm Exp $");
 
 #ifdef HAVE_UTIL_H
 #  include <util.h>
@@ -1522,22 +1522,32 @@ int
 lastlog_get_entry(struct logininfo *li)
 {
        struct lastlog last;
-       int fd;
+       int fd, ret;
 
        if (!lastlog_openseek(li, &fd, O_RDONLY))
-               return 0;
-
-       if (atomicio(read, fd, &last, sizeof(last)) != sizeof(last)) {
-               close(fd);
-               log("lastlog_get_entry: Error reading from %s: %s",
-                   LASTLOG_FILE, strerror(errno));
-               return 0;
-       }
+               return (0);
 
+       ret = atomicio(read, fd, &last, sizeof(last));
        close(fd);
 
-       lastlog_populate_entry(li, &last);
+       switch (ret) {
+       case 0:
+               memset(&last, '\0', sizeof(last));
+               /* FALLTHRU */
+       case sizeof(last):
+               lastlog_populate_entry(li, &last);
+               return (1);
+       case -1:
+               error("%s: Error reading from %s: %s", __func__, 
+                   LASTLOG_FILE, strerror(errno));
+               return (0);
+       default:
+               error("%s: Error reading from %s: Expecting %d, got %d",
+                   __func__, LASTLOG_FILE, sizeof(last), ret);
+               return (0);
+       }
 
-       return 1;
+       /* NOTREACHED */
+       return (0);
 }
 #endif /* USE_LASTLOG */