1dnl
2dnl PAM stuff for CUPS.
3dnl
4dnl Copyright 2007-2017 by Apple Inc.
5dnl Copyright 1997-2005 by Easy Software Products, all rights reserved.
6dnl
7dnl Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
8dnl
9
10AC_ARG_ENABLE(pam, [  --disable-pam           disable PAM support])
11AC_ARG_WITH(pam_module, [  --with-pam-module       set the PAM module to use])
12
13PAMDIR=""
14PAMFILE="pam.std"
15PAMLIBS=""
16PAMMOD="pam_unknown.so"
17PAMMODAUTH="pam_unknown.so"
18
19if test x$enable_pam != xno; then
20	SAVELIBS="$LIBS"
21
22	AC_CHECK_LIB(dl,dlopen)
23	AC_CHECK_LIB(pam,pam_start)
24	AC_CHECK_LIB(pam,pam_set_item,AC_DEFINE(HAVE_PAM_SET_ITEM))
25	AC_CHECK_LIB(pam,pam_setcred,AC_DEFINE(HAVE_PAM_SETCRED))
26	AC_CHECK_HEADER(security/pam_appl.h)
27	if test x$ac_cv_header_security_pam_appl_h != xyes; then
28		AC_CHECK_HEADER(pam/pam_appl.h,
29			AC_DEFINE(HAVE_PAM_PAM_APPL_H))
30	fi
31
32	if test x$ac_cv_lib_pam_pam_start != xno; then
33		# Set the necessary libraries for PAM...
34		if test x$ac_cv_lib_dl_dlopen != xno; then
35			PAMLIBS="-lpam -ldl"
36		else
37			PAMLIBS="-lpam"
38		fi
39
40		# Find the PAM configuration directory, if any...
41		for dir in /private/etc/pam.d /etc/pam.d; do
42			if test -d $dir; then
43				PAMDIR=$dir
44				break;
45			fi
46		done
47	fi
48
49	LIBS="$SAVELIBS"
50
51	case "$host_os_name" in
52		darwin*)
53			# Darwin/macOS
54			if test "x$with_pam_module" != x; then
55				PAMFILE="pam.$with_pam_module"
56			elif test -f /usr/lib/pam/pam_opendirectory.so.2; then
57				PAMFILE="pam.opendirectory"
58			else
59				PAMFILE="pam.securityserver"
60			fi
61			;;
62
63		*)
64			# All others; this test might need to be updated
65			# as Linux distributors move things around...
66			if test "x$with_pam_module" != x; then
67				PAMMOD="pam_${with_pam_module}.so"
68			elif test -f /etc/pam.d/common-auth; then
69				PAMFILE="pam.common"
70			else
71				moddir=""
72				for dir in /lib/security /lib64/security /lib/x86_64-linux-gnu/security /var/lib/pam; do
73					if test -d $dir; then
74						moddir=$dir
75						break;
76					fi
77				done
78
79				if test -f $moddir/pam_unix2.so; then
80					PAMMOD="pam_unix2.so"
81				elif test -f $moddir/pam_unix.so; then
82					PAMMOD="pam_unix.so"
83				fi
84			fi
85
86			if test "x$PAMMOD" = xpam_unix.so; then
87				PAMMODAUTH="$PAMMOD shadow nodelay"
88			else
89				PAMMODAUTH="$PAMMOD nodelay"
90			fi
91			;;
92	esac
93fi
94
95AC_SUBST(PAMDIR)
96AC_SUBST(PAMFILE)
97AC_SUBST(PAMLIBS)
98AC_SUBST(PAMMOD)
99AC_SUBST(PAMMODAUTH)
100