You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sys-auth/pam_dotfile/files/pam_dotfile-0.7-gentoo.patch

158 lines
3.7 KiB

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 <security/pam_modules.h>
-#include <security/_pam_macros.h>
+#include <security/pam_appl.h>
+#ifdef HAVE_SECURITY__PAM_MACROS_H
+# include <security/_pam_macros.h>
+#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 <signal.h>
#include <pwd.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#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 <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
+#include <stdlib.h>
#define PAM_SM_AUTH
#include <security/pam_modules.h>
-#include <security/_pam_macros.h>
+#include <security/pam_appl.h>
+#ifdef HAVE_SECURITY__PAM_MACROS_H
+# include <security/_pam_macros.h>
+#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 <stdio.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <security/pam_appl.h>
-#include <security/pam_misc.h>
+
+#ifdef HAVE_SECURITY_PAM_MISC_H
+# include <security/pam_misc.h>
+#endif
+
+#ifdef HAVE_SECURITY_OPENPAM_H
+# include <security/openpam.h>
+#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;