diff options
author | djm <djm> | 2004-08-15 09:12:52 +0000 |
---|---|---|
committer | djm <djm> | 2004-08-15 09:12:52 +0000 |
commit | 93df109882b5878a7c5e078e56c1d8a07824d05d (patch) | |
tree | 48b384f2ada155ca5672efa0b7789b6f8956be3d /loginrec.c | |
parent | f2bbd56d105104abbc40c11eaeadc853a68ea5fd (diff) | |
download | openssh-93df109882b5878a7c5e078e56c1d8a07824d05d.tar.gz |
- (djm) [loginrec.c] Check that seek succeeded here too; ok dtucker
Diffstat (limited to 'loginrec.c')
-rw-r--r-- | loginrec.c | 31 |
1 files changed, 25 insertions, 6 deletions
@@ -158,7 +158,7 @@ #include "log.h" #include "atomicio.h" -RCSID("$Id: loginrec.c,v 1.57 2004/08/14 14:09:11 dtucker Exp $"); +RCSID("$Id: loginrec.c,v 1.58 2004/08/15 09:12:52 djm Exp $"); #ifdef HAVE_UTIL_H # include <util.h> @@ -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); |