510 lines
12 KiB
Meson
510 lines
12 KiB
Meson
# -*- mode: meson -*-
|
|
|
|
module = fs.name(meson.current_source_dir())
|
|
|
|
# pam_module.so
|
|
|
|
pam_module_src = [module + '.c']
|
|
pam_module_c_args = []
|
|
pam_module_deps = [libpam_internal_dep, libpam_dep]
|
|
|
|
if module == 'pam_env'
|
|
pam_module_deps += [libeconf]
|
|
endif
|
|
if module == 'pam_faillock'
|
|
pam_module_src += ['faillock.c', 'faillock_config.c']
|
|
pam_module_deps += [libaudit]
|
|
endif
|
|
if module == 'pam_issue'
|
|
pam_module_deps += [libsystemd]
|
|
endif
|
|
if module == 'pam_keyinit'
|
|
if not enable_pam_keyinit
|
|
subdir_done()
|
|
endif
|
|
endif
|
|
if module == 'pam_lastlog'
|
|
if not enable_pam_lastlog
|
|
subdir_done()
|
|
endif
|
|
pam_module_deps += [libutil]
|
|
endif
|
|
if module == 'pam_limits'
|
|
limits_conf_dir = sconfigdir / 'limits.d'
|
|
pam_module_c_args += ['-DLIMITS_FILE_DIR="@0@"'.format(limits_conf_dir)]
|
|
pam_module_deps += [libsystemd]
|
|
endif
|
|
if module == 'pam_loginuid'
|
|
pam_module_deps += [libaudit]
|
|
endif
|
|
if module == 'pam_mkhomedir'
|
|
pam_module_c_args += ['-DMKHOMEDIR_HELPER="@0@"'.format(sbindir / 'mkhomedir_helper')]
|
|
endif
|
|
if module == 'pam_namespace'
|
|
if cdata.get('HAVE_UNSHARE', 0) == 0
|
|
subdir_done()
|
|
endif
|
|
pam_module_src += ['md5.c', 'argv_parse.c']
|
|
pam_module_deps += [libselinux]
|
|
endif
|
|
if module == 'pam_pwhistory'
|
|
pam_module_src += ['opasswd.c', 'pwhistory_config.c']
|
|
if libselinux.found()
|
|
pam_module_c_args += ['-DPWHISTORY_HELPER="@0@"'.format(sbindir / 'pwhistory_helper')]
|
|
endif
|
|
pam_module_deps += [libcrypt, libselinux]
|
|
endif
|
|
if module == 'pam_rhosts'
|
|
if cdata.get('HAVE_RUSEROK', 0) == 0 or cdata.get('HAVE_RUSEROK_AF', 0) == 0
|
|
subdir_done()
|
|
endif
|
|
endif
|
|
if module == 'pam_rootok'
|
|
pam_module_deps += [libselinux, libaudit]
|
|
endif
|
|
if module == 'pam_selinux'
|
|
if not libselinux.found()
|
|
subdir_done()
|
|
endif
|
|
pam_module_deps += [libselinux, libaudit]
|
|
endif
|
|
if module == 'pam_sepermit'
|
|
if not libselinux.found()
|
|
subdir_done()
|
|
endif
|
|
pam_module_deps += [libselinux]
|
|
sepermit_lockdir = localstatedir / 'run' / 'sepermit'
|
|
pam_module_c_args += ['-DSEPERMIT_LOCKDIR="@0@"'.format(sepermit_lockdir)]
|
|
endif
|
|
if module == 'pam_setquota'
|
|
if cdata.get('HAVE_QUOTACTL', 0) == 0
|
|
subdir_done()
|
|
endif
|
|
endif
|
|
if module == 'pam_shells'
|
|
pam_module_deps += [libeconf]
|
|
endif
|
|
if module == 'pam_timestamp'
|
|
if cdata.get('WITH_OPENSSL', 0) == 1
|
|
pam_module_src += ['hmac_openssl_wrapper.c']
|
|
else
|
|
pam_module_src += ['hmacsha1.c', 'sha1.c']
|
|
endif
|
|
pam_module_deps += [libcrypto, libsystemd]
|
|
endif
|
|
if module == 'pam_tty_audit'
|
|
if cdata.get('HAVE_STRUCT_AUDIT_TTY_STATUS', 0) == 0
|
|
subdir_done()
|
|
endif
|
|
endif
|
|
if module == 'pam_unix'
|
|
if not enable_pam_unix
|
|
subdir_done()
|
|
endif
|
|
pam_module_src = ['bigcrypt.c',
|
|
'pam_unix_acct.c',
|
|
'pam_unix_auth.c',
|
|
'pam_unix_passwd.c',
|
|
'pam_unix_sess.c',
|
|
'support.c',
|
|
'passverify.c',
|
|
'md5_good.c',
|
|
'md5_broken.c',
|
|
]
|
|
if enable_nis
|
|
pam_module_src += ['yppasswd_xdr.c']
|
|
endif
|
|
pam_module_c_args += ['-DCHKPWD_HELPER="@0@"'.format(sbindir / 'unix_chkpwd'),
|
|
'-DUPDATE_HELPER="@0@"'.format(sbindir / 'unix_update')]
|
|
pam_module_deps += [libcrypt, libselinux, libtirpc, libnsl]
|
|
endif
|
|
if module == 'pam_userdb'
|
|
if not enable_pam_userdb
|
|
subdir_done()
|
|
endif
|
|
pam_module_deps += [libdb, libcrypt]
|
|
endif
|
|
if module == 'pam_xauth'
|
|
pam_module_deps += [libselinux]
|
|
endif
|
|
|
|
pam_module = shared_module(
|
|
module,
|
|
name_prefix: '',
|
|
sources: pam_module_src,
|
|
dependencies: pam_module_deps,
|
|
c_args: pam_module_c_args,
|
|
link_depends: pam_module_link_deps,
|
|
link_args: pam_module_link_args,
|
|
install: true,
|
|
install_dir: securedir,
|
|
)
|
|
|
|
|
|
# pam_module.8
|
|
|
|
pam_module_mans = [[module + '.8', []]]
|
|
if module == 'pam_access'
|
|
pam_module_mans += [['access.conf.5', []]]
|
|
endif
|
|
if module == 'pam_env'
|
|
pam_module_mans += [['pam_env.conf.5', ['environment.5']]]
|
|
endif
|
|
if module == 'pam_group'
|
|
pam_module_mans += [['group.conf.5', []]]
|
|
endif
|
|
if module == 'pam_faillock'
|
|
pam_module_mans += [['faillock.8', []],
|
|
['faillock.conf.5', []]]
|
|
endif
|
|
if module == 'pam_limits'
|
|
pam_module_mans += [['limits.conf.5', []]]
|
|
endif
|
|
if module == 'pam_mkhomedir'
|
|
pam_module_mans += [['mkhomedir_helper.8', []]]
|
|
endif
|
|
if module == 'pam_namespace'
|
|
pam_module_mans += [['namespace.conf.5', []],
|
|
[module + '_helper.8', []]]
|
|
endif
|
|
if module == 'pam_pwhistory'
|
|
pam_module_mans += [['pwhistory.conf.5', []]]
|
|
if libselinux.found()
|
|
pam_module_mans += [['pwhistory_helper.8', []]]
|
|
endif
|
|
endif
|
|
if module == 'pam_sepermit'
|
|
pam_module_mans += [['sepermit.conf.5', []]]
|
|
endif
|
|
if module == 'pam_time'
|
|
pam_module_mans += [['time.conf.5', []]]
|
|
endif
|
|
if module == 'pam_timestamp'
|
|
pam_module_mans += [['pam_timestamp_check.8', []]]
|
|
endif
|
|
if module == 'pam_unix'
|
|
pam_module_mans += [['unix_chkpwd.8', []]]
|
|
if libselinux.found()
|
|
pam_module_mans += [['unix_update.8', []]]
|
|
endif
|
|
endif
|
|
|
|
foreach man: pam_module_mans
|
|
xml = man[0] + '.xml'
|
|
|
|
run_command([prog_xmllint,
|
|
'--nonet',
|
|
'--noout',
|
|
'--xinclude',
|
|
'--relaxng', docbook_rng,
|
|
xml],
|
|
check: true)
|
|
|
|
custom_target(man[0],
|
|
input: xml,
|
|
output: man,
|
|
depends: [custom_man_xsl, pam_module],
|
|
command: [prog_xsltproc,
|
|
'-o', '@OUTPUT0@',
|
|
'--nonet',
|
|
'--xinclude',
|
|
'--path', meson.current_source_dir(),
|
|
stringparam_vendordir,
|
|
stringparam_profileconditions,
|
|
custom_man_xsl,
|
|
'@INPUT@'],
|
|
install: true,
|
|
install_dir: mandir / 'man' + man[0].substring(-1),
|
|
install_tag: 'man',
|
|
)
|
|
endforeach
|
|
|
|
|
|
# README
|
|
|
|
readme_html = custom_target(
|
|
input: 'README.xml',
|
|
output: 'README.html',
|
|
depends: pam_module,
|
|
command: [prog_xsltproc,
|
|
'-o', '@OUTPUT@',
|
|
'--nonet',
|
|
'--xinclude',
|
|
'--path', meson.current_source_dir(),
|
|
'--stringparam', 'generate.toc', 'none',
|
|
stringparam_vendordir,
|
|
stringparam_profileconditions,
|
|
txt_stylesheet,
|
|
'@INPUT@'],
|
|
)
|
|
|
|
custom_target(
|
|
input: readme_html,
|
|
output: module + '.txt',
|
|
command: [redir_exe,
|
|
'@INPUT@',
|
|
'@OUTPUT@',
|
|
browser],
|
|
install: true,
|
|
install_dir: docdir / 'modules',
|
|
install_tag: 'doc',
|
|
)
|
|
|
|
|
|
# module-specific configuration files and helpers
|
|
|
|
if module == 'pam_access'
|
|
install_data(
|
|
'access.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_env'
|
|
install_data(
|
|
'pam_env.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
install_data(
|
|
'environment',
|
|
install_dir: vendor_sysconfdir,
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_group'
|
|
install_data(
|
|
'group.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_faillock'
|
|
executable(
|
|
'faillock',
|
|
sources: ['main.c', 'faillock.c', 'faillock_config.c'],
|
|
link_args: exe_link_args,
|
|
dependencies: [libpam_internal_dep, libpam_dep, libaudit],
|
|
install: true,
|
|
install_dir: sbindir,
|
|
)
|
|
install_data(
|
|
'faillock.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_filter'
|
|
install_data(
|
|
'pam_filter.h',
|
|
install_dir: includedir,
|
|
install_tag: 'devel',
|
|
)
|
|
endif
|
|
if module == 'pam_limits'
|
|
install_data(
|
|
'limits.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
install_emptydir(
|
|
limits_conf_dir,
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_mkhomedir'
|
|
executable(
|
|
'mkhomedir_helper',
|
|
sources: ['mkhomedir_helper.c'],
|
|
link_args: exe_link_args,
|
|
dependencies: [libpam_internal_dep, libpam_dep],
|
|
install: true,
|
|
install_dir: sbindir,
|
|
)
|
|
endif
|
|
if module == 'pam_namespace'
|
|
pam_namespace_helper = configure_file(
|
|
input: 'pam_namespace_helper.in',
|
|
output: 'pam_namespace_helper',
|
|
configuration: cdata
|
|
)
|
|
install_data(
|
|
pam_namespace_helper,
|
|
install_mode: 'rwxr-xr-x',
|
|
install_dir: sbindir,
|
|
install_tag: 'bin',
|
|
)
|
|
pam_namespace_service = configure_file(
|
|
input: 'pam_namespace.service.in',
|
|
output: 'pam_namespace.service',
|
|
configuration: cdata
|
|
)
|
|
install_data(
|
|
pam_namespace_service,
|
|
install_dir: systemdunitdir,
|
|
install_tag: 'config',
|
|
)
|
|
install_data(
|
|
'namespace.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
install_data(
|
|
'namespace.init',
|
|
install_mode: 'rwxr-xr-x',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
install_emptydir(
|
|
sconfigdir / 'namespace.d',
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_pwhistory'
|
|
executable(
|
|
'pwhistory_helper',
|
|
sources: ['pwhistory_helper.c', 'opasswd.c'],
|
|
c_args: ['-DHELPER_COMPILE="pwhistory_helper"'],
|
|
link_args: exe_link_args,
|
|
dependencies: [libpam_internal_dep, libpam_dep, libcrypt],
|
|
install: true,
|
|
install_dir: sbindir,
|
|
)
|
|
install_data(
|
|
'pwhistory.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_selinux'
|
|
executable(
|
|
'pam_selinux_check',
|
|
sources: ['pam_selinux_check.c'],
|
|
include_directories: [libpamc_inc],
|
|
link_args: exe_link_args,
|
|
dependencies: [libpam_internal_dep, libpam_dep, libpam_misc_dep],
|
|
)
|
|
endif
|
|
if module == 'pam_sepermit'
|
|
install_data(
|
|
'sepermit.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
install_emptydir(
|
|
sepermit_lockdir,
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_time'
|
|
install_data(
|
|
'time.conf',
|
|
install_dir: vendor_sconfigdir,
|
|
install_tag: 'config',
|
|
)
|
|
endif
|
|
if module == 'pam_timestamp'
|
|
executable(
|
|
'pam_timestamp_check',
|
|
sources: ['pam_timestamp_check.c'],
|
|
link_args: exe_link_args,
|
|
dependencies: [libpam_internal_dep, libpam_dep, libsystemd],
|
|
install: true,
|
|
install_dir: sbindir,
|
|
)
|
|
endif
|
|
if module == 'pam_unix'
|
|
executable(
|
|
'unix_chkpwd',
|
|
sources: ['unix_chkpwd.c',
|
|
'audit.c',
|
|
'bigcrypt.c',
|
|
'md5_good.c',
|
|
'md5_broken.c',
|
|
'passverify.c',
|
|
],
|
|
c_args: ['-DHELPER_COMPILE="unix_chkpwd"'],
|
|
link_args: exe_link_args,
|
|
dependencies: [libpam_internal_dep, libpam_dep, libcrypt, libselinux, libaudit],
|
|
install: true,
|
|
install_dir: sbindir,
|
|
)
|
|
if libselinux.found()
|
|
executable(
|
|
'unix_update',
|
|
sources: ['unix_update.c',
|
|
'audit.c',
|
|
'bigcrypt.c',
|
|
'md5_good.c',
|
|
'md5_broken.c',
|
|
'passverify.c',
|
|
],
|
|
c_args: ['-DHELPER_COMPILE="unix_update"'],
|
|
link_args: exe_link_args,
|
|
dependencies: [libpam_internal_dep, libpam_dep, libcrypt, libselinux, libaudit],
|
|
install: true,
|
|
install_dir: sbindir,
|
|
)
|
|
endif
|
|
executable(
|
|
'bigcrypt',
|
|
sources: ['bigcrypt.c', 'bigcrypt_main.c'],
|
|
dependencies: [libpam_internal_dep, libpam_dep, libcrypt],
|
|
)
|
|
endif
|
|
|
|
|
|
# tests
|
|
|
|
test(
|
|
'dlopen ' + module,
|
|
tst_dlopen,
|
|
args: [pam_module],
|
|
)
|
|
|
|
tst_module_retval_name = 'tst-' + module + '-retval'
|
|
tst_module_retval_src = tst_module_retval_name + '.c'
|
|
|
|
if fs.exists(tst_module_retval_src)
|
|
tst_module_retval_link_args = ''
|
|
if module == 'pam_canonicalize_user'
|
|
tst_module_retval_link_args = '-Wl,--export-dynamic'
|
|
endif
|
|
|
|
tst_module_retval_deps = [libpam_internal_dep, libpam_dep]
|
|
if module == 'pam_rootok'
|
|
tst_module_retval_deps += [libselinux, libaudit]
|
|
endif
|
|
|
|
tst_module_retval = executable(
|
|
tst_module_retval_name,
|
|
sources: tst_module_retval_src,
|
|
dependencies: tst_module_retval_deps,
|
|
link_args: tst_module_retval_link_args,
|
|
)
|
|
|
|
test(
|
|
tst_module_retval_name,
|
|
chdir_meson_build_subdir,
|
|
args: [tst_module_retval],
|
|
env: ['MESON_BUILD_SUBDIR=' + meson.current_build_dir()],
|
|
)
|
|
endif
|
|
|
|
|
|
if module == 'pam_timestamp' and cdata.get('WITH_OPENSSL', 0) != 1
|
|
hmacfile_exe = executable(
|
|
'hmacfile',
|
|
sources: ['hmacfile.c', 'hmacsha1.c', 'sha1.c'],
|
|
dependencies: [libpam_internal_dep, libpam_dep],
|
|
)
|
|
test(
|
|
'pam_timestamp hmacfile',
|
|
hmacfile_exe,
|
|
)
|
|
endif
|
|
|
|
|
|
if module == 'pam_filter'
|
|
subdir('upperLOWER')
|
|
endif
|