--- Linux-PAM-1.3.1/libpam/pam_modutil_getlogin.c.old 2017-02-10 04:10:15.000000000 -0600
+++ Linux-PAM-1.3.1/libpam/pam_modutil_getlogin.c 2018-06-15 19:45:00.100036938 -0500
@@ -10,7 +10,7 @@
#include <stdlib.h>
#include <unistd.h>
-#include <utmp.h>
+#include <utmpx.h>
#define _PAMMODUTIL_GETLOGIN "_pammodutil_getlogin"
@@ -22,7 +22,7 @@
const void *void_curr_tty;
const char *curr_tty;
char *curr_user;
- struct utmp *ut, line;
+ struct utmpx *ut, line;
status = pam_get_data(pamh, _PAMMODUTIL_GETLOGIN, &logname);
if (status == PAM_SUCCESS) {
@@ -48,10 +48,10 @@
}
logname = NULL;
- setutent();
+ setutxent();
strncpy(line.ut_line, curr_tty, sizeof(line.ut_line));
- if ((ut = getutline(&line)) == NULL) {
+ if ((ut = getutxline(&line)) == NULL) {
goto clean_up_and_go_home;
}
@@ -74,7 +74,7 @@
clean_up_and_go_home:
- endutent();
+ endutxent();
return logname;
}
--- Linux-PAM-1.3.1/modules/pam_issue/pam_issue.c.old 2017-02-10 04:10:15.000000000 -0600
+++ Linux-PAM-1.3.1/modules/pam_issue/pam_issue.c 2018-06-15 19:53:16.459545509 -0500
@@ -25,7 +25,13 @@
#include <string.h>
#include <unistd.h>
#include <sys/utsname.h>
-#include <utmp.h>
+#if defined(HAVE_UTMPX_H)
+# include <utmpx.h>
+#elif defined(HAVE_UTMP_H)
+# include <utmp.h>
+#else
+# error You must have either utmpx.h or utmp.h.
+#endif
#include <time.h>
#include <syslog.h>
@@ -246,6 +252,15 @@
case 'U':
{
unsigned int users = 0;
+#if defined(HAVE_UTMPX_H)
+ struct utmpx *utx;
+ setutxent();
+ while ((utx = getutxent())) {
+ if (utx->ut_type == USER_PROCESS)
+ ++users;
+ }
+ endutxent();
+#elif defined(HAVE_UTMP_H)
struct utmp *ut;
setutent();
while ((ut = getutent())) {
@@ -253,6 +268,7 @@
++users;
}
endutent();
+#endif
if (c == 'U')
snprintf (buf, sizeof buf, "%u %s", users,
(users == 1) ? "user" : "users");
--- Linux-PAM-1.3.1/modules/pam_lastlog/pam_lastlog.c.old 2018-06-15 19:48:06.379852509 -0500
+++ Linux-PAM-1.3.1/modules/pam_lastlog/pam_lastlog.c 2018-06-15 19:57:18.849305527 -0500
@@ -14,7 +14,10 @@
#include <fcntl.h>
#include <time.h>
#include <errno.h>
+#ifdef HAVE_UTMPX_H
+# include <utmpx.h>
+#endif
#ifdef HAVE_UTMP_H
# include <utmp.h>
#else
# include <lastlog.h>
@@ -448,8 +451,13 @@
{
int retval;
int fd;
+#ifdef HAVE_UTMPX_H
+ struct utmpx ut;
+ struct utmpx utuser;
+#else
struct utmp ut;
struct utmp utuser;
+#endif
int failed = 0;
char the_time[256];
char *date = NULL;
--- Linux-PAM-1.3.1/modules/pam_limits/pam_limits.c.old 2017-02-10 04:10:15.000000000 -0600
+++ Linux-PAM-1.3.1/modules/pam_limits/pam_limits.c 2018-06-15 20:25:21.737639355 -0500
@@ -33,7 +33,11 @@
#include <sys/resource.h>
#include <limits.h>
#include <glob.h>
-#include <utmp.h>
+#ifdef HAVE_UTMPX_H
+# include <utmpx.h>
+#else
+# include <utmp.h>
+#endif
#ifndef UT_USER /* some systems have ut_name instead of ut_user */
#define UT_USER ut_user
#endif
@@ -227,7 +231,11 @@
check_logins (pam_handle_t *pamh, const char *name, int limit, int ctrl,
struct pam_limit_s *pl)
{
+#ifdef HAVE_UTMPX_H
+ struct utmpx *ut;
+#else
struct utmp *ut;
+#endif
int count;
if (ctrl & PAM_DEBUG_ARG) {
@@ -242,12 +250,16 @@
return LOGIN_ERR;
}
+#ifdef HAVE_UTMPX_H
+ setutxent();
+#else
setutent();
+#endif
/* Because there is no definition about when an application
actually adds a utmp entry, some applications bizarrely do the
- utmp call before the have PAM authenticate them to the system:
- you're logged it, sort of...? Anyway, you can use the
+ utmp call before they have PAM authenticate them to the system:
+ you're logged in, sort of...? Anyway, you can use the
"utmp_early" module argument in your PAM config file to make
allowances for this sort of problem. (There should be a PAM
standard for this, since if a module wants to actually map a
@@ -260,7 +272,11 @@
count = 1;
}
+#ifdef HAVE_UTMPX_H
+ while((ut = getutxent())) {
+#else
while((ut = getutent())) {
+#endif
#ifdef USER_PROCESS
if (ut->ut_type != USER_PROCESS) {
continue;
@@ -296,7 +312,11 @@
break;
}
}
+#ifdef HAVE_UTMPX_H
+ endutxent();
+#else
endutent();
+#endif
if (count > limit) {
if (name) {
pam_syslog(pamh, LOG_NOTICE,
--- Linux-PAM-1.3.1/modules/pam_timestamp/pam_timestamp.c.old 2017-02-10 04:10:15.000000000 -0600
+++ Linux-PAM-1.3.1/modules/pam_timestamp/pam_timestamp.c 2018-06-15 20:34:52.997073770 -0500
@@ -56,7 +56,11 @@
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
-#include <utmp.h>
+#ifdef HAVE_UTMPX_H
+# include <utmpx.h>
+#else
+# include <utmp.h>
+#endif
#include <syslog.h>
#include <paths.h>
#include "hmacsha1.h"
@@ -197,12 +201,22 @@
static int
check_login_time(const char *ruser, time_t timestamp)
{
+#ifdef HAVE_UTMPX_H
+ struct utmpx utbuf, *ut;
+#else
struct utmp utbuf, *ut;
+#endif
time_t oldest_login = 0;
+#ifdef HAVE_UTMPX_H
+ setutxent();
+#else
setutent();
+#endif
while(
-#ifdef HAVE_GETUTENT_R
+#ifdef HAVE_UTMPX_H
+ (ut = getutxent()) != NULL
+#elif defined(HAVE_GETUTENT_R)
!getutent_r(&utbuf, &ut)
#else
(ut = getutent()) != NULL
@@ -218,7 +232,11 @@
oldest_login = ut->ut_tv.tv_sec;
}
}
+#ifdef HAVE_UTMPX_H
+ endutxent();
+#else
endutent();
+#endif
if(oldest_login == 0 || timestamp < oldest_login) {
return PAM_AUTH_ERR;
}
--- Linux-PAM-1.3.1/modules/pam_unix/support.c.old 2017-02-10 04:10:15.000000000 -0600
+++ Linux-PAM-1.3.1/modules/pam_unix/support.c 2018-06-15 20:38:23.306865549 -0500
@@ -13,7 +13,6 @@
#include <pwd.h>
#include <shadow.h>
#include <limits.h>
-#include <utmp.h>
#include <errno.h>
#include <signal.h>
#include <ctype.h>