1
0
Fork 0
pam/modules/module-meson.build
Daniel Baumann 82f0236850
Adding upstream version 1.7.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-21 06:53:43 +02:00

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