diff --git a/ChangeLog b/ChangeLog index 4f1b4eb4..cfca878e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-04-27 Nicolas François + + * lib/prototypes.h: Replace HAVE_UTMPX_H by USE_UTMPX. + * lib/prototypes.h, libmisc/log.c: Added splint annotations. + * libmisc/log.c: Added SYSLOG warning when lseek fails (should not + happen). + 2009-04-27 Nicolas François * libmisc/mail.c, libmisc/copydir.c: Added missing include of diff --git a/lib/prototypes.h b/lib/prototypes.h index 32f18bd2..1aeabd3b 100644 --- a/lib/prototypes.h +++ b/lib/prototypes.h @@ -43,7 +43,7 @@ #define _PROTOTYPES_H #include -#if HAVE_UTMPX_H +#if USE_UTMPX #include #else #include @@ -217,10 +217,11 @@ extern bool is_on_list (char *const *list, const char *member); extern /*@only@*/char **comma_to_list (const char *); /* log.c */ -extern void dolastlog (struct lastlog *ll, - const struct passwd *pw, - const char *line, - const char *host); +extern void dolastlog ( + struct lastlog *ll, + const struct passwd *pw, + /*@unique@*/const char *line, + /*@unique@*/const char *host); /* login_nopam.c */ extern int login_access (const char *user, const char *from); @@ -362,13 +363,13 @@ extern struct utmp *prepare_utmp (const char *name, const char *host, /*@null@*/const struct utmp *ut); extern int setutmp (struct utmp *ut); -#ifdef HAVE_UTMPX_H +#ifdef USE_UTMPX extern struct utmpx *prepare_utmpx (const char *name, const char *line, const char *host, /*@null@*/const struct utmp *ut); extern int setutmpx (struct utmpx *utx); -#endif +#endif /* USE_UTMPX */ /* valid.c */ extern bool valid (const char *, const struct passwd *); diff --git a/libmisc/log.c b/libmisc/log.c index bc7eb88f..eb84859e 100644 --- a/libmisc/log.c +++ b/libmisc/log.c @@ -49,9 +49,11 @@ * UID is extracted from the global (struct passwd) entry and the * TTY information is gotten from the (struct utmp). */ -void -dolastlog (struct lastlog *ll, const struct passwd *pw, const char *line, - const char *host) +void dolastlog ( + struct lastlog *ll, + const struct passwd *pw, + /*@unique@*/const char *line, + /*@unique@*/const char *host) { int fd; off_t offset; @@ -75,7 +77,10 @@ dolastlog (struct lastlog *ll, const struct passwd *pw, const char *line, offset = (off_t) pw->pw_uid * sizeof newlog; if (lseek (fd, offset, SEEK_SET) != offset) { - close (fd); + SYSLOG ((LOG_WARN, + "Can't read last lastlog entry for UID %lu in %s. Entry not updated.", + (unsigned long) pw->pw_uid, LASTLOG_FILE)); + (void) close (fd); return; }