summaryrefslogtreecommitdiff
path: root/loginrec.c
diff options
context:
space:
mode:
authordjm <djm>2004-08-15 09:12:52 +0000
committerdjm <djm>2004-08-15 09:12:52 +0000
commit93df109882b5878a7c5e078e56c1d8a07824d05d (patch)
tree48b384f2ada155ca5672efa0b7789b6f8956be3d /loginrec.c
parentf2bbd56d105104abbc40c11eaeadc853a68ea5fd (diff)
downloadopenssh-93df109882b5878a7c5e078e56c1d8a07824d05d.tar.gz
- (djm) [loginrec.c] Check that seek succeeded here too; ok dtucker
Diffstat (limited to 'loginrec.c')
-rw-r--r--loginrec.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/loginrec.c b/loginrec.c
index af32b186..f07f65fc 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -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);