+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/log.c: Check return values. If lseek() failed, avoid
+ reading or writing at an unspecified location. Log to syslog in
+ case of failure.
+ * libmisc/log.c: Use the right casts.
+
2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
* libmisc/find_new_ids.c, libmisc/find_new_gid.c,
* for this UID. Negative UID's will create problems, but ...
*/
- offset = (unsigned long) pw->pw_uid * sizeof newlog;
+ offset = (off_t) pw->pw_uid * sizeof newlog;
if (lseek (fd, offset, SEEK_SET) != offset) {
close (fd);
* the way we read the old one in.
*/
- if (read (fd, (char *) &newlog, sizeof newlog) != (ssize_t) sizeof newlog) {
+ if (read (fd, (void *) &newlog, sizeof newlog) != (ssize_t) sizeof newlog) {
memzero (&newlog, sizeof newlog);
}
if (NULL != ll) {
#if HAVE_LL_HOST
strncpy (newlog.ll_host, host, sizeof newlog.ll_host);
#endif
- if (lseek (fd, offset, SEEK_SET) == offset) {
- write (fd, (char *) &newlog, sizeof newlog);
+ if ( (lseek (fd, offset, SEEK_SET) != offset)
+ || (write (fd, (const void *) &newlog, sizeof newlog) != (ssize_t) sizeof newlog)
+ || (close (fd) != 0)) {
+ SYSLOG ((LOG_WARN,
+ "Can't write lastlog entry for UID %lu in %s.",
+ (unsigned long) pw->pw_uid, LASTLOG_FILE));
+ (void) close (fd);
}
- close (fd);
}