diff options
Diffstat (limited to 'user/libutempter/port-to-utmpx.patch')
-rw-r--r-- | user/libutempter/port-to-utmpx.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/user/libutempter/port-to-utmpx.patch b/user/libutempter/port-to-utmpx.patch new file mode 100644 index 000000000..d715c42ab --- /dev/null +++ b/user/libutempter/port-to-utmpx.patch @@ -0,0 +1,100 @@ +--- 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); + } |