#include #include #include #include void updwtmp(const char *wtmp_file, const struct utmp *ut) { int fd = open(wtmp_file, O_WRONLY|O_APPEND); if (fd<0) return; fcntl (fd, F_SETFD, FD_CLOEXEC); write(fd, ut, sizeof(struct utmp)); close(fd); } void logwtmp(const char *line, const char *name, const char *host) { struct utmp ut; memset(&ut, 0, sizeof(struct utmp)); ut.ut_pid = getpid (); ut.ut_type = name[0] ? USER_PROCESS : DEAD_PROCESS; memccpy (ut.ut_line, line, 0, sizeof ut.ut_line); memccpy (ut.ut_name, name, 0, sizeof ut.ut_name); memccpy (ut.ut_host, host, 0, sizeof ut.ut_host); gettimeofday (&ut.ut_tv, NULL); updwtmp (_PATH_WTMP, &ut); }