summaryrefslogtreecommitdiff
blob: 023f86553c394b762ccd7df66ea53b54ed1b718a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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;