7 def find_library(library_names
, lookup_paths
):
8 for directory
in lookup_paths
:
9 for filename
in library_names
:
10 libpam_path
= os
.path
.join(directory
, filename
)
11 if os
.path
.exists(libpam_path
):
16 if conf
.CHECK_BUNDLED_SYSTEM('pam_wrapper', minversion
=VERSION
, set_target
=False):
17 conf
.DEFINE('USING_SYSTEM_PAM_WRAPPER', 1)
18 libpam_wrapper_so_path
= 'libpam_wrapper.so'
20 # check HAVE_GCC_THREAD_LOCAL_STORAGE
28 'HAVE_GCC_THREAD_LOCAL_STORAGE',
30 msg
='Checking for thread local storage')
32 # check HAVE_DESTRUCTOR_ATTRIBUTE
34 void test_destructor_attribute(void) __attribute__ ((destructor));
36 void test_destructor_attribute(void)
45 'HAVE_DESTRUCTOR_ATTRIBUTE',
47 msg
='Checking for library destructor support')
49 # check HAVE_FUNCTION_ATTRIBUTE_FORMAT
51 void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
57 'HAVE_FUNCTION_ATTRIBUTE_FORMAT',
59 msg
='Checking for printf format validation support')
61 conf
.CHECK_HEADERS('security/pam_appl.h')
62 conf
.CHECK_HEADERS('security/pam_modules.h')
63 conf
.CHECK_HEADERS('security/pam_ext.h')
65 conf
.CHECK_FUNCS_IN('pam_vsyslog',
68 headers
='security/pam_ext.h')
70 conf
.CHECK_FUNCS_IN('pam_syslog',
73 headers
='security/pam_ext.h')
75 conf
.CHECK_C_PROTOTYPE('pam_vprompt',
76 'int pam_vprompt(const pam_handle_t *_pamh, int _style, char **_resp, const char *_fmt, va_list _ap)',
77 define
='HAVE_PAM_VPROMPT_CONST', headers
='stdio.h sys/types.h security/pam_appl.h security/pam_modules.h')
79 conf
.CHECK_C_PROTOTYPE('pam_prompt',
80 'int pam_prompt(const pam_handle_t *_pamh, int _style, char **_resp, const char *_fmt, ...)',
81 define
='HAVE_PAM_PROMPT_CONST', headers
='stdio.h sys/types.h security/pam_appl.h security/pam_modules.h')
83 conf
.CHECK_C_PROTOTYPE(
85 'const char *pam_strerror(const pam_handle_t *pamh, int errnum)',
86 define
='HAVE_PAM_STRERROR_CONST',
87 headers
='''stdio.h sys/types.h security/pam_appl.h
88 security/pam_modules.h''')
90 # Find the absolute path to libpam.so.0
91 libpam_path
= find_library(['libpam.so.0', 'libpam.so'], conf
.env
.STANDARD_LIBPATH
)
92 conf
.DEFINE('PAM_LIBRARY', ('"%s"' % libpam_path
))
94 # Create full path to pam_wrapper
95 blddir
= os
.path
.realpath(conf
.blddir
)
96 libpam_wrapper_so_path
= blddir
+ '/default/lib/pam_wrapper/libpam-wrapper.so'
98 conf
.DEFINE('LIBPAM_WRAPPER_SO_PATH', libpam_wrapper_so_path
)
99 conf
.DEFINE('PAM_WRAPPER', 1)
102 if not bld
.CONFIG_SET("USING_SYSTEM_PAM_WRAPPER"):
103 # We need to do it this way or the library wont work.
104 # Using private_library=True will add symbol version which
106 bld
.SAMBA_LIBRARY('pam_wrapper',
107 source
='pam_wrapper.c',
110 realname
='libpam-wrapper.so')
112 # Can be used to write pam tests in python
113 bld
.SAMBA_PYTHON('pypamtest',
114 source
='python/pypamtest.c libpamtest.c',