diff --git a/configure.ac b/configure.ac index 4730bdf..b8d8747 100644 --- a/configure.ac +++ b/configure.ac @@ -44,16 +44,26 @@ CFLAGS="$CFLAGS -L/lib" # Checks for libraries. AC_CHECK_HEADER([security/pam_modules.h],, [AC_MSG_ERROR([*** Sorry, you have to install the PAM development files ***])]) -LIBS="$LIBS -ldl -lpam -lpam_misc" - -case "$host" in - *-*-linux*) - PAM_MODDIR="/lib/security" - ;; - *) - PAM_MODDIR="/usr/lib" - ;; -esac +AC_CHECK_HEADERS([security/_pam_macros.h security/pam_misc.h security/openpam.h]) + +AC_CHECK_LIB([pam], [pam_start]) +AC_CHECK_LIB([pam_misc], [misc_conv]) + +AC_ARG_WITH([pammoddir], + AC_HELP_STRING([--with-pammoddir], [Install module in specified directory]), + [ + PAM_MODDIR=$withval + ], [ + case "$host" in + *-*-linux*) + PAM_MODDIR="/lib/security" + ;; + *) + PAM_MODDIR="/usr/lib" + ;; + esac + ]) + AC_SUBST(PAM_MODDIR) # Checks for header files. @@ -64,7 +74,7 @@ AC_FUNC_LSTAT AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK AC_FUNC_VPRINTF -AC_CHECK_HEADERS([fcntl.h limits.h syslog.h termios.h]) +AC_CHECK_HEADERS([fcntl.h limits.h syslog.h termios.h sys/types.h]) AC_HEADER_STDC AC_HEADER_SYS_WAIT diff --git a/src/Makefile.am b/src/Makefile.am index 2905b7c..e7e47d2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -22,7 +22,7 @@ moduledir = @PAM_MODDIR@ module_LTLIBRARIES = pam_dotfile.la pam_dotfile_la_SOURCES = pam_dotfile.c md5.c md5util.c md5.h md5util.h log.c log.h common.c common.h -pam_dotfile_la_LDFLAGS = -module -avoid-version +pam_dotfile_la_LDFLAGS = -module -avoid-version -export-symbols-regex '^pam_' pam_dotfile_la_CFLAGS = $(AM_CFLAGS) sbin_PROGRAMS = pam-dotfile-helper diff --git a/src/common.h b/src/common.h index ef34cf3..6a57116 100644 --- a/src/common.h +++ b/src/common.h @@ -21,7 +21,10 @@ ***/ #include -#include +#include +#ifdef HAVE_SECURITY__PAM_MACROS_H +# include +#endif typedef struct context { int opt_debug; diff --git a/src/pam-dotfile-helper.c b/src/pam-dotfile-helper.c index 04c73de..1c09b18 100644 --- a/src/pam-dotfile-helper.c +++ b/src/pam-dotfile-helper.c @@ -23,6 +23,14 @@ #include #include +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifdef HAVE_SYS_TYPES_H +# include +#endif + #include "common.h" #include "log.h" diff --git a/src/pam_dotfile.c b/src/pam_dotfile.c index 405f494..183aafd 100644 --- a/src/pam_dotfile.c +++ b/src/pam_dotfile.c @@ -29,11 +29,19 @@ #include #include #include +#include #define PAM_SM_AUTH #include -#include +#include +#ifdef HAVE_SECURITY__PAM_MACROS_H +# include +#endif + +#ifndef x_strdup +# define x_strdup(s) ( (s) ? strdup(s):NULL ) +#endif #include "md5.h" #include "md5util.h" diff --git a/src/pamtest.c b/src/pamtest.c index 171e601..6583de1 100644 --- a/src/pamtest.c +++ b/src/pamtest.c @@ -19,11 +19,28 @@ #include +#ifdef HAVE_CONFIG_H +# include +#endif + #include -#include + +#ifdef HAVE_SECURITY_PAM_MISC_H +# include +#endif + +#ifdef HAVE_SECURITY_OPENPAM_H +# include +#endif int main(int argc, char*argv[]) { +#ifdef HAVE_LIBPAM_MISC static struct pam_conv pc = { misc_conv, NULL }; +#elif defined(_OPENPAM) + static struct pam_conv pc = { openpam_nullconv, NULL }; +#else + static struct pam_conv pc = { NULL }; +#endif pam_handle_t *ph = NULL; int r, ret; char *username, *procname, *service;