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 */
#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
(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);