summaryrefslogtreecommitdiffstats
path: root/login-utils
diff options
context:
space:
mode:
authorWill Johansson2014-12-10 03:40:31 +0100
committerKarel Zak2014-12-15 10:16:03 +0100
commitfe2c9909cd127b5be0f103b8e633807c6afde000 (patch)
tree6d6b9b36aa0e9884a3785303cbe06a79b6a15c31 /login-utils
parentlslogins: fix -l -g logic (diff)
downloadkernel-qcow2-util-linux-fe2c9909cd127b5be0f103b8e633807c6afde000.tar.gz
kernel-qcow2-util-linux-fe2c9909cd127b5be0f103b8e633807c6afde000.tar.xz
kernel-qcow2-util-linux-fe2c9909cd127b5be0f103b8e633807c6afde000.zip
login-utils: Enable building util-linux against OpenPAM
OpenPAM is compatible with util-linux, with a few changes, namely using OpenPAM's conversation function, openpam_ttyconv. We check for Linux-PAM by querying for security/pam_misc.h, and OpenPAM by querying for security/openpam.h. Signed-off-by: Will Johansson <will.johansson@gmail.com>
Diffstat (limited to 'login-utils')
-rw-r--r--login-utils/Makemodule.am22
-rw-r--r--login-utils/auth.c5
-rw-r--r--login-utils/login.c17
-rw-r--r--login-utils/su-common.c11
4 files changed, 43 insertions, 12 deletions
diff --git a/login-utils/Makemodule.am b/login-utils/Makemodule.am
index 34c5fb424..47291afd3 100644
--- a/login-utils/Makemodule.am
+++ b/login-utils/Makemodule.am
@@ -50,7 +50,10 @@ login_SOURCES = \
login-utils/login.c \
login-utils/logindefs.c \
login-utils/logindefs.h
-login_LDADD = $(LDADD) libcommon.la -lpam -lpam_misc
+login_LDADD = $(LDADD) libcommon.la -lpam
+if HAVE_LINUXPAM
+login_LDADD += -lpam_misc
+endif
if HAVE_AUDIT
login_LDADD += -laudit
endif
@@ -86,11 +89,14 @@ chfn_chsh_ldflags = $(SUID_LDFLAGS) $(AM_LDFLAGS)
chfn_chsh_ldadd = libcommon.la
if CHFN_CHSH_PASSWORD
-chfn_chsh_ldadd += -lpam -lpam_misc
+chfn_chsh_ldadd += -lpam
+if HAVE_LINUXPAM
+chfn_chsh_ldadd += -lpam_misc
+endif
chfn_chsh_sources += \
login-utils/auth.c \
login-utils/auth.h
-endif
+endif # CHFN_CHSH_PASSWORD
if HAVE_USER
chfn_chsh_ldflags += $(LIBUSER_LIBS)
@@ -136,8 +142,11 @@ su_SOURCES = \
login-utils/logindefs.h
su_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
su_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
-su_LDADD = $(LDADD) libcommon.la -lpam -lpam_misc
+su_LDADD = $(LDADD) libcommon.la -lpam
+if HAVE_LINUXPAM
+su_LDADD += -lpam_misc
endif
+endif # BUILD_SU
if BUILD_RUNUSER
@@ -149,8 +158,11 @@ runuser_SOURCES = \
login-utils/su-common.h \
login-utils/logindefs.c \
login-utils/logindefs.h
-runuser_LDADD = $(LDADD) libcommon.la -lpam -lpam_misc
+runuser_LDADD = $(LDADD) libcommon.la -lpam
+if HAVE_LINUXPAM
+runuser_LDADD += -lpam_misc
endif
+endif # BUILD_RUNUSER
if BUILD_NEWGRP
diff --git a/login-utils/auth.c b/login-utils/auth.c
index 18312d4f1..aaf6c536b 100644
--- a/login-utils/auth.c
+++ b/login-utils/auth.c
@@ -7,7 +7,6 @@
* there is no warranty.
*
*/
-
#include "auth.h"
#include "pamfail.h"
@@ -15,7 +14,11 @@ int auth_pam(const char *service_name, uid_t uid, const char *username)
{
if (uid != 0) {
pam_handle_t *pamh = NULL;
+#ifdef HAVE_SECURITY_PAM_MISC_H
struct pam_conv conv = { misc_conv, NULL };
+#elif defined(HAVE_SECURITY_OPENPAM_H)
+ struct pam_conv conv = { openpam_ttyconv, NULL };
+#endif
int retcode;
retcode = pam_start(service_name, username, &conv, &pamh);
diff --git a/login-utils/login.c b/login-utils/login.c
index 554643559..540554e77 100644
--- a/login-utils/login.c
+++ b/login-utils/login.c
@@ -55,7 +55,11 @@
#include <netdb.h>
#include <lastlog.h>
#include <security/pam_appl.h>
-#include <security/pam_misc.h>
+#ifdef HAVE_SECURITY_PAM_MISC_H
+# include <security/pam_misc.h>
+#elif defined(HAVE_SECURITY_OPENPAM_H)
+# include <security/openpam.h>
+#endif
#include <sys/sendfile.h>
#ifdef HAVE_LIBAUDIT
@@ -1124,9 +1128,14 @@ int main(int argc, char **argv)
struct passwd *pwd = NULL, _pwd;
struct login_context cxt = {
- .tty_mode = TTY_MODE, /* tty chmod() */
- .pid = getpid(), /* PID */
- .conv = { misc_conv, NULL } /* PAM conversation function */
+ .tty_mode = TTY_MODE, /* tty chmod() */
+ .pid = getpid(), /* PID */
+#ifdef HAVE_SECURITY_PAM_MISC_H
+ .conv = { misc_conv, NULL } /* Linux-PAM conversation function */
+#elif defined(HAVE_SECURITY_OPENPAM_H)
+ .conv = { openpam_ttyconv, NULL } /* OpenPAM conversation function */
+#endif
+
};
timeout = (unsigned int)getlogindefs_num("LOGIN_TIMEOUT", LOGIN_TIMEOUT);
diff --git a/login-utils/su-common.c b/login-utils/su-common.c
index eb3b844be..57038ce37 100644
--- a/login-utils/su-common.c
+++ b/login-utils/su-common.c
@@ -50,7 +50,11 @@ enum
#include <pwd.h>
#include <grp.h>
#include <security/pam_appl.h>
-#include <security/pam_misc.h>
+#ifdef HAVE_SECURITY_PAM_MISC_H
+# include <security/pam_misc.h>
+#elif defined(HAVE_SECURITY_OPENPAM_H)
+# include <security/openpam.h>
+#endif
#include <signal.h>
#include <sys/wait.h>
#include <syslog.h>
@@ -220,8 +224,11 @@ static int su_pam_conv(int num_msg, const struct pam_message **msg,
&& msg
&& msg[0]->msg_style == PAM_TEXT_INFO)
return PAM_SUCCESS;
-
+#ifdef HAVE_SECURITY_PAM_MISC_H
return misc_conv(num_msg, msg, resp, appdata_ptr);
+#elif defined(HAVE_SECURITY_OPENPAM_H)
+ return openpam_ttyconv(num_msg, msg, resp, appdata_ptr);
+#endif
}
static struct pam_conv conv =