]> andersk Git - openssh.git/commitdiff
- (djm) [loginrec.c] Check that seek succeeded here too; ok dtucker
authordjm <djm>
Sun, 15 Aug 2004 09:12:52 +0000 (09:12 +0000)
committerdjm <djm>
Sun, 15 Aug 2004 09:12:52 +0000 (09:12 +0000)
ChangeLog
loginrec.c

index 3ac682f4d0ffafc3af5a70a4eed4d6545651d995..e4249478d16a1d5fe762d91194f0b070c673fc79 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
    openbsd-compat/bsd-closefrom.c openbsd-compat/bsd-misc.c 
    openbsd-compat/bsd-misc.h openbsd-compat/openbsd-compat.h] Use smarter 
    closefrom() replacement from sudo; ok dtucker@
+ - (djm) [loginrec.c] Check that seek succeeded here too; ok dtucker
 
 20040814
  - (dtucker) [auth-krb5.c gss-serv-krb5.c openbsd-compat/xmmap.c]
index ef525fb526b29be5aa152a7a6d8b52e503294510..34c97f9ff57153157bbf29569cc431b2a0c35f7f 100644 (file)
@@ -818,8 +818,8 @@ utmp_write_direct(struct logininfo *li, struct utmp *ut)
        endttyent();
 
        if((struct ttyent *)0 == ty) {
-               logit("utmp_write_entry: tty not found");
-               return(1);
+               logit("%s: tty not found", __func__);
+               return (0);
        }
 #else /* FIXME */
 
@@ -828,7 +828,18 @@ utmp_write_direct(struct logininfo *li, struct utmp *ut)
 #endif /* HAVE_GETTTYENT */
 
        if (tty > 0 && (fd = open(UTMP_FILE, O_RDWR|O_CREAT, 0644)) >= 0) {
-               (void)lseek(fd, (off_t)(tty * sizeof(struct utmp)), SEEK_SET);
+               off_t pos, ret;
+
+               pos = (off_t)tty * sizeof(struct utmp);
+               if ((ret = lseek(fd, pos, SEEK_SET)) == -1) {
+                       logit("%s: llseek: %s", strerror(errno));
+                       return (0);
+               }
+               if (ret != pos) {
+                       logit("%s: Couldn't seek to tty %s slot in %s", tty,
+                           UTMP_FILE);
+                       return (0);
+               }
                /*
                 * Prevent luser from zero'ing out ut_host.
                 * If the new ut_line is empty but the old one is not
@@ -841,9 +852,17 @@ utmp_write_direct(struct logininfo *li, struct utmp *ut)
                        (void)memcpy(ut->ut_host, old_ut.ut_host, sizeof(ut->ut_host));
                }
 
-               (void)lseek(fd, (off_t)(tty * sizeof(struct utmp)), SEEK_SET);
+               if ((ret = lseek(fd, pos, SEEK_SET)) == -1) {
+                       logit("%s: llseek: %s", __func__, strerror(errno));
+                       return (0);
+               }
+               if (ret != pos) {
+                       logit("%s: Couldn't seek to tty %s slot in %s",
+                           __func__, tty, UTMP_FILE);
+                       return (0);
+               }
                if (atomicio(vwrite, fd, ut, sizeof(*ut)) != sizeof(*ut))
-                       logit("utmp_write_direct: error writing %s: %s",
+                       logit("%s: error writing %s: %s", __func__,
                            UTMP_FILE, strerror(errno));
 
                (void)close(fd);
This page took 0.039573 seconds and 5 git commands to generate.