diff options
author | Will Johansson | 2014-12-10 03:40:31 +0100 |
---|---|---|
committer | Karel Zak | 2014-12-15 10:16:03 +0100 |
commit | fe2c9909cd127b5be0f103b8e633807c6afde000 (patch) | |
tree | 6d6b9b36aa0e9884a3785303cbe06a79b6a15c31 /login-utils | |
parent | lslogins: fix -l -g logic (diff) | |
download | kernel-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.am | 22 | ||||
-rw-r--r-- | login-utils/auth.c | 5 | ||||
-rw-r--r-- | login-utils/login.c | 17 | ||||
-rw-r--r-- | login-utils/su-common.c | 11 |
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 = |