--- libutempter-1.1.6/utempter.c.old 2010-11-04 17:14:53.000000000 +0000 +++ libutempter-1.1.6/utempter.c 2018-07-15 07:52:35.620000000 +0000 @@ -32,15 +32,8 @@ #include <pwd.h> #include <sys/ioctl.h> #include <sys/stat.h> -#include <utmp.h> - -#ifdef __GLIBC__ -# include <pty.h> -#elif defined(__FreeBSD__) -# include <libutil.h> -#else -# error Unsupported platform -#endif /* __GLIBC__ || __FreeBSD__ */ +#include <paths.h> /* _PATH_WTMP */ +#include <utmpx.h> #define DEV_PREFIX "/dev/" #define DEV_PREFIX_LEN (sizeof(DEV_PREFIX)-1) @@ -106,17 +99,12 @@ static int write_uwtmp_record(const char *user, const char *term, const char *host, -#ifdef __GLIBC__ pid_t pid, -#endif int add) { - struct utmp ut; + struct utmpx ut; struct timeval tv; - -#ifdef __GLIBC__ size_t offset; -#endif memset(&ut, 0, sizeof(ut)); @@ -128,8 +116,6 @@ if (host) strncpy(ut.ut_host, host, sizeof(ut.ut_host)); -#ifdef __GLIBC__ - offset = (strlen(term) <= sizeof(ut.ut_id)) ? 0 : strlen(term) - sizeof(ut.ut_id); strncpy(ut.ut_id, term + offset, sizeof(ut.ut_id)); @@ -144,38 +130,17 @@ ut.ut_tv.tv_sec = tv.tv_sec; ut.ut_tv.tv_usec = tv.tv_usec; - setutent(); - if (!pututline(&ut)) + setutxent(); + if (!pututxline(&ut)) { #ifdef UTEMPTER_DEBUG fprintf(stderr, "utempter: pututline: %s\n", strerror(errno)); #endif exit(EXIT_FAILURE); } - endutent(); - - (void) updwtmp(_PATH_WTMP, &ut); - -#elif defined(__FreeBSD__) - - ut.ut_time = tv.tv_sec; - - if (add) - { - login(&ut); - } else - { - if (logout(term) != 1) - { -#ifdef UTEMPTER_DEBUG - fprintf(stderr, "utempter: logout: %s\n", - strerror(errno)); -#endif - exit(EXIT_FAILURE); - } - } + endutxent(); -#endif /* __GLIBC__ || __FreeBSD__ */ + (void) updwtmpx(_PATH_WTMP, &ut); #ifdef UTEMPTER_DEBUG fprintf(stderr, @@ -255,8 +220,6 @@ validate_device(device); return write_uwtmp_record(pw->pw_name, device + DEV_PREFIX_LEN, host, -#ifdef __GLIBC__ pid, -#endif add); }