7 def find_library(library_names
, lookup_paths
):
8 for directory
in lookup_paths
:
9 for filename
in library_names
:
10 so_path
= os
.path
.join(directory
, filename
)
11 if os
.path
.exists(so_path
):
16 if conf
.CHECK_PAM_WRAPPER():
17 conf
.DEFINE('USING_SYSTEM_PAM_WRAPPER', 1)
18 libpam_wrapper_so_path
= 'libpam_wrapper.so'
20 pam_set_items_so_path
= find_library(['pam_set_items.so'],
21 ['/usr/lib64/pam_wrapper', '/usr/lib/pam_wrapper'])
22 pam_matrix_so_path
= find_library(['pam_matrix.so'],
23 ['/usr/lib64/pam_wrapper', '/usr/lib/pam_wrapper'])
25 conf
.CHECK_HEADERS('gnu/lib-names.h')
27 if conf
.CONFIG_SET("HAVE___THREAD"):
28 conf
.DEFINE("HAVE_GCC_THREAD_LOCAL_STORAGE", 1)
30 # check HAVE_FUNCTION_ATTRIBUTE_FORMAT
32 void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
38 'HAVE_FUNCTION_ATTRIBUTE_FORMAT',
41 msg
='Checking for printf format validation support')
43 conf
.CHECK_HEADERS('security/pam_appl.h')
44 conf
.CHECK_HEADERS('security/pam_modules.h')
45 conf
.CHECK_HEADERS('security/pam_ext.h')
47 conf
.CHECK_FUNCS_IN('pam_vsyslog',
50 headers
='security/pam_ext.h')
52 conf
.CHECK_FUNCS_IN('pam_syslog',
55 headers
='security/pam_ext.h')
57 conf
.CHECK_FUNCS_IN('pam_start_confdir',
60 headers
='security/pam_appl.h')
62 conf
.CHECK_C_PROTOTYPE('pam_vprompt',
63 'int pam_vprompt(const pam_handle_t *_pamh, int _style, char **_resp, const char *_fmt, va_list _ap)',
64 define
='HAVE_PAM_VPROMPT_CONST', headers
='stdio.h sys/types.h security/pam_appl.h security/pam_modules.h')
66 conf
.CHECK_C_PROTOTYPE('pam_prompt',
67 'int pam_prompt(const pam_handle_t *_pamh, int _style, char **_resp, const char *_fmt, ...)',
68 define
='HAVE_PAM_PROMPT_CONST', headers
='stdio.h sys/types.h security/pam_appl.h security/pam_modules.h')
70 conf
.CHECK_C_PROTOTYPE(
72 'const char *pam_strerror(const pam_handle_t *pamh, int errnum)',
73 define
='HAVE_PAM_STRERROR_CONST',
74 headers
='''stdio.h sys/types.h security/pam_appl.h
75 security/pam_modules.h''')
77 # Find the absolute path to libpam.so.0
78 libpam_path
= find_library(['libpam.so.0', 'libpam.so'], conf
.env
.STANDARD_LIBPATH
)
79 conf
.DEFINE('PAM_LIBRARY', ('"%s"' % libpam_path
))
81 # Create full path to pam_wrapper
82 blddir
= os
.path
.realpath(conf
.bldnode
.abspath())
83 libpam_wrapper_so_path
= blddir
+ '/default/third_party/pam_wrapper/libpam-wrapper.so'
84 pam_set_items_so_path
= blddir
+ '/default/third_party/pam_wrapper/libpam-set-items.so'
85 pam_matrix_so_path
= blddir
+ '/default/third_party/pam_wrapper/libpam-matrix.so'
87 conf
.DEFINE('LIBPAM_WRAPPER_SO_PATH', libpam_wrapper_so_path
)
88 conf
.DEFINE('PAM_SET_ITEMS_SO_PATH', pam_set_items_so_path
)
89 conf
.DEFINE('PAM_MATRIX_SO_PATH', pam_matrix_so_path
)
90 conf
.DEFINE('PAM_WRAPPER', 1)
93 if not bld
.CONFIG_SET("USING_SYSTEM_PAM_WRAPPER"):
94 # We need to do it this way or the library wont work.
95 # We need force_unversioned=True as symbol versioning
97 bld
.SAMBA_LIBRARY('pam_wrapper',
98 source
='pam_wrapper.c',
101 force_unversioned
=True,
102 realname
='libpam-wrapper.so')
104 bld
.SAMBA_SUBSYSTEM('libpamtest',
105 source
='libpamtest.c',
108 bld
.SAMBA_LIBRARY('pam_set_items',
109 source
='modules/pam_set_items.c',
112 force_unversioned
=True,
113 realname
='pam_set_items.so')
114 bld
.SAMBA_LIBRARY('pam_matrix',
115 source
='modules/pam_matrix.c',
118 force_unversioned
=True,
119 realname
='pam_matrix.so')
121 pypamtest_cflags
= ''
122 if bld
.CONFIG_SET('HAVE_WNO_ERROR_DECLARATION_AFTER_STATEMENT'):
123 pypamtest_cflags
= '-Wno-error=declaration-after-statement'
125 # Can be used to write pam tests in python
126 bld
.SAMBA_PYTHON('pypamtest',
127 source
='python/pypamtest.c',
128 cflags_end
=pypamtest_cflags
,