summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Hartman <hartmans@debian.org>2024-02-27 21:25:44 -0700
committerSam Hartman <hartmans@debian.org>2024-02-27 21:25:44 -0700
commit58c5a173ca608476917893e9054cf3d53d0b0744 (patch)
treec5d2ab69a993c150f48f705bff9d76c1139f1e33
parent80d000dd6637be445a9a0fd930de765cc40352da (diff)
parent56cd5768b32fd97a7156977dcbbd40715e158e9c (diff)
Merge in 1.5.3 from experimental
-rw-r--r--ChangeLog1528
-rw-r--r--Make.xml.rules.in18
-rw-r--r--Makefile.in12
-rw-r--r--NEWS24
-rw-r--r--README2
-rwxr-xr-xbuild-aux/config.guess56
-rwxr-xr-xbuild-aux/config.sub109
-rw-r--r--build-aux/ltmain.sh62
-rw-r--r--conf/Makefile.in12
-rw-r--r--conf/pam_conv1/Makefile.in12
-rw-r--r--config.h.in27
-rwxr-xr-xconfigure1069
-rw-r--r--configure.ac126
-rw-r--r--debian/README.source14
-rw-r--r--debian/changelog65
-rw-r--r--debian/clean2
-rw-r--r--debian/control14
-rw-r--r--debian/libpam-modules-bin.install14
-rw-r--r--debian/libpam-modules-bin.lintian-overrides2
-rw-r--r--debian/libpam-modules.install2
-rw-r--r--debian/libpam-modules.lintian-overrides17
-rw-r--r--debian/libpam-runtime.lintian-overrides14
-rw-r--r--debian/libpam-runtime.manpages2
-rwxr-xr-xdebian/libpam0g-dev.install4
-rwxr-xr-xdebian/libpam0g-dev.links6
-rw-r--r--debian/libpam0g.install1
-rw-r--r--debian/libpam0t64.docs (renamed from debian/libpam0g.docs)0
-rw-r--r--debian/libpam0t64.install1
-rw-r--r--debian/libpam0t64.lintian-overrides (renamed from debian/libpam0g.lintian-overrides)9
-rw-r--r--debian/libpam0t64.postinst (renamed from debian/libpam0g.postinst)0
-rw-r--r--debian/libpam0t64.postrm.in13
-rw-r--r--debian/libpam0t64.preinst.in13
-rw-r--r--debian/libpam0t64.symbols (renamed from debian/libpam0g.symbols)2
-rw-r--r--debian/libpam0t64.templates (renamed from debian/libpam0g.templates)0
-rw-r--r--debian/local/common-session2
-rw-r--r--debian/local/common-session-noninteractive2
-rw-r--r--debian/local/pam-auth-update4
-rw-r--r--debian/not-installed11
-rw-r--r--debian/patches-applied/021_nis_cleanup24
-rw-r--r--debian/patches-applied/022_pam_unix_group_time_miscfixes22
-rw-r--r--debian/patches-applied/026_pam_unix_passwd_unknown_user33
-rw-r--r--debian/patches-applied/PAM-manpage-section1723
-rw-r--r--debian/patches-applied/do_not_check_nis_accidentally22
-rw-r--r--debian/patches-applied/make_documentation_reproducible.patch19
-rw-r--r--debian/patches-applied/no_PATH_MAX_on_hurd22
-rw-r--r--debian/patches/0003-pam_unix-obscure-checks.patch (renamed from debian/patches-applied/007_modules_pam_unix)574
-rw-r--r--debian/patches/008_modules_pam_limits_chroot (renamed from debian/patches-applied/008_modules_pam_limits_chroot)138
-rw-r--r--debian/patches/022_pam_unix_group_time_miscfixes28
-rw-r--r--debian/patches/026_pam_unix_passwd_unknown_user38
-rw-r--r--debian/patches/027_pam_limits_better_init_allow_explicit_root (renamed from debian/patches-applied/027_pam_limits_better_init_allow_explicit_root)231
-rw-r--r--debian/patches/031_pam_include (renamed from debian/patches-applied/031_pam_include)21
-rw-r--r--debian/patches/032_pam_limits_EPERM_NOT_FATAL (renamed from debian/patches-applied/032_pam_limits_EPERM_NOT_FATAL)17
-rw-r--r--debian/patches/036_pam_wheel_getlogin_considered_harmful (renamed from debian/patches-applied/036_pam_wheel_getlogin_considered_harmful)153
-rw-r--r--debian/patches/040_pam_limits_log_failure (renamed from debian/patches-applied/040_pam_limits_log_failure)17
-rw-r--r--debian/patches/045_pam_dispatch_jump_is_ignore (renamed from debian/patches-applied/045_pam_dispatch_jump_is_ignore)16
-rw-r--r--debian/patches/PAM-manpage-section2286
-rw-r--r--debian/patches/fix-autoreconf.patch (renamed from debian/patches-applied/fix-autoreconf.patch)10
-rw-r--r--debian/patches/hurd_no_setfsuid (renamed from debian/patches-applied/hurd_no_setfsuid)15
-rw-r--r--debian/patches/lib_security_multiarch_compat (renamed from debian/patches-applied/lib_security_multiarch_compat)21
-rw-r--r--debian/patches/make_documentation_reproducible.patch25
-rw-r--r--debian/patches/no_PATH_MAX_on_hurd28
-rw-r--r--debian/patches/nullok_secure-compat.patch (renamed from debian/patches-applied/nullok_secure-compat.patch)21
-rw-r--r--debian/patches/pam-limits-nofile-fd-setsize-cap (renamed from debian/patches-applied/pam-limits-nofile-fd-setsize-cap)17
-rw-r--r--debian/patches/pam_mkhomedir_stat_before_opendir (renamed from debian/patches-applied/pam_mkhomedir_stat_before_opendir)19
-rw-r--r--debian/patches/pam_namespace_o_directory58
-rw-r--r--debian/patches/pam_unix_dont_trust_chkpwd_caller.patch (renamed from debian/patches-applied/pam_unix_dont_trust_chkpwd_caller.patch)17
-rw-r--r--debian/patches/series (renamed from debian/patches-applied/series)20
-rw-r--r--debian/patches/update-motd (renamed from debian/patches-applied/update-motd)136
-rw-r--r--debian/po/sv.po66
-rwxr-xr-xdebian/rules24
-rw-r--r--debian/source/lintian-overrides (renamed from debian/source.lintian-overrides)0
-rw-r--r--debian/upstream/metadata4
-rw-r--r--doc/Makefile.am2
-rw-r--r--doc/Makefile.in14
-rw-r--r--doc/adg/Linux-PAM_ADG.xml199
-rw-r--r--doc/adg/Makefile.am12
-rw-r--r--doc/adg/Makefile.in24
-rw-r--r--doc/adg/pam_acct_mgmt.xml20
-rw-r--r--doc/adg/pam_authenticate.xml20
-rw-r--r--doc/adg/pam_chauthtok.xml20
-rw-r--r--doc/adg/pam_close_session.xml20
-rw-r--r--doc/adg/pam_conv.xml20
-rw-r--r--doc/adg/pam_end.xml20
-rw-r--r--doc/adg/pam_fail_delay.xml20
-rw-r--r--doc/adg/pam_get_item.xml20
-rw-r--r--doc/adg/pam_getenv.xml20
-rw-r--r--doc/adg/pam_getenvlist.xml20
-rw-r--r--doc/adg/pam_misc_conv.xml15
-rw-r--r--doc/adg/pam_misc_drop_env.xml15
-rw-r--r--doc/adg/pam_misc_paste_env.xml15
-rw-r--r--doc/adg/pam_misc_setenv.xml15
-rw-r--r--doc/adg/pam_open_session.xml20
-rw-r--r--doc/adg/pam_putenv.xml20
-rw-r--r--doc/adg/pam_set_item.xml20
-rw-r--r--doc/adg/pam_setcred.xml20
-rw-r--r--doc/adg/pam_start.xml20
-rw-r--r--doc/adg/pam_strerror.xml20
-rw-r--r--doc/custom-html.xsl.in (renamed from doc/custom-html.xsl)2
-rw-r--r--doc/custom-man.xsl.in (renamed from doc/custom-man.xsl)2
-rw-r--r--doc/man/Makefile.am24
-rw-r--r--doc/man/Makefile.in35
-rw-r--r--doc/man/PAM.825
-rw-r--r--doc/man/misc_conv.324
-rw-r--r--doc/man/misc_conv.3.xml35
-rw-r--r--doc/man/pam.310
-rw-r--r--doc/man/pam.3.xml40
-rw-r--r--doc/man/pam.82
-rw-r--r--doc/man/pam.8.xml98
-rw-r--r--doc/man/pam.conf-desc.xml14
-rw-r--r--doc/man/pam.conf-dir.xml25
-rw-r--r--doc/man/pam.conf-syntax.xml12
-rw-r--r--doc/man/pam.conf.556
-rw-r--r--doc/man/pam.conf.5.xml85
-rw-r--r--doc/man/pam.d.52
-rw-r--r--doc/man/pam_acct_mgmt.310
-rw-r--r--doc/man/pam_acct_mgmt.3.xml20
-rw-r--r--doc/man/pam_authenticate.310
-rw-r--r--doc/man/pam_authenticate.3.xml20
-rw-r--r--doc/man/pam_chauthtok.310
-rw-r--r--doc/man/pam_chauthtok.3.xml20
-rw-r--r--doc/man/pam_close_session.310
-rw-r--r--doc/man/pam_close_session.3.xml21
-rw-r--r--doc/man/pam_conv.310
-rw-r--r--doc/man/pam_conv.3.xml20
-rw-r--r--doc/man/pam_end.310
-rw-r--r--doc/man/pam_end.3.xml21
-rw-r--r--doc/man/pam_error.310
-rw-r--r--doc/man/pam_error.3.xml23
-rw-r--r--doc/man/pam_fail_delay.310
-rw-r--r--doc/man/pam_fail_delay.3.xml27
-rw-r--r--doc/man/pam_get_authtok.318
-rw-r--r--doc/man/pam_get_authtok.3.xml33
-rw-r--r--doc/man/pam_get_authtok_noverify.32
-rw-r--r--doc/man/pam_get_authtok_verify.32
-rw-r--r--doc/man/pam_get_data.310
-rw-r--r--doc/man/pam_get_data.3.xml21
-rw-r--r--doc/man/pam_get_item.318
-rw-r--r--doc/man/pam_get_item.3.xml33
-rw-r--r--doc/man/pam_get_user.310
-rw-r--r--doc/man/pam_get_user.3.xml21
-rw-r--r--doc/man/pam_getenv.310
-rw-r--r--doc/man/pam_getenv.3.xml20
-rw-r--r--doc/man/pam_getenvlist.310
-rw-r--r--doc/man/pam_getenvlist.3.xml20
-rw-r--r--doc/man/pam_info.310
-rw-r--r--doc/man/pam_info.3.xml23
-rw-r--r--doc/man/pam_item_types_ext.inc.xml5
-rw-r--r--doc/man/pam_item_types_std.inc.xml13
-rw-r--r--doc/man/pam_misc_drop_env.310
-rw-r--r--doc/man/pam_misc_drop_env.3.xml21
-rw-r--r--doc/man/pam_misc_paste_env.310
-rw-r--r--doc/man/pam_misc_paste_env.3.xml21
-rw-r--r--doc/man/pam_misc_setenv.310
-rw-r--r--doc/man/pam_misc_setenv.3.xml21
-rw-r--r--doc/man/pam_open_session.310
-rw-r--r--doc/man/pam_open_session.3.xml21
-rw-r--r--doc/man/pam_prompt.310
-rw-r--r--doc/man/pam_prompt.3.xml23
-rw-r--r--doc/man/pam_putenv.310
-rw-r--r--doc/man/pam_putenv.3.xml20
-rw-r--r--doc/man/pam_set_data.313
-rw-r--r--doc/man/pam_set_data.3.xml29
-rw-r--r--doc/man/pam_set_item.318
-rw-r--r--doc/man/pam_set_item.3.xml33
-rw-r--r--doc/man/pam_setcred.310
-rw-r--r--doc/man/pam_setcred.3.xml21
-rw-r--r--doc/man/pam_sm_acct_mgmt.310
-rw-r--r--doc/man/pam_sm_acct_mgmt.3.xml22
-rw-r--r--doc/man/pam_sm_authenticate.310
-rw-r--r--doc/man/pam_sm_authenticate.3.xml22
-rw-r--r--doc/man/pam_sm_chauthtok.310
-rw-r--r--doc/man/pam_sm_chauthtok.3.xml30
-rw-r--r--doc/man/pam_sm_close_session.310
-rw-r--r--doc/man/pam_sm_close_session.3.xml22
-rw-r--r--doc/man/pam_sm_open_session.310
-rw-r--r--doc/man/pam_sm_open_session.3.xml22
-rw-r--r--doc/man/pam_sm_setcred.310
-rw-r--r--doc/man/pam_sm_setcred.3.xml24
-rw-r--r--doc/man/pam_start.310
-rw-r--r--doc/man/pam_start.3.xml21
-rw-r--r--doc/man/pam_strerror.310
-rw-r--r--doc/man/pam_strerror.3.xml21
-rw-r--r--doc/man/pam_syslog.310
-rw-r--r--doc/man/pam_syslog.3.xml21
-rw-r--r--doc/man/pam_verror.32
-rw-r--r--doc/man/pam_vinfo.32
-rw-r--r--doc/man/pam_vprompt.32
-rw-r--r--doc/man/pam_vsyslog.32
-rw-r--r--doc/man/pam_xauth_data.310
-rw-r--r--doc/man/pam_xauth_data.3.xml91
-rw-r--r--doc/mwg/Linux-PAM_MWG.xml178
-rw-r--r--doc/mwg/Makefile.am12
-rw-r--r--doc/mwg/Makefile.in24
-rw-r--r--doc/mwg/pam_conv.xml20
-rw-r--r--doc/mwg/pam_fail_delay.xml20
-rw-r--r--doc/mwg/pam_get_data.xml20
-rw-r--r--doc/mwg/pam_get_item.xml20
-rw-r--r--doc/mwg/pam_get_user.xml20
-rw-r--r--doc/mwg/pam_getenv.xml20
-rw-r--r--doc/mwg/pam_getenvlist.xml20
-rw-r--r--doc/mwg/pam_putenv.xml20
-rw-r--r--doc/mwg/pam_set_data.xml20
-rw-r--r--doc/mwg/pam_set_item.xml20
-rw-r--r--doc/mwg/pam_sm_acct_mgmt.xml20
-rw-r--r--doc/mwg/pam_sm_authenticate.xml20
-rw-r--r--doc/mwg/pam_sm_chauthtok.xml20
-rw-r--r--doc/mwg/pam_sm_close_session.xml20
-rw-r--r--doc/mwg/pam_sm_open_session.xml20
-rw-r--r--doc/mwg/pam_sm_setcred.xml20
-rw-r--r--doc/mwg/pam_strerror.xml20
-rw-r--r--doc/sag/Linux-PAM_SAG.xml227
-rw-r--r--doc/sag/Makefile.am13
-rw-r--r--doc/sag/Makefile.in24
-rw-r--r--doc/sag/pam_access.xml52
-rw-r--r--doc/sag/pam_debug.xml42
-rw-r--r--doc/sag/pam_deny.xml42
-rw-r--r--doc/sag/pam_echo.xml42
-rw-r--r--doc/sag/pam_env.xml52
-rw-r--r--doc/sag/pam_exec.xml42
-rw-r--r--doc/sag/pam_faildelay.xml42
-rw-r--r--doc/sag/pam_faillock.xml47
-rw-r--r--doc/sag/pam_filter.xml42
-rw-r--r--doc/sag/pam_ftp.xml42
-rw-r--r--doc/sag/pam_group.xml52
-rw-r--r--doc/sag/pam_issue.xml42
-rw-r--r--doc/sag/pam_keyinit.xml42
-rw-r--r--doc/sag/pam_lastlog.xml42
-rw-r--r--doc/sag/pam_limits.xml52
-rw-r--r--doc/sag/pam_listfile.xml42
-rw-r--r--doc/sag/pam_localuser.xml42
-rw-r--r--doc/sag/pam_loginuid.xml42
-rw-r--r--doc/sag/pam_mail.xml42
-rw-r--r--doc/sag/pam_mkhomedir.xml42
-rw-r--r--doc/sag/pam_motd.xml42
-rw-r--r--doc/sag/pam_namespace.xml52
-rw-r--r--doc/sag/pam_nologin.xml42
-rw-r--r--doc/sag/pam_permit.xml42
-rw-r--r--doc/sag/pam_pwhistory.xml47
-rw-r--r--doc/sag/pam_rhosts.xml42
-rw-r--r--doc/sag/pam_rootok.xml42
-rw-r--r--doc/sag/pam_securetty.xml42
-rw-r--r--doc/sag/pam_selinux.xml42
-rw-r--r--doc/sag/pam_sepermit.xml47
-rw-r--r--doc/sag/pam_setquota.xml42
-rw-r--r--doc/sag/pam_shells.xml42
-rw-r--r--doc/sag/pam_succeed_if.xml42
-rw-r--r--doc/sag/pam_time.xml52
-rw-r--r--doc/sag/pam_timestamp.xml52
-rw-r--r--doc/sag/pam_tty_audit.xml47
-rw-r--r--doc/sag/pam_umask.xml42
-rw-r--r--doc/sag/pam_unix.xml42
-rw-r--r--doc/sag/pam_userdb.xml42
-rw-r--r--doc/sag/pam_warn.xml42
-rw-r--r--doc/sag/pam_wheel.xml42
-rw-r--r--doc/sag/pam_xauth.xml42
-rw-r--r--doc/specs/Makefile.in12
-rw-r--r--examples/Makefile.am2
-rw-r--r--examples/Makefile.in33
-rw-r--r--examples/tty_conv.c177
-rw-r--r--examples/xsh.c2
-rw-r--r--libpam/Makefile.am2
-rw-r--r--libpam/Makefile.in14
-rw-r--r--libpam/include/pam_cc_compat.h20
-rw-r--r--libpam/include/pam_inline.h64
-rw-r--r--libpam/include/security/_pam_macros.h28
-rw-r--r--libpam/include/security/_pam_types.h6
-rw-r--r--libpam/include/security/pam_modutil.h11
-rw-r--r--libpam/pam.pc.in2
-rw-r--r--libpam/pam_dynamic.c84
-rw-r--r--libpam/pam_end.c31
-rw-r--r--libpam/pam_env.c9
-rw-r--r--libpam/pam_get_authtok.c17
-rw-r--r--libpam/pam_handlers.c22
-rw-r--r--libpam/pam_item.c20
-rw-r--r--libpam/pam_modutil_getlogin.c50
-rw-r--r--libpam/pam_vprompt.c6
-rw-r--r--libpam_misc/Makefile.in12
-rw-r--r--libpam_misc/help_env.c5
-rw-r--r--libpam_misc/misc_conv.c9
-rw-r--r--libpam_misc/pam_misc.pc.in2
-rw-r--r--libpamc/Makefile.in12
-rw-r--r--libpamc/include/security/pam_client.h3
-rw-r--r--libpamc/pamc.pc.in2
-rw-r--r--libpamc/pamc_client.c3
-rw-r--r--libpamc/pamc_converse.c3
-rw-r--r--libpamc/pamc_load.c7
-rw-r--r--libpamc/test/Makefile.in12
-rw-r--r--m4/libtool.m4131
-rw-r--r--m4/ltoptions.m44
-rw-r--r--m4/ltsugar.m42
-rw-r--r--m4/ltversion.m411
-rw-r--r--m4/lt~obsolete.m44
-rw-r--r--m4/warn_lang_flags.m45
-rw-r--r--modules/Makefile.in12
-rw-r--r--modules/pam_access/Makefile.am7
-rw-r--r--modules/pam_access/Makefile.in18
-rw-r--r--modules/pam_access/README14
-rw-r--r--modules/pam_access/README.xml32
-rw-r--r--modules/pam_access/access.conf.58
-rw-r--r--modules/pam_access/access.conf.5.xml20
-rw-r--r--modules/pam_access/pam_access.820
-rw-r--r--modules/pam_access/pam_access.8.xml90
-rw-r--r--modules/pam_access/pam_access.c236
-rw-r--r--modules/pam_debug/Makefile.am4
-rw-r--r--modules/pam_debug/Makefile.in15
-rw-r--r--modules/pam_debug/README.xml32
-rw-r--r--modules/pam_debug/pam_debug.822
-rw-r--r--modules/pam_debug/pam_debug.8.xml61
-rw-r--r--modules/pam_deny/Makefile.am4
-rw-r--r--modules/pam_deny/Makefile.in15
-rw-r--r--modules/pam_deny/README.xml29
-rw-r--r--modules/pam_deny/pam_deny.88
-rw-r--r--modules/pam_deny/pam_deny.8.xml29
-rw-r--r--modules/pam_echo/Makefile.am4
-rw-r--r--modules/pam_echo/Makefile.in15
-rw-r--r--modules/pam_echo/README.xml29
-rw-r--r--modules/pam_echo/pam_echo.822
-rw-r--r--modules/pam_echo/pam_echo.8.xml45
-rw-r--r--modules/pam_env/Makefile.am13
-rw-r--r--modules/pam_env/Makefile.in73
-rw-r--r--modules/pam_env/README28
-rw-r--r--modules/pam_env/README.xml34
-rw-r--r--modules/pam_env/environment.52
-rw-r--r--modules/pam_env/pam_env.820
-rw-r--r--modules/pam_env/pam_env.8.xml107
-rw-r--r--modules/pam_env/pam_env.c766
-rw-r--r--modules/pam_env/pam_env.conf.510
-rw-r--r--modules/pam_env/pam_env.conf.5.xml39
-rw-r--r--modules/pam_env/tst-pam_env-retval.c287
-rw-r--r--modules/pam_exec/Makefile.am4
-rw-r--r--modules/pam_exec/Makefile.in15
-rw-r--r--modules/pam_exec/README.xml32
-rw-r--r--modules/pam_exec/pam_exec.824
-rw-r--r--modules/pam_exec/pam_exec.8.xml65
-rw-r--r--modules/pam_exec/pam_exec.c44
-rw-r--r--modules/pam_faildelay/Makefile.am4
-rw-r--r--modules/pam_faildelay/Makefile.in15
-rw-r--r--modules/pam_faildelay/README.xml32
-rw-r--r--modules/pam_faildelay/pam_faildelay.812
-rw-r--r--modules/pam_faildelay/pam_faildelay.8.xml37
-rw-r--r--modules/pam_faillock/Makefile.am15
-rw-r--r--modules/pam_faillock/Makefile.in104
-rw-r--r--modules/pam_faillock/README4
-rw-r--r--modules/pam_faillock/README.xml35
-rw-r--r--modules/pam_faillock/faillock.827
-rw-r--r--modules/pam_faillock/faillock.8.xml60
-rw-r--r--modules/pam_faillock/faillock.conf.536
-rw-r--r--modules/pam_faillock/faillock.conf.5.xml57
-rw-r--r--modules/pam_faillock/faillock.h1
-rw-r--r--modules/pam_faillock/faillock_config.c266
-rw-r--r--modules/pam_faillock/faillock_config.h90
-rw-r--r--modules/pam_faillock/main.c160
-rw-r--r--modules/pam_faillock/pam_faillock.819
-rw-r--r--modules/pam_faillock/pam_faillock.8.xml96
-rw-r--r--modules/pam_faillock/pam_faillock.c240
-rw-r--r--modules/pam_faillock/tst-pam_faillock-retval.c119
-rw-r--r--modules/pam_filter/Makefile.am4
-rw-r--r--modules/pam_filter/Makefile.in15
-rw-r--r--modules/pam_filter/README.xml32
-rw-r--r--modules/pam_filter/pam_filter.818
-rw-r--r--modules/pam_filter/pam_filter.8.xml51
-rw-r--r--modules/pam_filter/upperLOWER/Makefile.in12
-rw-r--r--modules/pam_ftp/Makefile.am4
-rw-r--r--modules/pam_ftp/Makefile.in15
-rw-r--r--modules/pam_ftp/README.xml32
-rw-r--r--modules/pam_ftp/pam_ftp.814
-rw-r--r--modules/pam_ftp/pam_ftp.8.xml41
-rw-r--r--modules/pam_ftp/pam_ftp.c4
-rw-r--r--modules/pam_group/Makefile.am6
-rw-r--r--modules/pam_group/Makefile.in17
-rw-r--r--modules/pam_group/README3
-rw-r--r--modules/pam_group/README.xml29
-rw-r--r--modules/pam_group/group.conf.58
-rw-r--r--modules/pam_group/group.conf.5.xml19
-rw-r--r--modules/pam_group/pam_group.88
-rw-r--r--modules/pam_group/pam_group.8.xml35
-rw-r--r--modules/pam_group/pam_group.c55
-rw-r--r--modules/pam_issue/Makefile.am8
-rw-r--r--modules/pam_issue/Makefile.in23
-rw-r--r--modules/pam_issue/README.xml32
-rw-r--r--modules/pam_issue/pam_issue.834
-rw-r--r--modules/pam_issue/pam_issue.8.xml63
-rw-r--r--modules/pam_issue/pam_issue.c201
-rw-r--r--modules/pam_keyinit/Makefile.am4
-rw-r--r--modules/pam_keyinit/Makefile.in15
-rw-r--r--modules/pam_keyinit/README.xml32
-rw-r--r--modules/pam_keyinit/pam_keyinit.814
-rw-r--r--modules/pam_keyinit/pam_keyinit.8.xml47
-rw-r--r--modules/pam_keyinit/pam_keyinit.c60
-rw-r--r--modules/pam_lastlog/Makefile.am4
-rw-r--r--modules/pam_lastlog/Makefile.in15
-rw-r--r--modules/pam_lastlog/README.xml32
-rw-r--r--modules/pam_lastlog/pam_lastlog.830
-rw-r--r--modules/pam_lastlog/pam_lastlog.8.xml77
-rw-r--r--modules/pam_lastlog/pam_lastlog.c58
-rw-r--r--modules/pam_limits/Makefile.am8
-rw-r--r--modules/pam_limits/Makefile.in19
-rw-r--r--modules/pam_limits/README12
-rw-r--r--modules/pam_limits/README.xml32
-rw-r--r--modules/pam_limits/limits.conf.558
-rw-r--r--modules/pam_limits/limits.conf.5.xml111
-rw-r--r--modules/pam_limits/pam_limits.818
-rw-r--r--modules/pam_limits/pam_limits.8.xml79
-rw-r--r--modules/pam_limits/pam_limits.c195
-rw-r--r--modules/pam_listfile/Makefile.am4
-rw-r--r--modules/pam_listfile/Makefile.in15
-rw-r--r--modules/pam_listfile/README.xml32
-rw-r--r--modules/pam_listfile/pam_listfile.820
-rw-r--r--modules/pam_listfile/pam_listfile.8.xml53
-rw-r--r--modules/pam_listfile/pam_listfile.c9
-rw-r--r--modules/pam_localuser/Makefile.am4
-rw-r--r--modules/pam_localuser/Makefile.in15
-rw-r--r--modules/pam_localuser/README.xml32
-rw-r--r--modules/pam_localuser/pam_localuser.812
-rw-r--r--modules/pam_localuser/pam_localuser.8.xml41
-rw-r--r--modules/pam_loginuid/Makefile.am4
-rw-r--r--modules/pam_loginuid/Makefile.in15
-rw-r--r--modules/pam_loginuid/README.xml29
-rw-r--r--modules/pam_loginuid/pam_loginuid.810
-rw-r--r--modules/pam_loginuid/pam_loginuid.8.xml33
-rw-r--r--modules/pam_mail/Makefile.am4
-rw-r--r--modules/pam_mail/Makefile.in15
-rw-r--r--modules/pam_mail/README.xml32
-rw-r--r--modules/pam_mail/pam_mail.826
-rw-r--r--modules/pam_mail/pam_mail.8.xml73
-rw-r--r--modules/pam_mail/pam_mail.c14
-rw-r--r--modules/pam_mkhomedir/Makefile.am4
-rw-r--r--modules/pam_mkhomedir/Makefile.in15
-rw-r--r--modules/pam_mkhomedir/README.xml29
-rw-r--r--modules/pam_mkhomedir/mkhomedir_helper.88
-rw-r--r--modules/pam_mkhomedir/mkhomedir_helper.8.xml29
-rw-r--r--modules/pam_mkhomedir/mkhomedir_helper.c3
-rw-r--r--modules/pam_mkhomedir/pam_mkhomedir.816
-rw-r--r--modules/pam_mkhomedir/pam_mkhomedir.8.xml49
-rw-r--r--modules/pam_mkhomedir/pam_mkhomedir.c18
-rw-r--r--modules/pam_motd/Makefile.am4
-rw-r--r--modules/pam_motd/Makefile.in15
-rw-r--r--modules/pam_motd/README.xml32
-rw-r--r--modules/pam_motd/pam_motd.812
-rw-r--r--modules/pam_motd/pam_motd.8.xml41
-rw-r--r--modules/pam_motd/pam_motd.c49
-rw-r--r--modules/pam_namespace/Makefile.am6
-rw-r--r--modules/pam_namespace/Makefile.in17
-rw-r--r--modules/pam_namespace/README13
-rw-r--r--modules/pam_namespace/README.xml37
-rw-r--r--modules/pam_namespace/md5.c4
-rw-r--r--modules/pam_namespace/namespace.conf.58
-rw-r--r--modules/pam_namespace/namespace.conf.5.xml37
-rwxr-xr-xmodules/pam_namespace/namespace.init2
-rw-r--r--modules/pam_namespace/pam_namespace.830
-rw-r--r--modules/pam_namespace/pam_namespace.8.xml111
-rw-r--r--modules/pam_namespace/pam_namespace.c154
-rw-r--r--modules/pam_namespace/pam_namespace.h18
-rw-r--r--modules/pam_namespace/pam_namespace_helper.88
-rw-r--r--modules/pam_namespace/pam_namespace_helper.8.xml21
-rw-r--r--modules/pam_nologin/Makefile.am4
-rw-r--r--modules/pam_nologin/Makefile.in15
-rw-r--r--modules/pam_nologin/README.xml35
-rw-r--r--modules/pam_nologin/pam_nologin.812
-rw-r--r--modules/pam_nologin/pam_nologin.8.xml39
-rw-r--r--modules/pam_nologin/pam_nologin.c33
-rw-r--r--modules/pam_permit/Makefile.am4
-rw-r--r--modules/pam_permit/Makefile.in15
-rw-r--r--modules/pam_permit/README.xml32
-rw-r--r--modules/pam_permit/pam_permit.88
-rw-r--r--modules/pam_permit/pam_permit.8.xml29
-rw-r--r--modules/pam_pwhistory/Makefile.am20
-rw-r--r--modules/pam_pwhistory/Makefile.in196
-rw-r--r--modules/pam_pwhistory/README20
-rw-r--r--modules/pam_pwhistory/README.xml32
-rw-r--r--modules/pam_pwhistory/opasswd.c78
-rw-r--r--modules/pam_pwhistory/opasswd.h8
-rw-r--r--modules/pam_pwhistory/pam_pwhistory.851
-rw-r--r--modules/pam_pwhistory/pam_pwhistory.8.xml117
-rw-r--r--modules/pam_pwhistory/pam_pwhistory.c45
-rw-r--r--modules/pam_pwhistory/pwhistory.conf21
-rw-r--r--modules/pam_pwhistory/pwhistory.conf.5118
-rw-r--r--modules/pam_pwhistory/pwhistory.conf.5.xml152
-rw-r--r--modules/pam_pwhistory/pwhistory_config.c131
-rw-r--r--modules/pam_pwhistory/pwhistory_config.h54
-rw-r--r--modules/pam_pwhistory/pwhistory_helper.88
-rw-r--r--modules/pam_pwhistory/pwhistory_helper.8.xml23
-rw-r--r--modules/pam_pwhistory/pwhistory_helper.c22
-rw-r--r--modules/pam_pwhistory/tst-pam_pwhistory-retval.c60
-rw-r--r--modules/pam_rhosts/Makefile.am4
-rw-r--r--modules/pam_rhosts/Makefile.in15
-rw-r--r--modules/pam_rhosts/README.xml32
-rw-r--r--modules/pam_rhosts/pam_rhosts.814
-rw-r--r--modules/pam_rhosts/pam_rhosts.8.xml35
-rw-r--r--modules/pam_rootok/Makefile.am4
-rw-r--r--modules/pam_rootok/Makefile.in15
-rw-r--r--modules/pam_rootok/README.xml32
-rw-r--r--modules/pam_rootok/pam_rootok.810
-rw-r--r--modules/pam_rootok/pam_rootok.8.xml35
-rw-r--r--modules/pam_rootok/pam_rootok.c3
-rw-r--r--modules/pam_securetty/Makefile.am4
-rw-r--r--modules/pam_securetty/Makefile.in15
-rw-r--r--modules/pam_securetty/README2
-rw-r--r--modules/pam_securetty/README.xml32
-rw-r--r--modules/pam_securetty/pam_securetty.814
-rw-r--r--modules/pam_securetty/pam_securetty.8.xml41
-rw-r--r--modules/pam_selinux/Makefile.am4
-rw-r--r--modules/pam_selinux/Makefile.in15
-rw-r--r--modules/pam_selinux/README.xml32
-rw-r--r--modules/pam_selinux/pam_selinux.826
-rw-r--r--modules/pam_selinux/pam_selinux.8.xml65
-rw-r--r--modules/pam_selinux/pam_selinux.c13
-rw-r--r--modules/pam_sepermit/Makefile.am10
-rw-r--r--modules/pam_sepermit/Makefile.in67
-rw-r--r--modules/pam_sepermit/README3
-rw-r--r--modules/pam_sepermit/README.xml32
-rw-r--r--modules/pam_sepermit/pam_sepermit.812
-rw-r--r--modules/pam_sepermit/pam_sepermit.8.xml47
-rw-r--r--modules/pam_sepermit/pam_sepermit.c29
-rw-r--r--modules/pam_sepermit/sepermit.conf.512
-rw-r--r--modules/pam_sepermit/sepermit.conf.5.xml29
-rw-r--r--modules/pam_sepermit/tst-pam_sepermit-retval.c158
-rw-r--r--modules/pam_setquota/Makefile.am4
-rw-r--r--modules/pam_setquota/Makefile.in15
-rw-r--r--modules/pam_setquota/README.xml32
-rw-r--r--modules/pam_setquota/pam_setquota.826
-rw-r--r--modules/pam_setquota/pam_setquota.8.xml64
-rw-r--r--modules/pam_shells/Makefile.am8
-rw-r--r--modules/pam_shells/Makefile.in23
-rw-r--r--modules/pam_shells/README6
-rw-r--r--modules/pam_shells/README.xml32
-rw-r--r--modules/pam_shells/pam_shells.813
-rw-r--r--modules/pam_shells/pam_shells.8.xml41
-rw-r--r--modules/pam_shells/pam_shells.c73
-rw-r--r--modules/pam_stress/Makefile.am4
-rw-r--r--modules/pam_stress/Makefile.in15
-rw-r--r--modules/pam_stress/README.xml26
-rw-r--r--modules/pam_stress/pam_stress.828
-rw-r--r--modules/pam_stress/pam_stress.8.xml71
-rw-r--r--modules/pam_stress/pam_stress.c11
-rw-r--r--modules/pam_succeed_if/Makefile.am4
-rw-r--r--modules/pam_succeed_if/Makefile.in15
-rw-r--r--modules/pam_succeed_if/README.xml32
-rw-r--r--modules/pam_succeed_if/pam_succeed_if.852
-rw-r--r--modules/pam_succeed_if/pam_succeed_if.8.xml78
-rw-r--r--modules/pam_succeed_if/pam_succeed_if.c36
-rw-r--r--modules/pam_time/Makefile.am11
-rw-r--r--modules/pam_time/Makefile.in67
-rw-r--r--modules/pam_time/README3
-rw-r--r--modules/pam_time/README.xml29
-rw-r--r--modules/pam_time/pam_time.814
-rw-r--r--modules/pam_time/pam_time.8.xml50
-rw-r--r--modules/pam_time/pam_time.c27
-rw-r--r--modules/pam_time/time.conf.58
-rw-r--r--modules/pam_time/time.conf.5.xml23
-rw-r--r--modules/pam_time/tst-pam_time-retval.c107
-rw-r--r--modules/pam_timestamp/Makefile.am17
-rw-r--r--modules/pam_timestamp/Makefile.in51
-rw-r--r--modules/pam_timestamp/README.xml35
-rw-r--r--modules/pam_timestamp/hmac_openssl_wrapper.c9
-rw-r--r--modules/pam_timestamp/hmacsha1.c16
-rw-r--r--modules/pam_timestamp/pam_timestamp.821
-rw-r--r--modules/pam_timestamp/pam_timestamp.8.xml53
-rw-r--r--modules/pam_timestamp/pam_timestamp.c49
-rw-r--r--modules/pam_timestamp/pam_timestamp_check.814
-rw-r--r--modules/pam_timestamp/pam_timestamp_check.8.xml45
-rw-r--r--modules/pam_tty_audit/Makefile.in12
-rw-r--r--modules/pam_tty_audit/README.xml30
-rw-r--r--modules/pam_tty_audit/pam_tty_audit.816
-rw-r--r--modules/pam_tty_audit/pam_tty_audit.8.xml47
-rw-r--r--modules/pam_umask/Makefile.am4
-rw-r--r--modules/pam_umask/Makefile.in15
-rw-r--r--modules/pam_umask/README.xml32
-rw-r--r--modules/pam_umask/pam_umask.818
-rw-r--r--modules/pam_umask/pam_umask.8.xml51
-rw-r--r--modules/pam_unix/Makefile.am11
-rw-r--r--modules/pam_unix/Makefile.in33
-rw-r--r--modules/pam_unix/README.xml32
-rw-r--r--modules/pam_unix/bigcrypt.c13
-rw-r--r--modules/pam_unix/md5.c29
-rw-r--r--modules/pam_unix/md5_crypt.c4
-rw-r--r--modules/pam_unix/pam_unix.856
-rw-r--r--modules/pam_unix/pam_unix.8.xml89
-rw-r--r--modules/pam_unix/pam_unix_passwd.c17
-rw-r--r--modules/pam_unix/passverify.c21
-rw-r--r--modules/pam_unix/passverify.h2
-rw-r--r--modules/pam_unix/support.c4
-rw-r--r--modules/pam_unix/support.h8
-rw-r--r--modules/pam_unix/unix_chkpwd.88
-rw-r--r--modules/pam_unix/unix_chkpwd.8.xml23
-rw-r--r--modules/pam_unix/unix_chkpwd.c2
-rw-r--r--modules/pam_unix/unix_update.88
-rw-r--r--modules/pam_unix/unix_update.8.xml23
-rw-r--r--modules/pam_unix/unix_update.c11
-rw-r--r--modules/pam_unix/yppasswd.h81
-rw-r--r--modules/pam_unix/yppasswd_xdr.c52
-rw-r--r--modules/pam_userdb/Makefile.am4
-rw-r--r--modules/pam_userdb/Makefile.in15
-rw-r--r--modules/pam_userdb/README.xml32
-rw-r--r--modules/pam_userdb/pam_userdb.826
-rw-r--r--modules/pam_userdb/pam_userdb.8.xml67
-rw-r--r--modules/pam_userdb/pam_userdb.c7
-rw-r--r--modules/pam_usertype/Makefile.am4
-rw-r--r--modules/pam_usertype/Makefile.in15
-rw-r--r--modules/pam_usertype/README4
-rw-r--r--modules/pam_usertype/README.xml32
-rw-r--r--modules/pam_usertype/pam_usertype.818
-rw-r--r--modules/pam_usertype/pam_usertype.8.xml44
-rw-r--r--modules/pam_usertype/pam_usertype.c15
-rw-r--r--modules/pam_warn/Makefile.am4
-rw-r--r--modules/pam_warn/Makefile.in15
-rw-r--r--modules/pam_warn/README.xml32
-rw-r--r--modules/pam_warn/pam_warn.88
-rw-r--r--modules/pam_warn/pam_warn.8.xml31
-rw-r--r--modules/pam_wheel/Makefile.am4
-rw-r--r--modules/pam_wheel/Makefile.in15
-rw-r--r--modules/pam_wheel/README.xml32
-rw-r--r--modules/pam_wheel/pam_wheel.820
-rw-r--r--modules/pam_wheel/pam_wheel.8.xml59
-rw-r--r--modules/pam_xauth/Makefile.am4
-rw-r--r--modules/pam_xauth/Makefile.in15
-rw-r--r--modules/pam_xauth/README.xml35
-rw-r--r--modules/pam_xauth/pam_xauth.816
-rw-r--r--modules/pam_xauth/pam_xauth.8.xml65
-rw-r--r--modules/pam_xauth/pam_xauth.c22
-rw-r--r--pgp.keys.asc284
-rw-r--r--po/Linux-PAM.pot102
-rw-r--r--po/af.po100
-rw-r--r--po/am.po100
-rw-r--r--po/ar.po104
-rw-r--r--po/as.po107
-rw-r--r--po/az.po100
-rw-r--r--po/be.po100
-rw-r--r--po/bg.gmobin12566 -> 12272 bytes
-rw-r--r--po/bg.po111
-rw-r--r--po/bn.po107
-rw-r--r--po/bn_IN.po107
-rw-r--r--po/bs.po100
-rw-r--r--po/ca.gmobin10400 -> 10174 bytes
-rw-r--r--po/ca.po111
-rw-r--r--po/cs.gmobin9857 -> 10207 bytes
-rw-r--r--po/cs.po123
-rw-r--r--po/cy.po100
-rw-r--r--po/da.gmobin9846 -> 9630 bytes
-rw-r--r--po/da.po111
-rw-r--r--po/de.gmobin10185 -> 10373 bytes
-rw-r--r--po/de.po117
-rw-r--r--po/de_CH.po100
-rw-r--r--po/el.po100
-rw-r--r--po/eo.gmobin3833 -> 3778 bytes
-rw-r--r--po/eo.po106
-rw-r--r--po/es.gmobin7937 -> 8677 bytes
-rw-r--r--po/es.po143
-rw-r--r--po/et.gmobin2251 -> 2320 bytes
-rw-r--r--po/et.po117
-rw-r--r--po/eu.po100
-rw-r--r--po/fa.po100
-rw-r--r--po/fi.gmobin10046 -> 10236 bytes
-rw-r--r--po/fi.po120
-rw-r--r--po/fr.gmobin10700 -> 10455 bytes
-rw-r--r--po/fr.po111
-rw-r--r--po/ga.po107
-rw-r--r--po/gl.po100
-rw-r--r--po/gu.po107
-rw-r--r--po/he.gmobin10834 -> 11018 bytes
-rw-r--r--po/he.po116
-rw-r--r--po/hi.po107
-rw-r--r--po/hr.gmobin565 -> 10187 bytes
-rw-r--r--po/hr.po324
-rw-r--r--po/hu.po107
-rw-r--r--po/ia.po107
-rw-r--r--po/id.po104
-rw-r--r--po/is.po100
-rw-r--r--po/it.gmobin10029 -> 9816 bytes
-rw-r--r--po/it.po111
-rw-r--r--po/ja.gmobin7744 -> 10715 bytes
-rw-r--r--po/ja.po234
-rw-r--r--po/ka.gmobin2579 -> 15501 bytes
-rw-r--r--po/ka.po285
-rw-r--r--po/kk.gmobin12453 -> 12812 bytes
-rw-r--r--po/kk.po116
-rw-r--r--po/km.po104
-rw-r--r--po/kn.po107
-rw-r--r--po/ko.gmobin10148 -> 10589 bytes
-rw-r--r--po/ko.po274
-rw-r--r--po/kw_GB.po100
-rw-r--r--po/ky.po100
-rw-r--r--po/lt.po100
-rw-r--r--po/lv.po100
-rw-r--r--po/mk.po100
-rw-r--r--po/ml.po107
-rw-r--r--po/mn.po100
-rw-r--r--po/mr.po107
-rw-r--r--po/ms.po100
-rw-r--r--po/my.po100
-rw-r--r--po/nb.gmobin9536 -> 9290 bytes
-rw-r--r--po/nb.po111
-rw-r--r--po/ne.po100
-rw-r--r--po/nl.gmobin10020 -> 9796 bytes
-rw-r--r--po/nl.po111
-rw-r--r--po/nn.gmobin9531 -> 9283 bytes
-rw-r--r--po/nn.po108
-rw-r--r--po/or.gmobin15523 -> 15419 bytes
-rw-r--r--po/or.po109
-rw-r--r--po/pa.gmobin14212 -> 14674 bytes
-rw-r--r--po/pa.po120
-rw-r--r--po/pl.gmobin10235 -> 10424 bytes
-rw-r--r--po/pl.po118
-rw-r--r--po/pt.gmobin10388 -> 10144 bytes
-rw-r--r--po/pt.po111
-rw-r--r--po/pt_BR.gmobin9795 -> 9570 bytes
-rw-r--r--po/pt_BR.po111
-rw-r--r--po/ro.gmobin10103 -> 10688 bytes
-rw-r--r--po/ro.po206
-rw-r--r--po/ru.gmobin13398 -> 13446 bytes
-rw-r--r--po/ru.po105
-rw-r--r--po/si.po104
-rw-r--r--po/sk.gmobin9917 -> 9855 bytes
-rw-r--r--po/sk.po127
-rw-r--r--po/sl.gmobin546 -> 1695 bytes
-rw-r--r--po/sl.po149
-rw-r--r--po/sq.po100
-rw-r--r--po/sr.po107
-rw-r--r--po/sr@latin.po107
-rw-r--r--po/sv.gmobin9864 -> 10038 bytes
-rw-r--r--po/sv.po117
-rw-r--r--po/ta.po107
-rw-r--r--po/te.po107
-rw-r--r--po/tg.po100
-rw-r--r--po/th.po100
-rw-r--r--po/tr.gmobin9969 -> 10133 bytes
-rw-r--r--po/tr.po117
-rw-r--r--po/uk.gmobin13290 -> 13484 bytes
-rw-r--r--po/uk.po118
-rw-r--r--po/ur.po100
-rw-r--r--po/vi.po107
-rw-r--r--po/yo.po100
-rw-r--r--po/zh_CN.gmobin9086 -> 8999 bytes
-rw-r--r--po/zh_CN.po190
-rw-r--r--po/zh_HK.gmobin476 -> 570 bytes
-rw-r--r--po/zh_HK.po112
-rw-r--r--po/zh_TW.gmobin9083 -> 8841 bytes
-rw-r--r--po/zh_TW.po111
-rw-r--r--po/zu.po104
-rw-r--r--tests/Makefile.in12
-rw-r--r--xtests/Makefile.am4
-rw-r--r--xtests/Makefile.in41
-rwxr-xr-xxtests/run-xtests.sh27
-rw-r--r--xtests/shells.conf3
-rw-r--r--xtests/tst-pam_shells.c68
-rw-r--r--xtests/tst-pam_shells.pamd2
-rwxr-xr-xxtests/tst-pam_shells.sh11
747 files changed, 21751 insertions, 15312 deletions
diff --git a/ChangeLog b/ChangeLog
index df5f1749..daf343bf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1531 @@
+2023-05-07 Christian Göttsche <cgzones@googlemail.com>
+
+ modules: update Linux detection.
+ GCC and Clang only define the macro `linux` when using the GNU dialect
+ of C (e.g. -std=gnu11 instead of -std=c11). Since `linux` is also not
+ in a reserved namespace it might be target of collisions.
+ Use the canonical macro `__linux__` instead (already used in
+ pam_limits.c).
+
+2023-04-29 Dmitry V. Levin <ldv@strace.io>
+
+ po: update .pot and .po files.
+ Regenerate po/Linux-PAM.pot and po/*.po using "make -C po update-po"
+ command. This essentially updates the project version, line numbers,
+ and timestamps.
+
+ Prepare for 1.5.3 release.
+ * configure.ac (AC_INIT): Raise version to 1.5.3.
+ * NEWS: Update.
+
+2023-04-23 Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
+
+ po: update translations using Weblate (Romanian)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ro/
+
+2023-04-23 김인수 <simmon@nplob.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2023-04-20 Dmitry V. Levin <ldv@strace.io>
+
+ pam_succeed_if: do not use the result of keyword substitution for keyword match
+ * modules/pam_succeed_if/pam_succeed_if.c (evaluate): Do not use the
+ result of keyword substitution for keyword match.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/560
+
+2023-04-20 Dmitry V. Levin <ldv@strace.io>
+
+ ci: add --enable-openssl jobs to the ci matrix.
+ Link: https://github.com/linux-pam/linux-pam/pull/550#issuecomment-1490362439
+
+2023-04-20 Stefan Schubert <schubi@suse.de>
+
+ build: fix --enable-openssl.
+ * Make.xml.rules.in: Avoid conflicting profile.condition settings.
+ * configure.ac: Likewise.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/553
+
+2023-04-20 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_timestamp: Only build hmacfile when no openssl.
+ * modules/pam_timestamp/Makefile.am: Only build hmacfile target when
+ openssl isn't enabled.
+
+2023-04-20 Luca Boccassi <bluca@debian.org>
+
+ man: clarify PAM_DATA_SILENT in pam_set_data.3.
+ pam_end.3 has additional and important information about PAM_DATA_SILENT,
+ copy it to pam_set_data.3 since that describes the cleanup callback where
+ it will be set.
+
+2023-04-20 Mark Huang <huangyuxi99@gmail.com>
+
+ fix a grammar mistake.
+
+2023-04-06 Thorsten Kukuk <kukuk@suse.com>
+
+ configure: Disable NIS if header files are missing.
+ configure.ac: Disable NIS if RPC or YP header files are missing
+ modules/pam_unix/support.c: Use HAVE_NIS to check for header file presence
+ modules/pam_unix/pam_unix_passwd.c: Use HAVE_NIS, too
+
+2023-04-04 Thorsten Kukuk <kukuk@suse.com>
+
+ doc: Include custom-html.xsl.in and custom-man.xsl.in.
+ doc/Makefile.am: Replace custom-html.xsl and custom-man.xsl with
+ custom-html.xsl.in and custom-man.xsl.in EXTRA_DIST
+
+2023-03-31 Dmitry V. Levin <ldv@strace.io>
+
+ treewide: fix unnecessary $ on arithmetic variables.
+ This should fix shellcheck warning SC2004.
+
+2023-03-30 Dmitry V. Levin <ldv@strace.io>
+
+ pgp.keys.asc: update.
+ * pgp.keys.asc: Replace with the key used to sign v1.5.2.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/544
+
+2023-03-30 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_timestamp: fix build failure.
+ bcba17939e1b1a568cd4a764534cde74d37078cc started using pam_overwrite_n()
+ without providing the definition to this function, which causes a build
+ failure.
+
+ modules/pam_timestamp/hmac_openssl_wrapper.c: include pam_inline.h
+
+2023-03-14 A S Alam <amanpreet.alam@gmail.com>
+
+ po: update translations using Weblate (Punjabi)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/pa/
+
+2023-03-14 Thorsten Kukuk <kukuk@suse.com>
+
+ manual pages: document usage of $DISPLAY and PAM_TTY.
+ man/pam_item_types_std.inc.xml: In the past, PAM_TTY was used for tty
+ devices and $DISPLAY variables for X-based applications. With the
+ introduction of PAM_DISPLAY PAM_TTY should only be used for devices.
+
+2023-03-04 Christian Göttsche <cgzones@googlemail.com>
+
+ libpam: simplify string copying using strdup.
+
+2023-02-28 Christian Göttsche <cgzones@googlemail.com>
+
+ modules: make use of secure memory erasure.
+ Use empty initialization of structs to minimize the memset() usage, to
+ reduce the amount of calls which are not sensitive.
+
+ Non trivial changes:
+
+ - pam_env:
+ * erase environment variables where possible
+
+ - pam_exec:
+ * erase responce on error
+ * erase auth token
+
+ - pam_pwhistory:
+ * erase buffers containing old passwords
+
+ - pam_selinux: skip overwriting data structure consisting of only
+ pointers to insensitive data, which also gets free'd afterwards (so
+ it currently does not protect against double-free or use-after-free on
+ the member pointers)
+
+ - pam_unix: erase cipher data in more places
+
+ - pam_userdb: erase password hashes
+
+2023-02-28 Christian Göttsche <cgzones@googlemail.com>
+
+ libpamc: make use of secure memory erasure.
+
+ libpam_misc: make use of secure memory erasure.
+
+2023-02-28 Christian Göttsche <cgzones@googlemail.com>
+
+ libpam: make use of secure memory erasure.
+ Non trivial changes:
+
+ - erase responses in pam_get_authtok_internal() on error branch
+
+2023-02-28 Christian Göttsche <cgzones@googlemail.com>
+
+ libpam: introduce secure memory erasure helpers.
+ Avoid compiler optimizations to elide the memory erasure by using a
+ secure method: either memset_explicit() [C23], bzero_explicit() [glibc
+ 2.25] or a manual memory barrier.
+
+ Since the current helpers _pam_overwrite*() and _pam_drop_reply() are
+ publicly exported, create new ones in "pam_inline.h" and deprecate the
+ old ones.
+
+2023-02-28 Christian Göttsche <cgzones@googlemail.com>
+
+ pam_env: use helper to free string list.
+ Free the environment variables list via the designated helper
+ free_string_array() rather than free its elements in a loop, which might
+ skip some.
+
+ pam_env: override undefined pointer after asprintf failure.
+ On failure the content of the string pointer passed to asprintf(3) is
+ undefined. Set to NULL before free'ing the parent array.
+
+2023-02-28 Thorsten Kukuk <kukuk@suse.com>
+
+ Y2038: use logind instead of utmp.
+ The struct utmp from glibc uses on many 64bit architectures a 32bit
+ time_t for compatibility with a 32bit userland, which means utmp will
+ not survive the year 2038 (32bit time_t overflow). Use the data from
+ logind instead of utmp.
+
+ * configure.ac: Add option --enable-logind
+ * modules/pam_issue/Makefile.am: Add CFLAGS/LIBS for logind support
+ * modules/pam_issue/pam_issue.c: Use sd_get_sessions instead of utmp
+ * modules/pam_timestamp/Makefile.am: Add CFLAGS/LIBS for logind support
+ * modules/pam_timestamp/pam_timestamp.c: query logind for login time
+
+2023-02-20 Martin Srebotnjak <miles@filmsi.net>
+
+ po: update translations using Weblate (Slovenian)
+ Currently translated at 16.8% (17 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/sl/
+
+2023-02-20 Yaron Shahrabani <sh.yaron@gmail.com>
+
+ po: update translations using Weblate (Hebrew)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/he/
+
+2023-02-17 Thorsten Kukuk <kukuk@suse.com>
+
+ manual pages: enhance pam.d documentation.
+ Make /usr/lib/pam.d and <vendordir>/pam.d more visible in the standard
+ manual pages, so that people don't assume there is only /etc/pam.d
+
+ * doc/man/pam.8.xml: Don't always speak about /etc/pam.d only
+ * doc/man/pam.conf-desc.xml: Don't always speak about /etc/pam.d only
+ * doc/man/pam.conf-dir.xml: Explain search path for pam config files
+ * doc/man/pam.conf.5.xml: Add filelist with all pam.d directories
+
+2023-02-15 Thorsten Kukuk <kukuk@suse.com>
+
+ pam_lastlog: deprecate it and disable by default.
+ pam_lastlog uses utmp, wtmp, btmp and lastlog. None of them is Y2038
+ safe, even on 64bit architectures. Most 64bit architectures use 32bit
+ time_t for compat reasons with 32bit userland.
+ Additionally, all relevant tools for which pam_lastlog would make sense
+ already have their own support for all four files, so this module will
+ most likely only create duplicate entries.
+
+ * configure.ac: don't build pam_lastlog by default.
+ * ci/run-build-and-tests.sh: enable pam_lastlog.
+
+2023-02-14 Thorsten Kukuk <kukuk@suse.com>
+
+ libpam: use getlogin() from libc and not utmp.
+ utmp uses 32bit time_t for compatibility with 32bit userland on some
+ 64bit systems and is thus not Y2038 safe. Use getlogin() from libc
+ which avoids using utmp and is more safe than the old utmp-based
+ implementation by using /proc/self/loginuid.
+
+ * libpam/pam_modutil_getlogin.c: Use getlogin() instead of parsing utmp
+
+2023-02-07 Josef Hruska <hrusjos@gmail.com>
+
+ po: update translations using Weblate (Czech)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/cs/
+
+2023-02-07 Seong-ho Cho <darkcircle.0426@gmail.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2023-02-07 Gogo Gogsi <linux.hr@protonmail.com>
+
+ po: update translations using Weblate (Croatian)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/hr/
+
+2023-02-07 Baurzhan Muftakhidinov <baurthefirst@gmail.com>
+
+ po: update translations using Weblate (Kazakh)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/kk/
+
+2023-02-07 Ettore Atalan <atalanttore@googlemail.com>
+
+ po: update translations using Weblate (German)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/de/
+
+2023-02-07 Luna Jernberg <bittin@reimu.nl>
+
+ po: update translations using Weblate (Swedish)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/sv/
+
+2023-02-07 Jan Kuparinen <copper_fin@hotmail.com>
+
+ po: update translations using Weblate (Finnish)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/fi/
+
+2023-02-07 Yuri Chornoivan <yurchor@ukr.net>
+
+ po: update translations using Weblate (Ukrainian)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/uk/
+
+2023-02-07 Oğuz Ersen <oguz@ersen.moe>
+
+ po: update translations using Weblate (Turkish)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/tr/
+
+2023-02-07 Piotr Drąg <piotrdrag@gmail.com>
+
+ po: update translations using Weblate (Polish)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/pl/
+
+2023-02-07 김인수 <simmon@nplob.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2023-02-07 Temuri Doghonadze <temuri.doghonadze@gmail.com>
+
+ po: update translations using Weblate (Georgian)
+ Currently translated at 100.0% (101 of 101 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ka/
+
+2023-02-07 Stefan Schubert <schubi@suse.de>
+
+ build: use <vendordir>/security directory for installation if it has been set
+ Otherwise the corresponding files are still installed in /etc/security.
+
+ * configure.ac (AC_SUBST): Add VENDOR_SCONFIGDIR.
+ (AM_CONDITIONAL): Add HAVE_VENDORDIR.
+ * modules/*/Makefile.am (secureconfdir): Set to VENDOR_SCONFIGDIR
+ if HAVE_VENDORDIR has been set, otherwise to SCONFIGDIR.
+
+2023-02-07 Dmitry V. Levin <ldv@strace.io>
+
+ ci: make VENDORDIR based on $prefix for the clang case as well.
+ * .github/workflows/ci.yml (clang-14): Change VENDORDIR from /usr/etc to
+ ${prefix}/share/etc, this should help to check that the code no longer
+ relies on the assumption that VENDORDIR == /usr/etc.
+
+ Complements: 0d1c62eb4733 ("ci: make VENDORDIR based on $prefix")
+
+2023-02-05 Dmitry V. Levin <ldv@strace.io>
+
+ ci: make VENDORDIR based on $prefix.
+ * ci/run-build-and-tests.sh: Accept VENDORDIR that does not start with /.
+ * .github/workflows/ci.yml (VENDORDIR): Change from /usr/etc to
+ ${prefix}/share/etc, this should help to check that the code no longer
+ relies on the assumption that VENDORDIR == /usr/etc.
+
+2023-02-04 Dmitry V. Levin <ldv@strace.io>
+
+ pam_env: do not assume in tests that VENDORDIR is /usr/etc.
+ * modules/pam_env/tst-pam_env-retval.c: Include <errno.h> and <libgen.h>.
+ [VENDORDIR] (dir, dir_usr, dir_usr_etc): Remove.
+ [VENDORDIR] (mkdir_p, rmdir_p): New functions.
+ (setup, cleanup) [VENDORDIR]: Use them.
+
+2023-02-03 Dmitry V. Levin <ldv@strace.io>
+
+ pam_env: do not hardcode /usr/etc into tests.
+ * modules/pam_env/tst-pam_env-retval.c: Replace /usr/etc/security with
+ VENDOR_SCONFIGDIR, /usr/etc with VENDORDIR. Do not define and use
+ VENDORDIR based variables unless VENDORDIR is defined.
+
+ Fixes: 6135c45347b6 ("pam_env: Use vendor specific pam_env.conf and environment as fallback")
+
+2023-02-02 Dmitry V. Levin <ldv@strace.io>
+
+ pam_env: do not hardcode /usr/etc into documentation.
+ * modules/pam_env/pam_env.conf.5.xml: Replace /usr/etc with %vendordir%.
+
+ Fixes: 6135c45347b6 ("pam_env: Use vendor specific pam_env.conf and environment as fallback")
+
+2023-02-01 Dmitry V. Levin <ldv@strace.io>
+
+ pam_env: fix VENDOR_DEFAULT_ETC_ENVFILE.
+ * modules/pam_env/pam_env.c (VENDOR_DEFAULT_ETC_ENVFILE): Assume that
+ VENDORDIR already includes "/etc".
+
+ Fixes: 6135c45347b6 ("pam_env: Use vendor specific pam_env.conf and environment as fallback")
+
+2023-01-31 Thorsten Kukuk <kukuk@suse.com>
+
+ pam_unix: don't link against yppasswd_xdr if NIS is disabled.
+ * configure.ac: Define HAVE_NIS if NIS is enabled.
+ * modules/pam_unix/Makefile.am: Don't link against yppasswd_xdr.c
+ if NIS is disabled.
+ * modules/pam_unix/pam_unix_passwd.c: Don't redefine HAVE_NIS.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/523
+
+2023-01-30 Christian Göttsche <cgzones@googlemail.com>
+
+ Enable format compiler warnings.
+ * libpam/include/pam_cc_compat.h (DIAG_PUSH_IGNORE_FORMAT_NONLITERAL,
+ DIAG_POP_IGNORE_FORMAT_NONLITERAL): New macros.
+ * libpam/pam_handlers.c (_pam_open_config_file): Use them to exempt
+ usage of format string literals from a constant array.
+ * m4/warn_lang_flags.m4 (gl_WARN_ADD): Add -Wformat=2.
+
+ Enable undef warning.
+ * modules/pam_unix/pam_unix_passwd.c: Wrap checks for configure macros
+ into defined() operator.
+ * m4/warn_lang_flags.m4 (gl_WARN_ADD): Add -Wundef.
+
+2023-01-30 Christian Göttsche <cgzones@googlemail.com>
+
+ Enable additional compiler warnings.
+ The current codebase should comply with those.
+
+ * m4/warn_lang_flags.m4 (gl_WARN_ADD): Add -Winit-self,
+ -Wnull-dereference, and -Wunused.
+
+2023-01-27 Stefan Schubert <schubi@suse.de>
+
+ pam_pwhistory: use vendor specific pwhistory.conf as fallback.
+ Use the vendor directory defined by --enable-vendordir=DIR configure
+ option as fallback for the distribution provided default config file
+ if there is no configuration in /etc.
+
+ * modules/pam_pwhistory/pam_pwhistory.8.xml: Describe pwhistory.conf
+ * modules/pam_pwhistory/pwhistory_config.c [VENDOR_SCONFIGDIR]
+ (VENDOR_PWHISTORY_DEFAULT_CONF): New macro.
+ (parse_config_file) [VENDOR_PWHISTORY_DEFAULT_CONF]: Try to open
+ VENDOR_PWHISTORY_DEFAULT_CONF if PWHISTORY_DEFAULT_CONF file does not
+ exist.
+
+2023-01-27 Stefan Schubert <schubi@suse.de>
+
+ pam_pwhistory: add a basic test for return values.
+ * modules/pam_pwhistory/tst-pam_pwhistory-retval.c: New file.
+ * modules/pam_pwhistory/Makefile.am (TESTS): Add $(check_PROGRAMS).
+ (check_PROGRAMS, tst_pam_pwhistory_retval_LDADD): New variables.
+
+2023-01-25 Christian Göttsche <cgzones@googlemail.com>
+
+ examples: ignore generated tty_conv.
+
+2023-01-24 Thorsten Kukuk <kukuk@suse.com>
+
+ pam_unix: regenerate yppasswd.h/yppasswd_xdr.c (#480)
+ Regenerate yppasswd.h and yppasswd_xdr.c from yppasswd.x (libnsl) to
+ avoid GPL code in a PAM module.
+
+ Link: https://github.com/thkukuk/libnsl/blob/master/src/rpcsvc/yppasswd.x
+
+2023-01-24 Dmitry V. Levin <ldv@strace.io>
+
+ libpam: remove dead code in pam_dynamic.c.
+ Apparently, the PAM_SHL variant cannot be compiled since the very first
+ commit back in 2005 when it was introduced, and another variant uses
+ PAM_DYLD which is virtually unknown to search engines.
+
+ * libpam/pam_dynamic.c [PAM_SHL || PAM_DYLD]: Remove.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/477
+
+2023-01-24 Christian Göttsche <cgzones@googlemail.com>
+
+ pam_selinux: treat getenforce failures as enforcing.
+ security_getenforce(3) can return -1 on error; either because the
+ selinuxfs is not mounted or reading from /sys/fs/selinux/enforce failed.
+
+ Since security_getenforce(3) is either called after an approving call to
+ is_selinux_enabled(3) in create_context() or with populated module
+ data in restore_context(), which requires a previous pass of
+ create_context(), the selinuxfs should be mounted.
+ Reading from /sys/fs/selinux/enforce should never fail (except being
+ prohibited by the SElinux policy itself) since it is a public interface.
+
+ In the unlikely case of security_getenforce(3) nevertheless failing
+ continue execution as if the result was enforcing (likewise to
+ pam_sepermit and pam_rootok).
+
+2023-01-21 Dmitry V. Levin <ldv@strace.io>
+
+ .github: add gcc-12, clang-13, and clang-14 jobs.
+ * .github/workflows/ci.yml (gcc12-x86_64, clang14-x86_64,
+ clang13-x86_64): New jobs.
+ (gcc11-x86_64-vendordir): Rename to gcc12-x86_64-vendordir,
+ replace gcc-11 with gcc-12.
+ (clang12-x86_64-vendordir): Rename to clang14-x86_64-vendordir,
+ replace clang-12 with clang-14.
+
+2023-01-20 Dmitry V. Levin <ldv@strace.io>
+
+ .github: switch from ubuntu-20.04 to ubuntu-latest.
+ Switch runners to the latest Ubuntu LTS available, which is currently
+ Ubuntu 22.04. Also, remove old compiler versions from the ci matrix.
+
+ * .github/workflows/ci.yml (gcc8-x86_64, clang10-x86_64, clang9-x86_64,
+ clang8-x86_64): Remove.
+ (gcc11-x86_64-vendordir, gcc11-x86_64, gcc10-x86_64, gcc9-x86_64,
+ clang12-x86_64-vendordir, clang12-x86_64, clang11-x86_64): Replace
+ ubuntu-20.04 with ubuntu-latest.
+
+ Link: https://github.blog/changelog/2022-11-09-github-actions-ubuntu-latest-workflows-will-use-ubuntu-22-04/
+
+2023-01-19 Dmitry V. Levin <ldv@strace.io>
+
+ pam_unix: silence compiler warning in md5.c.
+ clang-14 insists on issuing the following warning:
+
+ In file included from md5_good.c:4:
+ md5.c:92:15: error: passing 1-byte aligned argument to 4-byte aligned parameter 1 of 'byteReverse' may result in an unaligned pointer access [-Werror,-Walign-mismatch]
+ byteReverse(ctx->in.c, 16);
+ ^
+ md5.c:101:15: error: passing 1-byte aligned argument to 4-byte aligned parameter 1 of 'byteReverse' may result in an unaligned pointer access [-Werror,-Walign-mismatch]
+ byteReverse(ctx->in.c, 16);
+ ^
+ md5.c:136:15: error: passing 1-byte aligned argument to 4-byte aligned parameter 1 of 'byteReverse' may result in an unaligned pointer access [-Werror,-Walign-mismatch]
+ byteReverse(ctx->in.c, 16);
+ ^
+ md5.c:145:14: error: passing 1-byte aligned argument to 4-byte aligned parameter 1 of 'byteReverse' may result in an unaligned pointer access [-Werror,-Walign-mismatch]
+ byteReverse(ctx->in.c, 14);
+ ^
+ md5.c:151:14: error: passing 1-byte aligned argument to 4-byte aligned parameter 1 of 'byteReverse' may result in an unaligned pointer access [-Werror,-Walign-mismatch]
+ byteReverse(ctx->buf.c, 4);
+ ^
+
+ * modules/pam_unix/md5.c (byteReverse): Use uint32 instead of
+ uint8_aligned, update all users.
+ (uint8_aligned): Remove unused type.
+
+2023-01-19 Dmitry V. Levin <ldv@strace.io>
+
+ pam_client.h: silence compiler warning.
+ gcc-12 insists on issuing the following warning:
+
+ In file included from libpamc.h:13,
+ from pamc_converse.c:9:
+ pamc_converse.c: In function 'pamc_converse':
+ include/security/pam_client.h:129:27: error: array subscript 'struct <anonymous>[0]' is partly outside array bounds of 'unsigned char[6]' [-Werror=array-bounds]
+ 129 | (*(old_p))->control = cntrl; \
+ | ^~
+ pamc_converse.c:209:5: note: in expansion of macro 'PAM_BP_RENEW'
+ 209 | PAM_BP_RENEW(prompt_p, PAM_BPC_FAIL, 0);
+ | ^~~~~~~~~~~~
+ include/security/pam_client.h:87:29: note: object of size 6 allocated by 'calloc'
+ 87 | # define PAM_BP_CALLOC calloc
+ | ^
+ include/security/pam_client.h:124:29: note: in expansion of macro 'PAM_BP_CALLOC'
+ 124 | if ((*(old_p) = PAM_BP_CALLOC(1, 1+__size))) { \
+ | ^~~~~~~~~~~~~
+ pamc_converse.c:209:5: note: in expansion of macro 'PAM_BP_RENEW'
+ 209 | PAM_BP_RENEW(prompt_p, PAM_BPC_FAIL, 0);
+ | ^~~~~~~~~~~~
+
+ * libpamc/include/security/pam_client.h (pamc_bp_t): Decorate the
+ structure pointed by pamc_bp_t pointer as packed. Despite being a part
+ of the API, the structure is not supposed to be used directly, and all
+ the interface macros were assuming from the very beginning that this
+ structure is packed.
+
+2023-01-19 Dmitry V. Levin <ldv@strace.io>
+
+ pam_limits: silence compiler warning.
+ gcc-12 insists on issuing the following warning:
+
+ In file included from /usr/include/string.h:535,
+ from pam_limits.c:24:
+ In function 'strncat',
+ inlined from 'check_logins' at pam_limits.c:287:6,
+ inlined from 'setup_limits' at pam_limits.c:1066:13,
+ inlined from 'pam_sm_open_session' at pam_limits.c:1267:14:
+ /usr/include/x86_64-linux-gnu/bits/string_fortified.h:138:10: error: '__builtin___strncat_chk' argument 2 declared attribute 'nonstring' [-Werror=stringop-overread]
+ 138 | return __builtin___strncat_chk (__dest, __src, __len,
+ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 139 | __glibc_objsize (__dest));
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~
+ In file included from /usr/include/utmp.h:29,
+ from pam_limits.c:37:
+ /usr/include/x86_64-linux-gnu/bits/utmp.h: In function 'pam_sm_open_session':
+ /usr/include/x86_64-linux-gnu/bits/utmp.h:66:8: note: argument 'ut_user' declared here
+ 66 | char ut_user[UT_NAMESIZE]
+ | ^~~~~~~
+
+ * modules/pam_limits/pam_limits.c (check_logins): Use memcpy instead of
+ strncat to pacify the compiler.
+
+2023-01-18 Dmitry V. Levin <ldv@altlinux.org>
+
+ .github: remove x86 and x32 jobs.
+ These types of jobs were implemented using the old version of the OS
+ that is currently being deprecated by github actions.
+
+ * .github/workflows/ci.yml (gcc11-x86-vendordir, gcc11-x86, gcc10-x86,
+ gcc9-x86, gcc8-x86, clang10-x86, clang9-x86, clang8-x86, gcc11-x32,
+ gcc10-x32, gcc9-x32, gcc8-x32): Remove.
+
+ Link: https://github.com/actions/runner-images/issues/6002
+
+2023-01-18 Cyril Duval <cyril.duval@diabolocom.com>
+
+ pam_listfile: fix pointer misuse leading to data corruption.
+ pam_listfile assumes the group being tested will be written at the end
+ of the argument list by carrying only a pointer to the value being
+ examined in 'myval'.
+
+ Therefore example
+
+ '''
+ auth required pam_listfile.so \
+ onerr=succeed apply=ftp item=user sense=deny file=/etc/ftpusers
+ '''
+
+ modified from https://linux.die.net/man/8/pam_listfile is not working because
+ 'apply_val' will point to the latest value of 'myval', which in this case will
+ be "/etc/ftpusers" instead of "ftp".
+
+ Fix this issue by copying the value of 'myval' instead of just taking
+ a reference pointer.
+
+2022-12-16 Stefan Schubert <schubi@suse.de>
+
+ doc: Update PAM documentation from DockBook 4 to DocBook 5.
+ Changed files
+ --------------
+
+ Make.xml.rules.in:
+ - Using RNG file instead of DTD file for checking XML files.
+ - Taking the correct stylesheet for README files.
+
+ doc/sag/Makefile.am, doc/adg/Makefile.am, doc/mwg/Makefile.am:
+ - Using RNG file instead of DTD file for checking XML files.
+
+ configure.ac:
+ - Adding a new option for selecting RNG check file (-enable-docbook-rng)
+ - Switching stylesheets to docbook 5
+ - Checking DocBook 5 environment instead of DocBook 4 environment
+
+ *.xml:
+ Update from DockBook 4 to DocBook 5
+
+2022-12-14 Stefan Schubert <schubi@suse.de>
+
+ pam_env: Use vendor specific pam_env.conf and environment as fallback.
+ Use the vendor directory as fallback for a distribution provided default
+ config if there is no one in /etc.
+
+ * Makefile.am: Add libeconf setting.
+ * pam_env.c: Take care about the fallback configuration in the vendor directory.
+ * pam_env.8.xml: Add description for the vendor directory.
+ * pam_env.conf.5.xml: Add description for the vendor directory.
+ * tst-pam_env-retval.c: Add tests for libeconf.
+ * configure.ac: Add ECONF settings for building man pages.
+
+2022-12-12 Stefan Schubert <schubi@suse.de>
+
+ pam_shells: Use the vendor directory as fallback for a distribution provided default config if there is no one in /etc.
+ If pam will be compiled with the option --enable-vendordir=<vendor_dir> and
+ NOT defined --disable-econf, the files which define valid login shells will
+ be parsed in following order:
+ - <vendor_dir>/shells
+ - <vendor_dir>/shells.d/*
+ - /etc/shells.d/shells
+ But all files in <vendor_dir> will be ingnored if the user has defined his
+ own file /etc/shells.
+ This commit solves issue: https://github.com/linux-pam/linux-pam/issues/498
+
+2022-12-07 Stefan Schubert <schubi@suse.de>
+
+ pam_shells: Added xtest test case.
+ Test case for checking pam_authenticate in pam_shells.
+
+2022-12-06 Thorsten Kukuk <kukuk@suse.com>
+
+ doc/man/Makefile.am: fix XMLS list.
+ The XMLS list of xml sources for the manual pages missed some xml files
+ and instead contained some nroff sources.
+
+2022-12-01 Valentin Lefebvre <valentin.lefebvre@suse.com>
+
+ pam_env: _parse_line: fix quoteflg handled.
+ Check if quote flag is positive before decrementing it. Otherwise, for
+ some use case, it could become negative, and have an unwanted empty string
+ instead of an undefined variable.
+
+2022-12-01 Dmitry V. Levin <ldv@altlinux.org>
+
+ .github: switch from actions/checkout@v2 to actions/checkout@v3.
+ This fixes the following diagnostic warning:
+
+ Node.js 12 actions are deprecated. For more information see:
+ https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/.
+
+ * .github/workflows/ci.yml: Replace actions/checkout@v2 with
+ actions/checkout@v3.
+
+2022-11-11 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update .pot and .po files.
+ Regenerate po/Linux-PAM.pot and po/*.po using "make -C po update-po"
+ command. This updates translations of pam_faillock and pam_mail
+ modules.
+
+2022-11-11 ed neville <ed@s5h.net>
+
+ pam_mail: adjust wording for no new mail.
+ Wording of no new mail message should be significantly different from
+ new mail so that it does not align in length or similar words.
+
+ * modules/pam_mail/pam_mail.c (report_mail): Change the wording of
+ no new mail message.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/465
+
+2022-11-11 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_faillock: fix typo in usage diagnostics.
+ * modules/pam_faillock/main.c (usage): Remove extra whitespace from the
+ usage diagnostics.
+
+ Fixes: 94f0f5ebb ("faillock: add support to print login failure info in legacy format")
+
+2022-11-11 Emilio Herrera <ehespinosa57@gmail.com>
+
+ po: update translations using Weblate (Spanish)
+ Currently translated at 90.0% (90 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/es/
+
+2022-11-11 김인수 <simmon@nplob.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2022-11-11 Temuri Doghonadze <temuri.doghonadze@gmail.com>
+
+ po: update translations using Weblate (Georgian)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ka/
+ Resolves: https://github.com/linux-pam/linux-pam/pull/485
+
+2022-11-07 Davin Shearer <2205472+scholarsmate@users.noreply.github.com>
+
+ pam_lastlog: fix file locking.
+ Fixed 2 instances in the pam_lastlog module where file locks were
+ not being enforced when reading and writing last login records.
+
+ * modules/pam_lastlog/pam_lastlog.c (last_login_write): The write lock
+ failure is fatal after 3 tries.
+ (last_login_read): The read lock failure is non-fatal after 3 tries.
+ It is non-fatal in the read case due to concerns about a possible DoS.
+
+2022-11-07 Deepak Das <ddas@redhat.com>
+
+ pam_faillock: avoid logging an erroneous consecutive login failure message
+ * modules/pam_faillock/pam_faillock.c (write_tally): Avoid logging
+ a consecutive login failure message for the root user in case when
+ even_deny_root is not set.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2082442
+
+2022-11-07 Deepak Das <ddas@redhat.com>
+
+ pam_faillock: Clarify missing user faillock files after reboot.
+ * modules/pam_faillock/faillock.conf.5.xml: Adding note related to missing
+ user specific faillock files after reboot.
+
+ * modules/pam_faillock/pam_faillock.8.xml: Adding note related to missing
+ user specific faillock files after reboot.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2062512
+
+2022-10-27 Stefan Schubert <schubi@suse.de>
+
+ doc: make stylesheets configurable.
+ Before this change, all stylesheets were hardcoded.
+ With this change, stylesheets can be defined at configure stage.
+
+ * configure.ac: Add new options to configure stylesheets:
+ --enable-html-stylesheet=FILE
+ --enable-txt-stylesheet=FILE
+ --enable-pdf-stylesheet=FILE
+ --enable-man-stylesheet=FILE
+ * doc/custom-html.xsl: Rename to doc/custom-html.xsl.in, parametrize html
+ stylesheet.
+ * doc/custom-man.xsl: Rename to doc/custom-man.xsl.in, parametrize man
+ stylesheet.
+ * doc/.gitignore: Add custom-man.xsl and custom-html.xsl.
+ * doc/adg/Makefile.am: Use stylesheet variables.
+ * doc/mwg/Makefile.am: Likewise.
+ * doc/sag/Makefile.am: Likewise.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/499
+
+2022-09-28 Felix Lechner <felix.lechner@lease-up.com>
+
+ libpam*: For uncommon prefixes, provide substitution variables in pkgconfig files.
+ Fix undefined references to ${exec_prefix} in pkgconfig files on Guix.
+ The subsequent declarations of ${libdir} and ${includedir} in the same
+ files require this commit when ${prefix} is set to something other
+ than /usr.
+
+ When the pkgconfig files were initially provided, the two lines added
+ here were dropped for what seemed like a good reason. [1] In the
+ common case of a /usr prefix, 'configure.ac' sets ${libdir} and
+ possibly ${includedir} explicitly [2] so the additional lines were
+ then not needed.
+
+ Guix and probably Nix too, however, depart from the Filesystem
+ Hierarchy Standard and require the missing lines. Without those lines,
+ the pkgconfig files are defective on Guix. [3]
+
+ Since working systems are not affected, the lines are added for all.
+ The fix was confirmed for Guix. One of the files looked like this:
+
+ prefix=/gnu/store/3mcmjilqrivrpb3hvps32lnbnyrxrzr8-linux-pam-1.5.2-1.dc2f566
+ exec_prefix=${prefix}
+ libdir=${exec_prefix}/lib
+ includedir=/gnu/store/3mcmjilqrivrpb3hvps32lnbnyrxrzr8-linux-pam-1.5.2-1.dc2f566/include/security
+
+ Name: PAM
+ Description: The primary Linux-PAM library. It is used by PAM modules and PAM-aware applications.
+ URL: http://www.linux-pam.org/
+ Version: 1.5.2
+ Cflags: -I${includedir}
+ Libs: -L${libdir} -lpam
+
+ * libpam/pam.pc.in, libpamc/pamc.pc.in, libpam_misc/pam_misc.pc.in:
+ Add @prefix@ and @exec_prefix@.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/466
+
+ [1] https://github.com/linux-pam/linux-pam/pull/369#discussion_r650557756
+ [2] https://github.com/linux-pam/linux-pam/blob/40c271164dbcebfc5304d0537a42fb42e6b6803c/configure.ac#L28-L36
+ [3] https://github.com/linux-pam/linux-pam/issues/466
+
+2022-09-27 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_lastlog: check localtime_r() return value.
+ Check the return value of localtime_r() before calling strftime(). This
+ function crashes if the argument is NULL.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2012871
+
+2022-09-12 Sam James <sam@gentoo.org>
+
+ configure.ac: fix implicit function declaration in mail spool directory check
+ Fixes the following error with Clang 15 (which makes implicit function
+ declarations an error by default):
+ ```
+ +error: call to undeclared library function 'exit' with type 'void (int) __attribute__((noreturn))'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
+ exit(0);
+ ^
+ note: include the header <stdlib.h> or explicitly provide a declaration for 'exit'
+ ```
+
+2022-07-18 H A <contact+fedora@hen.ee>
+
+ po: update translations using Weblate (Estonian)
+ Currently translated at 28.0% (28 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/et/
+
+2022-07-18 김인수 <simmon@nplob.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2022-07-18 Dingzhong Chen <wsxy162@gmail.com>
+
+ po: update translations using Weblate (Chinese (Simplified) (zh_CN))
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/zh_CN/
+
+2022-07-16 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_namespace: make sure the SIGCHLD handler is not reset too early.
+ * modules/pam_namespace/pam_namespace.c (inst_init): Make sure
+ the SIGCHLD handler is not reset too early by moving the sigaction
+ call right before the fork call.
+
+ pam_mkhomedir: make sure the SIGCHLD handler is not reset too early.
+ * modules/pam_mkhomedir/pam_mkhomedir.c (create_homedir): Make sure
+ the SIGCHLD handler is not reset too early by moving the sigaction
+ call right before the fork call.
+
+2022-07-15 dengbo <dengbo@uniontech.com>
+
+ pam_xauth: add SIGCHLD protection handle.
+ * modules/pam_xauth/pam_xauth.c (run_coprocess): Save the SIGCHLD
+ handler and reset it to the default before calling fork, restore the
+ handler after waitpid returns.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/469
+
+2022-07-15 dengbo <dengbo@uniontech.com>
+
+ pam_exec: add SIGCHLD protection handle.
+ * modules/pam_exec/pam_exec.c (call_exec): Save the SIGCHLD handler and
+ reset it to the default before calling fork, restore the handler after
+ waitpid returns.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/405
+
+2022-07-15 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_pwhistory: document config load from file.
+ * modules/pam_pwhistory/pam_pwhistory.8.xml: Add new option to select
+ configuration file to read.
+ * modules/pam_pwhistory/pwhistory.conf.5.xml: Document configuration
+ options for the file.
+ * modules/pam_pwhistory/Makefile.am (dist_man_MANS): Add pwhistory.conf.5.
+ (XMLS): Add pwhistory.conf.5.xml.
+
+2022-07-15 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_pwhistory: load config from file.
+ * modules/pam_pwhistory/pam_pwhistory.c: Load config from file and
+ provide new conf option to select the file.
+ * modules/pam_pwhistory/pwhistory_config.c: Parse config from file and
+ load to options structure.
+ * modules/pam_pwhistory/pwhistory_config.h: Move options_t structure and
+ define parse_config_file().
+ * modules/pam_pwhistory/Makefile.am (noinst_HEADERS): Add pwhistory_config.h.
+ (pam_pwhistory_la_SOURCES): Add pwhistory_config.c.
+ (dist_secureconf_DATA): Add pwhistory.conf.
+ * modules/pam_pwhistory/pwhistory.conf: New configuration file.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2068461
+
+2022-07-15 Iker Pedrosa <ipedrosa@redhat.com>
+
+ libpam: improve pam_modutil_search_key() doc.
+ * libpam/include/security/pam_modutil.h: Improve the
+ pam_modutil_search_key() interface documentation.
+
+2022-07-15 Dmitry V. Levin <ldv@altlinux.org>
+
+ _pam_add_handler: make sure struct handler is properly initialized on error path
+ * libpam/pam_handlers.c (_pam_add_handler): Use calloc instead of malloc
+ for struct handler allocation to avoid returning garbage in some fields
+ of the structure on error path.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/475
+
+2022-07-01 Dmitry V. Levin <ldv@altlinux.org>
+
+ .github: switch whitespace-errors job to ubuntu-latest.
+ While ubuntu-latest in ci is not necessarily the latest version of the
+ OS available in ci, whitespace-errors job should be agnostic to the
+ version being used, so use the default one.
+
+ * .github/workflows/ci.yml (whitespace-errors) <runs-on>: Change from
+ ubuntu-20.04 to ubuntu-latest.
+
+2022-07-01 Shreenidhi Shedi <sshedi@vmware.com>
+
+ faillock: add support to print login failure info in legacy format.
+ pam_tally2 had a simple and minimalstic output to show login failure
+ info, new output of faillock makes the output look a bit complex and
+ doesn't show failure counts in a straight manner.
+
+ This patch fixes the above issue by adding "--legacy-output" flag to
+ faillock which makes it possible to get output in pam_tally2 style.
+
+2022-07-01 Shreenidhi Shedi <sshedi@vmware.com>
+
+ faillock: refactor faillock info printing code.
+ Move the code to it's own function.
+
+2022-07-01 Shreenidhi Shedi <sshedi@vmware.com>
+
+ faillock: error out if user does not exist.
+ No need to do any further processing if a non existent username is given
+ to faillock.
+
+ For first time successful login, failure field should be 0 and faillock
+ should show something like pam_tally2 did.
+
+2022-06-30 Per Jessen <per@jessen.ch>
+
+ pam_motd: do not rely on all filesystems providing a filetype.
+ When using scandir() to look for MOTD files to display, we wrongly
+ relied on all filesystems providing a filetype. This is a fix to divert
+ to lstat() when we have no filetype. To maintain MT safety, it isn't
+ possible to use lstat() in the scandir() filter function, so all of the
+ filtering has been moved to an additional loop after scanning all the
+ motd dirs.
+ Also, remove superfluous alphasort from scandir(), we are doing
+ a qsort() later.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/455
+
+2022-06-30 Stefan Schubert <schubi@suse.de>
+
+ pam_namespace: use vendor specific namespace.conf and namespace.init as fallback
+ Use the vendor directory as fallback for a distribution provided default
+ config and scripts if there is no configuration in /etc.
+
+ pam_namespace.c: Take care about the fallback configuration in vendor directory.
+ pam_namespace.h: Define vendor specific files and directories.
+ pam_namespace.8.xml: Add description for vendor directories and files.
+ namespace.conf.5.xml: Add description for vendor directories and files.
+
+2022-06-30 Stefan Schubert <schubi@suse.de>
+
+ pam_limits: use vendor specific content in limits.d directory as fallback
+ Use the vendor directory as fallback for a distribution provided default
+ config if there is no configuration in /etc.
+
+ pam_limits.c: Take care about the fallback configuration in vendor directory.
+ pam_limits.8.xml: Add description for vendor directory.
+
+2022-06-30 Stefan Schubert <schubi@suse.de>
+
+ pam_access: use vendor specific access.conf as fallback.
+ Use the vendor directory as fallback for a distribution provided default config if there is no configuration in /etc.
+
+ * pam_access.c: Take care about the fallback configuration in vendor directory.
+ * pam_access.8.xml: Added description for vendor directory.
+
+2022-06-19 Dmitry V. Levin <ldv@altlinux.org>
+
+ .github: add a few vendordir enabled jobs.
+ * .github/workflows/ci.yml (gcc11-x86_64-vendordir,
+ clang12-x86_64-vendordir, gcc11-x86-vendordir): New jobs.
+
+ ci: add vendor directory configuration support.
+ * ci/run-build-and-tests.sh: Configure using --enable-vendordir option
+ when VENDORDIR environment variable is set.
+
+2022-05-24 liaohanqin <liaohanqin@uniontech.com>
+
+ doc: add pam_faillock module to SAG.
+
+2022-05-24 Iker Pedrosa <ipedrosa@redhat.com>
+
+ faillock: load configuration from file.
+ * modules/pam_faillock/main.c: Load configuration from file
+ * modules/pam_faillock/pam_faillock: Improve tally directory management
+ * modules/pam_faillock/faillock_config.c: Print errors
+ * modules/pam_faillock/faillock_config.h: Extend options structure and
+ define get_tally_dir().
+ * modules/pam_faillock/Makefile.am: Compile faillock_config.c for
+ faillock binary.
+ * modules/pam_faillock/faillock.8.xml: Update with the new configuration
+ option.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1978029
+
+2022-05-24 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_faillock: move config to its own file.
+ The configuration load can be reused by faillock.
+
+ * modules/pam_faillock/faillock_config.c: Move configuration loading
+ functions (read_config_file and set_conf_opt) to this file.
+ * modules/pam_faillock/faillock_config.h: Move configuration loading
+ macros and structures.
+ * modules/pam_faillock/Makefile.am: Add faillock_config.
+ * modules/pam_faillock/faillock.h: Remove configuration loading macros.
+ * modules/pam_faillock/pam_faillock.c: Remove configuration loading
+ functions, macros and structures.
+
+2022-04-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_env: reorder definitions of static functions to avoid forward declarations
+ * modules/pam_env/pam_env.c (_assemble_line, _parse_line, _check_var,
+ _clean_var, _expand_arg, _pam_get_item_byname, _define_var,
+ _undefine_var): Move definitions of static functions before their first
+ use to avoid forward declarations cluttering the code.
+
+ pam_issue: reorder definitions of static functions to avoid forward declarations
+ * modules/pam_issue/pam_issue.c (read_issue_raw, read_issue_quoted):
+ Move definitions of static functions before their first use to avoid
+ forward declarations cluttering the code.
+
+2022-04-18 A S Alam <amanpreet.alam@gmail.com>
+
+ po: update translations using Weblate (Punjabi)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/pa/
+
+2022-04-18 Seong-ho Cho <darkcircle.0426@gmail.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2022-03-11 Stefan Schubert <schubi@suse.de>
+ Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_env: add a test of return values.
+ * modules/pam_env/tst-pam_env-retval.c: New file.
+ * modules/pam_env/Makefile.am (TESTS): Add $(check_PROGRAMS).
+ (check_PROGRAMS, tst_pam_env_retval_LDADD): New variables.
+
+2022-03-11 Thorsten Kukuk <kukuk@suse.com>
+
+ pam_access: handle hostnames in access.conf.
+ According to the manual page, the following entry is valid but does not
+ work:
+ -:root:ALL EXCEPT localhost
+
+ See https://bugzilla.suse.com/show_bug.cgi?id=1019866
+
+ Patched is based on PR#226 from Josef Moellers
+
+2022-02-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_exec: remove redundant free() invocations.
+ In the child process, freeing memory right before pam_syslog()
+ followed by _exit(ENOMEM) is useless.
+
+ * modules/pam_exec/pam_exec.c (call_exec): Do not call free(envlist).
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/444
+
+2022-02-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_exec: remove redundant strdup.
+ In the child process, the elements of argv[] are not modified, so there
+ is no need to copy strings.
+
+ * modules/pam_exec/pam_exec.c (call_exec): Do not call strdup on argv[]
+ elements during arggv[] initialization.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/446
+
+2022-02-24 Thorsten Kukuk <kukuk@suse.com>
+
+ pam_nologin: don't print empty message.
+
+2022-02-21 Stefan Schubert <schubi@suse.de>
+
+ pam_time: fix clang compilation warning.
+ Fix the following compilation warning reported by clang:
+ "result of comparison against a string literal is unspecified
+ (use strcmp instead)".
+
+ * pam_time.c (_pam_parse): Do not compare char* string with a constant.
+
+2022-02-21 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_usertype: only use SYS_UID_MAX for system users.
+ * modules/pam_usertype/pam_usertype.c (pam_usertype_is_system): Stop
+ using SYS_UID_MIN to check if it is a system account, because all
+ accounts below the SYS_UID_MAX are system users.
+ * modules/pam_usertype/pam_usertype.8.xml: Remove reference to SYS_UID_MIN
+ as it is no longer used to calculate the system accounts.
+ * configure.ac: Remove PAM_USERTYPE_SYSUIDMIN.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1949137
+
+2022-02-21 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_keyinit: thread-safe implementation.
+ * modules/pam_keyinit/pam_keyinit.c: Bypass setre*id() C library calls
+ with kernel calls and change global variables definitions to be
+ thread-safe.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1997969
+ Co-Authored-By: Andreas Schneider <asn@samba.org>
+
+2022-02-09 pan chenbo <panchenbo@uniontech.com>
+
+ po: update translations using Weblate (Chinese (Simplified) (zh_CN))
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/zh_CN/
+
+2022-02-09 Gogo Gogsi <linux.hr@protonmail.com>
+
+ po: update translations using Weblate (Croatian)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/hr/
+
+2022-02-09 Emilio Herrera <ehespinosa57@gmail.com>
+
+ po: update translations using Weblate (Spanish)
+ Currently translated at 82.0% (82 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/es/
+
+2022-02-09 simmon <simmon@nplob.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2022-02-09 Ondrej Sulek <feonsu@gmail.com>
+
+ po: update translations using Weblate (Slovak)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/sk/
+
+2022-02-09 chong gao <zhuzaifangxuele@gmail.com>
+
+ po: update translations using Weblate (Chinese (Hong Kong) (zh_HK))
+ Currently translated at 1.0% (1 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/zh_HK/
+
+2022-02-09 Tomohiro KATO <tomop@teamgedoh.net>
+
+ po: update translations using Weblate (Japanese)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ja/
+
+2022-02-08 Stefan Schubert <schubi@suse.de>
+ Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_time: use vendor specific time.conf as fallback.
+ Use the vendor directory defined by --enable-vendordir=DIR configure
+ option as fallback for the distribution provided default config file
+ if there is no configuration in /etc.
+
+ * modules/pam_time/pam_time.8.xml: Describe this.
+ * modules/pam_time/time.h [VENDOR_SCONFIGDIR] (VENDOR_PAM_TIME_CONF):
+ New macro.
+ * modules/pam_time/pam_time.c (_pam_parse) [VENDOR_PAM_TIME_CONF]:
+ Try to open VENDOR_PAM_TIME_CONF file when no conffile= option was
+ specified and PAM_TIME_CONF file does not exist.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/409
+
+2022-02-08 Stefan Schubert <schubi@suse.de>
+ Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_time: add a test of return values.
+ * modules/pam_time/tst-pam_time-retval.c: New file.
+ * modules/pam_time/Makefile.am (TESTS): Add $(check_PROGRAMS).
+ (check_PROGRAMS, tst_pam_time_retval_LDADD): New variables.
+
+2022-02-07 Martyn Welch <martyn@welchs.me.uk>
+
+ pam_pwhistory: Enable alternate location for password history file (#396)
+ Sometimes, especially in embedded devices, the /etc directory can be
+ read-only and/or not saved over upgrades. In order to ensure password
+ policies are maintained across upgrades and the module functions on
+ read-only file systems, allow the location of the password history file
+ to be set in the PAM configuration.
+
+ Signed-off-by: Edward <jinzhou.zhu1@ge.com>
+ [Martyn Welch: Updated commit message and ported to latest version]
+ Signed-off-by: Martyn Welch <martyn.welch@collabora.com>
+
+2022-02-04 Jakov Smolić <jsmolic@gentoo.org>
+
+ libpam: Fix undefined reference to `libintl_dgettext` on musl.
+ * libpam/Makefile.am (libpam_la_LIBADD): Add @LTLIBINTL@.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/433
+
+2022-02-04 Stefan Schubert <schubi@suse.de>
+
+ pam_faillock: add a test of return values.
+ * modules/pam_faillock/tst-pam_faillock-retval.c: New file.
+ * modules/pam_faillock/Makefile.am (TESTS): Add $(check_PROGRAMS).
+ (check_PROGRAMS, tst_pam_faillock_retval_LDADD): New variables.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/431
+
+2022-02-01 Stefan Schubert <schubi@suse.de>
+ Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_faillock: use vendor specific faillock.conf as fallback.
+ Use the vendor directory defined by --enable-vendordir=DIR configure
+ option as fallback for the distribution provided default config file
+ if there is no configuration in /etc.
+
+ * modules/pam_faillock/pam_faillock.8.xml: Describe this.
+ * modules/pam_faillock/faillock.h [VENDOR_SCONFIGDIR]
+ (VENDOR_FAILLOCK_DEFAULT_CONF): New macro.
+ * modules/pam_faillock/pam_faillock.c (read_config_file)
+ [VENDOR_FAILLOCK_DEFAULT_CONF]: Try to open VENDOR_FAILLOCK_DEFAULT_CONF
+ file when FAILLOCK_DEFAULT_CONF file does not exist.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/423
+
+2022-01-25 Stefan Schubert <schubi@suse.de>
+ Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_group: use vendor specific group.conf as fallback.
+ Use the vendor directory defined by --enable-vendordir=DIR configure
+ option as fallback for the distribution provided default config file
+ if there is no configuration in /etc.
+
+ * modules/pam_group/pam_group.c: Include <errno.h>.
+ [VENDOR_SCONFIGDIR] (VENDOR_PAM_GROUP_CONF): New macro.
+ (read_field): Add conf_filename argument, use it instead of PAM_GROUP_CONF.
+ (check_account) <conf_filename>: New variable, initialize it to
+ PAM_GROUP_CONF, pass it to read_field().
+ [VENDOR_PAM_GROUP_CONF]: Assign VENDOR_PAM_GROUP_CONF to conf_filename
+ when PAM_GROUP_CONF file does not exist.
+ * modules/pam_group/pam_group.8.xml: Describe it.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/412
+
+2022-01-24 Stefan Schubert <schubi@suse.de>
+ Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_sepermit: use vendor specific sepermit.conf as fallback.
+ Use the vendor directory defined by --enable-vendordir=DIR configure
+ option as fallback for the distribution provided default config file
+ if there is no configuration in /etc.
+
+ * modules/pam_sepermit/pam_sepermit.c [VENDOR_SCONFIGDIR]
+ (SEPERMIT_VENDOR_CONF_FILE): New macro.
+ (pam_sm_authenticate) [SEPERMIT_VENDOR_CONF_FILE]: Use it as default
+ config file when conf= option is not specified and the file pointed
+ by SEPERMIT_CONF_FILE does not exist.
+ * modules/pam_sepermit/pam_sepermit.8.xml: Describe it.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/411
+
+2022-01-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ Drop Travis CI support.
+ The last build of Linux-PAM by travis-ci.org was in March of 2020,
+ and travis-ci.org says that all building is ceased since June of 2021.
+
+ Given that in foreseeable future travis-ci.com is not going to welcome
+ free software projects, there is no use to keep Travis CI support
+ in the tree.
+
+ * .travis.yml: Remove.
+
+ Link: https://blog.travis-ci.com/2020-11-02-travis-ci-new-billing
+
+2022-01-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ ci: add a git status check.
+ * ci/run-build-and-tests.sh: Check that "git status" does not report
+ any untracked files.
+
+ Update .gitignore file.
+ * .gitignore: Add Make.xml.rules.
+
+2022-01-23 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_limits: use VENDOR_SCONFIGDIR macro.
+ * modules/pam_limits/pam_limits.c (parse_config_file): Use
+ VENDOR_SCONFIGDIR macro instead of VENDORDIR.
+
+2022-01-23 Dmitry V. Levin <ldv@altlinux.org>
+
+ Introduce VENDOR_SCONFIGDIR macro.
+ This is a VENDORDIR version of SCONFIGDIR macro, defined to
+ VENDORDIR"/security" when --enable-vendordir is used for build.
+
+ * configure.ac (AC_DEFINE_UNQUOTED): Add VENDOR_SCONFIGDIR.
+
+2022-01-23 Dmitry V. Levin <ldv@altlinux.org>
+
+ modules: move SCONFIGDIR-based macro definitions from Makefile.am to the source code
+ Since SCONFIGDIR macro is available, the is no need to define macros
+ based on SCONFIGDIR in Makefile.am files.
+
+ * modules/pam_access/Makefile.am (AM_CFLAGS): Move definitions of
+ PAM_ACCESS_CONFIG and ACCESS_CONF_GLOB macros ...
+ * modules/pam_access/pam_access.c: ... here.
+ * modules/pam_env/Makefile.am (AM_CFLAGS): Move definition of
+ DEFAULT_CONF_FILE macro ...
+ * modules/pam_env/pam_env.c: ... here.
+ * modules/pam_group/Makefile.am (AM_CFLAGS): Move definition of
+ PAM_GROUP_CONF macro ...
+ * modules/pam_group/pam_group.c: ... here.
+ * modules/pam_limits/Makefile.am (AM_CFLAGS): Move definition of
+ LIMITS_FILE macro ...
+ * modules/pam_limits/pam_limits.c: ... here.
+ * modules/pam_sepermit/Makefile.am (AM_CFLAGS): Move definition of
+ SEPERMIT_CONF_FILE macro ...
+ * modules/pam_sepermit/pam_sepermit.c: ... here.
+ * modules/pam_time/Makefile.am (AM_CFLAGS): Move definition of
+ PAM_TIME_CONF macro ...
+ * modules/pam_time/pam_time.c: ... here.
+
+2022-01-23 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_limits: make LIMITS_FILE_DIR macro consistent.
+ LIMITS_FILE_DIR used to define a glob pattern instead of a directory
+ name, fix that inconsistency.
+
+ * modules/pam_limits/Makefile.am (AM_CFLAGS): Move "/*.conf" ending of
+ LIMITS_FILE_DIR macro ...
+ * modules/pam_limits/pam_limits.c (LIMITS_CONF_GLOB): ... here.
+
+2022-01-23 Dmitry V. Levin <ldv@altlinux.org>
+
+ modules: use SCONFIGDIR macro.
+ Use SCONFIGDIR macro instead of open-coding "/etc/security",
+ the latter is not correct when configured using --enable-sconfigdir
+ with an argument different from /etc/security.
+
+ * modules/pam_faillock/faillock.h (FAILLOCK_DEFAULT_CONF): Use
+ SCONFIGDIR.
+ * modules/pam_namespace/pam_namespace.h (SECURECONF_DIR): Remove.
+ (PAM_NAMESPACE_CONFIG, NAMESPACE_INIT_SCRIPT, NAMESPACE_D_DIR,
+ NAMESPACE_D_GLOB): Use SCONFIGDIR.
+ * modules/pam_namespace/Makefile.am (AM_CFLAGS): Remove
+ -DSECURECONF_DIR.
+ * modules/pam_pwhistory/opasswd.c (OLD_PASSWORDS_FILE): Use SCONFIGDIR.
+ * modules/pam_unix/passverify.h: Likewise.
+ * modules/pam_unix/passverify.c (OPW_TMPFILE): Use SCONFIGDIR.
+
+2022-01-23 Dmitry V. Levin <ldv@altlinux.org>
+
+ Introduce SCONFIGDIR macro.
+ Follow the VENDORDIR example and introduce a macro defined to the
+ argument of --enable-sconfigdir option. Unlike --enable-vendordir,
+ --enable-sconfigdir has a default value, so when --enable-sconfigdir
+ is not used for build, SCONFIGDIR will be defined to that default value.
+
+ * configure.ac (AC_DEFINE_UNQUOTED): Add SCONFIGDIR.
+
+2022-01-22 Dmitry V. Levin <ldv@altlinux.org>
+ Stefan Schubert <schubi@suse.de>
+
+ pam_sepermit: fix conf= option support.
+ The parser of conf= option failed to recognize the option unless
+ it was specified without an argument, making it useless.
+
+ * modules/pam_sepermit/pam_sepermit.c: Include "pam_inline.h".
+ (pam_sm_authenticate): Fix parsing of conf= option.
+ * modules/pam_sepermit/tst-pam_sepermit-retval.c: Check conf= option.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/429
+
+2022-01-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_sepermit: add a basic test for return values.
+ * modules/pam_sepermit/tst-pam_sepermit-retval.c: New file.
+ * modules/pam_sepermit/Makefile.am (TESTS): Add $(check_PROGRAMS).
+ (check_PROGRAMS, tst_pam_sepermit_retval_LDADD): New variables.
+
+2022-01-18 liaohanqin <liaohanqin@gmail.com>
+
+ Update xsh.c.
+ fix: typing error
+
+2022-01-14 planc <hubenchang0515@outlook.com>
+
+ Add a conversation function example.
+ * examples/Makefile.am: Add tty_conv to noinst_PROGRAMS
+ * examples/tty_conv.c: A new example of conversation function.
+
+2022-01-14 Thorsten Kukuk <5908016+thkukuk@users.noreply.github.com>
+
+ pam_limits: adjust docu if config file is missing (#426)
+ This adjustes the documentation for the changes from PR#418
+ We no longer fail if the config file does not exist.
+
+2022-01-13 Stefan Schubert <schubi@suse.de>
+
+ pam_rootok: fix compilation warning when HAVE_LIBAUDIT is not defined.
+ * modules/pam_rootok/pam_rootok.c (log_callback): Move audit_fd
+ definition under HAVE_LIBAUDIT guard.
+
+2022-01-13 Ludwig Nussel <ludwig.nussel@suse.de>
+
+ pam_limits: don't fail on missing config files (#418)
+ A config with only comments or an empty one is completely fine for
+ pam_limits. So don't complain about missing config files either.
+
+2022-01-12 pyllyukko <pyllyukko@maimed.org>
+
+ Check the return value of localtime in faillock (#421)
+
+2022-01-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ README: fix typo.
+ * README: Rename install_dependencies.sh to install-dependencies.sh.
+
+ Fixes: v1.4.0~211 ("Adjust README with instructions for package prerequsities")
+
+2021-11-24 Mingli Yu <mingli.yu@windriver.com>
+
+ run-xtests.sh: check whether files exist.
+ Fixes:
+ # ./run-xtests.sh . tst-pam_access1
+ mv: cannot stat '/etc/security/opasswd': No such file or directory
+ PASS: tst-pam_access1
+ mv: cannot stat '/etc/security/opasswd-pam-xtests': No such file or directory
+ ==================
+ 1 tests passed
+ 0 tests not run
+ ==================
+
+2021-11-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ modules/pam_limits: fix build with old Linux kernel headers.
+ As PR_SET_NO_NEW_PRIVS was introduced by Linux kernel commit
+ v3.5-rc1~161^2~37, provide a fallback definition to fix build
+ with older Linux kernel headers.
+
+ * modules/pam_limits/pam_limits.c [!PR_SET_NO_NEW_PRIVS]
+ (PR_SET_NO_NEW_PRIVS): New macro.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/406
+ Fixes: dd9cf929 ("modules/pam_limits: add support for nonewprivs")
+
+2021-11-03 Thorsten Kukuk <5908016+thkukuk@users.noreply.github.com>
+
+ Use vendor specific limits.conf as fallback (#402)
+ * Use vendor specific limits.conf as fallback
+
+2021-11-02 Thorsten Kukuk <5908016+thkukuk@users.noreply.github.com>
+
+ Only include vendordir in manual page if set (#401)
+
+ Include pam_xauth_data.3.xml in source archive (#400)
+
2021-09-03 Dmitry V. Levin <ldv@altlinux.org>
Fix a typo found using codespell tool.
diff --git a/Make.xml.rules.in b/Make.xml.rules.in
index 27bb510e..6663bee0 100644
--- a/Make.xml.rules.in
+++ b/Make.xml.rules.in
@@ -5,22 +5,22 @@
README: $(XMLS)
README: README.xml
- $(XSLTPROC) --path $(srcdir) --xinclude --stringparam generate.toc "none" @STRINGPARAM_VENDORDIR@ --nonet $(top_srcdir)/doc/custom-html.xsl $< | $(BROWSER) > $(srcdir)/$@
+ $(XSLTPROC) --path $(srcdir) --xinclude --stringparam generate.toc "none" @STRINGPARAM_VENDORDIR@ @STRINGPARAM_PROFILECONDITIONS@ --nonet $(TXT_STYLESHEET) $< | $(BROWSER) > $(srcdir)/$@
%.1: %.1.xml
- $(XMLLINT) --nonet --xinclude --postvalid --noout $<
- $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude @STRINGPARAM_VENDORDIR@ --nonet $(top_srcdir)/doc/custom-man.xsl $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noout $<
+ $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude @STRINGPARAM_VENDORDIR@ @STRINGPARAM_PROFILECONDITIONS@ --nonet $(top_srcdir)/doc/custom-man.xsl $<
%.3: %.3.xml
- $(XMLLINT) --nonet --xinclude --postvalid --noout $<
- $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude @STRINGPARAM_VENDORDIR@ --nonet $(top_srcdir)/doc/custom-man.xsl $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noout $<
+ $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude @STRINGPARAM_VENDORDIR@ @STRINGPARAM_PROFILECONDITIONS@ --nonet $(top_srcdir)/doc/custom-man.xsl $<
%.5: %.5.xml
- $(XMLLINT) --nonet --xinclude --postvalid --noout $<
- $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude @STRINGPARAM_VENDORDIR@ --nonet $(top_srcdir)/doc/custom-man.xsl $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noout $<
+ $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude @STRINGPARAM_VENDORDIR@ @STRINGPARAM_PROFILECONDITIONS@ --nonet $(top_srcdir)/doc/custom-man.xsl $<
%.8: %.8.xml
- $(XMLLINT) --nonet --xinclude --postvalid --noout $<
- $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude @STRINGPARAM_VENDORDIR@ @STRINGPARAM_HMAC@ --nonet $(top_srcdir)/doc/custom-man.xsl $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noout $<
+ $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude @STRINGPARAM_VENDORDIR@ @STRINGPARAM_PROFILECONDITIONS@ --nonet $(top_srcdir)/doc/custom-man.xsl $<
#CLEANFILES += $(man_MANS) README
diff --git a/Makefile.in b/Makefile.in
index 92c0d026..f7e2c44b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -258,6 +258,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -270,11 +271,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -306,12 +309,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -334,6 +339,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -344,12 +350,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/NEWS b/NEWS
index ca436baf..719b7194 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,29 @@
Linux-PAM NEWS -- history of user-visible changes.
+Release 1.5.3
+* configure: added options to configure stylesheets.
+* configure: added --enable-logind option to use logind instead of utmp
+ in pam_issue and pam_timestamp.
+* pam_modutil_getlogin: changed to use getlogin() from libc instead of parsing utmp.
+* Added libeconf support to pam_env and pam_shells.
+* Added vendor directory support to pam_access, pam_env, pam_group, pam_faillock,
+ pam_limits, pam_namespace, pam_pwhistory, pam_sepermit, pam_shells, and pam_time.
+* pam_limits: changed to not fail on missing config files.
+* pam_pwhistory: added conf= option to specify config file location.
+* pam_pwhistory: added file= option to specify password history file location.
+* pam_shells: added shells.d support when libeconf and vendordir are enabled.
+* Deprecated pam_lastlog: this module is no longer built by default because
+ it uses utmp, wtmp, btmp and lastlog, but none of them are Y2038 safe,
+ even on 64bit architectures.
+ pam_lastlog will be removed in one of the next releases, consider using
+ pam_lastlog2 (from https://github.com/thkukuk/lastlog2) and/or
+ pam_wtmpdb (from https://github.com/thkukuk/wtmpdb) instead.
+* Deprecated _pam_overwrite(), _pam_overwrite_n(), and _pam_drop_reply() macros
+ provided by _pam_macros.h; the memory override performed by these macros can
+ be optimized out by the compiler and therefore can no longer be relied upon.
+* Multiple minor bug fixes, portability fixes, documentation improvements,
+ and translation updates.
+
Release 1.5.2
* pam_exec: implemented quiet_log option.
* pam_mkhomedir: added support of HOME_MODE and UMASK from /etc/login.defs.
diff --git a/README b/README
index 21af8c4c..aa99927e 100644
--- a/README
+++ b/README
@@ -6,7 +6,7 @@ NOTES:
How to use it is as follows:
-Please look at the ci/install_dependencies.sh for the necessary
+Please look at the ci/install-dependencies.sh for the necessary
prerequisite packages to be able to build the Linux-PAM. The script
is targeted at Debian based Linux distributions so the package
names and availability might differ on other distributions.
diff --git a/build-aux/config.guess b/build-aux/config.guess
index e81d3ae7..69188da7 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -1,14 +1,14 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2021 Free Software Foundation, Inc.
+# Copyright 1992-2023 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268 # see below for rationale
-timestamp='2021-06-03'
+timestamp='2023-01-01'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -60,7 +60,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2021 Free Software Foundation, Inc.
+Copyright 1992-2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -437,7 +437,7 @@ case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
# This test works for both compilers.
if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
SUN_ARCH=x86_64
@@ -929,6 +929,9 @@ EOF
i*:PW*:*)
GUESS=$UNAME_MACHINE-pc-pw32
;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
*:Interix*:*)
case $UNAME_MACHINE in
x86)
@@ -963,6 +966,12 @@ EOF
GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
;;
+ x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*)
+ GUESS="$UNAME_MACHINE-pc-managarm-mlibc"
+ ;;
+ *:[Mm]anagarm:*:*)
+ GUESS="$UNAME_MACHINE-unknown-managarm-mlibc"
+ ;;
*:Minix:*:*)
GUESS=$UNAME_MACHINE-unknown-minix
;;
@@ -1033,7 +1042,7 @@ EOF
k1om:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
- loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+ loongarch32:Linux:*:* | loongarch64:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
m32r*:Linux:*:*)
@@ -1148,16 +1157,27 @@ EOF
;;
x86_64:Linux:*:*)
set_cc_for_build
+ CPU=$UNAME_MACHINE
LIBCABI=$LIBC
if test "$CC_FOR_BUILD" != no_compiler_found; then
- if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_X32 >/dev/null
- then
- LIBCABI=${LIBC}x32
- fi
+ ABI=64
+ sed 's/^ //' << EOF > "$dummy.c"
+ #ifdef __i386__
+ ABI=x86
+ #else
+ #ifdef __ILP32__
+ ABI=x32
+ #endif
+ #endif
+EOF
+ cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+ eval "$cc_set_abi"
+ case $ABI in
+ x86) CPU=i686 ;;
+ x32) LIBCABI=${LIBC}x32 ;;
+ esac
fi
- GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+ GUESS=$CPU-pc-linux-$LIBCABI
;;
xtensa*:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
@@ -1364,8 +1384,11 @@ EOF
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
GUESS=i586-pc-haiku
;;
- x86_64:Haiku:*:*)
- GUESS=x86_64-unknown-haiku
+ ppc:Haiku:*:*) # Haiku running on Apple PowerPC
+ GUESS=powerpc-apple-haiku
+ ;;
+ *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat)
+ GUESS=$UNAME_MACHINE-unknown-haiku
;;
SX-4:SUPER-UX:*:*)
GUESS=sx4-nec-superux$UNAME_RELEASE
@@ -1522,6 +1545,9 @@ EOF
i*86:rdos:*:*)
GUESS=$UNAME_MACHINE-pc-rdos
;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
*:AROS:*:*)
GUESS=$UNAME_MACHINE-unknown-aros
;;
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 6a758a60..de4259e4 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,12 +1,14 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2021 Free Software Foundation, Inc.
+# Copyright 1992-2023 Free Software Foundation, Inc.
-timestamp='2021-06-03'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2023-01-21'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -50,7 +52,14 @@ timestamp='2021-06-03'
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
-me=$(echo "$0" | sed -e 's,.*/,,')
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
@@ -67,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2021 Free Software Foundation, Inc.
+Copyright 1992-2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -112,9 +121,11 @@ esac
# Split fields of configuration type
# shellcheck disable=SC2162
+saved_IFS=$IFS
IFS="-" read field1 field2 field3 field4 <<EOF
$1
EOF
+IFS=$saved_IFS
# Separate into logical components for further validation
case $1 in
@@ -134,7 +145,7 @@ case $1 in
nto-qnx* | linux-* | uclinux-uclibc* \
| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
- | storm-chaos* | os2-emx* | rtmk-nova*)
+ | storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
basic_machine=$field1
basic_os=$maybe_os
;;
@@ -163,6 +174,10 @@ case $1 in
basic_machine=$field1
basic_os=$field2
;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
# Manufacturers
dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
@@ -769,22 +784,22 @@ case $basic_machine in
vendor=hp
;;
i*86v32)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv32
;;
i*86v4*)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv4
;;
i*86v)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv
;;
i*86sol2)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=solaris2
;;
@@ -917,14 +932,16 @@ case $basic_machine in
;;
leon-*|leon[3-9]-*)
cpu=sparc
- vendor=$(echo "$basic_machine" | sed 's/-.*//')
+ vendor=`echo "$basic_machine" | sed 's/-.*//'`
;;
*-*)
# shellcheck disable=SC2162
+ saved_IFS=$IFS
IFS="-" read cpu vendor <<EOF
$basic_machine
EOF
+ IFS=$saved_IFS
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@@ -1003,6 +1020,11 @@ case $cpu-$vendor in
;;
# Here we normalize CPU types with a missing or matching vendor
+ armh-unknown | armh-alt)
+ cpu=armv7l
+ vendor=alt
+ basic_os=${basic_os:-linux-gnueabihf}
+ ;;
dpx20-unknown | dpx20-bull)
cpu=rs6000
vendor=bull
@@ -1053,7 +1075,7 @@ case $cpu-$vendor in
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
cpu=i586
;;
- pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
cpu=i686
;;
pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
@@ -1084,7 +1106,7 @@ case $cpu-$vendor in
cpu=mipsisa64sb1el
;;
sh5e[lb]-*)
- cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
+ cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
;;
spur-*)
cpu=spur
@@ -1102,9 +1124,9 @@ case $cpu-$vendor in
cpu=x86_64
;;
xscale-* | xscalee[bl]-*)
- cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
+ cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
- arm64-*)
+ arm64-* | aarch64le-*)
cpu=aarch64
;;
@@ -1166,7 +1188,7 @@ case $cpu-$vendor in
| am33_2.0 \
| amdgcn \
| arc | arceb | arc32 | arc64 \
- | arm | armh | arm[lb]e | arme[lb] | armv* \
+ | arm | arm[lb]e | arme[lb] | armv* \
| avr | avr32 \
| asmjs \
| ba \
@@ -1185,7 +1207,7 @@ case $cpu-$vendor in
| k1om \
| le32 | le64 \
| lm32 \
- | loongarch32 | loongarch64 | loongarchx32 \
+ | loongarch32 | loongarch64 \
| m32c | m32r | m32rle \
| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
@@ -1287,35 +1309,41 @@ esac
if test x$basic_os != x
then
-# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
# set os.
case $basic_os in
gnu/linux*)
kernel=linux
- os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
+ os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
;;
os2-emx)
kernel=os2
- os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
;;
nto-qnx*)
kernel=nto
- os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
+ os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
;;
*-*)
# shellcheck disable=SC2162
+ saved_IFS=$IFS
IFS="-" read kernel os <<EOF
$basic_os
EOF
+ IFS=$saved_IFS
;;
# Default OS when just kernel was specified
nto*)
kernel=nto
- os=$(echo $basic_os | sed -e 's|nto|qnx|')
+ os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
;;
linux*)
kernel=linux
- os=$(echo $basic_os | sed -e 's|linux|gnu|')
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+ ;;
+ managarm*)
+ kernel=managarm
+ os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
;;
*)
kernel=
@@ -1336,7 +1364,7 @@ case $os in
os=cnk
;;
solaris1 | solaris1.*)
- os=$(echo $os | sed -e 's|solaris1|sunos4|')
+ os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
;;
solaris)
os=solaris2
@@ -1365,7 +1393,7 @@ case $os in
os=sco3.2v4
;;
sco3.2.[4-9]*)
- os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
+ os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
;;
sco*v* | scout)
# Don't match below
@@ -1395,7 +1423,7 @@ case $os in
os=lynxos
;;
mac[0-9]*)
- os=$(echo "$os" | sed -e 's|mac|macos|')
+ os=`echo "$os" | sed -e 's|mac|macos|'`
;;
opened*)
os=openedition
@@ -1404,10 +1432,10 @@ case $os in
os=os400
;;
sunos5*)
- os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
;;
sunos6*)
- os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
;;
wince*)
os=wince
@@ -1441,7 +1469,7 @@ case $os in
;;
# Preserve the version number of sinix5.
sinix5.*)
- os=$(echo $os | sed -e 's|sinix|sysv|')
+ os=`echo "$os" | sed -e 's|sinix|sysv|'`
;;
sinix*)
os=sysv4
@@ -1688,7 +1716,7 @@ fi
# Now, validate our (potentially fixed-up) OS.
case $os in
# Sometimes we do "kernel-libc", so those need to count as OSes.
- musl* | newlib* | uclibc*)
+ musl* | newlib* | relibc* | uclibc*)
;;
# Likewise for "kernel-abi"
eabi* | gnueabi*)
@@ -1729,7 +1757,8 @@ case $os in
| skyos* | haiku* | rdos* | toppers* | drops* | es* \
| onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
| midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
- | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* | mlibc* )
;;
# This one is extra strict with allowed versions
sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
@@ -1737,6 +1766,9 @@ case $os in
;;
none)
;;
+ kernel* )
+ # Restricted further below
+ ;;
*)
echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
exit 1
@@ -1746,16 +1778,27 @@ esac
# As a final step for OS-related things, validate the OS-kernel combination
# (given a valid OS), if there is a kernel.
case $kernel-$os in
- linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+ | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* )
;;
uclinux-uclibc* )
;;
- -dietlibc* | -newlib* | -musl* | -uclibc* )
+ managarm-mlibc* | managarm-kernel* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
# These are just libc implementations, not actual OSes, and thus
# require a kernel.
echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
exit 1
;;
+ -kernel* )
+ echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ *-kernel* )
+ echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2
+ exit 1
+ ;;
kfreebsd*-gnu* | kopensolaris*-gnu*)
;;
vxworks-simlinux | vxworks-simwindows | vxworks-spe)
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
index b5297538..0e7f0e78 100644
--- a/build-aux/ltmain.sh
+++ b/build-aux/ltmain.sh
@@ -1,12 +1,12 @@
-#! /bin/sh
+#! /usr/bin/env sh
## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
## by inline-source v2019-02-19.15
-# libtool (GNU libtool) 2.4.6
+# libtool (GNU libtool) 2.4.7
# Provide generalized library-building support services.
# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-# Copyright (C) 1996-2019 Free Software Foundation, Inc.
+# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions. There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -31,8 +31,8 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.6
-package_revision=2.4.6
+VERSION=2.4.7
+package_revision=2.4.7
## ------ ##
@@ -2161,7 +2161,7 @@ func_version ()
# End:
# Set a version string.
-scriptversion='(GNU libtool) 2.4.6'
+scriptversion='(GNU libtool) 2.4.7'
# func_echo ARG...
@@ -2252,7 +2252,7 @@ include the following information:
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname (GNU libtool) 2.4.6
+ version: $progname (GNU libtool) 2.4.7
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
@@ -3847,7 +3847,8 @@ This mode accepts the following additional options:
-prefer-non-pic try to build non-PIC objects only
-shared do not build a '.o' file suitable for static linking
-static only build a '.o' file suitable for static linking
- -Wc,FLAG pass FLAG directly to the compiler
+ -Wc,FLAG
+ -Xcompiler FLAG pass FLAG directly to the compiler
COMPILE-COMMAND is a command to be used in creating a 'standard' object file
from the given SOURCEFILE.
@@ -3953,6 +3954,8 @@ The following components of LINK-COMMAND are treated specially:
-weak LIBNAME declare that the target provides the LIBNAME interface
-Wc,FLAG
-Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wa,FLAG
+ -Xassembler FLAG pass linker-specific FLAG directly to the assembler
-Wl,FLAG
-Xlinker FLAG pass linker-specific FLAG directly to the linker
-XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
@@ -7061,6 +7064,13 @@ func_mode_link ()
prev=
continue
;;
+ xassembler)
+ func_append compiler_flags " -Xassembler $qarg"
+ prev=
+ func_append compile_command " -Xassembler $qarg"
+ func_append finalize_command " -Xassembler $qarg"
+ continue
+ ;;
xcclinker)
func_append linker_flags " $qarg"
func_append compiler_flags " $qarg"
@@ -7231,7 +7241,7 @@ func_mode_link ()
# These systems don't actually have a C library (as such)
test X-lc = "X$arg" && continue
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
# Do not include libc due to us having libc/libc_r.
test X-lc = "X$arg" && continue
;;
@@ -7251,7 +7261,7 @@ func_mode_link ()
esac
elif test X-lc_r = "X$arg"; then
case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
# Do not include libc_r directly, use -pthread flag.
continue
;;
@@ -7281,8 +7291,20 @@ func_mode_link ()
prev=xcompiler
continue
;;
-
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
+ -pthread)
+ case $host in
+ *solaris2*) ;;
+ *)
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+ -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
func_append compiler_flags " $arg"
func_append compile_command " $arg"
@@ -7449,6 +7471,11 @@ func_mode_link ()
arg=$func_stripname_result
;;
+ -Xassembler)
+ prev=xassembler
+ continue
+ ;;
+
-Xcompiler)
prev=xcompiler
continue
@@ -7488,10 +7515,11 @@ func_mode_link ()
# -stdlib=* select c++ std lib with clang
# -fsanitize=* Clang/GCC memory and address sanitizer
# -fuse-ld=* Linker select flags for GCC
+ # -Wa,* Pass flags directly to the assembler
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
- -specs=*|-fsanitize=*|-fuse-ld=*)
+ -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*)
func_quote_arg pretty "$arg"
arg=$func_quote_arg_result
func_append compile_command " $arg"
@@ -8852,7 +8880,7 @@ func_mode_link ()
test CXX = "$tagname" && {
case $host_os in
linux*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C++ 5.9
func_suncc_cstd_abi
@@ -9025,7 +9053,7 @@ func_mode_link ()
#
case $version_type in
# correct linux to gnu/linux during the next big refactor
- darwin|freebsd-elf|linux|osf|windows|none)
+ darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
func_arith $number_major + $number_minor
current=$func_arith_result
age=$number_minor
@@ -9119,7 +9147,7 @@ func_mode_link ()
versuffix=.$current.$revision
;;
- freebsd-elf)
+ freebsd-elf | midnightbsd-elf)
func_arith $current - $age
major=.$func_arith_result
versuffix=$major.$age.$revision
@@ -9349,7 +9377,7 @@ func_mode_link ()
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
# Do not include libc due to us having libc/libc_r.
;;
*-*-sco3.2v5* | *-*-sco5v6*)
diff --git a/conf/Makefile.in b/conf/Makefile.in
index ee1a12ee..05fdd2d1 100644
--- a/conf/Makefile.in
+++ b/conf/Makefile.in
@@ -218,6 +218,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -230,11 +231,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -266,12 +269,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -294,6 +299,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -304,12 +310,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/conf/pam_conv1/Makefile.in b/conf/pam_conv1/Makefile.in
index 6685d6cc..3717b3b8 100644
--- a/conf/pam_conv1/Makefile.in
+++ b/conf/pam_conv1/Makefile.in
@@ -237,6 +237,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -249,11 +250,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -285,12 +288,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -313,6 +318,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -323,12 +329,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/config.h.in b/config.h.in
index 89cf309b..d8f322ab 100644
--- a/config.h.in
+++ b/config.h.in
@@ -58,6 +58,9 @@
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
#undef HAVE_DOPRNT
+/* Define to 1 if you have the `explicit_bzero' function. */
+#undef HAVE_EXPLICIT_BZERO
+
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
@@ -151,6 +154,9 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
+/* Define to 1 if you have the `memset_explicit' function. */
+#undef HAVE_MEMSET_EXPLICIT
+
/* Define to 1 if you have the `mkdir' function. */
#undef HAVE_MKDIR
@@ -163,6 +169,9 @@
/* Define to 1 if you have the <net/if.h> header file. */
#undef HAVE_NET_IF_H
+/* Defines that NIS should be used */
+#undef HAVE_NIS
+
/* Define to 1 if you have the <paths.h> header file. */
#undef HAVE_PATHS_H
@@ -172,15 +181,6 @@
/* Define to 1 if you have the `rpcb_getaddr' function. */
#undef HAVE_RPCB_GETADDR
-/* Define to 1 if you have the <rpcsvc/ypclnt.h> header file. */
-#undef HAVE_RPCSVC_YPCLNT_H
-
-/* Define to 1 if you have the <rpcsvc/yp_prot.h> header file. */
-#undef HAVE_RPCSVC_YP_PROT_H
-
-/* Define to 1 if you have the <rpc/rpc.h> header file. */
-#undef HAVE_RPC_RPC_H
-
/* Define to 1 if you have the `ruserok' function. */
#undef HAVE_RUSEROK
@@ -342,12 +342,12 @@
/* Kernel overflow uid. */
#undef PAM_USERTYPE_OVERFLOW_UID
-/* Minimum system user uid. */
-#undef PAM_USERTYPE_SYSUIDMIN
-
/* Minimum regular user uid. */
#undef PAM_USERTYPE_UIDMIN
+/* Directory for PAM modules system configuration files */
+#undef SCONFIGDIR
+
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -388,6 +388,9 @@
/* Directory for distribution provided configuration files */
#undef VENDORDIR
+/* Directory for PAM modules distribution provided configuration files */
+#undef VENDOR_SCONFIGDIR
+
/* Version number of package */
#undef VERSION
diff --git a/configure b/configure
index 4a12fad7..3fefcaba 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Linux-PAM 1.5.2.
+# Generated by GNU Autoconf 2.69 for Linux-PAM 1.5.3.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Linux-PAM'
PACKAGE_TARNAME='Linux-PAM'
-PACKAGE_VERSION='1.5.2'
-PACKAGE_STRING='Linux-PAM 1.5.2'
+PACKAGE_VERSION='1.5.3'
+PACKAGE_STRING='Linux-PAM 1.5.3'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -683,14 +683,22 @@ XML_CATALOG_FILE
XMLLINT
XSLTPROC
LIBOBJS
+STRINGPARAM_PROFILECONDITIONS
COND_USE_OPENSSL_FALSE
COND_USE_OPENSSL_TRUE
-STRINGPARAM_HMAC
CRYPTO_LIBS
+HAVE_VENDORDIR_FALSE
+HAVE_VENDORDIR_TRUE
+VENDOR_SCONFIGDIR
STRINGPARAM_VENDORDIR
ECONF_LIBS
ECONF_CFLAGS
+LOGIND_CFLAGS
+SYSTEMD_LIBS
+SYSTEMD_CFLAGS
LIBSELINUX
+HAVE_NIS_FALSE
+HAVE_NIS_TRUE
NIS_LIBS
NIS_CFLAGS
NSL_LIBS
@@ -709,6 +717,11 @@ LIBDL
pam_xauth_path
SCONFIGDIR
SECUREDIR
+MAN_STYLESHEET
+PDF_STYLESHEET
+TXT_STYLESHEET
+HTML_STYLESHEET
+DOCBOOK_RNG
LIBPRELUDE_CONFIG_PREFIX
LIBPRELUDE_PREFIX
LIBPRELUDE_LIBS
@@ -744,6 +757,7 @@ ac_ct_AR
AR
DLLTOOL
OBJDUMP
+FILECMD
LN_S
NM
ac_ct_DUMPBIN
@@ -865,6 +879,11 @@ enable_doc
enable_prelude
with_libprelude_prefix
enable_debug
+enable_docbook_rng
+enable_html_stylesheet
+enable_txt_stylesheet
+enable_pdf_stylesheet
+enable_man_stylesheet
enable_securedir
enable_isadir
enable_sconfigdir
@@ -880,6 +899,7 @@ with_db_uniquename
enable_nis
enable_usergroups
enable_selinux
+enable_logind
enable_econf
enable_vendordir
enable_openssl
@@ -890,10 +910,10 @@ enable_rpath
with_libiconv_prefix
with_libintl_prefix
with_uidmin
-with_sysuidmin
with_kernel_overflow_uid
with_systemdunitdir
enable_unix
+enable_lastlog
with_misc_conv_bufsize
'
ac_precious_vars='build_alias
@@ -917,6 +937,8 @@ TIRPC_CFLAGS
TIRPC_LIBS
NSL_CFLAGS
NSL_LIBS
+SYSTEMD_CFLAGS
+SYSTEMD_LIBS
ECONF_CFLAGS
ECONF_LIBS'
@@ -1459,7 +1481,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Linux-PAM 1.5.2 to adapt to many kinds of systems.
+\`configure' configures Linux-PAM 1.5.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1529,7 +1551,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Linux-PAM 1.5.2:";;
+ short | recursive ) echo "Configuration of Linux-PAM 1.5.3:";;
esac
cat <<\_ACEOF
@@ -1554,6 +1576,21 @@ Optional Features:
--disable-doc Do not generate or install documentation
--disable-prelude do not use prelude
--enable-debug specify you are building with debugging on
+ --enable-docbook-rng=FILE
+ RNG file for checking XML files
+ [default=http://docbook.org/xml/5.0/rng/docbookxi.rng]
+ --enable-html-stylesheet=FILE
+ html stylesheet path
+ [default=http://docbook.sourceforge.net/release/xsl-ns/current/html/chunk.xsl]
+ --enable-txt-stylesheet=FILE
+ text stylesheet path
+ [default=http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl]
+ --enable-pdf-stylesheet=FILE
+ pdf stylesheet path
+ [default=http://docbook.sourceforge.net/release/xsl-ns/current/fo/docbook.xsl]
+ --enable-man-stylesheet=FILE
+ man stylesheet path
+ [default=http://docbook.sourceforge.net/release/xsl-ns/current/manpages/profile-docbook.xsl]
--enable-securedir=DIR path to location of PAMs [default=$libdir/security]
--enable-isadir=DIR path to arch-specific module files
[default=../../(basename of $libdir)/security]
@@ -1572,6 +1609,7 @@ Optional Features:
--disable-nis Disable building NIS/YP support in pam_unix
--enable-usergroups sets the usergroups option default to enabled
--disable-selinux do not use SELinux
+ --disable-logind Disable logind support
--disable-econf do not use libeconf
--enable-vendordir=DIR Directory for distribution provided configuration
files
@@ -1581,6 +1619,7 @@ Optional Features:
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
--disable-unix do not build pam_unix module
+ --enable-lastlog do build pam_lastlog module
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -1612,8 +1651,6 @@ Optional Packages:
--with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
--without-libintl-prefix don't search for libintl in includedir and libdir
--with-uidmin=<number> default value for regular user min uid (1000)
- --with-sysuidmin=<number>
- default value for system user min uid (101)
--with-kernel-overflow-uid=<number>
kernel overflow uid, default (uint16_t)-2=65534
--with-systemdunitdir=DIR
@@ -1652,6 +1689,10 @@ Some influential environment variables:
TIRPC_LIBS linker flags for TIRPC, overriding pkg-config
NSL_CFLAGS C compiler flags for NSL, overriding pkg-config
NSL_LIBS linker flags for NSL, overriding pkg-config
+ SYSTEMD_CFLAGS
+ C compiler flags for SYSTEMD, overriding pkg-config
+ SYSTEMD_LIBS
+ linker flags for SYSTEMD, overriding pkg-config
ECONF_CFLAGS
C compiler flags for ECONF, overriding pkg-config
ECONF_LIBS linker flags for ECONF, overriding pkg-config
@@ -1722,7 +1763,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Linux-PAM configure 1.5.2
+Linux-PAM configure 1.5.3
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2273,7 +2314,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Linux-PAM $as_me 1.5.2, which was
+It was created by Linux-PAM $as_me 1.5.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3135,7 +3176,7 @@ fi
# Define the identity of the package.
PACKAGE='Linux-PAM'
- VERSION='1.5.2'
+ VERSION='1.5.3'
cat >>confdefs.h <<_ACEOF
@@ -4852,8 +4893,8 @@ esac
-macro_version='2.4.6'
-macro_revision='2.4.6'
+macro_version='2.4.7'
+macro_revision='2.4.7'
@@ -5247,13 +5288,13 @@ else
mingw*) lt_bad_file=conftest.nm/nofile ;;
*) lt_bad_file=/dev/null ;;
esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
*$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
*)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@@ -5381,7 +5422,7 @@ esac
fi
fi
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@@ -5483,7 +5524,7 @@ else
lt_cv_sys_max_cmd_len=8192;
;;
- bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -5526,7 +5567,7 @@ else
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@@ -5729,6 +5770,104 @@ esac
if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
+set dummy ${ac_tool_prefix}file; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_FILECMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$FILECMD"; then
+ ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_FILECMD="${ac_tool_prefix}file"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+FILECMD=$ac_cv_prog_FILECMD
+if test -n "$FILECMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
+$as_echo "$FILECMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_FILECMD"; then
+ ac_ct_FILECMD=$FILECMD
+ # Extract the first word of "file", so it can be a program name with args.
+set dummy file; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_FILECMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_FILECMD"; then
+ ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_FILECMD="file"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD
+if test -n "$ac_ct_FILECMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
+$as_echo "$ac_ct_FILECMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_FILECMD" = x; then
+ FILECMD=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ FILECMD=$ac_ct_FILECMD
+ fi
+else
+ FILECMD="$ac_cv_prog_FILECMD"
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ac_tool_prefix}objdump; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -5860,7 +5999,7 @@ beos*)
bsdi[45]*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_cmd='$FILECMD -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@@ -5894,14 +6033,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@@ -5915,7 +6054,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
case $host_cpu in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
@@ -5962,7 +6101,7 @@ netbsd*)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@@ -6730,7 +6869,7 @@ esac
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
# Adjust the below global symbol transforms to fixup imported variables.
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
@@ -6748,20 +6887,20 @@ fi
# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
$lt_cdecl_hook\
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
$lt_c_name_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
# Transform an extracted symbol line into symbol name with lib prefix and
# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
$lt_c_name_lib_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
@@ -6803,9 +6942,9 @@ for ac_symprfx in "" "_"; do
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
" ' prfx=^$ac_symprfx"
else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
# Check to see that the pipe works correctly.
pipe_works=no
@@ -7007,7 +7146,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@@ -7124,7 +7263,7 @@ ia64-*-hpux*)
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@@ -7145,7 +7284,7 @@ ia64-*-hpux*)
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
if test yes = "$lt_cv_prog_gnu_ld"; then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@@ -7157,7 +7296,7 @@ ia64-*-hpux*)
;;
esac
else
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -7183,7 +7322,7 @@ mips64*-*linux*)
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
emul=elf
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@@ -7192,7 +7331,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@@ -7200,7 +7339,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*N32*)
libsuff=n32
emul="${emul}n32"
@@ -7212,6 +7351,7 @@ mips64*-*linux*)
;;
aarch64*-*linux*|x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+loongarch64*-*linux*| \
riscv64*-*linux*|s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out what ABI is being produced by ac_compile, and set linker
# options accordingly. Note that the listed cases only cover the
@@ -7225,7 +7365,7 @@ riscv64*-*linux*|s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
@@ -7236,7 +7376,7 @@ riscv64*-*linux*|s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf32_x86_64"
;;
x86_64-*linux*)
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@@ -7343,7 +7483,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@@ -8089,17 +8229,12 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*) # darwin 5.x on
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[012],*|,*powerpc*-darwin[5-8]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
esac
@@ -8967,7 +9102,7 @@ lt_prog_compiler_static=
lt_prog_compiler_static='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
lt_prog_compiler_pic='-KPIC'
@@ -9448,7 +9583,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
whole_archive_flag_spec=
fi
supports_anon_versioning=no
- case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+ case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
*GNU\ gold*) supports_anon_versioning=yes ;;
*\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -9575,7 +9710,7 @@ _LT_EOF
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@@ -9618,7 +9753,7 @@ _LT_EOF
compiler_needs_object=yes
;;
esac
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C 5.9
whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
compiler_needs_object=yes
@@ -9630,7 +9765,7 @@ _LT_EOF
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
if test -r $libname-altlinux.ver; then cp $libname-altlinux.ver $output_objdir/$libname.ver; fi~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
@@ -9647,7 +9782,7 @@ _LT_EOF
archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
@@ -10133,8 +10268,8 @@ fi
output_verbose_link_cmd=func_echo_all
archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
else
ld_shlibs=no
@@ -10168,7 +10303,7 @@ fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
@@ -11108,7 +11243,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
;;
@@ -11118,7 +11253,7 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
@@ -11144,7 +11279,7 @@ cygwin* | mingw* | pw32* | cegcc*)
done
IFS=$lt_save_ifs
# Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@@ -11214,7 +11349,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -14431,6 +14566,160 @@ fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Wformat=2" >&5
+$as_echo_n "checking whether $CC handles -Wformat=2... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wformat_2+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wformat=2"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Wformat_2=yes
+else
+ gl_cv_warn_CFLAGS__Wformat_2=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Wformat_2" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wformat_2" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wformat_2" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wformat=2"
+fi
+
+
+if test x${gl_unknown_warnings_are_errors+set} = x; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Werror -Wunknown-warning-option" >&5
+$as_echo_n "checking whether $CC handles -Werror -Wunknown-warning-option... " >&6; }
+if ${gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=yes
+else
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" = xyes; then :
+ gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'
+else
+ gl_unknown_warnings_are_errors=
+fi
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Winit-self" >&5
+$as_echo_n "checking whether $CC handles -Winit-self... " >&6; }
+if ${gl_cv_warn_CFLAGS__Winit_self+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Winit-self"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Winit_self=yes
+else
+ gl_cv_warn_CFLAGS__Winit_self=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Winit_self" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Winit_self" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Winit_self" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Winit-self"
+fi
+
+
+if test x${gl_unknown_warnings_are_errors+set} = x; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Werror -Wunknown-warning-option" >&5
+$as_echo_n "checking whether $CC handles -Werror -Wunknown-warning-option... " >&6; }
+if ${gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=yes
+else
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" = xyes; then :
+ gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'
+else
+ gl_unknown_warnings_are_errors=
+fi
+
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Winline" >&5
$as_echo_n "checking whether $CC handles -Winline... " >&6; }
if ${gl_cv_warn_CFLAGS__Winline+:} false; then :
@@ -14816,6 +15105,83 @@ fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Wnull-dereference" >&5
+$as_echo_n "checking whether $CC handles -Wnull-dereference... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wnull_dereference+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wnull-dereference"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Wnull_dereference=yes
+else
+ gl_cv_warn_CFLAGS__Wnull_dereference=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Wnull_dereference" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wnull_dereference" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wnull_dereference" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wnull-dereference"
+fi
+
+
+if test x${gl_unknown_warnings_are_errors+set} = x; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Werror -Wunknown-warning-option" >&5
+$as_echo_n "checking whether $CC handles -Werror -Wunknown-warning-option... " >&6; }
+if ${gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=yes
+else
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" = xyes; then :
+ gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'
+else
+ gl_unknown_warnings_are_errors=
+fi
+
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Wp64" >&5
$as_echo_n "checking whether $CC handles -Wp64... " >&6; }
if ${gl_cv_warn_CFLAGS__Wp64+:} false; then :
@@ -15201,6 +15567,83 @@ fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Wundef" >&5
+$as_echo_n "checking whether $CC handles -Wundef... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wundef+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wundef"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Wundef=yes
+else
+ gl_cv_warn_CFLAGS__Wundef=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Wundef" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wundef" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wundef" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wundef"
+fi
+
+
+if test x${gl_unknown_warnings_are_errors+set} = x; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Werror -Wunknown-warning-option" >&5
+$as_echo_n "checking whether $CC handles -Werror -Wunknown-warning-option... " >&6; }
+if ${gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=yes
+else
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" = xyes; then :
+ gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'
+else
+ gl_unknown_warnings_are_errors=
+fi
+
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Wuninitialized" >&5
$as_echo_n "checking whether $CC handles -Wuninitialized... " >&6; }
if ${gl_cv_warn_CFLAGS__Wuninitialized+:} false; then :
@@ -15278,6 +15721,83 @@ fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Wunused" >&5
+$as_echo_n "checking whether $CC handles -Wunused... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wunused+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Wunused=yes
+else
+ gl_cv_warn_CFLAGS__Wunused=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Wunused" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wunused" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wunused" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wunused"
+fi
+
+
+if test x${gl_unknown_warnings_are_errors+set} = x; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Werror -Wunknown-warning-option" >&5
+$as_echo_n "checking whether $CC handles -Werror -Wunknown-warning-option... " >&6; }
+if ${gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=yes
+else
+ gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Werror__Wunknown_warning_option" = xyes; then :
+ gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'
+else
+ gl_unknown_warnings_are_errors=
+fi
+
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC handles -Wwrite-strings" >&5
$as_echo_n "checking whether $CC handles -Wwrite-strings... " >&6; }
if ${gl_cv_warn_CFLAGS__Wwrite_strings+:} false; then :
@@ -15945,6 +16465,58 @@ $as_echo "#define PAM_DEBUG /**/" >>confdefs.h
fi
+# Check whether --enable-docbook_rng was given.
+if test "${enable_docbook_rng+set}" = set; then :
+ enableval=$enable_docbook_rng; DOCBOOK_RNG=$enableval
+else
+ DOCBOOK_RNG=http://docbook.org/xml/5.0/rng/docbookxi.rng
+fi
+
+
+
+# Check whether --enable-html_stylesheet was given.
+if test "${enable_html_stylesheet+set}" = set; then :
+ enableval=$enable_html_stylesheet; HTML_STYLESHEET=$enableval
+else
+ HTML_STYLESHEET=http://docbook.sourceforge.net/release/xsl-ns/current/html/chunk.xsl
+fi
+
+
+
+# Check whether --enable-txt_stylesheet was given.
+if test "${enable_txt_stylesheet+set}" = set; then :
+ enableval=$enable_txt_stylesheet; TXT_STYLESHEET=$enableval
+else
+ TXT_STYLESHEET=http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl
+fi
+
+
+
+
+# It has to be TXT_STYLESHEET otherwise a html tree will be generated while generating all README files.
+sed "s+HTML_STYLESHEET+$TXT_STYLESHEET+g" <doc/custom-html.xsl.in >doc/custom-html.xsl
+
+# Check whether --enable-pdf_stylesheet was given.
+if test "${enable_pdf_stylesheet+set}" = set; then :
+ enableval=$enable_pdf_stylesheet; PDF_STYLESHEET=$enableval
+else
+ PDF_STYLESHEET=http://docbook.sourceforge.net/release/xsl-ns/current/fo/docbook.xsl
+fi
+
+
+
+# Check whether --enable-man_stylesheet was given.
+if test "${enable_man_stylesheet+set}" = set; then :
+ enableval=$enable_man_stylesheet; MAN_STYLESHEET=$enableval
+else
+ MAN_STYLESHEET=http://docbook.sourceforge.net/release/xsl-ns/current/manpages/profile-docbook.xsl
+fi
+
+
+
+
+sed "s+MAN_STYLESHEET+$MAN_STYLESHEET+g" <doc/custom-man.xsl.in >doc/custom-man.xsl
+
# Check whether --enable-securedir was given.
if test "${enable_securedir+set}" = set; then :
enableval=$enable_securedir; SECUREDIR=$enableval
@@ -15978,6 +16550,11 @@ else
fi
+cat >>confdefs.h <<_ACEOF
+#define SCONFIGDIR "$SCONFIGDIR"
+_ACEOF
+
+
# Check whether --enable-pamlocking was given.
if test "${enable_pamlocking+set}" = set; then :
@@ -16044,6 +16621,7 @@ else
/* end confdefs.h. */
#include <paths.h>
+#include <stdlib.h>
int main() {
#ifdef _PATH_MAILDIR
exit(0);
@@ -17260,18 +17838,29 @@ _ACEOF
fi
done
- for ac_header in rpc/rpc.h rpcsvc/ypclnt.h rpcsvc/yp_prot.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ ac_fn_c_check_header_mongrel "$LINENO" "rpc/rpc.h" "ac_cv_header_rpc_rpc_h" "$ac_includes_default"
+if test "x$ac_cv_header_rpc_rpc_h" = xyes; then :
+else
+ enable_nis=no
+fi
+
+
+ ac_fn_c_check_header_mongrel "$LINENO" "rpcsvc/ypclnt.h" "ac_cv_header_rpcsvc_ypclnt_h" "$ac_includes_default"
+if test "x$ac_cv_header_rpcsvc_ypclnt_h" = xyes; then :
+
+else
+ enable_nis=no
+fi
+
+
+ ac_fn_c_check_header_mongrel "$LINENO" "rpcsvc/yp_prot.h" "ac_cv_header_rpcsvc_yp_prot_h" "$ac_includes_default"
+if test "x$ac_cv_header_rpcsvc_yp_prot_h" = xyes; then :
+
+else
+ enable_nis=no
fi
-done
ac_fn_c_check_decl "$LINENO" "getrpcport" "ac_cv_have_decl_getrpcport" "
#if HAVE_RPC_RPC_H
@@ -17298,6 +17887,19 @@ fi
+ if test "x$enable_nis" != "xno"; then
+ HAVE_NIS_TRUE=
+ HAVE_NIS_FALSE='#'
+else
+ HAVE_NIS_TRUE='#'
+ HAVE_NIS_FALSE=
+fi
+
+if test "x$enable_nis" != "xno" ; then
+
+$as_echo "#define HAVE_NIS 1" >>confdefs.h
+
+fi
# Check whether --enable-usergroups was given.
if test "${enable_usergroups+set}" = set; then :
@@ -17401,29 +18003,31 @@ done
LIBS=$BACKUP_LIBS
fi
-# Check whether --enable-econf was given.
-if test "${enable_econf+set}" = set; then :
- enableval=$enable_econf; WITH_ECONF=$enableval
+LOGIND_CFLAGS=
+SYSTEMD_LIBS=
+# Check whether --enable-logind was given.
+if test "${enable_logind+set}" = set; then :
+ enableval=$enable_logind; WITH_LOGIND=$enableval
else
- WITH_ECONF=yes
+ WITH_LOGIND=yes
fi
-if test "$WITH_ECONF" = "yes" ; then
+if test "$WITH_LOGIND" = "yes"; then
pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libeconf" >&5
-$as_echo_n "checking for libeconf... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd >= 254" >&5
+$as_echo_n "checking for libsystemd >= 254... " >&6; }
-if test -n "$ECONF_CFLAGS"; then
- pkg_cv_ECONF_CFLAGS="$ECONF_CFLAGS"
+if test -n "$SYSTEMD_CFLAGS"; then
+ pkg_cv_SYSTEMD_CFLAGS="$SYSTEMD_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libeconf\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libeconf") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd >= 254\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd >= 254") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_ECONF_CFLAGS=`$PKG_CONFIG --cflags "libeconf" 2>/dev/null`
+ pkg_cv_SYSTEMD_CFLAGS=`$PKG_CONFIG --cflags "libsystemd >= 254" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -17431,16 +18035,16 @@ fi
else
pkg_failed=untried
fi
-if test -n "$ECONF_LIBS"; then
- pkg_cv_ECONF_LIBS="$ECONF_LIBS"
+if test -n "$SYSTEMD_LIBS"; then
+ pkg_cv_SYSTEMD_LIBS="$SYSTEMD_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libeconf\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libeconf") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd >= 254\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd >= 254") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_ECONF_LIBS=`$PKG_CONFIG --libs "libeconf" 2>/dev/null`
+ pkg_cv_SYSTEMD_LIBS=`$PKG_CONFIG --libs "libsystemd >= 254" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -17461,113 +18065,114 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- ECONF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libeconf" 2>&1`
+ SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd >= 254" 2>&1`
else
- ECONF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libeconf" 2>&1`
+ SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd >= 254" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
- echo "$ECONF_PKG_ERRORS" >&5
+ echo "$SYSTEMD_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for econf_readDirs in -leconf" >&5
-$as_echo_n "checking for econf_readDirs in -leconf... " >&6; }
-if ${ac_cv_lib_econf_econf_readDirs+:} false; then :
- $as_echo_n "(cached) " >&6
+ :
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ :
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-leconf $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS
+ SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ LOGIND_CFLAGS="-DUSE_LOGIND=1 $SYSTEMD_CFLAGS"
+fi
+fi
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char econf_readDirs ();
-int
-main ()
-{
-return econf_readDirs ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_econf_econf_readDirs=yes
+
+
+ECONF_CFLAGS=
+ECONF_LIBS=
+# Check whether --enable-econf was given.
+if test "${enable_econf+set}" = set; then :
+ enableval=$enable_econf; WITH_ECONF=$enableval
else
- ac_cv_lib_econf_econf_readDirs=no
+ WITH_ECONF=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+
+if test "$WITH_ECONF" = "yes"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libeconf >= 0.5.0" >&5
+$as_echo_n "checking for libeconf >= 0.5.0... " >&6; }
+
+if test -n "$ECONF_CFLAGS"; then
+ pkg_cv_ECONF_CFLAGS="$ECONF_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libeconf >= 0.5.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libeconf >= 0.5.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_ECONF_CFLAGS=`$PKG_CONFIG --cflags "libeconf >= 0.5.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_econf_econf_readDirs" >&5
-$as_echo "$ac_cv_lib_econf_econf_readDirs" >&6; }
-if test "x$ac_cv_lib_econf_econf_readDirs" = xyes; then :
- ECONF_LIBS="-leconf"
+ else
+ pkg_failed=untried
+fi
+if test -n "$ECONF_LIBS"; then
+ pkg_cv_ECONF_LIBS="$ECONF_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libeconf >= 0.5.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libeconf >= 0.5.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_ECONF_LIBS=`$PKG_CONFIG --libs "libeconf >= 0.5.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- ECONF_LIBS=""
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-elif test $pkg_failed = untried; then
+
+
+if test $pkg_failed = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for econf_readDirs in -leconf" >&5
-$as_echo_n "checking for econf_readDirs in -leconf... " >&6; }
-if ${ac_cv_lib_econf_econf_readDirs+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-leconf $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char econf_readDirs ();
-int
-main ()
-{
-return econf_readDirs ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_econf_econf_readDirs=yes
-else
- ac_cv_lib_econf_econf_readDirs=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_econf_econf_readDirs" >&5
-$as_echo "$ac_cv_lib_econf_econf_readDirs" >&6; }
-if test "x$ac_cv_lib_econf_econf_readDirs" = xyes; then :
- ECONF_LIBS="-leconf"
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- ECONF_LIBS=""
+ _pkg_short_errors_supported=no
fi
+ if test $_pkg_short_errors_supported = yes; then
+ ECONF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libeconf >= 0.5.0" 2>&1`
+ else
+ ECONF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libeconf >= 0.5.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$ECONF_PKG_ERRORS" >&5
+ :
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ :
else
ECONF_CFLAGS=$pkg_cv_ECONF_CFLAGS
ECONF_LIBS=$pkg_cv_ECONF_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
-
+ ECONF_CFLAGS="-DUSE_ECONF=1 $ECONF_CFLAGS"
fi
- if test -n "$ECONF_LIBS" ; then
- ECONF_CFLAGS="-DUSE_ECONF=1 $ECONF_CFLAGS"
- fi
fi
+
# Check whether --enable-vendordir was given.
if test "${enable_vendordir+set}" = set; then :
enableval=$enable_vendordir;
@@ -17579,9 +18184,30 @@ cat >>confdefs.h <<_ACEOF
#define VENDORDIR "$enable_vendordir"
_ACEOF
- STRINGPARAM_VENDORDIR="--stringparam vendordir '$enable_vendordir'"
+
+cat >>confdefs.h <<_ACEOF
+#define VENDOR_SCONFIGDIR "$enable_vendordir/security"
+_ACEOF
+
+ if test "$WITH_ECONF" = "yes" ; then
+ STRINGPARAM_VENDORDIR="--stringparam vendordir '$enable_vendordir'"
+ profileconditions="with_vendordir;with_vendordir_and_with_econf"
+ else
+ STRINGPARAM_VENDORDIR="--stringparam vendordir '$enable_vendordir'"
+ profileconditions="with_vendordir;with_vendordir_and_without_econf"
+ fi
+ VENDOR_SCONFIGDIR="$enable_vendordir/security"
else
- STRINGPARAM_VENDORDIR="--stringparam vendordir '<vendordir>'"
+ profileconditions="without_vendordir"
+fi
+
+
+ if test -n "$enable_vendordir"; then
+ HAVE_VENDORDIR_TRUE=
+ HAVE_VENDORDIR_FALSE='#'
+else
+ HAVE_VENDORDIR_TRUE='#'
+ HAVE_VENDORDIR_FALSE=
fi
@@ -17635,15 +18261,14 @@ if test "x$ac_cv_lib_crypto_EVP_MAC_CTX_new" = xyes; then :
$as_echo "#define WITH_OPENSSL 1" >>confdefs.h
- STRINGPARAM_HMAC="--stringparam profile.condition 'openssl_hmac'"
+ profileconditions+=";openssl_hmac"
else
CRYPTO_LIBS=""
- STRINGPARAM_HMAC="--stringparam profile.condition 'no_openssl_hmac'"
+ profileconditions+=";no_openssl_hmac"
fi
fi
-
if test "x$use_openssl" = "xyes"; then
COND_USE_OPENSSL_TRUE=
COND_USE_OPENSSL_FALSE='#'
@@ -17653,6 +18278,9 @@ else
fi
+STRINGPARAM_PROFILECONDITIONS="--stringparam profile.condition '$profileconditions'"
+
+
ac_header_dirent=no
for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
@@ -18703,7 +19331,7 @@ _ACEOF
fi
done
-for ac_func in ruserok_af ruserok
+for ac_func in explicit_bzero memset_explicit
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -18711,24 +19339,22 @@ if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
- break
+
fi
done
-BACKUP_LIBS=$LIBS
-LIBS="$LIBS -lutil"
-for ac_func in logwtmp
+for ac_func in ruserok_af ruserok
do :
- ac_fn_c_check_func "$LINENO" "logwtmp" "ac_cv_func_logwtmp"
-if test "x$ac_cv_func_logwtmp" = xyes; then :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_LOGWTMP 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
-
+ break
fi
done
-LIBS=$BACKUP_LIBS
# Check whether --enable-regenerate-docu was given.
if test "${enable_regenerate_docu+set}" = set; then :
@@ -18898,11 +19524,11 @@ fi
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook XML DTD V4.4 in XML catalog" >&5
-$as_echo_n "checking for DocBook XML DTD V4.4 in XML catalog... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook XML RNG V5.0 in XML catalog" >&5
+$as_echo_n "checking for DocBook XML RNG V5.0 in XML catalog... " >&6; }
if $jh_found_xmlcatalog && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"-//OASIS//DTD DocBook XML V4.4//EN\" >&2"; } >&5
- ($XMLCATALOG --noout "$XML_CATALOG_FILE" "-//OASIS//DTD DocBook XML V4.4//EN" >&2) 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"http://docbook.org/xml/5.0/rng/docbookxi.rng\" >&2"; } >&5
+ ($XMLCATALOG --noout "$XML_CATALOG_FILE" "http://docbook.org/xml/5.0/rng/docbookxi.rng" >&2) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
@@ -18918,8 +19544,8 @@ $as_echo "not found" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook XSL Stylesheets in XML catalog" >&5
$as_echo_n "checking for DocBook XSL Stylesheets in XML catalog... " >&6; }
if $jh_found_xmlcatalog && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\" >&2"; } >&5
- ($XMLCATALOG --noout "$XML_CATALOG_FILE" "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" >&2) 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"http://docbook.sourceforge.net/release/xsl-ns/current/manpages/docbook.xsl\" >&2"; } >&5
+ ($XMLCATALOG --noout "$XML_CATALOG_FILE" "http://docbook.sourceforge.net/release/xsl-ns/current/manpages/docbook.xsl" >&2) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
@@ -21183,20 +21809,6 @@ _ACEOF
-# Check whether --with-sysuidmin was given.
-if test "${with_sysuidmin+set}" = set; then :
- withval=$with_sysuidmin; opt_sysuidmin=$withval
-fi
-
-test -n "$opt_sysuidmin" ||
- opt_sysuidmin=101
-
-cat >>confdefs.h <<_ACEOF
-#define PAM_USERTYPE_SYSUIDMIN $opt_sysuidmin
-_ACEOF
-
-
-
# Check whether --with-kernel-overflow-uid was given.
if test "${with_kernel_overflow_uid+set}" = set; then :
withval=$with_kernel_overflow_uid; opt_kerneloverflowuid=$withval
@@ -21244,6 +21856,34 @@ case "$enable_unix" in
*) as_fn_error $? "bad value $enable_unix for --enable-unix option" "$LINENO" 5 ;;
esac
+# Check whether --enable-lastlog was given.
+if test "${enable_lastlog+set}" = set; then :
+ enableval=$enable_lastlog;
+else
+ enable_lastlog=no
+fi
+
+case "$enable_lastlog" in
+ yes|check)
+ BACKUP_LIBS=$LIBS
+ LIBS="$LIBS -lutil"
+ for ac_func in logwtmp
+do :
+ ac_fn_c_check_func "$LINENO" "logwtmp" "ac_cv_func_logwtmp"
+if test "x$ac_cv_func_logwtmp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LOGWTMP 1
+_ACEOF
+
+fi
+done
+
+ LIBS=$BACKUP_LIBS
+ ;;
+ no) ;;
+ *) as_fn_error $? "bad value $enable_lastlog for --enable-lastlog option" "$LINENO" 5 ;;
+esac
+
# Check whether --with-misc-conv-bufsize was given.
if test "${with_misc_conv_bufsize+set}" = set; then :
@@ -21486,6 +22126,14 @@ if test -z "${HAVE_DOC_TRUE}" && test -z "${HAVE_DOC_FALSE}"; then
as_fn_error $? "conditional \"HAVE_DOC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_NIS_TRUE}" && test -z "${HAVE_NIS_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_NIS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_VENDORDIR_TRUE}" && test -z "${HAVE_VENDORDIR_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_VENDORDIR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${COND_USE_OPENSSL_TRUE}" && test -z "${COND_USE_OPENSSL_FALSE}"; then
as_fn_error $? "conditional \"COND_USE_OPENSSL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -21936,7 +22584,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Linux-PAM $as_me 1.5.2, which was
+This file was extended by Linux-PAM $as_me 1.5.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22002,7 +22650,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-Linux-PAM config.status 1.5.2
+Linux-PAM config.status 1.5.3
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -22165,6 +22813,7 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
@@ -22294,6 +22943,7 @@ LN_S \
lt_SP2NL \
lt_NL2SP \
reload_flag \
+FILECMD \
OBJDUMP \
deplibs_check_method \
file_magic_cmd \
@@ -23316,6 +23966,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd
# convert \$build files to toolchain format.
to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+# A file(cmd) program that detects file types.
+FILECMD=$lt_FILECMD
+
# An object symbol dumper.
OBJDUMP=$lt_OBJDUMP
@@ -23719,7 +24372,7 @@ ltmain=$ac_aux_dir/ltmain.sh
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" \
+ $SED '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
diff --git a/configure.ac b/configure.ac
index c06bc7dd..b9b0f839 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT([Linux-PAM], [1.5.2], , [Linux-PAM])
+AC_INIT([Linux-PAM], [1.5.3], , [Linux-PAM])
AC_CONFIG_SRCDIR([conf/pam_conv1/pam_conv_y.y])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([-Wall -Wno-portability])
@@ -243,6 +243,38 @@ if test x"$enable_debug" = x"yes" ; then
[lots of stuff gets written to /var/run/pam-debug.log])
fi
+AC_ARG_ENABLE(docbook_rng,
+ AS_HELP_STRING([--enable-docbook-rng=FILE],[RNG file for checking XML files @<:@default=http://docbook.org/xml/5.0/rng/docbookxi.rng@:>@]),
+ DOCBOOK_RNG=$enableval, DOCBOOK_RNG=http://docbook.org/xml/5.0/rng/docbookxi.rng)
+AC_SUBST(DOCBOOK_RNG)
+
+AC_ARG_ENABLE(html_stylesheet,
+ AS_HELP_STRING([--enable-html-stylesheet=FILE],[html stylesheet path @<:@default=http://docbook.sourceforge.net/release/xsl-ns/current/html/chunk.xsl@:>@]),
+ HTML_STYLESHEET=$enableval, HTML_STYLESHEET=http://docbook.sourceforge.net/release/xsl-ns/current/html/chunk.xsl)
+AC_SUBST(HTML_STYLESHEET)
+
+AC_ARG_ENABLE(txt_stylesheet,
+ AS_HELP_STRING([--enable-txt-stylesheet=FILE],[text stylesheet path @<:@default=http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl@:>@]),
+ TXT_STYLESHEET=$enableval, TXT_STYLESHEET=http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl)
+
+
+AC_SUBST(TXT_STYLESHEET)
+# It has to be TXT_STYLESHEET otherwise a html tree will be generated while generating all README files.
+sed "s+HTML_STYLESHEET+$TXT_STYLESHEET+g" <doc/custom-html.xsl.in >doc/custom-html.xsl
+
+AC_ARG_ENABLE(pdf_stylesheet,
+ AS_HELP_STRING([--enable-pdf-stylesheet=FILE],[pdf stylesheet path @<:@default=http://docbook.sourceforge.net/release/xsl-ns/current/fo/docbook.xsl@:>@]),
+ PDF_STYLESHEET=$enableval, PDF_STYLESHEET=http://docbook.sourceforge.net/release/xsl-ns/current/fo/docbook.xsl)
+AC_SUBST(PDF_STYLESHEET)
+
+AC_ARG_ENABLE(man_stylesheet,
+ AS_HELP_STRING([--enable-man-stylesheet=FILE],[man stylesheet path @<:@default=http://docbook.sourceforge.net/release/xsl-ns/current/manpages/profile-docbook.xsl@:>@]),
+ MAN_STYLESHEET=$enableval, MAN_STYLESHEET=http://docbook.sourceforge.net/release/xsl-ns/current/manpages/profile-docbook.xsl)
+
+
+AC_SUBST(MAN_STYLESHEET)
+sed "s+MAN_STYLESHEET+$MAN_STYLESHEET+g" <doc/custom-man.xsl.in >doc/custom-man.xsl
+
AC_ARG_ENABLE(securedir,
AS_HELP_STRING([--enable-securedir=DIR],[path to location of PAMs @<:@default=$libdir/security@:>@]),
SECUREDIR=$enableval, SECUREDIR=$libdir/security)
@@ -259,6 +291,8 @@ AC_MSG_RESULT([Defining \$ISA to "$ISA"])
AC_ARG_ENABLE(sconfigdir,
AS_HELP_STRING([--enable-sconfigdir=DIR],[path to module conf files @<:@default=$sysconfdir/security@:>@]),
SCONFIGDIR=$enableval, SCONFIGDIR=$sysconfdir/security)
+AC_DEFINE_UNQUOTED([SCONFIGDIR], ["$SCONFIGDIR"],
+ [Directory for PAM modules system configuration files])
AC_SUBST(SCONFIGDIR)
AC_ARG_ENABLE(pamlocking,
@@ -295,6 +329,7 @@ if test x$with_mailspool != x ; then
else
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <paths.h>
+#include <stdlib.h>
int main() {
#ifdef _PATH_MAILDIR
exit(0);
@@ -446,7 +481,9 @@ AS_IF([test "x$enable_nis" != "xno"], [
AC_CHECK_FUNCS([yp_get_default_domain yperr_string yp_master yp_bind yp_match yp_unbind])
AC_CHECK_FUNCS([getrpcport rpcb_getaddr])
- AC_CHECK_HEADERS([rpc/rpc.h rpcsvc/ypclnt.h rpcsvc/yp_prot.h])
+ AC_CHECK_HEADER([rpc/rpc.h], , [enable_nis=no])
+ AC_CHECK_HEADER([rpcsvc/ypclnt.h], , [enable_nis=no])
+ AC_CHECK_HEADER([rpcsvc/yp_prot.h], , [enable_nis=no])
AC_CHECK_DECLS([getrpcport], , , [
#if HAVE_RPC_RPC_H
# include <rpc/rpc.h>
@@ -460,6 +497,11 @@ AS_IF([test "x$enable_nis" != "xno"], [
AC_SUBST([NIS_CFLAGS])
AC_SUBST([NIS_LIBS])
+AM_CONDITIONAL([HAVE_NIS], [test "x$enable_nis" != "xno"])
+if test "x$enable_nis" != "xno" ; then
+ AC_DEFINE([HAVE_NIS], 1,
+ [Defines that NIS should be used])
+fi
AC_ARG_ENABLE([usergroups],
AS_HELP_STRING([--enable-usergroups], [sets the usergroups option default to enabled]),
@@ -490,28 +532,49 @@ if test -n "$LIBSELINUX" ; then
LIBS=$BACKUP_LIBS
fi
+LOGIND_CFLAGS=
+SYSTEMD_LIBS=
+AC_ARG_ENABLE([logind],
+ AS_HELP_STRING([--disable-logind], [Disable logind support]),
+ [WITH_LOGIND=$enableval], [WITH_LOGIND=yes])
+if test "$WITH_LOGIND" = "yes"; then
+ PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 254], [LOGIND_CFLAGS="-DUSE_LOGIND=1 $SYSTEMD_CFLAGS"], [:])
+fi
+AC_SUBST([LOGIND_CFLAGS])
+AC_SUBST([SYSTEMD_LIBS])
+
+ECONF_CFLAGS=
+ECONF_LIBS=
AC_ARG_ENABLE([econf],
AS_HELP_STRING([--disable-econf], [do not use libeconf]),
- [WITH_ECONF=$enableval], WITH_ECONF=yes)
-if test "$WITH_ECONF" = "yes" ; then
- PKG_CHECK_MODULES([ECONF], [libeconf], [],
- [AC_CHECK_LIB([econf],[econf_readDirs],[ECONF_LIBS="-leconf"],[ECONF_LIBS=""])])
- if test -n "$ECONF_LIBS" ; then
- ECONF_CFLAGS="-DUSE_ECONF=1 $ECONF_CFLAGS"
- fi
+ [WITH_ECONF=$enableval], [WITH_ECONF=yes])
+if test "$WITH_ECONF" = "yes"; then
+ PKG_CHECK_MODULES([ECONF], [libeconf >= 0.5.0], [ECONF_CFLAGS="-DUSE_ECONF=1 $ECONF_CFLAGS"], [:])
fi
AC_SUBST([ECONF_CFLAGS])
AC_SUBST([ECONF_LIBS])
+
AC_ARG_ENABLE([vendordir],
AS_HELP_STRING([--enable-vendordir=DIR], [Directory for distribution provided configuration files]),,[])
if test -n "$enable_vendordir"; then
AC_DEFINE_UNQUOTED([VENDORDIR], ["$enable_vendordir"],
[Directory for distribution provided configuration files])
- STRINGPARAM_VENDORDIR="--stringparam vendordir '$enable_vendordir'"
+ AC_DEFINE_UNQUOTED([VENDOR_SCONFIGDIR], ["$enable_vendordir/security"],
+ [Directory for PAM modules distribution provided configuration files])
+ if test "$WITH_ECONF" = "yes" ; then
+ STRINGPARAM_VENDORDIR="--stringparam vendordir '$enable_vendordir'"
+ profileconditions="with_vendordir;with_vendordir_and_with_econf"
+ else
+ STRINGPARAM_VENDORDIR="--stringparam vendordir '$enable_vendordir'"
+ profileconditions="with_vendordir;with_vendordir_and_without_econf"
+ fi
+ VENDOR_SCONFIGDIR="$enable_vendordir/security"
else
- STRINGPARAM_VENDORDIR="--stringparam vendordir '<vendordir>'"
+ profileconditions="without_vendordir"
fi
AC_SUBST([STRINGPARAM_VENDORDIR])
+AC_SUBST(VENDOR_SCONFIGDIR)
+AM_CONDITIONAL([HAVE_VENDORDIR], [test -n "$enable_vendordir"])
AC_ARG_ENABLE([openssl],
AS_HELP_STRING([--enable-openssl],[use OpenSSL crypto libraries]),
@@ -521,14 +584,16 @@ if test "$OPENSSL_ENABLED" = "yes" ; then
[CRYPTO_LIBS="-lcrypto"
use_openssl=yes
AC_DEFINE([WITH_OPENSSL], 1, [OpenSSL provides crypto algorithm for hmac])
- STRINGPARAM_HMAC="--stringparam profile.condition 'openssl_hmac'"],
+ profileconditions+=";openssl_hmac"],
[CRYPTO_LIBS=""
- STRINGPARAM_HMAC="--stringparam profile.condition 'no_openssl_hmac'"])
+ profileconditions+=";no_openssl_hmac"])
fi
AC_SUBST([CRYPTO_LIBS])
-AC_SUBST([STRINGPARAM_HMAC])
AM_CONDITIONAL([COND_USE_OPENSSL], [test "x$use_openssl" = "xyes"])
+STRINGPARAM_PROFILECONDITIONS="--stringparam profile.condition '$profileconditions'"
+AC_SUBST([STRINGPARAM_PROFILECONDITIONS])
+
dnl Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
@@ -560,11 +625,8 @@ AC_CHECK_FUNCS(getgrouplist getline getdelim)
AC_CHECK_FUNCS(inet_ntop inet_pton innetgr)
AC_CHECK_FUNCS(quotactl)
AC_CHECK_FUNCS(unshare)
+AC_CHECK_FUNCS(explicit_bzero memset_explicit)
AC_CHECK_FUNCS([ruserok_af ruserok], [break])
-BACKUP_LIBS=$LIBS
-LIBS="$LIBS -lutil"
-AC_CHECK_FUNCS([logwtmp])
-LIBS=$BACKUP_LIBS
AC_ARG_ENABLE([regenerate-docu],
AS_HELP_STRING([--disable-regenerate-docu],[Don't re-build documentation from XML sources]),
@@ -577,10 +639,10 @@ if test -z "$XSLTPROC"; then
enable_docu=no
fi
AC_PATH_PROG([XMLLINT], [xmllint],[/bin/true])
-dnl check for DocBook DTD and stylesheets in the local catalog.
-JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.4//EN],
- [DocBook XML DTD V4.4], [], enable_docu=no)
-JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+dnl check for DocBook RNG and stylesheets in the local catalog.
+JH_CHECK_XML_CATALOG([http://docbook.org/xml/5.0/rng/docbookxi.rng],
+ [DocBook XML RNG V5.0], [], enable_docu=no)
+JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl-ns/current/manpages/docbook.xsl],
[DocBook XSL Stylesheets], [], enable_docu=no)
AC_PATH_PROG([BROWSER], [w3m])
@@ -628,11 +690,6 @@ test -n "$opt_uidmin" ||
opt_uidmin=1000
AC_DEFINE_UNQUOTED(PAM_USERTYPE_UIDMIN, $opt_uidmin, [Minimum regular user uid.])
-AC_ARG_WITH([sysuidmin], AS_HELP_STRING([--with-sysuidmin=<number>],[default value for system user min uid (101)]), opt_sysuidmin=$withval)
-test -n "$opt_sysuidmin" ||
- opt_sysuidmin=101
-AC_DEFINE_UNQUOTED(PAM_USERTYPE_SYSUIDMIN, $opt_sysuidmin, [Minimum system user uid.])
-
AC_ARG_WITH([kernel-overflow-uid], AS_HELP_STRING([--with-kernel-overflow-uid=<number>],[kernel overflow uid, default (uint16_t)-2=65534]), opt_kerneloverflowuid=$withval)
test -n "$opt_kerneloverflowuid" ||
opt_kerneloverflowuid=65534
@@ -657,6 +714,21 @@ case "$enable_unix" in
*) AC_MSG_ERROR([bad value $enable_unix for --enable-unix option]) ;;
esac
+AC_ARG_ENABLE([lastlog],
+ [AS_HELP_STRING([--enable-lastlog],
+ [do build pam_lastlog module])],
+ [], [enable_lastlog=no])
+case "$enable_lastlog" in
+ yes|check)
+ BACKUP_LIBS=$LIBS
+ LIBS="$LIBS -lutil"
+ AC_CHECK_FUNCS([logwtmp])
+ LIBS=$BACKUP_LIBS
+ ;;
+ no) ;;
+ *) AC_MSG_ERROR([bad value $enable_lastlog for --enable-lastlog option]) ;;
+esac
+
AC_ARG_WITH([misc-conv-bufsize],
AS_HELP_STRING([--with-misc-conv-bufsize=<number>],
[Size of input buffer for libpam_misc's misc_conv() conversation function, default=4096]),
diff --git a/debian/README.source b/debian/README.source
index cdbf32fe..6e74d5b8 100644
--- a/debian/README.source
+++ b/debian/README.source
@@ -1,17 +1,11 @@
-This package uses quilt to manage all modifications to the upstream
-source. Changes are stored in the source package as diffs in
-debian/patches-applied and applied during the build. Please see:
-
- /usr/share/doc/quilt/README.source
-
-for more information on how to apply the patches, modify patches, or
-remove a patch.
+This package uses gbp pq to patch the source; please see the gbp-pq
+man page.
If you patch a man page or other XML documentation in the package, it
is important to include a patch both to the xml file and the resulting
nroff or other sources in your patch. much of the man pages is
installed in Multi-Arch: same packages, so the resulting documents
need to be identical. The best way to guarantee this is to include
-the resulting document in the source.p
+the resulting document in the source.
- -- Sam Hartman <hartmans@debian.org>, Wed, 3 Feb 2021 12:26:39 -0500
+ -- Sam Hartman <hartmans@debian.org>, Mon, 11 Sep 2023 13:56:17 -0600
diff --git a/debian/changelog b/debian/changelog
index 2a4657b3..bce0df4f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,66 @@
+pam (1.5.3-3) experimental; urgency=medium
+
+ [ Helmut Grohne ]
+ * Mitigate /usr-move file loss. (Closes: #1062802)
+
+ -- Helmut Grohne <helmut@subdivi.de> Sat, 03 Feb 2024 12:18:52 +0100
+
+pam (1.5.3-2) experimental; urgency=medium
+
+ * Rename libpam0g to libpamt64 for time_t transition
+ * New Swedish Translations, Thanks Martin Bagge / brother, Closes: #1057775
+ * pam_namespace: protect_dir(): use O_DIRECTORY to prevent local DoS
+ situations (CVE-2024-22365) (Closes: #1061097)
+
+ -- Sam Hartman <hartmans@debian.org> Fri, 02 Feb 2024 11:27:45 -0700
+
+pam (1.5.3-1) experimental; urgency=medium
+
+ [ Sam Hartman ]
+ * New upstream version
+ * Since we no longer build with NIS support, drop Debian patches related
+ to NIS
+ [ Debian Janitor]
+ * Update lintian override info to new format:
+ + debian/libpam-runtime.lintian-overrides: line 5, 7, 9-13
+ + debian/libpam-modules.lintian-overrides: line 5-10, 14
+ * Trim trailing whitespace.
+ * Move source package lintian overrides to debian/source.
+ * Update renamed lintian tag names in lintian overrides.
+ * Set upstream metadata fields: Bug-Database, Bug-Submit, Repository-Browse.
+ * Drop unnecessary dependency on dh-autoreconf.
+ * Update standards version to 4.6.2, no changes needed.
+
+ [ Andreas Henriksson ]
+ * debian/rules: use --enable-usergroups configure flag (Closes: #583958)
+ * Use pam_umask.so in common-session{-noninteractive} (Closes: #711104)
+
+ [ Debian Janitor ]
+ * Apply multi-arch hints. + libpam-doc: Add Multi-Arch: foreign.
+
+ [ Sam Hartman ]
+ * Drop NIS patches and rearrange other patches.
+ * Update patch to move pam manpage to section 7: docbook tools now take
+ the man page output name from the xml so we need to update the
+ Makefile.
+ * Now PAM.7 is actually installed as pam.7 so update packaging
+ * pam-auth-update: Session-Interactive-Only set to anything other than
+ yes counts as undefined/no, thanks Lucas Nussbaum, Closes: #982309
+ * Use logind instead of utmp in pam_issue and pam_timestamp; utmp is not
+ y2038-safe.
+
+ [ Sam Hartman ]
+ * Add new common-session-* templates to pam-auth-update.
+
+ [ Chris Hofstaedtler ]
+ * Install into /usr/{lib,sbin} instead of /{lib,sbin}. Assumes
+ usrmerge aliasing symlinks are in place since bookworm to keep
+ compatibility with PAM modules still installing into /lib.
+ (DEP17 M2) (Closes: #1060160).
+ * Update lintian override for setgid binary.
+
+ -- Sam Hartman <hartmans@debian.org> Mon, 15 Jan 2024 15:45:50 -0700
+
pam (1.5.2-9.1) unstable; urgency=medium
* Non-maintainer upload acked by Sam Hartman.
@@ -277,7 +340,7 @@ pam (1.4.0-2) unstable; urgency=medium
* Restart services on upgrade to 1.4.0. Closes: #978555.
-- Steve Langasek <steve.langasek@ubuntu.com> Mon, 28 Dec 2020 19:20:38 -0800
-
+
pam (1.4.0-1) unstable; urgency=medium
* New upstream release. Closes: #948188.
diff --git a/debian/clean b/debian/clean
index 62f09e76..bd751b64 100644
--- a/debian/clean
+++ b/debian/clean
@@ -1 +1,3 @@
debian/local/pam_getenv.8
+debian/libpam0t64.preinst
+debian/libpam0t64.postrm
diff --git a/debian/control b/debian/control
index 9cdc3f81..ea56776a 100644
--- a/debian/control
+++ b/debian/control
@@ -3,8 +3,8 @@ Section: libs
Priority: optional
Maintainer: Sam Hartman <hartmans@debian.org>
Uploaders: Steve Langasek <vorlon@debian.org>
-Standards-Version: 4.6.0
-Build-Depends: debhelper-compat (= 13), dh-exec, quilt, flex, libdb-dev, libcrypt-dev, libselinux1-dev [linux-any], po-debconf, dh-autoreconf, autopoint, libaudit-dev [linux-any] <!stage1>, pkg-config, libfl-dev, libfl-dev:native, docbook-xsl, docbook-xml, xsltproc, libxml2-utils, w3m
+Standards-Version: 4.6.2
+Build-Depends: debhelper-compat (= 13), dh-exec, flex, libdb-dev, libcrypt-dev, libselinux1-dev [linux-any], libsystemd-dev [linux-any] <!stage1>, po-debconf, autopoint, libaudit-dev [linux-any] <!stage1>, pkg-config, libfl-dev, libfl-dev:native, docbook-xsl, docbook-xml, xsltproc, libxml2-utils, w3m
Build-Conflicts-Indep: fop
Build-Conflicts: libdb4.2-dev, libxcrypt-dev
Vcs-Browser: https://salsa.debian.org/vorlon/pam
@@ -12,10 +12,13 @@ Vcs-Git: https://salsa.debian.org/vorlon/pam.git
Homepage: http://www.linux-pam.org/
Rules-Requires-Root: binary-targets
-Package: libpam0g
+Package: libpam0t64
+Provides: ${t64:Provides}
+X-Time64-Compat: libpam0g
+Breaks: libpam0g (<< ${source:Version})
Architecture: any
Multi-Arch: same
-Replaces: libpam0g-util
+Replaces: libpam0g, libpam0g-util
Depends: ${shlibs:Depends}, ${misc:Depends}
Pre-Depends: ${misc:Pre-Depends}
Suggests: libpam-doc
@@ -69,7 +72,7 @@ Package: libpam0g-dev
Section: libdevel
Architecture: any
Multi-Arch: same
-Depends: ${misc:Depends}, libpam0g (= ${binary:Version}), libc6-dev|libc-dev
+Depends: ${misc:Depends}, libpam0t64 (= ${binary:Version}), libc6-dev|libc-dev
Provides: libpam-dev
Description: Development files for PAM
Contains C header files and development libraries for libpam, the Pluggable
@@ -85,6 +88,7 @@ Provides: pam-doc
Section: doc
Architecture: all
Depends: ${misc:Depends}
+Multi-Arch: foreign
Description: Documentation of PAM
Contains documentation (in HTML, ASCII, and PostScript format) for libpam,
the Pluggable Authentication Modules library, a library that enables the
diff --git a/debian/libpam-modules-bin.install b/debian/libpam-modules-bin.install
index 2f1c3914..ee73913d 100644
--- a/debian/libpam-modules-bin.install
+++ b/debian/libpam-modules-bin.install
@@ -1,9 +1,9 @@
-sbin/unix_chkpwd sbin
-sbin/unix_update sbin
-sbin/mkhomedir_helper sbin
-sbin/pam_namespace_helper
-sbin/pwhistory_helper
-sbin/pam_timestamp_check usr/sbin
-sbin/faillock usr/sbin
+usr/sbin/unix_chkpwd
+usr/sbin/unix_update
+usr/sbin/mkhomedir_helper
+usr/sbin/pam_namespace_helper
+usr/sbin/pwhistory_helper
+usr/sbin/pam_timestamp_check
+usr/sbin/faillock
modules/pam_faillock/faillock.8 usr/share/man/man8
usr/lib/systemd/system/pam_namespace.service
diff --git a/debian/libpam-modules-bin.lintian-overrides b/debian/libpam-modules-bin.lintian-overrides
index 8c185917..809d87f1 100644
--- a/debian/libpam-modules-bin.lintian-overrides
+++ b/debian/libpam-modules-bin.lintian-overrides
@@ -1,2 +1,2 @@
# yes, we know it's sgid, that's the whole point...
-libpam-modules-bin: setgid-binary *sbin/unix_chkpwd* 2755 root/shadow
+libpam-modules-bin: elevated-privileges 2755 root/shadow [usr/sbin/unix_chkpwd]
diff --git a/debian/libpam-modules.install b/debian/libpam-modules.install
index 5fd57b44..2697bd7d 100644
--- a/debian/libpam-modules.install
+++ b/debian/libpam-modules.install
@@ -1,3 +1,3 @@
etc/security/* etc/security
-lib/*/security/*.so
+usr/lib/*/security/*.so
debian/pam-configs/mkhomedir usr/share/pam-configs/
diff --git a/debian/libpam-modules.lintian-overrides b/debian/libpam-modules.lintian-overrides
index 531ff4de..cc475043 100644
--- a/debian/libpam-modules.lintian-overrides
+++ b/debian/libpam-modules.lintian-overrides
@@ -2,13 +2,12 @@
# fortifying. Since we know we have hardening turned on globally, suppress
# them. If we ever see this warning again for *other* modules, then we know
# there's a real problem.
-libpam-modules: hardening-no-fortify-functions *lib/*/security/pam_echo.so*
-libpam-modules: hardening-no-fortify-functions *lib/*/security/pam_filter.so*
-libpam-modules: hardening-no-fortify-functions *lib/*/security/pam_group.so*
-libpam-modules: hardening-no-fortify-functions *lib/*/security/pam_localuser.so*
-libpam-modules: hardening-no-fortify-functions *lib/*/security/pam_shells.so*
-libpam-modules: hardening-no-fortify-functions *lib/*/security/pam_wheel.so*
+libpam-modules: hardening-no-fortify-functions *usr/lib/*/security/pam_echo.so*
+libpam-modules: hardening-no-fortify-functions *usr/lib/*/security/pam_filter.so*
+libpam-modules: hardening-no-fortify-functions *usr/lib/*/security/pam_group.so*
+libpam-modules: hardening-no-fortify-functions *usr/lib/*/security/pam_localuser.so*
+libpam-modules: hardening-no-fortify-functions *usr/lib/*/security/pam_shells.so*
+libpam-modules: hardening-no-fortify-functions *usr/lib/*/security/pam_wheel.so*
# pam_deny.so does not use any symbol from libc.
-libpam-modules: shared-lib-without-dependency-information *lib/*/security/pam_deny.so*
-# lintian doesn't know what to do with manpages for pam modules
-libpam-modules: spare-manual-page *
+libpam-modules: shared-lib-without-dependency-information *usr/lib/*/security/pam_deny.so*
+libpam-modules: spare-manual-page [*]
diff --git a/debian/libpam-runtime.lintian-overrides b/debian/libpam-runtime.lintian-overrides
index 1385c591..d7ad72be 100644
--- a/debian/libpam-runtime.lintian-overrides
+++ b/debian/libpam-runtime.lintian-overrides
@@ -2,12 +2,12 @@
libpam-runtime: no-debconf-config
# this warning is just plain crack, there's no reason that using debconf
# outside of a maintainer script implies an error.
-libpam-runtime: debconf-is-not-a-registry *usr/sbin/pam-auth-update*
+libpam-runtime: debconf-is-not-a-registry [*usr/sbin/pam-auth-update*:*]
# false positive, we have to load the debconf templates from here
-libpam-runtime: uses-dpkg-database-directly usr/sbin/pam-auth-update
+libpam-runtime: uses-dpkg-database-directly [usr/sbin/pam-auth-update]
# and lintian also says these templates are unused, which is false
-libpam-runtime: unused-debconf-template libpam-runtime/conflicts
-libpam-runtime: unused-debconf-template libpam-runtime/no_profiles_chosen
-libpam-runtime: unused-debconf-template libpam-runtime/override
-libpam-runtime: unused-debconf-template libpam-runtime/profiles
-libpam-runtime: unused-debconf-template libpam-runtime/title
+libpam-runtime: unused-debconf-template libpam-runtime/conflicts [*:*]
+libpam-runtime: unused-debconf-template libpam-runtime/no_profiles_chosen [*:*]
+libpam-runtime: unused-debconf-template libpam-runtime/override [*:*]
+libpam-runtime: unused-debconf-template libpam-runtime/profiles [*:*]
+libpam-runtime: unused-debconf-template libpam-runtime/title [*:*]
diff --git a/debian/libpam-runtime.manpages b/debian/libpam-runtime.manpages
index 1e7d9aed..a4ca9194 100644
--- a/debian/libpam-runtime.manpages
+++ b/debian/libpam-runtime.manpages
@@ -1,5 +1,5 @@
debian/tmp/usr/share/man/man5/pam.conf.5
debian/tmp/usr/share/man/man5/pam.d.5
-debian/tmp/usr/share/man/man8/PAM.8
+debian/tmp/usr/share/man/man7/PAM.7
debian/local/pam_getenv.8
debian/local/pam-auth-update.8
diff --git a/debian/libpam0g-dev.install b/debian/libpam0g-dev.install
index 0d6f4856..beedb8fd 100755
--- a/debian/libpam0g-dev.install
+++ b/debian/libpam0g-dev.install
@@ -1,4 +1,4 @@
#!/usr/bin/dh-exec
usr/include/security/*
-lib/${DEB_HOST_MULTIARCH}/*.a usr/lib/${DEB_HOST_MULTIARCH}
-lib/${DEB_HOST_MULTIARCH}/pkgconfig/*.pc usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig
+usr/lib/${DEB_HOST_MULTIARCH}/*.a usr/lib/${DEB_HOST_MULTIARCH}
+usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/*.pc usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig
diff --git a/debian/libpam0g-dev.links b/debian/libpam0g-dev.links
index 5cbfd6db..39a7fb78 100755
--- a/debian/libpam0g-dev.links
+++ b/debian/libpam0g-dev.links
@@ -1,4 +1,4 @@
#!/usr/bin/dh-exec
-/lib/${DEB_HOST_MULTIARCH}/libpam.so.0 usr/lib/${DEB_HOST_MULTIARCH}/libpam.so
-/lib/${DEB_HOST_MULTIARCH}/libpamc.so.0 usr/lib/${DEB_HOST_MULTIARCH}/libpamc.so
-/lib/${DEB_HOST_MULTIARCH}/libpam_misc.so.0 usr/lib/${DEB_HOST_MULTIARCH}/libpam_misc.so
+/usr/lib/${DEB_HOST_MULTIARCH}/libpam.so.0 usr/lib/${DEB_HOST_MULTIARCH}/libpam.so
+/usr/lib/${DEB_HOST_MULTIARCH}/libpamc.so.0 usr/lib/${DEB_HOST_MULTIARCH}/libpamc.so
+/usr/lib/${DEB_HOST_MULTIARCH}/libpam_misc.so.0 usr/lib/${DEB_HOST_MULTIARCH}/libpam_misc.so
diff --git a/debian/libpam0g.install b/debian/libpam0g.install
deleted file mode 100644
index 622f9ef2..00000000
--- a/debian/libpam0g.install
+++ /dev/null
@@ -1 +0,0 @@
-lib/*/lib*.so.*
diff --git a/debian/libpam0g.docs b/debian/libpam0t64.docs
index 8ef4b45a..8ef4b45a 100644
--- a/debian/libpam0g.docs
+++ b/debian/libpam0t64.docs
diff --git a/debian/libpam0t64.install b/debian/libpam0t64.install
new file mode 100644
index 00000000..3ddde584
--- /dev/null
+++ b/debian/libpam0t64.install
@@ -0,0 +1 @@
+usr/lib/*/lib*.so.*
diff --git a/debian/libpam0g.lintian-overrides b/debian/libpam0t64.lintian-overrides
index ef3655f5..53f69391 100644
--- a/debian/libpam0g.lintian-overrides
+++ b/debian/libpam0t64.lintian-overrides
@@ -1,11 +1,12 @@
# obvious multilib package false-positive; also the package name hasn't
# changed since the glibc transition, go us!
-libpam0g: package-name-doesnt-match-sonames libpam-misc0 libpam0 libpamc0
+libpam0t64: package-name-doesnt-match-sonames libpam-misc0 libpam0 libpamc0
# yes, these are deliberately asked in the postinst because the checking
# for daemons to be restarted needs to be done in the postinst and not
# before
-libpam0g: no-debconf-config
-libpam0g: postinst-uses-db-input
+libpam0t64: no-debconf-config
+libpam0t64: postinst-uses-db-input
# Yes, we want to use systemctl; if the service is running we do need
# to restart it. We have already asked the admin.
-libpam0g: maintainer-script-calls-systemctl
+libpam0t64: maintainer-script-calls-systemctl
+libpam0t64: package-name-doesnt-match-sonames libpam0g
diff --git a/debian/libpam0g.postinst b/debian/libpam0t64.postinst
index 6279f684..6279f684 100644
--- a/debian/libpam0g.postinst
+++ b/debian/libpam0t64.postinst
diff --git a/debian/libpam0t64.postrm.in b/debian/libpam0t64.postrm.in
new file mode 100644
index 00000000..90720b6d
--- /dev/null
+++ b/debian/libpam0t64.postrm.in
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = remove ]; then
+ for file in libpam.so.0 libpam.so.0.85.1 libpam_misc.so.0 libpam_misc.so.0.82.1 libpamc.so.0 libpamc.so.0.82.1; do
+ dpkg-divert --package libpam0t64 --no-rename --remove --divert "/lib/#DEB_HOST_MULTIARCH#/$file.usr-is-merged" "/lib/#DEB_HOST_MULTIARCH#/$file"
+ done
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/libpam0t64.preinst.in b/debian/libpam0t64.preinst.in
new file mode 100644
index 00000000..85cffd2f
--- /dev/null
+++ b/debian/libpam0t64.preinst.in
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = install ]; then
+ for file in libpam.so.0 libpam.so.0.85.1 libpam_misc.so.0 libpam_misc.so.0.82.1 libpamc.so.0 libpamc.so.0.82.1; do
+ dpkg-divert --package libpam0t64 --no-rename --add --divert "/lib/#DEB_HOST_MULTIARCH#/$file.usr-is-merged" "/lib/#DEB_HOST_MULTIARCH#/$file"
+ done
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/libpam0g.symbols b/debian/libpam0t64.symbols
index c8bfbb0a..f531fe9e 100644
--- a/debian/libpam0g.symbols
+++ b/debian/libpam0t64.symbols
@@ -1,4 +1,4 @@
-libpam.so.0 libpam0g #MINVER#
+libpam.so.0 libpam0t64 #MINVER#
*@LIBPAM_1.0 0.99.7.1
*@LIBPAM_1.4 1.4.0
*@LIBPAM_EXTENSION_1.0 0.99.7.1
diff --git a/debian/libpam0g.templates b/debian/libpam0t64.templates
index 2ea4bca7..2ea4bca7 100644
--- a/debian/libpam0g.templates
+++ b/debian/libpam0t64.templates
diff --git a/debian/local/common-session b/debian/local/common-session
index d0a229a6..1cd4f1ae 100644
--- a/debian/local/common-session
+++ b/debian/local/common-session
@@ -19,6 +19,8 @@ session requisite pam_deny.so
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required pam_permit.so
+# reset the umask for new sessions
+session optional pam_umask.so
# and here are more per-package modules (the "Additional" block)
$session_additional
# end of pam-auth-update config
diff --git a/debian/local/common-session-noninteractive b/debian/local/common-session-noninteractive
index 1dd1a172..d216f6ed 100644
--- a/debian/local/common-session-noninteractive
+++ b/debian/local/common-session-noninteractive
@@ -20,6 +20,8 @@ session requisite pam_deny.so
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required pam_permit.so
+# reset the umask for new sessions
+session optional pam_umask.so
# and here are more per-package modules (the "Additional" block)
$session_nonint_additional
# end of pam-auth-update config
diff --git a/debian/local/pam-auth-update b/debian/local/pam-auth-update
index ac00b1c9..4c288d7b 100644
--- a/debian/local/pam-auth-update
+++ b/debian/local/pam-auth-update
@@ -56,9 +56,11 @@ my %md5sums = (
'f297c731a467822cbd86e1283263e8a3',
'240fb92986c885b327cdb21dd641da8c',
'4a25673e8b36f1805219027d3be02cd2',
+ '9e633425b1878897695217ecaf75e204',
],
'session-noninteractive' => [
'ad2b78ce1498dd637ef36469430b6ac6',
+ '53c1ede0bf4c07879d3582d875917545',
],
);
my @invalid_modules = ('pam_tally');
@@ -735,7 +737,7 @@ sub parse_pam_profile
}
}
close(PROFILE);
- if (!defined($profile{'Session-Interactive-Only'})) {
+ if (!defined($profile{'Session-Interactive-Only'}) or $profile{'Session-Interactive-Only'} ne 'yes') {
$profile{'Session-noninteractive-Type'} = $profile{'Session-Type'};
$profile{'Session-noninteractive'} = $profile{'Session'};
$profile{'Session-noninteractive-Initial'} = $profile{'Session-Initial'};
diff --git a/debian/not-installed b/debian/not-installed
index bd312af0..358e4977 100644
--- a/debian/not-installed
+++ b/debian/not-installed
@@ -1,8 +1,9 @@
-lib/*/security/*.a
-lib/*/security/*.la
-lib/*/*.la
-lib/*/*.so
+usr/share/man/man7/pam.7
+usr/lib/*/security/*.a
+usr/lib/*/security/*.la
+usr/lib/*/*.la
+usr/lib/*/*.so
usr/share/man/man8/pam.8
etc/environment
# sample filter, do not install
-lib/*/security/pam_filter/upperLOWER
+usr/lib/*/security/pam_filter/upperLOWER
diff --git a/debian/patches-applied/021_nis_cleanup b/debian/patches-applied/021_nis_cleanup
deleted file mode 100644
index f05c7103..00000000
--- a/debian/patches-applied/021_nis_cleanup
+++ /dev/null
@@ -1,24 +0,0 @@
-Patch from Philippe Troin <phil@fifi.org>
-
-Originally this included a bunch of changes to locking, but the more
-recent code pulled from Linux_pam CVS seems to fix that issue.
-
-Index: pam/modules/pam_unix/pam_unix_passwd.c
-===================================================================
---- pam.orig/modules/pam_unix/pam_unix_passwd.c
-+++ pam/modules/pam_unix/pam_unix_passwd.c
-@@ -708,9 +708,12 @@
- "password - (old) token not obtained");
- return retval;
- }
-- /* verify that this is the password for this user */
-+ /* verify that this is the password for this user
-+ * if we're not using NIS */
-
-- retval = _unix_verify_password(pamh, user, pass_old, ctrl);
-+ if (off(UNIX_NIS, ctrl)) {
-+ retval = _unix_verify_password(pamh, user, pass_old, ctrl);
-+ }
- } else {
- D(("process run by root so do nothing this time around"));
- pass_old = NULL;
diff --git a/debian/patches-applied/022_pam_unix_group_time_miscfixes b/debian/patches-applied/022_pam_unix_group_time_miscfixes
deleted file mode 100644
index 8239fd98..00000000
--- a/debian/patches-applied/022_pam_unix_group_time_miscfixes
+++ /dev/null
@@ -1,22 +0,0 @@
-Description: handle the case of flags being empty or only PAM_SILENT, which is
- documented in other PAM implementations as meaning PAM_ESTABLISH_CRED:
- http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.basetechref%2Fdoc%2Fbasetrf1%2Fpam_setcred.htm
-
-Index: pam/modules/pam_group/pam_group.c
-===================================================================
---- pam.orig/modules/pam_group/pam_group.c
-+++ pam/modules/pam_group/pam_group.c
-@@ -754,9 +754,12 @@
- unsigned setting;
-
- /* only interested in establishing credentials */
-+ /* PAM docs say that an empty flag is to be treated as PAM_ESTABLISH_CRED.
-+ Some people just pass PAM_SILENT, so cope with it, too. */
-
- setting = flags;
-- if (!(setting & (PAM_ESTABLISH_CRED | PAM_REINITIALIZE_CRED))) {
-+ if (!(setting & (PAM_ESTABLISH_CRED | PAM_REINITIALIZE_CRED))
-+ && (setting != 0) && (setting != PAM_SILENT)) {
- D(("ignoring call - not for establishing credentials"));
- return PAM_SUCCESS; /* don't fail because of this */
- }
diff --git a/debian/patches-applied/026_pam_unix_passwd_unknown_user b/debian/patches-applied/026_pam_unix_passwd_unknown_user
deleted file mode 100644
index d277fee9..00000000
--- a/debian/patches-applied/026_pam_unix_passwd_unknown_user
+++ /dev/null
@@ -1,33 +0,0 @@
-Description: distinguish between password manipulation failure and missing user.
-Author: Martin Schwenke <martin@meltin.net>
-
-Index: pam/modules/pam_unix/passverify.c
-===================================================================
---- pam.orig/modules/pam_unix/passverify.c
-+++ pam/modules/pam_unix/passverify.c
-@@ -801,7 +801,7 @@
- struct passwd *tmpent = NULL;
- struct stat st;
- FILE *pwfile, *opwfile;
-- int err = 1;
-+ int err = 1, found = 0;
- int oldmask;
- #ifdef WITH_SELINUX
- char *prev_context_raw = NULL;
-@@ -872,6 +872,7 @@
-
- tmpent->pw_passwd = assigned_passwd.charp;
- err = 0;
-+ found = 1;
- }
- if (putpwent(tmpent, pwfile)) {
- D(("error writing entry to password file: %m"));
-@@ -914,7 +915,7 @@
- return PAM_SUCCESS;
- } else {
- unlink(PW_TMPFILE);
-- return PAM_AUTHTOK_ERR;
-+ return found ? PAM_AUTHTOK_ERR : PAM_USER_UNKNOWN;
- }
- }
-
diff --git a/debian/patches-applied/PAM-manpage-section b/debian/patches-applied/PAM-manpage-section
deleted file mode 100644
index 7cdadad3..00000000
--- a/debian/patches-applied/PAM-manpage-section
+++ /dev/null
@@ -1,1723 +0,0 @@
-Patch to put the PAM manpage in section 7 (general topics) instead of 8
-(system administration commands)
-
-Authors: Steve Langasek <vorlon@debian.org>
-
-Upstream status: maybe provide a backwards-compatibility link first?
-
-Index: pam/doc/man/pam.8.xml
-===================================================================
---- pam.orig/doc/man/pam.8.xml
-+++ pam/doc/man/pam.8.xml
-@@ -6,7 +6,7 @@
-
- <refmeta>
- <refentrytitle>pam</refentrytitle>
-- <manvolnum>8</manvolnum>
-+ <manvolnum>7</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
- </refmeta>
-
-@@ -209,7 +209,7 @@
- <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>PAM</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/PAM.8
-===================================================================
---- pam.orig/doc/man/PAM.8
-+++ pam/doc/man/PAM.8
-@@ -7,7 +7,7 @@
- .\" Source: Linux-PAM Manual
- .\" Language: English
- .\"
--.TH "PAM" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
-+.TH "PAM" "7" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
- .\" -----------------------------------------------------------------
- .\" * Define some portability stuff
- .\" -----------------------------------------------------------------
-@@ -146,4 +146,4 @@
- \fBpam_authenticate\fR(3),
- \fBpam_sm_setcred\fR(3),
- \fBpam_strerror\fR(3),
--\fBPAM\fR(8)
-+\fBPAM\fR(7)
-Index: pam/modules/pam_access/access.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_access/access.conf.5.xml
-+++ pam/modules/pam_access/access.conf.5.xml
-@@ -233,7 +233,7 @@
- <para>
- <citerefentry><refentrytitle>pam_access</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-+ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- </para>
- </refsect1>
-
-Index: pam/modules/pam_access/access.conf.5
-===================================================================
---- pam.orig/modules/pam_access/access.conf.5
-+++ pam/modules/pam_access/access.conf.5
-@@ -210,7 +210,7 @@
- .PP
- \fBpam_access\fR(8),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHORS"
- .PP
- Original
-Index: pam/modules/pam_env/pam_env.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_env/pam_env.conf.5.xml
-+++ pam/modules/pam_env/pam_env.conf.5.xml
-@@ -122,7 +122,7 @@
- <para>
- <citerefentry><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-+ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_env/pam_env.conf.5
-===================================================================
---- pam.orig/modules/pam_env/pam_env.conf.5
-+++ pam/modules/pam_env/pam_env.conf.5
-@@ -125,7 +125,7 @@
- .PP
- \fBpam_env\fR(8),
- \fBpam.d\fR(5),
--\fBpam\fR(8),
-+\fBpam\fR(7),
- \fBenviron\fR(7)
- .SH "AUTHOR"
- .PP
-Index: pam/modules/pam_group/group.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_group/group.conf.5.xml
-+++ pam/modules/pam_group/group.conf.5.xml
-@@ -134,7 +134,7 @@
- <para>
- <citerefentry><refentrytitle>pam_group</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-+ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- </para>
- </refsect1>
-
-Index: pam/modules/pam_group/group.conf.5
-===================================================================
---- pam.orig/modules/pam_group/group.conf.5
-+++ pam/modules/pam_group/group.conf.5
-@@ -115,7 +115,7 @@
- .PP
- \fBpam_group\fR(8),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_group was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_limits/limits.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_limits/limits.conf.5.xml
-+++ pam/modules/pam_limits/limits.conf.5.xml
-@@ -357,7 +357,7 @@
- <para>
- <citerefentry><refentrytitle>pam_limits</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-+ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>getrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>getrlimit</refentrytitle><manvolnum>3p</manvolnum></citerefentry>
- </para>
-Index: pam/modules/pam_limits/limits.conf.5
-===================================================================
---- pam.orig/modules/pam_limits/limits.conf.5
-+++ pam/modules/pam_limits/limits.conf.5
-@@ -351,7 +351,7 @@
- .PP
- \fBpam_limits\fR(8),
- \fBpam.d\fR(5),
--\fBpam\fR(8),
-+\fBpam\fR(7),
- \fBgetrlimit\fR(2),
- \fBgetrlimit\fR(3p)
- .SH "AUTHOR"
-Index: pam/modules/pam_namespace/namespace.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_namespace/namespace.conf.5.xml
-+++ pam/modules/pam_namespace/namespace.conf.5.xml
-@@ -209,7 +209,7 @@
- <para>
- <citerefentry><refentrytitle>pam_namespace</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-+ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- </para>
- </refsect1>
-
-Index: pam/modules/pam_namespace/namespace.conf.5
-===================================================================
---- pam.orig/modules/pam_namespace/namespace.conf.5
-+++ pam/modules/pam_namespace/namespace.conf.5
-@@ -162,7 +162,7 @@
- .PP
- \fBpam_namespace\fR(8),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHORS"
- .PP
- The namespace\&.conf manual page was written by Janak Desai <janak@us\&.ibm\&.com>\&. More features added by Tomas Mraz <tmraz@redhat\&.com>\&.
-Index: pam/modules/pam_time/time.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_time/time.conf.5.xml
-+++ pam/modules/pam_time/time.conf.5.xml
-@@ -136,7 +136,7 @@
- <para>
- <citerefentry><refentrytitle>pam_time</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-+ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- </para>
- </refsect1>
-
-Index: pam/modules/pam_time/time.conf.5
-===================================================================
---- pam.orig/modules/pam_time/time.conf.5
-+++ pam/modules/pam_time/time.conf.5
-@@ -109,7 +109,7 @@
- .PP
- \fBpam_time\fR(8),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_time was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_access/pam_access.8.xml
-===================================================================
---- pam.orig/modules/pam_access/pam_access.8.xml
-+++ pam/modules/pam_access/pam_access.8.xml
-@@ -246,7 +246,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>.
- </para>
- </refsect1>
-Index: pam/modules/pam_access/pam_access.8
-===================================================================
---- pam.orig/modules/pam_access/pam_access.8
-+++ pam/modules/pam_access/pam_access.8
-@@ -133,7 +133,7 @@
- .PP
- \fBaccess.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)\&.
-+\fBpam\fR(7)\&.
- .SH "AUTHORS"
- .PP
- The logdaemon style login access control scheme was designed and implemented by Wietse Venema\&. The pam_access PAM module was developed by Alexei Nogin <alexei@nogin\&.dnttm\&.ru>\&. The IPv6 support and the network(address) / netmask feature was developed and provided by Mike Becher <mike\&.becher@lrz\-muenchen\&.de>\&.
-Index: pam/modules/pam_debug/pam_debug.8.xml
-===================================================================
---- pam.orig/modules/pam_debug/pam_debug.8.xml
-+++ pam/modules/pam_debug/pam_debug.8.xml
-@@ -216,7 +216,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_debug/pam_debug.8
-===================================================================
---- pam.orig/modules/pam_debug/pam_debug.8
-+++ pam/modules/pam_debug/pam_debug.8
-@@ -138,7 +138,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_debug was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_deny/pam_deny.8.xml
-===================================================================
---- pam.orig/modules/pam_deny/pam_deny.8.xml
-+++ pam/modules/pam_deny/pam_deny.8.xml
-@@ -120,7 +120,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_deny/pam_deny.8
-===================================================================
---- pam.orig/modules/pam_deny/pam_deny.8
-+++ pam/modules/pam_deny/pam_deny.8
-@@ -96,7 +96,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_deny was written by Andrew G\&. Morgan <morgan@kernel\&.org>
-Index: pam/modules/pam_echo/pam_echo.8.xml
-===================================================================
---- pam.orig/modules/pam_echo/pam_echo.8.xml
-+++ pam/modules/pam_echo/pam_echo.8.xml
-@@ -159,7 +159,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry></para>
- </refsect1>
-
-Index: pam/modules/pam_echo/pam_echo.8
-===================================================================
---- pam.orig/modules/pam_echo/pam_echo.8
-+++ pam/modules/pam_echo/pam_echo.8
-@@ -126,7 +126,7 @@
- .PP
- \fBpam.conf\fR(8),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- Thorsten Kukuk <kukuk@thkukuk\&.de>
-Index: pam/modules/pam_env/pam_env.8.xml
-===================================================================
---- pam.orig/modules/pam_env/pam_env.8.xml
-+++ pam/modules/pam_env/pam_env.8.xml
-@@ -254,7 +254,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>,
- <citerefentry>
- <refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum>
-Index: pam/modules/pam_exec/pam_exec.8.xml
-===================================================================
---- pam.orig/modules/pam_exec/pam_exec.8.xml
-+++ pam/modules/pam_exec/pam_exec.8.xml
-@@ -303,7 +303,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_exec/pam_exec.8
-===================================================================
---- pam.orig/modules/pam_exec/pam_exec.8
-+++ pam/modules/pam_exec/pam_exec.8
-@@ -182,7 +182,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_exec was written by Thorsten Kukuk <kukuk@thkukuk\&.de> and Josh Triplett <josh@joshtriplett\&.org>\&.
-Index: pam/modules/pam_faildelay/pam_faildelay.8.xml
-===================================================================
---- pam.orig/modules/pam_faildelay/pam_faildelay.8.xml
-+++ pam/modules/pam_faildelay/pam_faildelay.8.xml
-@@ -121,7 +121,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_faildelay/pam_faildelay.8
-===================================================================
---- pam.orig/modules/pam_faildelay/pam_faildelay.8
-+++ pam/modules/pam_faildelay/pam_faildelay.8
-@@ -87,7 +87,7 @@
- \fBpam_fail_delay\fR(3),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_faildelay was written by Darren Tucker <dtucker@zip\&.com\&.au>\&.
-Index: pam/modules/pam_filter/pam_filter.8.xml
-===================================================================
---- pam.orig/modules/pam_filter/pam_filter.8.xml
-+++ pam/modules/pam_filter/pam_filter.8.xml
-@@ -246,7 +246,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_filter/pam_filter.8
-===================================================================
---- pam.orig/modules/pam_filter/pam_filter.8
-+++ pam/modules/pam_filter/pam_filter.8
-@@ -166,7 +166,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_filter was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_ftp/pam_ftp.8.xml
-===================================================================
---- pam.orig/modules/pam_ftp/pam_ftp.8.xml
-+++ pam/modules/pam_ftp/pam_ftp.8.xml
-@@ -168,7 +168,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_ftp/pam_ftp.8
-===================================================================
---- pam.orig/modules/pam_ftp/pam_ftp.8
-+++ pam/modules/pam_ftp/pam_ftp.8
-@@ -119,7 +119,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_ftp was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_group/pam_group.8.xml
-===================================================================
---- pam.orig/modules/pam_group/pam_group.8.xml
-+++ pam/modules/pam_group/pam_group.8.xml
-@@ -148,7 +148,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>.
- </para>
- </refsect1>
-Index: pam/modules/pam_group/pam_group.8
-===================================================================
---- pam.orig/modules/pam_group/pam_group.8
-+++ pam/modules/pam_group/pam_group.8
-@@ -103,7 +103,7 @@
- .PP
- \fBgroup.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)\&.
-+\fBpam\fR(7)\&.
- .SH "AUTHORS"
- .PP
- pam_group was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_issue/pam_issue.8.xml
-===================================================================
---- pam.orig/modules/pam_issue/pam_issue.8.xml
-+++ pam/modules/pam_issue/pam_issue.8.xml
-@@ -219,7 +219,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_issue/pam_issue.8
-===================================================================
---- pam.orig/modules/pam_issue/pam_issue.8
-+++ pam/modules/pam_issue/pam_issue.8
-@@ -152,7 +152,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_issue was written by Ben Collins <bcollins@debian\&.org>\&.
-Index: pam/modules/pam_keyinit/pam_keyinit.8.xml
-===================================================================
---- pam.orig/modules/pam_keyinit/pam_keyinit.8.xml
-+++ pam/modules/pam_keyinit/pam_keyinit.8.xml
-@@ -232,7 +232,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>,
- <citerefentry>
- <refentrytitle>keyctl</refentrytitle><manvolnum>1</manvolnum>
-Index: pam/modules/pam_keyinit/pam_keyinit.8
-===================================================================
---- pam.orig/modules/pam_keyinit/pam_keyinit.8
-+++ pam/modules/pam_keyinit/pam_keyinit.8
-@@ -137,7 +137,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8),
-+\fBpam\fR(7),
- \fBkeyctl\fR(1)
- .SH "AUTHOR"
- .PP
-Index: pam/modules/pam_lastlog/pam_lastlog.8.xml
-===================================================================
---- pam.orig/modules/pam_lastlog/pam_lastlog.8.xml
-+++ pam/modules/pam_lastlog/pam_lastlog.8.xml
-@@ -325,7 +325,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_lastlog/pam_lastlog.8
-===================================================================
---- pam.orig/modules/pam_lastlog/pam_lastlog.8
-+++ pam/modules/pam_lastlog/pam_lastlog.8
-@@ -189,7 +189,7 @@
- \fBlimits.conf\fR(5),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_lastlog was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_limits/pam_limits.8.xml
-===================================================================
---- pam.orig/modules/pam_limits/pam_limits.8.xml
-+++ pam/modules/pam_limits/pam_limits.8.xml
-@@ -243,7 +243,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>.
- </para>
- </refsect1>
-Index: pam/modules/pam_limits/pam_limits.8
-===================================================================
---- pam.orig/modules/pam_limits/pam_limits.8
-+++ pam/modules/pam_limits/pam_limits.8
-@@ -146,7 +146,7 @@
- .PP
- \fBlimits.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)\&.
-+\fBpam\fR(7)\&.
- .SH "AUTHORS"
- .PP
- pam_limits was initially written by Cristian Gafton <gafton@redhat\&.com>
-Index: pam/modules/pam_listfile/pam_listfile.8.xml
-===================================================================
---- pam.orig/modules/pam_listfile/pam_listfile.8.xml
-+++ pam/modules/pam_listfile/pam_listfile.8.xml
-@@ -281,7 +281,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_listfile/pam_listfile.8
-===================================================================
---- pam.orig/modules/pam_listfile/pam_listfile.8
-+++ pam/modules/pam_listfile/pam_listfile.8
-@@ -205,7 +205,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_listfile was written by Michael K\&. Johnson <johnsonm@redhat\&.com> and Elliot Lee <sopwith@cuc\&.edu>\&.
-Index: pam/modules/pam_localuser/pam_localuser.8.xml
-===================================================================
---- pam.orig/modules/pam_localuser/pam_localuser.8.xml
-+++ pam/modules/pam_localuser/pam_localuser.8.xml
-@@ -187,7 +187,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_localuser/pam_localuser.8
-===================================================================
---- pam.orig/modules/pam_localuser/pam_localuser.8
-+++ pam/modules/pam_localuser/pam_localuser.8
-@@ -117,7 +117,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_localuser was written by Nalin Dahyabhai <nalin@redhat\&.com>\&.
-Index: pam/modules/pam_loginuid/pam_loginuid.8.xml
-===================================================================
---- pam.orig/modules/pam_loginuid/pam_loginuid.8.xml
-+++ pam/modules/pam_loginuid/pam_loginuid.8.xml
-@@ -121,7 +121,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>,
- <citerefentry>
- <refentrytitle>auditctl</refentrytitle><manvolnum>8</manvolnum>
-Index: pam/modules/pam_loginuid/pam_loginuid.8
-===================================================================
---- pam.orig/modules/pam_loginuid/pam_loginuid.8
-+++ pam/modules/pam_loginuid/pam_loginuid.8
-@@ -85,7 +85,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8),
-+\fBpam\fR(7),
- \fBauditctl\fR(8),
- \fBauditd\fR(8)
- .SH "AUTHOR"
-Index: pam/modules/pam_mail/pam_mail.8.xml
-===================================================================
---- pam.orig/modules/pam_mail/pam_mail.8.xml
-+++ pam/modules/pam_mail/pam_mail.8.xml
-@@ -265,7 +265,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_mail/pam_mail.8
-===================================================================
---- pam.orig/modules/pam_mail/pam_mail.8
-+++ pam/modules/pam_mail/pam_mail.8
-@@ -153,7 +153,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_mail was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_mkhomedir/pam_mkhomedir.8.xml
-===================================================================
---- pam.orig/modules/pam_mkhomedir/pam_mkhomedir.8.xml
-+++ pam/modules/pam_mkhomedir/pam_mkhomedir.8.xml
-@@ -205,7 +205,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>.
- </para>
- </refsect1>
-Index: pam/modules/pam_mkhomedir/pam_mkhomedir.8
-===================================================================
---- pam.orig/modules/pam_mkhomedir/pam_mkhomedir.8
-+++ pam/modules/pam_mkhomedir/pam_mkhomedir.8
-@@ -129,7 +129,7 @@
- .SH "SEE ALSO"
- .PP
- \fBpam.d\fR(5),
--\fBpam\fR(8)\&.
-+\fBpam\fR(7)\&.
- .SH "AUTHOR"
- .PP
- pam_mkhomedir was written by Jason Gunthorpe <jgg@debian\&.org>\&.
-Index: pam/modules/pam_motd/pam_motd.8.xml
-===================================================================
---- pam.orig/modules/pam_motd/pam_motd.8.xml
-+++ pam/modules/pam_motd/pam_motd.8.xml
-@@ -196,7 +196,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_motd/pam_motd.8
-===================================================================
---- pam.orig/modules/pam_motd/pam_motd.8
-+++ pam/modules/pam_motd/pam_motd.8
-@@ -185,7 +185,7 @@
- \fBmotd\fR(5),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_motd was written by Ben Collins <bcollins@debian\&.org>\&.
-Index: pam/modules/pam_namespace/pam_namespace.8.xml
-===================================================================
---- pam.orig/modules/pam_namespace/pam_namespace.8.xml
-+++ pam/modules/pam_namespace/pam_namespace.8.xml
-@@ -362,7 +362,7 @@
- <refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>.
- </para>
- </refsect1>
-Index: pam/modules/pam_namespace/pam_namespace.8
-===================================================================
---- pam.orig/modules/pam_namespace/pam_namespace.8
-+++ pam/modules/pam_namespace/pam_namespace.8
-@@ -148,7 +148,7 @@
- \fBnamespace.conf\fR(5),
- \fBpam.d\fR(5),
- \fBmount\fR(8),
--\fBpam\fR(8)\&.
-+\fBpam\fR(7)\&.
- .SH "AUTHORS"
- .PP
- The namespace setup scheme was designed by Stephen Smalley, Janak Desai and Chad Sellers\&. The pam_namespace PAM module was developed by Janak Desai <janak@us\&.ibm\&.com>, Chad Sellers <csellers@tresys\&.com> and Steve Grubb <sgrubb@redhat\&.com>\&. Additional improvements by Xavier Toth <txtoth@gmail\&.com> and Tomas Mraz <tmraz@redhat\&.com>\&.
-Index: pam/modules/pam_nologin/pam_nologin.8.xml
-===================================================================
---- pam.orig/modules/pam_nologin/pam_nologin.8.xml
-+++ pam/modules/pam_nologin/pam_nologin.8.xml
-@@ -160,7 +160,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_nologin/pam_nologin.8
-===================================================================
---- pam.orig/modules/pam_nologin/pam_nologin.8
-+++ pam/modules/pam_nologin/pam_nologin.8
-@@ -124,7 +124,7 @@
- \fBnologin\fR(5),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_nologin was written by Michael K\&. Johnson <johnsonm@redhat\&.com>\&.
-Index: pam/modules/pam_permit/pam_permit.8.xml
-===================================================================
---- pam.orig/modules/pam_permit/pam_permit.8.xml
-+++ pam/modules/pam_permit/pam_permit.8.xml
-@@ -91,7 +91,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_permit/pam_permit.8
-===================================================================
---- pam.orig/modules/pam_permit/pam_permit.8
-+++ pam/modules/pam_permit/pam_permit.8
-@@ -78,7 +78,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_permit was written by Andrew G\&. Morgan, <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_rhosts/pam_rhosts.8.xml
-===================================================================
---- pam.orig/modules/pam_rhosts/pam_rhosts.8.xml
-+++ pam/modules/pam_rhosts/pam_rhosts.8.xml
-@@ -156,7 +156,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_rhosts/pam_rhosts.8
-===================================================================
---- pam.orig/modules/pam_rhosts/pam_rhosts.8
-+++ pam/modules/pam_rhosts/pam_rhosts.8
-@@ -122,7 +122,7 @@
- \fBrhosts\fR(5),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_rhosts was written by Thorsten Kukuk <kukuk@thkukuk\&.de>
-Index: pam/modules/pam_rootok/pam_rootok.8.xml
-===================================================================
---- pam.orig/modules/pam_rootok/pam_rootok.8.xml
-+++ pam/modules/pam_rootok/pam_rootok.8.xml
-@@ -116,7 +116,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_rootok/pam_rootok.8
-===================================================================
---- pam.orig/modules/pam_rootok/pam_rootok.8
-+++ pam/modules/pam_rootok/pam_rootok.8
-@@ -100,7 +100,7 @@
- \fBsu\fR(1),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_rootok was written by Andrew G\&. Morgan, <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_securetty/pam_securetty.8.xml
-===================================================================
---- pam.orig/modules/pam_securetty/pam_securetty.8.xml
-+++ pam/modules/pam_securetty/pam_securetty.8.xml
-@@ -187,7 +187,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_securetty/pam_securetty.8
-===================================================================
---- pam.orig/modules/pam_securetty/pam_securetty.8
-+++ pam/modules/pam_securetty/pam_securetty.8
-@@ -134,7 +134,7 @@
- \fBsecuretty\fR(5),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_securetty was written by Elliot Lee <sopwith@cuc\&.edu>\&.
-Index: pam/modules/pam_selinux/pam_selinux.8.xml
-===================================================================
---- pam.orig/modules/pam_selinux/pam_selinux.8.xml
-+++ pam/modules/pam_selinux/pam_selinux.8.xml
-@@ -258,7 +258,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>,
- <citerefentry>
- <refentrytitle>selinux</refentrytitle><manvolnum>8</manvolnum>
-Index: pam/modules/pam_selinux/pam_selinux.8
-===================================================================
---- pam.orig/modules/pam_selinux/pam_selinux.8
-+++ pam/modules/pam_selinux/pam_selinux.8
-@@ -7,7 +7,7 @@
- .\" Source: Linux-PAM Manual
- .\" Language: English
- .\"
--.TH "PAM_SELINUX" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
-+.TH "PAM_SELINUX" "7" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
- .\" -----------------------------------------------------------------
- .\" * Define some portability stuff
- .\" -----------------------------------------------------------------
-@@ -144,7 +144,7 @@
- \fBexecve\fR(2),
- \fBtty\fR(4),
- \fBpam.d\fR(5),
--\fBpam\fR(8),
-+\fBpam\fR(7),
- \fBselinux\fR(8)
- .SH "AUTHOR"
- .PP
-Index: pam/modules/pam_sepermit/pam_sepermit.8.xml
-===================================================================
---- pam.orig/modules/pam_sepermit/pam_sepermit.8.xml
-+++ pam/modules/pam_sepermit/pam_sepermit.8.xml
-@@ -176,7 +176,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- <citerefentry>
- <refentrytitle>selinux</refentrytitle><manvolnum>8</manvolnum>
-Index: pam/modules/pam_sepermit/pam_sepermit.8
-===================================================================
---- pam.orig/modules/pam_sepermit/pam_sepermit.8
-+++ pam/modules/pam_sepermit/pam_sepermit.8
-@@ -124,7 +124,7 @@
- \fBsepermit.conf\fR(5),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- \fBselinux\fR(8)
- .SH "AUTHOR"
- .PP
-Index: pam/modules/pam_shells/pam_shells.8.xml
-===================================================================
---- pam.orig/modules/pam_shells/pam_shells.8.xml
-+++ pam/modules/pam_shells/pam_shells.8.xml
-@@ -102,7 +102,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_shells/pam_shells.8
-===================================================================
---- pam.orig/modules/pam_shells/pam_shells.8
-+++ pam/modules/pam_shells/pam_shells.8
-@@ -85,7 +85,7 @@
- \fBshells\fR(5),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_shells was written by Erik Troan <ewt@redhat\&.com>\&.
-Index: pam/modules/pam_succeed_if/pam_succeed_if.8.xml
-===================================================================
---- pam.orig/modules/pam_succeed_if/pam_succeed_if.8.xml
-+++ pam/modules/pam_succeed_if/pam_succeed_if.8.xml
-@@ -295,7 +295,7 @@
- <refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_succeed_if/pam_succeed_if.8
-===================================================================
---- pam.orig/modules/pam_succeed_if/pam_succeed_if.8
-+++ pam/modules/pam_succeed_if/pam_succeed_if.8
-@@ -220,7 +220,7 @@
- .SH "SEE ALSO"
- .PP
- \fBglob\fR(7),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- Nalin Dahyabhai <nalin@redhat\&.com>
-Index: pam/modules/pam_time/pam_time.8.xml
-===================================================================
---- pam.orig/modules/pam_time/pam_time.8.xml
-+++ pam/modules/pam_time/pam_time.8.xml
-@@ -184,7 +184,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>.
- </para>
- </refsect1>
-Index: pam/modules/pam_time/pam_time.8
-===================================================================
---- pam.orig/modules/pam_time/pam_time.8
-+++ pam/modules/pam_time/pam_time.8
-@@ -116,7 +116,7 @@
- .PP
- \fBtime.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)\&.
-+\fBpam\fR(7)\&.
- .SH "AUTHOR"
- .PP
- pam_time was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_umask/pam_umask.8.xml
-===================================================================
---- pam.orig/modules/pam_umask/pam_umask.8.xml
-+++ pam/modules/pam_umask/pam_umask.8.xml
-@@ -246,7 +246,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_umask/pam_umask.8
-===================================================================
---- pam.orig/modules/pam_umask/pam_umask.8
-+++ pam/modules/pam_umask/pam_umask.8
-@@ -170,7 +170,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_umask was written by Thorsten Kukuk <kukuk@thkukuk\&.de>\&.
-Index: pam/modules/pam_unix/pam_unix.8.xml
-===================================================================
---- pam.orig/modules/pam_unix/pam_unix.8.xml
-+++ pam/modules/pam_unix/pam_unix.8.xml
-@@ -559,7 +559,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_unix/pam_unix.8
-===================================================================
---- pam.orig/modules/pam_unix/pam_unix.8
-+++ pam/modules/pam_unix/pam_unix.8
-@@ -310,7 +310,7 @@
- \fBlogin.defs\fR(5),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_unix was written by various people\&.
-Index: pam/doc/man/misc_conv.3.xml
-===================================================================
---- pam.orig/doc/man/misc_conv.3.xml
-+++ pam/doc/man/misc_conv.3.xml
-@@ -171,7 +171,7 @@
- <refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/misc_conv.3
-===================================================================
---- pam.orig/doc/man/misc_conv.3
-+++ pam/doc/man/misc_conv.3
-@@ -117,7 +117,7 @@
- .SH "SEE ALSO"
- .PP
- \fBpam_conv\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "STANDARDS"
- .PP
- The
-Index: pam/doc/man/pam_acct_mgmt.3.xml
-===================================================================
---- pam.orig/doc/man/pam_acct_mgmt.3.xml
-+++ pam/doc/man/pam_acct_mgmt.3.xml
-@@ -138,7 +138,7 @@
- <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_acct_mgmt.3
-===================================================================
---- pam.orig/doc/man/pam_acct_mgmt.3
-+++ pam/doc/man/pam_acct_mgmt.3
-@@ -97,4 +97,4 @@
- \fBpam_authenticate\fR(3),
- \fBpam_chauthtok\fR(3),
- \fBpam_strerror\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
-Index: pam/doc/man/pam_authenticate.3.xml
-===================================================================
---- pam.orig/doc/man/pam_authenticate.3.xml
-+++ pam/doc/man/pam_authenticate.3.xml
-@@ -162,7 +162,7 @@
- <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_authenticate.3
-===================================================================
---- pam.orig/doc/man/pam_authenticate.3
-+++ pam/doc/man/pam_authenticate.3
-@@ -107,4 +107,4 @@
- \fBpam_setcred\fR(3),
- \fBpam_chauthtok\fR(3),
- \fBpam_strerror\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
-Index: pam/doc/man/pam_chauthtok.3.xml
-===================================================================
---- pam.orig/doc/man/pam_chauthtok.3.xml
-+++ pam/doc/man/pam_chauthtok.3.xml
-@@ -157,7 +157,7 @@
- <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_chauthtok.3
-===================================================================
---- pam.orig/doc/man/pam_chauthtok.3
-+++ pam/doc/man/pam_chauthtok.3
-@@ -106,4 +106,4 @@
- \fBpam_setcred\fR(3),
- \fBpam_get_item\fR(3),
- \fBpam_strerror\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
-Index: pam/doc/man/pam_conv.3.xml
-===================================================================
---- pam.orig/doc/man/pam_conv.3.xml
-+++ pam/doc/man/pam_conv.3.xml
-@@ -221,7 +221,7 @@
- <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_conv.3
-===================================================================
---- pam.orig/doc/man/pam_conv.3
-+++ pam/doc/man/pam_conv.3
-@@ -174,4 +174,4 @@
- \fBpam_set_item\fR(3),
- \fBpam_get_item\fR(3),
- \fBpam_strerror\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
-Index: pam/doc/man/pam_error.3.xml
-===================================================================
---- pam.orig/doc/man/pam_error.3.xml
-+++ pam/doc/man/pam_error.3.xml
-@@ -105,7 +105,7 @@
- <refentrytitle>pam_vprompt</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_error.3
-===================================================================
---- pam.orig/doc/man/pam_error.3
-+++ pam/doc/man/pam_error.3
-@@ -80,7 +80,7 @@
- \fBpam_vinfo\fR(3),
- \fBpam_prompt\fR(3),
- \fBpam_vprompt\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "STANDARDS"
- .PP
- The
-Index: pam/doc/man/pam_getenv.3.xml
-===================================================================
---- pam.orig/doc/man/pam_getenv.3.xml
-+++ pam/doc/man/pam_getenv.3.xml
-@@ -60,7 +60,7 @@
- <refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_getenv.3
-===================================================================
---- pam.orig/doc/man/pam_getenv.3
-+++ pam/doc/man/pam_getenv.3
-@@ -57,4 +57,4 @@
- \fBpam_start\fR(3),
- \fBpam_getenvlist\fR(3),
- \fBpam_putenv\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
-Index: pam/doc/man/pam_getenvlist.3.xml
-===================================================================
---- pam.orig/doc/man/pam_getenvlist.3.xml
-+++ pam/doc/man/pam_getenvlist.3.xml
-@@ -78,7 +78,7 @@
- <refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_getenvlist.3
-===================================================================
---- pam.orig/doc/man/pam_getenvlist.3
-+++ pam/doc/man/pam_getenvlist.3
-@@ -63,4 +63,4 @@
- \fBpam_start\fR(3),
- \fBpam_getenv\fR(3),
- \fBpam_putenv\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
-Index: pam/doc/man/pam_info.3.xml
-===================================================================
---- pam.orig/doc/man/pam_info.3.xml
-+++ pam/doc/man/pam_info.3.xml
-@@ -93,7 +93,7 @@
- <title>SEE ALSO</title>
- <para>
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_info.3
-===================================================================
---- pam.orig/doc/man/pam_info.3
-+++ pam/doc/man/pam_info.3
-@@ -76,7 +76,7 @@
- .RE
- .SH "SEE ALSO"
- .PP
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "STANDARDS"
- .PP
- The
-Index: pam/doc/man/pam_misc_drop_env.3.xml
-===================================================================
---- pam.orig/doc/man/pam_misc_drop_env.3.xml
-+++ pam/doc/man/pam_misc_drop_env.3.xml
-@@ -46,7 +46,7 @@
- <refentrytitle>pam_getenvlist</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_misc_drop_env.3
-===================================================================
---- pam.orig/doc/man/pam_misc_drop_env.3
-+++ pam/doc/man/pam_misc_drop_env.3
-@@ -52,7 +52,7 @@
- .SH "SEE ALSO"
- .PP
- \fBpam_getenvlist\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "STANDARDS"
- .PP
- The
-Index: pam/doc/man/pam_misc_paste_env.3.xml
-===================================================================
---- pam.orig/doc/man/pam_misc_paste_env.3.xml
-+++ pam/doc/man/pam_misc_paste_env.3.xml
-@@ -44,7 +44,7 @@
- <refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_misc_paste_env.3
-===================================================================
---- pam.orig/doc/man/pam_misc_paste_env.3
-+++ pam/doc/man/pam_misc_paste_env.3
-@@ -47,7 +47,7 @@
- .SH "SEE ALSO"
- .PP
- \fBpam_putenv\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "STANDARDS"
- .PP
- The
-Index: pam/doc/man/pam_misc_setenv.3.xml
-===================================================================
---- pam.orig/doc/man/pam_misc_setenv.3.xml
-+++ pam/doc/man/pam_misc_setenv.3.xml
-@@ -51,7 +51,7 @@
- <refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_misc_setenv.3
-===================================================================
---- pam.orig/doc/man/pam_misc_setenv.3
-+++ pam/doc/man/pam_misc_setenv.3
-@@ -52,7 +52,7 @@
- .SH "SEE ALSO"
- .PP
- \fBpam_putenv\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "STANDARDS"
- .PP
- The
-Index: pam/doc/man/pam_prompt.3.xml
-===================================================================
---- pam.orig/doc/man/pam_prompt.3.xml
-+++ pam/doc/man/pam_prompt.3.xml
-@@ -95,7 +95,7 @@
- <title>SEE ALSO</title>
- <para>
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>,
- <citerefentry>
- <refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
-Index: pam/doc/man/pam_prompt.3
-===================================================================
---- pam.orig/doc/man/pam_prompt.3
-+++ pam/doc/man/pam_prompt.3
-@@ -70,7 +70,7 @@
- .RE
- .SH "SEE ALSO"
- .PP
--\fBpam\fR(8),
-+\fBpam\fR(7),
- \fBpam_conv\fR(3)
- .SH "STANDARDS"
- .PP
-Index: pam/doc/man/pam_putenv.3.xml
-===================================================================
---- pam.orig/doc/man/pam_putenv.3.xml
-+++ pam/doc/man/pam_putenv.3.xml
-@@ -145,7 +145,7 @@
- <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_putenv.3
-===================================================================
---- pam.orig/doc/man/pam_putenv.3
-+++ pam/doc/man/pam_putenv.3
-@@ -108,4 +108,4 @@
- \fBpam_getenv\fR(3),
- \fBpam_getenvlist\fR(3),
- \fBpam_strerror\fR(3),
--\fBpam\fR(8)
-+\fBpam\fR(7)
-Index: pam/doc/man/pam_strerror.3.xml
-===================================================================
---- pam.orig/doc/man/pam_strerror.3.xml
-+++ pam/doc/man/pam_strerror.3.xml
-@@ -51,7 +51,7 @@
- <title>SEE ALSO</title>
- <para>
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_strerror.3
-===================================================================
---- pam.orig/doc/man/pam_strerror.3
-+++ pam/doc/man/pam_strerror.3
-@@ -49,4 +49,4 @@
- This function returns always a pointer to a string\&.
- .SH "SEE ALSO"
- .PP
--\fBpam\fR(8)
-+\fBpam\fR(7)
-Index: pam/doc/man/pam_syslog.3.xml
-===================================================================
---- pam.orig/doc/man/pam_syslog.3.xml
-+++ pam/doc/man/pam_syslog.3.xml
-@@ -66,7 +66,7 @@
- <title>SEE ALSO</title>
- <para>
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_syslog.3
-===================================================================
---- pam.orig/doc/man/pam_syslog.3
-+++ pam/doc/man/pam_syslog.3
-@@ -67,7 +67,7 @@
- variable argument list macros\&.
- .SH "SEE ALSO"
- .PP
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "STANDARDS"
- .PP
- The
-Index: pam/modules/pam_userdb/pam_userdb.8.xml
-===================================================================
---- pam.orig/modules/pam_userdb/pam_userdb.8.xml
-+++ pam/modules/pam_userdb/pam_userdb.8.xml
-@@ -279,7 +279,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_userdb/pam_userdb.8
-===================================================================
---- pam.orig/modules/pam_userdb/pam_userdb.8
-+++ pam/modules/pam_userdb/pam_userdb.8
-@@ -152,7 +152,7 @@
- \fBcrypt\fR(3),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_userdb was written by Cristian Gafton >gafton@redhat\&.com<\&.
-Index: pam/modules/pam_warn/pam_warn.8.xml
-===================================================================
---- pam.orig/modules/pam_warn/pam_warn.8.xml
-+++ pam/modules/pam_warn/pam_warn.8.xml
-@@ -90,7 +90,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_warn/pam_warn.8
-===================================================================
---- pam.orig/modules/pam_warn/pam_warn.8
-+++ pam/modules/pam_warn/pam_warn.8
-@@ -83,7 +83,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_warn was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
-Index: pam/modules/pam_wheel/pam_wheel.8.xml
-===================================================================
---- pam.orig/modules/pam_wheel/pam_wheel.8.xml
-+++ pam/modules/pam_wheel/pam_wheel.8.xml
-@@ -213,7 +213,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_wheel/pam_wheel.8
-===================================================================
---- pam.orig/modules/pam_wheel/pam_wheel.8
-+++ pam/modules/pam_wheel/pam_wheel.8
-@@ -136,7 +136,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_wheel was written by Cristian Gafton <gafton@redhat\&.com>\&.
-Index: pam/modules/pam_xauth/pam_xauth.8.xml
-===================================================================
---- pam.orig/modules/pam_xauth/pam_xauth.8.xml
-+++ pam/modules/pam_xauth/pam_xauth.8.xml
-@@ -276,7 +276,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_xauth/pam_xauth.8
-===================================================================
---- pam.orig/modules/pam_xauth/pam_xauth.8
-+++ pam/modules/pam_xauth/pam_xauth.8
-@@ -177,7 +177,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_xauth was written by Nalin Dahyabhai <nalin@redhat\&.com>, based on original version by Michael K\&. Johnson <johnsonm@redhat\&.com>\&.
-Index: pam/modules/pam_env/pam_env.8
-===================================================================
---- pam.orig/modules/pam_env/pam_env.8
-+++ pam/modules/pam_env/pam_env.8
-@@ -7,7 +7,7 @@
- .\" Source: Linux-PAM Manual
- .\" Language: English
- .\"
--.TH "PAM_ENV" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
-+.TH "PAM_ENV" "7" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
- .\" -----------------------------------------------------------------
- .\" * Define some portability stuff
- .\" -----------------------------------------------------------------
-Index: pam/modules/pam_pwhistory/pam_pwhistory.8.xml
-===================================================================
---- pam.orig/modules/pam_pwhistory/pam_pwhistory.8.xml
-+++ pam/modules/pam_pwhistory/pam_pwhistory.8.xml
-@@ -229,7 +229,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- <citerefentry>
- <refentrytitle>pam_get_authtok</refentrytitle><manvolnum>3</manvolnum>
-Index: pam/modules/pam_pwhistory/pam_pwhistory.8
-===================================================================
---- pam.orig/modules/pam_pwhistory/pam_pwhistory.8
-+++ pam/modules/pam_pwhistory/pam_pwhistory.8
-@@ -156,7 +156,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- \fBpam_get_authtok\fR(3)
- .SH "AUTHOR"
- .PP
-Index: pam/modules/pam_sepermit/sepermit.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_sepermit/sepermit.conf.5.xml
-+++ pam/modules/pam_sepermit/sepermit.conf.5.xml
-@@ -96,7 +96,7 @@
- <para>
- <citerefentry><refentrytitle>pam_sepermit</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-+ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>selinux</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- </para>
- </refsect1>
-Index: pam/modules/pam_sepermit/sepermit.conf.5
-===================================================================
---- pam.orig/modules/pam_sepermit/sepermit.conf.5
-+++ pam/modules/pam_sepermit/sepermit.conf.5
-@@ -110,7 +110,7 @@
- .PP
- \fBpam_sepermit\fR(8),
- \fBpam.d\fR(5),
--\fBpam\fR(8),
-+\fBpam\fR(7),
- \fBselinux\fR(8),
- .SH "AUTHOR"
- .PP
-Index: pam/modules/pam_timestamp/pam_timestamp.8.xml
-===================================================================
---- pam.orig/modules/pam_timestamp/pam_timestamp.8.xml
-+++ pam/modules/pam_timestamp/pam_timestamp.8.xml
-@@ -193,7 +193,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_timestamp/pam_timestamp.8
-===================================================================
---- pam.orig/modules/pam_timestamp/pam_timestamp.8
-+++ pam/modules/pam_timestamp/pam_timestamp.8
-@@ -129,7 +129,7 @@
- \fBpam_timestamp_check\fR(8),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_timestamp was written by Nalin Dahyabhai\&.
-Index: pam/modules/pam_timestamp/pam_timestamp_check.8.xml
-===================================================================
---- pam.orig/modules/pam_timestamp/pam_timestamp_check.8.xml
-+++ pam/modules/pam_timestamp/pam_timestamp_check.8.xml
-@@ -192,7 +192,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_timestamp/pam_timestamp_check.8
-===================================================================
---- pam.orig/modules/pam_timestamp/pam_timestamp_check.8
-+++ pam/modules/pam_timestamp/pam_timestamp_check.8
-@@ -127,7 +127,7 @@
- \fBpam_timestamp_check\fR(8),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_timestamp was written by Nalin Dahyabhai\&.
-Index: pam/modules/pam_tty_audit/pam_tty_audit.8.xml
-===================================================================
---- pam.orig/modules/pam_tty_audit/pam_tty_audit.8.xml
-+++ pam/modules/pam_tty_audit/pam_tty_audit.8.xml
-@@ -181,7 +181,7 @@
- <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
- </citerefentry>,
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/modules/pam_tty_audit/pam_tty_audit.8
-===================================================================
---- pam.orig/modules/pam_tty_audit/pam_tty_audit.8
-+++ pam/modules/pam_tty_audit/pam_tty_audit.8
-@@ -129,7 +129,7 @@
- \fBaureport\fR(8),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_tty_audit was written by Miloslav Trmač <mitr@redhat\&.com>\&. The log_passwd option was added by Richard Guy Briggs <rgb@redhat\&.com>\&.
-Index: pam/doc/man/pam_get_authtok.3.xml
-===================================================================
---- pam.orig/doc/man/pam_get_authtok.3.xml
-+++ pam/doc/man/pam_get_authtok.3.xml
-@@ -232,7 +232,7 @@
- <title>SEE ALSO</title>
- <para>
- <citerefentry>
-- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
-+ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
- </citerefentry>
- </para>
- </refsect1>
-Index: pam/doc/man/pam_get_authtok.3
-===================================================================
---- pam.orig/doc/man/pam_get_authtok.3
-+++ pam/doc/man/pam_get_authtok.3
-@@ -162,7 +162,7 @@
- .RE
- .SH "SEE ALSO"
- .PP
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "STANDARDS"
- .PP
- The
diff --git a/debian/patches-applied/do_not_check_nis_accidentally b/debian/patches-applied/do_not_check_nis_accidentally
deleted file mode 100644
index 29ce6097..00000000
--- a/debian/patches-applied/do_not_check_nis_accidentally
+++ /dev/null
@@ -1,22 +0,0 @@
-Patch for Debian bug #469635
-
-Always call _unix_getpwnam() consistent with the value of the 'nis'
-option, so that we only grab from the backends we're expecting.
-
-Authors: Quentin Godfroy <godfroy@clipper.ens.fr>
-
-Upstream status: should be submitted
-
-Index: pam/modules/pam_unix/pam_unix_passwd.c
-===================================================================
---- pam.orig/modules/pam_unix/pam_unix_passwd.c
-+++ pam/modules/pam_unix/pam_unix_passwd.c
-@@ -669,7 +669,7 @@
- return PAM_USER_UNKNOWN;
- } else {
- struct passwd *pwd;
-- _unix_getpwnam(pamh, user, 1, 1, &pwd);
-+ _unix_getpwnam(pamh, user, 1, on(UNIX_NIS, ctrl), &pwd);
- if (pwd == NULL) {
- pam_syslog(pamh, LOG_DEBUG,
- "user \"%s\" has corrupted passwd entry",
diff --git a/debian/patches-applied/make_documentation_reproducible.patch b/debian/patches-applied/make_documentation_reproducible.patch
deleted file mode 100644
index b6a4bfe3..00000000
--- a/debian/patches-applied/make_documentation_reproducible.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Description: Make documentation reproducible
- Add LC_ALL=C.UTF-8 to w3m to avoid changes in the output when build the
- documentation with different locales.
-Author: Juan Picca <jumapico@gmail.com>, Steve Langasek <vorlon@debian.org>
-Last-Update: 2019-01-06
-
-Index: pam/configure.ac
-===================================================================
---- pam.orig/configure.ac
-+++ pam/configure.ac
-@@ -585,7 +585,7 @@
-
- AC_PATH_PROG([BROWSER], [w3m])
- if test -n "$BROWSER"; then
-- BROWSER="$BROWSER -T text/html -dump"
-+ BROWSER="LC_ALL=C.UTF-8 $BROWSER -T text/html -dump"
- else
- AC_PATH_PROG([BROWSER], [elinks])
- if test -n "$BROWSER"; then
diff --git a/debian/patches-applied/no_PATH_MAX_on_hurd b/debian/patches-applied/no_PATH_MAX_on_hurd
deleted file mode 100644
index ab2403dd..00000000
--- a/debian/patches-applied/no_PATH_MAX_on_hurd
+++ /dev/null
@@ -1,22 +0,0 @@
-Description: define PATH_MAX for compatibility when it's not already set
- Some platforms, such as the Hurd, don't set PATH_MAX. Set a reasonable
- default value in this case.
-Author: Steve Langasek <vorlon@debian.org>
-Bug-Debian: http://bugs.debian.org/552043
-
-Index: pam/tests/tst-dlopen.c
-===================================================================
---- pam.orig/tests/tst-dlopen.c
-+++ pam/tests/tst-dlopen.c
-@@ -16,6 +16,11 @@
- #include <limits.h>
- #include <sys/stat.h>
-
-+/* Hurd compatibility */
-+#ifndef PATH_MAX
-+#define PATH_MAX 4096
-+#endif
-+
- /* Simple program to see if dlopen() would succeed. */
- int main(int argc, char **argv)
- {
diff --git a/debian/patches-applied/007_modules_pam_unix b/debian/patches/0003-pam_unix-obscure-checks.patch
index 218379c0..12651a0b 100644
--- a/debian/patches-applied/007_modules_pam_unix
+++ b/debian/patches/0003-pam_unix-obscure-checks.patch
@@ -1,224 +1,86 @@
-Index: pam/modules/pam_unix/pam_unix_passwd.c
-===================================================================
---- pam.orig/modules/pam_unix/pam_unix_passwd.c
-+++ pam/modules/pam_unix/pam_unix_passwd.c
-@@ -95,6 +95,9 @@
- # endif /* GNU libc 2.1 */
- #endif
-
-+extern const char *obscure_msg(const char *, const char *, const struct passwd *,
-+ unsigned int);
-+
- /*
- How it works:
- Gets in username (has to be done) from the calling program
-@@ -593,6 +596,11 @@
- return retval;
- }
- }
-+ if (!remark && pass_old != NULL) { /* only check if we don't already have a failure */
-+ struct passwd *pwd;
-+ pwd = pam_modutil_getpwnam(pamh, user);
-+ remark = (char *)obscure_msg(pass_old,pass_new,pwd,ctrl); /* do obscure checks */
-+ }
- }
- if (remark) {
- _make_remark(pamh, ctrl, PAM_ERROR_MSG, remark);
-@@ -608,7 +616,7 @@
- int retval;
- int remember = -1;
- int rounds = 0;
-- int pass_min_len = 0;
-+ int pass_min_len = 6;
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: pam_unix: obscure checks
+
+* Bring in the obscure checks that used to live in shadow so we can still support them
+
+* Set default minimum password length to 6
+---
+ modules/pam_unix/Makefile.am | 2 +-
+ modules/pam_unix/README | 36 ++++++-
+ modules/pam_unix/obscure.c | 198 +++++++++++++++++++++++++++++++++++++
+ modules/pam_unix/pam_unix.8 | 33 ++++++-
+ modules/pam_unix/pam_unix.8.xml | 77 ++++++++++++++-
+ modules/pam_unix/pam_unix_passwd.c | 10 +-
+ modules/pam_unix/support.h | 78 ++++++++-------
+ 7 files changed, 389 insertions(+), 45 deletions(-)
+ create mode 100644 modules/pam_unix/obscure.c
+
+diff --git a/modules/pam_unix/Makefile.am b/modules/pam_unix/Makefile.am
+index a1dfe44..ddba63c 100644
+--- a/modules/pam_unix/Makefile.am
++++ b/modules/pam_unix/Makefile.am
+@@ -43,7 +43,7 @@ noinst_PROGRAMS = bigcrypt
- /* <DO NOT free() THESE> */
- const char *user;
-Index: pam/modules/pam_unix/support.h
-===================================================================
---- pam.orig/modules/pam_unix/support.h
-+++ pam/modules/pam_unix/support.h
-@@ -101,50 +101,52 @@
- #define UNIX_GOST_YESCRYPT_PASS 31 /* new password hashes will use gost-yescrypt */
- #define UNIX_YESCRYPT_PASS 32 /* new password hashes will use yescrypt */
- #define UNIX_NULLRESETOK 33 /* allow empty password if password reset is enforced */
-+#define UNIX_OBSCURE_CHECKS 34 /* enable obscure checks on passwords */
- /* -------------- */
--#define UNIX_CTRLS_ 34 /* number of ctrl arguments defined */
-+#define UNIX_CTRLS_ 35 /* number of ctrl arguments defined */
+ pam_unix_la_SOURCES = 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
++ passverify.c md5_good.c md5_broken.c obscure.c
+ if HAVE_NIS
+ pam_unix_la_SOURCES += yppasswd_xdr.c
+ endif
+diff --git a/modules/pam_unix/README b/modules/pam_unix/README
+index 67a2d21..be11095 100644
+--- a/modules/pam_unix/README
++++ b/modules/pam_unix/README
+@@ -171,8 +171,40 @@ broken_shadow
- #define UNIX_DES_CRYPT(ctrl) (off(UNIX_MD5_PASS,ctrl)&&off(UNIX_BIGCRYPT,ctrl)&&off(UNIX_SHA256_PASS,ctrl)&&off(UNIX_SHA512_PASS,ctrl)&&off(UNIX_BLOWFISH_PASS,ctrl)&&off(UNIX_GOST_YESCRYPT_PASS,ctrl)&&off(UNIX_YESCRYPT_PASS,ctrl))
+ minlen=n
- static const UNIX_Ctrls unix_args[UNIX_CTRLS_] =
- {
--/* symbol token name ctrl mask ctrl *
-- * --------------------------- -------------------- ------------------------- ---------------- */
-+/* symbol token name ctrl mask ctrl *
-+ * --------------------------- -------------------- ------------------------- ------------ */
+- Set a minimum password length of n characters. The max. for DES crypt based
+- passwords are 8 characters.
++ Set a minimum password length of n characters. The default value is 6. The
++ maximum for DES crypt-based passwords is 8 characters.
++
++obscure
++
++ Enable some extra checks on password strength. These checks are based on
++ the "obscure" checks in the original shadow package. The behavior is
++ similar to the pam_cracklib module, but for non-dictionary-based checks.
++ The following checks are implemented:
++
++ Palindrome
++
++ Verifies that the new password is not a palindrome of (i.e., the
++ reverse of) the previous one.
++
++ Case Change Only
++
++ Verifies that the new password isn't the same as the old one with a
++ change of case.
++
++ Similar
++
++ Verifies that the new password isn't too much like the previous one.
++
++ Simple
++
++ Is the new password too simple? This is based on the length of the
++ password and the number of different types of characters (alpha,
++ numeric, etc.) used.
++
++ Rotated
++
++ Is the new password a rotated version of the old password? (E.g.,
++ "billy" and "illyb")
--/* UNIX__OLD_PASSWD */ {NULL, _ALL_ON_, 01, 0},
--/* UNIX__VERIFY_PASSWD */ {NULL, _ALL_ON_, 02, 0},
--/* UNIX__IAMROOT */ {NULL, _ALL_ON_, 04, 0},
--/* UNIX_AUDIT */ {"audit", _ALL_ON_, 010, 0},
--/* UNIX_USE_FIRST_PASS */ {"use_first_pass", _ALL_ON_^(060ULL), 020, 0},
--/* UNIX_TRY_FIRST_PASS */ {"try_first_pass", _ALL_ON_^(060ULL), 040, 0},
--/* UNIX_AUTHTOK_TYPE */ {"authtok_type=", _ALL_ON_, 0100, 0},
--/* UNIX__PRELIM */ {NULL, _ALL_ON_^(0600ULL), 0200, 0},
--/* UNIX__UPDATE */ {NULL, _ALL_ON_^(0600ULL), 0400, 0},
--/* UNIX__NONULL */ {NULL, _ALL_ON_, 01000, 0},
--/* UNIX__QUIET */ {NULL, _ALL_ON_, 02000, 0},
--/* UNIX_USE_AUTHTOK */ {"use_authtok", _ALL_ON_, 04000, 0},
--/* UNIX_SHADOW */ {"shadow", _ALL_ON_, 010000, 0},
--/* UNIX_MD5_PASS */ {"md5", _ALL_ON_^(015660420000ULL), 020000, 1},
--/* UNIX__NULLOK */ {"nullok", _ALL_ON_^(01000ULL), 0, 0},
--/* UNIX_DEBUG */ {"debug", _ALL_ON_, 040000, 0},
--/* UNIX_NODELAY */ {"nodelay", _ALL_ON_, 0100000, 0},
--/* UNIX_NIS */ {"nis", _ALL_ON_, 0200000, 0},
--/* UNIX_BIGCRYPT */ {"bigcrypt", _ALL_ON_^(015660420000ULL), 0400000, 1},
--/* UNIX_LIKE_AUTH */ {"likeauth", _ALL_ON_, 01000000, 0},
--/* UNIX_REMEMBER_PASSWD */ {"remember=", _ALL_ON_, 02000000, 0},
--/* UNIX_NOREAP */ {"noreap", _ALL_ON_, 04000000, 0},
--/* UNIX_BROKEN_SHADOW */ {"broken_shadow", _ALL_ON_, 010000000, 0},
--/* UNIX_SHA256_PASS */ {"sha256", _ALL_ON_^(015660420000ULL), 020000000, 1},
--/* UNIX_SHA512_PASS */ {"sha512", _ALL_ON_^(015660420000ULL), 040000000, 1},
--/* UNIX_ALGO_ROUNDS */ {"rounds=", _ALL_ON_, 0100000000, 0},
--/* UNIX_BLOWFISH_PASS */ {"blowfish", _ALL_ON_^(015660420000ULL), 0200000000, 1},
--/* UNIX_MIN_PASS_LEN */ {"minlen=", _ALL_ON_, 0400000000, 0},
--/* UNIX_QUIET */ {"quiet", _ALL_ON_, 01000000000, 0},
--/* UNIX_NO_PASS_EXPIRY */ {"no_pass_expiry", _ALL_ON_, 02000000000, 0},
--/* UNIX_DES */ {"des", _ALL_ON_^(015660420000ULL), 0, 1},
--/* UNIX_GOST_YESCRYPT_PASS */ {"gost_yescrypt", _ALL_ON_^(015660420000ULL), 04000000000, 1},
--/* UNIX_YESCRYPT_PASS */ {"yescrypt", _ALL_ON_^(015660420000ULL), 010000000000, 1},
--/* UNIX_NULLRESETOK */ {"nullresetok", _ALL_ON_, 020000000000, 0},
-+/* UNIX__OLD_PASSWD */ {NULL, _ALL_ON_, 0x1, 0},
-+/* UNIX__VERIFY_PASSWD */ {NULL, _ALL_ON_, 0x2, 0},
-+/* UNIX__IAMROOT */ {NULL, _ALL_ON_, 0x4, 0},
-+/* UNIX_AUDIT */ {"audit", _ALL_ON_, 0x8, 0},
-+/* UNIX_USE_FIRST_PASS */ {"use_first_pass", _ALL_ON_^(0x30ULL), 0x10, 0},
-+/* UNIX_TRY_FIRST_PASS */ {"try_first_pass", _ALL_ON_^(0x30ULL), 0x20, 0},
-+/* UNIX_AUTHTOK_TYPE */ {"authtok_type=", _ALL_ON_, 0x40, 0},
-+/* UNIX__PRELIM */ {NULL, _ALL_ON_^(0x180ULL), 0x80, 0},
-+/* UNIX__UPDATE */ {NULL, _ALL_ON_^(0x180ULL), 0x100, 0},
-+/* UNIX__NONULL */ {NULL, _ALL_ON_, 0x200, 0},
-+/* UNIX__QUIET */ {NULL, _ALL_ON_, 0x400, 0},
-+/* UNIX_USE_AUTHTOK */ {"use_authtok", _ALL_ON_, 0x800, 0},
-+/* UNIX_SHADOW */ {"shadow", _ALL_ON_, 0x1000, 0},
-+/* UNIX_MD5_PASS */ {"md5", _ALL_ON_^(0x6EC22000ULL), 0x2000, 1},
-+/* UNIX__NULLOK */ {"nullok", _ALL_ON_^(0x200ULL), 0, 0},
-+/* UNIX_DEBUG */ {"debug", _ALL_ON_, 0x4000, 0},
-+/* UNIX_NODELAY */ {"nodelay", _ALL_ON_, 0x8000, 0},
-+/* UNIX_NIS */ {"nis", _ALL_ON_, 0x10000, 0},
-+/* UNIX_BIGCRYPT */ {"bigcrypt", _ALL_ON_^(0x6EC22000ULL), 0x20000, 1},
-+/* UNIX_LIKE_AUTH */ {"likeauth", _ALL_ON_, 0x40000, 0},
-+/* UNIX_REMEMBER_PASSWD */ {"remember=", _ALL_ON_, 0x80000, 0},
-+/* UNIX_NOREAP */ {"noreap", _ALL_ON_, 0x100000, 0},
-+/* UNIX_BROKEN_SHADOW */ {"broken_shadow", _ALL_ON_, 0x200000, 0},
-+/* UNIX_SHA256_PASS */ {"sha256", _ALL_ON_^(0x6EC22000ULL), 0x400000, 1},
-+/* UNIX_SHA512_PASS */ {"sha512", _ALL_ON_^(0x6EC22000ULL), 0x800000, 1},
-+/* UNIX_ALGO_ROUNDS */ {"rounds=", _ALL_ON_, 0x1000000, 0},
-+/* UNIX_BLOWFISH_PASS */ {"blowfish", _ALL_ON_^(0x6EC22000ULL), 0x2000000, 1},
-+/* UNIX_MIN_PASS_LEN */ {"minlen=", _ALL_ON_, 0x4000000, 0},
-+/* UNIX_QUIET */ {"quiet", _ALL_ON_, 0x8000000, 0},
-+/* UNIX_NO_PASS_EXPIRY */ {"no_pass_expiry", _ALL_ON_, 0x10000000, 0},
-+/* UNIX_DES */ {"des", _ALL_ON_^(0x6EC22000ULL), 0, 1},
-+/* UNIX_GOST_YESCRYPT_PASS */ {"gost_yescrypt", _ALL_ON_^(0x6EC22000ULL), 0x20000000, 1},
-+/* UNIX_YESCRYPT_PASS */ {"yescrypt", _ALL_ON_^(0x6EC22000ULL), 0x40000000, 1},
-+/* UNIX_NULLRESETOK */ {"nullresetok", _ALL_ON_, 0x80000000, 0},
-+/* UNIX_OBSCURE_CHECKS */ {"obscure", _ALL_ON_, 0x100000000, 0},
- };
+ no_pass_expiry
- #define UNIX_DEFAULTS (unix_args[UNIX__NONULL].flag)
-Index: pam/modules/pam_unix/pam_unix.8.xml
-===================================================================
---- pam.orig/modules/pam_unix/pam_unix.8.xml
-+++ pam/modules/pam_unix/pam_unix.8.xml
-@@ -400,8 +400,81 @@
- <listitem>
- <para>
- Set a minimum password length of <replaceable>n</replaceable>
-- characters. The max. for DES crypt based passwords are 8
-- characters.
-+ characters. The default value is 6. The maximum for DES
-+ crypt-based passwords is 8 characters.
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term>
-+ <option>obscure</option>
-+ </term>
-+ <listitem>
-+ <para>
-+ Enable some extra checks on password strength. These checks
-+ are based on the "obscure" checks in the original shadow
-+ package. The behavior is similar to the pam_cracklib
-+ module, but for non-dictionary-based checks. The following
-+ checks are implemented:
-+ <variablelist>
-+ <varlistentry>
-+ <term>
-+ <option>Palindrome</option>
-+ </term>
-+ <listitem>
-+ <para>
-+ Verifies that the new password is not a palindrome
-+ of (i.e., the reverse of) the previous one.
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term>
-+ <option>Case Change Only</option>
-+ </term>
-+ <listitem>
-+ <para>
-+ Verifies that the new password isn't the same as the
-+ old one with a change of case.
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term>
-+ <option>Similar</option>
-+ </term>
-+ <listitem>
-+ <para>
-+ Verifies that the new password isn't too much like
-+ the previous one.
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term>
-+ <option>Simple</option>
-+ </term>
-+ <listitem>
-+ <para>
-+ Is the new password too simple? This is based on
-+ the length of the password and the number of
-+ different types of characters (alpha, numeric, etc.)
-+ used.
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term>
-+ <option>Rotated</option>
-+ </term>
-+ <listitem>
-+ <para>
-+ Is the new password a rotated version of the old
-+ password? (E.g., "billy" and "illyb")
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ </variablelist>
- </para>
- </listitem>
- </varlistentry>
-Index: pam/modules/pam_unix/obscure.c
-===================================================================
+diff --git a/modules/pam_unix/obscure.c b/modules/pam_unix/obscure.c
+new file mode 100644
+index 0000000..2ffac92
--- /dev/null
-+++ pam/modules/pam_unix/obscure.c
++++ b/modules/pam_unix/obscure.c
@@ -0,0 +1,198 @@
+/*
+ * Copyright 1989 - 1994, Julianne Frances Haugh
@@ -418,24 +280,11 @@ Index: pam/modules/pam_unix/obscure.c
+
+ return msg;
+}
-Index: pam/modules/pam_unix/Makefile.am
-===================================================================
---- pam.orig/modules/pam_unix/Makefile.am
-+++ pam/modules/pam_unix/Makefile.am
-@@ -39,7 +39,7 @@
-
- pam_unix_la_SOURCES = bigcrypt.c pam_unix_acct.c \
- pam_unix_auth.c pam_unix_passwd.c pam_unix_sess.c support.c \
-- passverify.c yppasswd_xdr.c md5_good.c md5_broken.c
-+ passverify.c yppasswd_xdr.c md5_good.c md5_broken.c obscure.c
-
- bigcrypt_SOURCES = bigcrypt.c bigcrypt_main.c
- bigcrypt_CFLAGS = $(AM_CFLAGS)
-Index: pam/modules/pam_unix/pam_unix.8
-===================================================================
---- pam.orig/modules/pam_unix/pam_unix.8
-+++ pam/modules/pam_unix/pam_unix.8
-@@ -216,7 +216,38 @@
+diff --git a/modules/pam_unix/pam_unix.8 b/modules/pam_unix/pam_unix.8
+index 438717f..6f5f19b 100644
+--- a/modules/pam_unix/pam_unix.8
++++ b/modules/pam_unix/pam_unix.8
+@@ -216,7 +216,38 @@ minlen=n
.RS 4
Set a minimum password length of
\fIn\fR
@@ -474,51 +323,222 @@ Index: pam/modules/pam_unix/pam_unix.8
+.sp
.RE
.PP
- \fBno_pass_expiry\fR
-Index: pam/modules/pam_unix/README
-===================================================================
---- pam.orig/modules/pam_unix/README
-+++ pam/modules/pam_unix/README
-@@ -171,8 +171,40 @@
-
- minlen=n
+ no_pass_expiry
+diff --git a/modules/pam_unix/pam_unix.8.xml b/modules/pam_unix/pam_unix.8.xml
+index dfc0427..4e63a49 100644
+--- a/modules/pam_unix/pam_unix.8.xml
++++ b/modules/pam_unix/pam_unix.8.xml
+@@ -397,8 +397,81 @@
+ <listitem>
+ <para>
+ Set a minimum password length of <replaceable>n</replaceable>
+- characters. The max. for DES crypt based passwords are 8
+- characters.
++ characters. The default value is 6. The maximum for DES
++ crypt-based passwords is 8 characters.
++ </para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term>
++ <option>obscure</option>
++ </term>
++ <listitem>
++ <para>
++ Enable some extra checks on password strength. These checks
++ are based on the "obscure" checks in the original shadow
++ package. The behavior is similar to the pam_cracklib
++ module, but for non-dictionary-based checks. The following
++ checks are implemented:
++ <variablelist>
++ <varlistentry>
++ <term>
++ <option>Palindrome</option>
++ </term>
++ <listitem>
++ <para>
++ Verifies that the new password is not a palindrome
++ of (i.e., the reverse of) the previous one.
++ </para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term>
++ <option>Case Change Only</option>
++ </term>
++ <listitem>
++ <para>
++ Verifies that the new password isn't the same as the
++ old one with a change of case.
++ </para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term>
++ <option>Similar</option>
++ </term>
++ <listitem>
++ <para>
++ Verifies that the new password isn't too much like
++ the previous one.
++ </para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term>
++ <option>Simple</option>
++ </term>
++ <listitem>
++ <para>
++ Is the new password too simple? This is based on
++ the length of the password and the number of
++ different types of characters (alpha, numeric, etc.)
++ used.
++ </para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term>
++ <option>Rotated</option>
++ </term>
++ <listitem>
++ <para>
++ Is the new password a rotated version of the old
++ password? (E.g., "billy" and "illyb")
++ </para>
++ </listitem>
++ </varlistentry>
++ </variablelist>
+ </para>
+ </listitem>
+ </varlistentry>
+diff --git a/modules/pam_unix/pam_unix_passwd.c b/modules/pam_unix/pam_unix_passwd.c
+index c341741..652f3c5 100644
+--- a/modules/pam_unix/pam_unix_passwd.c
++++ b/modules/pam_unix/pam_unix_passwd.c
+@@ -86,6 +86,9 @@ extern int getrpcport(const char *host, unsigned long prognum,
+ # endif /* GNU libc 2.1 */
+ #endif
-- Set a minimum password length of n characters. The max. for DES crypt based
-- passwords are 8 characters.
-+ Set a minimum password length of n characters. The default value is 6. The
-+ maximum for DES crypt-based passwords is 8 characters.
-+
-+obscure
-+
-+ Enable some extra checks on password strength. These checks are based on
-+ the "obscure" checks in the original shadow package. The behavior is
-+ similar to the pam_cracklib module, but for non-dictionary-based checks.
-+ The following checks are implemented:
-+
-+ Palindrome
-+
-+ Verifies that the new password is not a palindrome of (i.e., the
-+ reverse of) the previous one.
-+
-+ Case Change Only
-+
-+ Verifies that the new password isn't the same as the old one with a
-+ change of case.
-+
-+ Similar
-+
-+ Verifies that the new password isn't too much like the previous one.
-+
-+ Simple
-+
-+ Is the new password too simple? This is based on the length of the
-+ password and the number of different types of characters (alpha,
-+ numeric, etc.) used.
-+
-+ Rotated
++extern const char *obscure_msg(const char *, const char *, const struct passwd *,
++ unsigned int);
+
-+ Is the new password a rotated version of the old password? (E.g.,
-+ "billy" and "illyb")
+ /*
+ How it works:
+ Gets in username (has to be done) from the calling program
+@@ -584,6 +587,11 @@ static int _pam_unix_approve_pass(pam_handle_t * pamh
+ return retval;
+ }
+ }
++ if (!remark && pass_old != NULL) { /* only check if we don't already have a failure */
++ struct passwd *pwd;
++ pwd = pam_modutil_getpwnam(pamh, user);
++ remark = (char *)obscure_msg(pass_old,pass_new,pwd,ctrl); /* do obscure checks */
++ }
+ }
+ if (remark) {
+ _make_remark(pamh, ctrl, PAM_ERROR_MSG, remark);
+@@ -599,7 +607,7 @@ pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv)
+ int retval;
+ int remember = -1;
+ int rounds = 0;
+- int pass_min_len = 0;
++ int pass_min_len = 6;
- no_pass_expiry
+ /* <DO NOT free() THESE> */
+ const char *user;
+diff --git a/modules/pam_unix/support.h b/modules/pam_unix/support.h
+index 8105400..91e7478 100644
+--- a/modules/pam_unix/support.h
++++ b/modules/pam_unix/support.h
+@@ -101,50 +101,52 @@ typedef struct {
+ #define UNIX_GOST_YESCRYPT_PASS 31 /* new password hashes will use gost-yescrypt */
+ #define UNIX_YESCRYPT_PASS 32 /* new password hashes will use yescrypt */
+ #define UNIX_NULLRESETOK 33 /* allow empty password if password reset is enforced */
++#define UNIX_OBSCURE_CHECKS 34 /* enable obscure checks on passwords */
+ /* -------------- */
+-#define UNIX_CTRLS_ 34 /* number of ctrl arguments defined */
++#define UNIX_CTRLS_ 35 /* number of ctrl arguments defined */
+
+ #define UNIX_DES_CRYPT(ctrl) (off(UNIX_MD5_PASS,ctrl)&&off(UNIX_BIGCRYPT,ctrl)&&off(UNIX_SHA256_PASS,ctrl)&&off(UNIX_SHA512_PASS,ctrl)&&off(UNIX_BLOWFISH_PASS,ctrl)&&off(UNIX_GOST_YESCRYPT_PASS,ctrl)&&off(UNIX_YESCRYPT_PASS,ctrl))
+
+ static const UNIX_Ctrls unix_args[UNIX_CTRLS_] =
+ {
+-/* symbol token name ctrl mask ctrl *
+- * --------------------------- -------------------- ------------------------- ---------------- */
+-
+-/* UNIX__OLD_PASSWD */ {NULL, _ALL_ON_, 01, 0},
+-/* UNIX__VERIFY_PASSWD */ {NULL, _ALL_ON_, 02, 0},
+-/* UNIX__IAMROOT */ {NULL, _ALL_ON_, 04, 0},
+-/* UNIX_AUDIT */ {"audit", _ALL_ON_, 010, 0},
+-/* UNIX_USE_FIRST_PASS */ {"use_first_pass", _ALL_ON_^(060ULL), 020, 0},
+-/* UNIX_TRY_FIRST_PASS */ {"try_first_pass", _ALL_ON_^(060ULL), 040, 0},
+-/* UNIX_AUTHTOK_TYPE */ {"authtok_type=", _ALL_ON_, 0100, 0},
+-/* UNIX__PRELIM */ {NULL, _ALL_ON_^(0600ULL), 0200, 0},
+-/* UNIX__UPDATE */ {NULL, _ALL_ON_^(0600ULL), 0400, 0},
+-/* UNIX__NONULL */ {NULL, _ALL_ON_, 01000, 0},
+-/* UNIX__QUIET */ {NULL, _ALL_ON_, 02000, 0},
+-/* UNIX_USE_AUTHTOK */ {"use_authtok", _ALL_ON_, 04000, 0},
+-/* UNIX_SHADOW */ {"shadow", _ALL_ON_, 010000, 0},
+-/* UNIX_MD5_PASS */ {"md5", _ALL_ON_^(015660420000ULL), 020000, 1},
+-/* UNIX__NULLOK */ {"nullok", _ALL_ON_^(01000ULL), 0, 0},
+-/* UNIX_DEBUG */ {"debug", _ALL_ON_, 040000, 0},
+-/* UNIX_NODELAY */ {"nodelay", _ALL_ON_, 0100000, 0},
+-/* UNIX_NIS */ {"nis", _ALL_ON_, 0200000, 0},
+-/* UNIX_BIGCRYPT */ {"bigcrypt", _ALL_ON_^(015660420000ULL), 0400000, 1},
+-/* UNIX_LIKE_AUTH */ {"likeauth", _ALL_ON_, 01000000, 0},
+-/* UNIX_REMEMBER_PASSWD */ {"remember=", _ALL_ON_, 02000000, 0},
+-/* UNIX_NOREAP */ {"noreap", _ALL_ON_, 04000000, 0},
+-/* UNIX_BROKEN_SHADOW */ {"broken_shadow", _ALL_ON_, 010000000, 0},
+-/* UNIX_SHA256_PASS */ {"sha256", _ALL_ON_^(015660420000ULL), 020000000, 1},
+-/* UNIX_SHA512_PASS */ {"sha512", _ALL_ON_^(015660420000ULL), 040000000, 1},
+-/* UNIX_ALGO_ROUNDS */ {"rounds=", _ALL_ON_, 0100000000, 0},
+-/* UNIX_BLOWFISH_PASS */ {"blowfish", _ALL_ON_^(015660420000ULL), 0200000000, 1},
+-/* UNIX_MIN_PASS_LEN */ {"minlen=", _ALL_ON_, 0400000000, 0},
+-/* UNIX_QUIET */ {"quiet", _ALL_ON_, 01000000000, 0},
+-/* UNIX_NO_PASS_EXPIRY */ {"no_pass_expiry", _ALL_ON_, 02000000000, 0},
+-/* UNIX_DES */ {"des", _ALL_ON_^(015660420000ULL), 0, 1},
+-/* UNIX_GOST_YESCRYPT_PASS */ {"gost_yescrypt", _ALL_ON_^(015660420000ULL), 04000000000, 1},
+-/* UNIX_YESCRYPT_PASS */ {"yescrypt", _ALL_ON_^(015660420000ULL), 010000000000, 1},
+-/* UNIX_NULLRESETOK */ {"nullresetok", _ALL_ON_, 020000000000, 0},
++/* symbol token name ctrl mask ctrl *
++ * --------------------------- -------------------- ------------------------- ------------ */
++
++/* UNIX__OLD_PASSWD */ {NULL, _ALL_ON_, 0x1, 0},
++/* UNIX__VERIFY_PASSWD */ {NULL, _ALL_ON_, 0x2, 0},
++/* UNIX__IAMROOT */ {NULL, _ALL_ON_, 0x4, 0},
++/* UNIX_AUDIT */ {"audit", _ALL_ON_, 0x8, 0},
++/* UNIX_USE_FIRST_PASS */ {"use_first_pass", _ALL_ON_^(0x30ULL), 0x10, 0},
++/* UNIX_TRY_FIRST_PASS */ {"try_first_pass", _ALL_ON_^(0x30ULL), 0x20, 0},
++/* UNIX_AUTHTOK_TYPE */ {"authtok_type=", _ALL_ON_, 0x40, 0},
++/* UNIX__PRELIM */ {NULL, _ALL_ON_^(0x180ULL), 0x80, 0},
++/* UNIX__UPDATE */ {NULL, _ALL_ON_^(0x180ULL), 0x100, 0},
++/* UNIX__NONULL */ {NULL, _ALL_ON_, 0x200, 0},
++/* UNIX__QUIET */ {NULL, _ALL_ON_, 0x400, 0},
++/* UNIX_USE_AUTHTOK */ {"use_authtok", _ALL_ON_, 0x800, 0},
++/* UNIX_SHADOW */ {"shadow", _ALL_ON_, 0x1000, 0},
++/* UNIX_MD5_PASS */ {"md5", _ALL_ON_^(0x6EC22000ULL), 0x2000, 1},
++/* UNIX__NULLOK */ {"nullok", _ALL_ON_^(0x200ULL), 0, 0},
++/* UNIX_DEBUG */ {"debug", _ALL_ON_, 0x4000, 0},
++/* UNIX_NODELAY */ {"nodelay", _ALL_ON_, 0x8000, 0},
++/* UNIX_NIS */ {"nis", _ALL_ON_, 0x10000, 0},
++/* UNIX_BIGCRYPT */ {"bigcrypt", _ALL_ON_^(0x6EC22000ULL), 0x20000, 1},
++/* UNIX_LIKE_AUTH */ {"likeauth", _ALL_ON_, 0x40000, 0},
++/* UNIX_REMEMBER_PASSWD */ {"remember=", _ALL_ON_, 0x80000, 0},
++/* UNIX_NOREAP */ {"noreap", _ALL_ON_, 0x100000, 0},
++/* UNIX_BROKEN_SHADOW */ {"broken_shadow", _ALL_ON_, 0x200000, 0},
++/* UNIX_SHA256_PASS */ {"sha256", _ALL_ON_^(0x6EC22000ULL), 0x400000, 1},
++/* UNIX_SHA512_PASS */ {"sha512", _ALL_ON_^(0x6EC22000ULL), 0x800000, 1},
++/* UNIX_ALGO_ROUNDS */ {"rounds=", _ALL_ON_, 0x1000000, 0},
++/* UNIX_BLOWFISH_PASS */ {"blowfish", _ALL_ON_^(0x6EC22000ULL), 0x2000000, 1},
++/* UNIX_MIN_PASS_LEN */ {"minlen=", _ALL_ON_, 0x4000000, 0},
++/* UNIX_QUIET */ {"quiet", _ALL_ON_, 0x8000000, 0},
++/* UNIX_NO_PASS_EXPIRY */ {"no_pass_expiry", _ALL_ON_, 0x10000000, 0},
++/* UNIX_DES */ {"des", _ALL_ON_^(0x6EC22000ULL), 0, 1},
++/* UNIX_GOST_YESCRYPT_PASS */ {"gost_yescrypt", _ALL_ON_^(0x6EC22000ULL), 0x20000000, 1},
++/* UNIX_YESCRYPT_PASS */ {"yescrypt", _ALL_ON_^(0x6EC22000ULL), 0x40000000, 1},
++/* UNIX_NULLRESETOK */ {"nullresetok", _ALL_ON_, 0x80000000, 0},
++/* UNIX_OBSCURE_CHECKS */ {"obscure", _ALL_ON_, 0x100000000, 0},
+ };
+ #define UNIX_DEFAULTS (unix_args[UNIX__NONULL].flag)
diff --git a/debian/patches-applied/008_modules_pam_limits_chroot b/debian/patches/008_modules_pam_limits_chroot
index 7a86fdd5..5466536f 100644
--- a/debian/patches-applied/008_modules_pam_limits_chroot
+++ b/debian/patches/008_modules_pam_limits_chroot
@@ -1,8 +1,73 @@
-Index: pam/modules/pam_limits/pam_limits.c
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: _modules_pam_limits_chroot
+
===================================================================
---- pam.orig/modules/pam_limits/pam_limits.c
-+++ pam/modules/pam_limits/pam_limits.c
-@@ -90,6 +90,7 @@
+---
+ modules/pam_limits/limits.conf | 2 ++
+ modules/pam_limits/limits.conf.5 | 5 +++++
+ modules/pam_limits/limits.conf.5.xml | 6 ++++++
+ modules/pam_limits/pam_limits.c | 25 ++++++++++++++++++++++---
+ 4 files changed, 35 insertions(+), 3 deletions(-)
+
+diff --git a/modules/pam_limits/limits.conf b/modules/pam_limits/limits.conf
+index c6b058a..6b3865c 100644
+--- a/modules/pam_limits/limits.conf
++++ b/modules/pam_limits/limits.conf
+@@ -49,6 +49,7 @@
+ # - msgqueue - max memory used by POSIX message queues (bytes)
+ # - nice - max nice priority allowed to raise to values: [-20, 19]
+ # - rtprio - max realtime priority
++# - chroot - change root to directory (Debian-specific)
+ #
+ #<domain> <type> <item> <value>
+ #
+@@ -60,6 +61,7 @@
+ #@faculty soft nproc 20
+ #@faculty hard nproc 50
+ #ftp hard nproc 0
++#ftp - chroot /ftp
+ #@student - maxlogins 4
+
+ # End of file
+diff --git a/modules/pam_limits/limits.conf.5 b/modules/pam_limits/limits.conf.5
+index 32c4b2f..ce0ca35 100644
+--- a/modules/pam_limits/limits.conf.5
++++ b/modules/pam_limits/limits.conf.5
+@@ -283,6 +283,11 @@ rtprio
+ .RS 4
+ maximum realtime priority allowed for non\-privileged processes (Linux 2\&.6\&.12 and higher)
+ .RE
++.PP
++\fBchroot\fR
++.RS 4
++the directory to chroot the user to
++.RE
+ .RE
+ .PP
+ All items support the values
+diff --git a/modules/pam_limits/limits.conf.5.xml b/modules/pam_limits/limits.conf.5.xml
+index 9f2662a..f6f7d87 100644
+--- a/modules/pam_limits/limits.conf.5.xml
++++ b/modules/pam_limits/limits.conf.5.xml
+@@ -271,6 +271,12 @@
+ (Linux 2.6.12 and higher)</para>
+ </listitem>
+ </varlistentry>
++ <varlistentry>
++ <term><option>chroot</option></term>
++ <listitem>
++ <para>the directory to chroot the user to</para>
++ </listitem>
++ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+diff --git a/modules/pam_limits/pam_limits.c b/modules/pam_limits/pam_limits.c
+index 746c441..529d2fc 100644
+--- a/modules/pam_limits/pam_limits.c
++++ b/modules/pam_limits/pam_limits.c
+@@ -104,6 +104,7 @@ struct pam_limit_s {
specific user or to count all logins */
int priority; /* the priority to run user process with */
int nonewprivs; /* whether to prctl(PR_SET_NO_NEW_PRIVS) */
@@ -10,7 +75,7 @@ Index: pam/modules/pam_limits/pam_limits.c
struct user_limits_struct limits[RLIM_NLIMITS];
const char *conf_file;
int utmp_after_pam_call;
-@@ -101,6 +102,7 @@
+@@ -115,6 +116,7 @@ struct pam_limit_s {
#define LIMIT_PRI RLIM_NLIMITS+3
#define LIMIT_NONEWPRIVS RLIM_NLIMITS+4
@@ -18,7 +83,7 @@ Index: pam/modules/pam_limits/pam_limits.c
#define LIMIT_SOFT 1
#define LIMIT_HARD 2
-@@ -484,6 +486,8 @@
+@@ -570,6 +572,8 @@ static int init_limits(pam_handle_t *pamh, struct pam_limit_s *pl, int ctrl)
pl->login_limit = -2;
pl->login_limit_def = LIMITS_DEF_NONE;
@@ -27,7 +92,7 @@ Index: pam/modules/pam_limits/pam_limits.c
return retval;
}
-@@ -591,6 +595,8 @@
+@@ -677,6 +681,8 @@ process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
limit_item = LIMIT_PRI;
} else if (strcmp(lim_item, "nonewprivs") == 0) {
limit_item = LIMIT_NONEWPRIVS;
@@ -36,7 +101,7 @@ Index: pam/modules/pam_limits/pam_limits.c
} else {
pam_syslog(pamh, LOG_DEBUG, "unknown limit item '%s'", lim_item);
return;
-@@ -640,9 +646,9 @@
+@@ -726,9 +732,9 @@ process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
pam_syslog(pamh, LOG_DEBUG,
"wrong limit value '%s' for limit type '%s'",
lim_value, lim_type);
@@ -48,7 +113,7 @@ Index: pam/modules/pam_limits/pam_limits.c
#ifdef __USE_FILE_OFFSET64
rlimit_value = strtoull (lim_value, &endptr, 10);
#else
-@@ -717,7 +723,11 @@
+@@ -803,7 +809,11 @@ process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
break;
}
@@ -61,7 +126,7 @@ Index: pam/modules/pam_limits/pam_limits.c
&& (limit_item != LIMIT_NUMSYSLOGINS)
&& (limit_item != LIMIT_PRI)
&& (limit_item != LIMIT_NONEWPRIVS) ) {
-@@ -1071,6 +1081,15 @@
+@@ -1163,6 +1173,15 @@ static int setup_limits(pam_handle_t *pamh,
}
}
@@ -77,56 +142,3 @@ Index: pam/modules/pam_limits/pam_limits.c
return retval;
}
-Index: pam/modules/pam_limits/limits.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_limits/limits.conf.5.xml
-+++ pam/modules/pam_limits/limits.conf.5.xml
-@@ -273,6 +273,12 @@
- (Linux 2.6.12 and higher)</para>
- </listitem>
- </varlistentry>
-+ <varlistentry>
-+ <term><option>chroot</option></term>
-+ <listitem>
-+ <para>the directory to chroot the user to</para>
-+ </listitem>
-+ </varlistentry>
- </variablelist>
- </listitem>
- </varlistentry>
-Index: pam/modules/pam_limits/limits.conf.5
-===================================================================
---- pam.orig/modules/pam_limits/limits.conf.5
-+++ pam/modules/pam_limits/limits.conf.5
-@@ -279,6 +279,11 @@
- .RS 4
- maximum realtime priority allowed for non\-privileged processes (Linux 2\&.6\&.12 and higher)
- .RE
-+.PP
-+\fBchroot\fR
-+.RS 4
-+the directory to chroot the user to
-+.RE
- .RE
- .PP
- All items support the values
-Index: pam/modules/pam_limits/limits.conf
-===================================================================
---- pam.orig/modules/pam_limits/limits.conf
-+++ pam/modules/pam_limits/limits.conf
-@@ -46,6 +46,7 @@
- # - msgqueue - max memory used by POSIX message queues (bytes)
- # - nice - max nice priority allowed to raise to values: [-20, 19]
- # - rtprio - max realtime priority
-+# - chroot - change root to directory (Debian-specific)
- #
- #<domain> <type> <item> <value>
- #
-@@ -56,6 +57,7 @@
- #@faculty soft nproc 20
- #@faculty hard nproc 50
- #ftp hard nproc 0
-+#ftp - chroot /ftp
- #@student - maxlogins 4
-
- # End of file
diff --git a/debian/patches/022_pam_unix_group_time_miscfixes b/debian/patches/022_pam_unix_group_time_miscfixes
new file mode 100644
index 00000000..1c8c3b67
--- /dev/null
+++ b/debian/patches/022_pam_unix_group_time_miscfixes
@@ -0,0 +1,28 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: handle the case of flags being empty or only PAM_SILENT, which is
+
+documented in other PAM implementations as meaning PAM_ESTABLISH_CRED:
+http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.basetechref%2Fdoc%2Fbasetrf1%2Fpam_setcred.htm
+---
+ modules/pam_group/pam_group.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/modules/pam_group/pam_group.c b/modules/pam_group/pam_group.c
+index 6877849..7d11f59 100644
+--- a/modules/pam_group/pam_group.c
++++ b/modules/pam_group/pam_group.c
+@@ -773,9 +773,12 @@ pam_sm_setcred (pam_handle_t *pamh, int flags,
+ unsigned setting;
+
+ /* only interested in establishing credentials */
++ /* PAM docs say that an empty flag is to be treated as PAM_ESTABLISH_CRED.
++ Some people just pass PAM_SILENT, so cope with it, too. */
+
+ setting = flags;
+- if (!(setting & (PAM_ESTABLISH_CRED | PAM_REINITIALIZE_CRED))) {
++ if (!(setting & (PAM_ESTABLISH_CRED | PAM_REINITIALIZE_CRED))
++ && (setting != 0) && (setting != PAM_SILENT)) {
+ D(("ignoring call - not for establishing credentials"));
+ return PAM_SUCCESS; /* don't fail because of this */
+ }
diff --git a/debian/patches/026_pam_unix_passwd_unknown_user b/debian/patches/026_pam_unix_passwd_unknown_user
new file mode 100644
index 00000000..45967e1d
--- /dev/null
+++ b/debian/patches/026_pam_unix_passwd_unknown_user
@@ -0,0 +1,38 @@
+From: Martin Schwenke <martin@meltin.net>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: distinguish between password manipulation failure and missing user.
+
+---
+ modules/pam_unix/passverify.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/modules/pam_unix/passverify.c b/modules/pam_unix/passverify.c
+index 81b10d8..7ff8bf0 100644
+--- a/modules/pam_unix/passverify.c
++++ b/modules/pam_unix/passverify.c
+@@ -804,7 +804,7 @@ PAMH_ARG_DECL(int unix_update_passwd,
+ struct passwd *tmpent = NULL;
+ struct stat st;
+ FILE *pwfile, *opwfile;
+- int err = 1;
++ int err = 1, found = 0;
+ int oldmask;
+ #ifdef WITH_SELINUX
+ char *prev_context_raw = NULL;
+@@ -875,6 +875,7 @@ PAMH_ARG_DECL(int unix_update_passwd,
+
+ tmpent->pw_passwd = assigned_passwd.charp;
+ err = 0;
++ found = 1;
+ }
+ if (putpwent(tmpent, pwfile)) {
+ D(("error writing entry to password file: %m"));
+@@ -917,7 +918,7 @@ done:
+ return PAM_SUCCESS;
+ } else {
+ unlink(PW_TMPFILE);
+- return PAM_AUTHTOK_ERR;
++ return found ? PAM_AUTHTOK_ERR : PAM_USER_UNKNOWN;
+ }
+ }
+
diff --git a/debian/patches-applied/027_pam_limits_better_init_allow_explicit_root b/debian/patches/027_pam_limits_better_init_allow_explicit_root
index c4603f5a..7d0fdded 100644
--- a/debian/patches-applied/027_pam_limits_better_init_allow_explicit_root
+++ b/debian/patches/027_pam_limits_better_init_allow_explicit_root
@@ -1,26 +1,122 @@
-Description: Allow explicit limits for root and reset limits on each session
- When crossing session boundaries (such as when su'ing from one user to
- another), if the target account has no limit specified in limits.conf we
- want to use the default, not the current value configured for the
- source account.
- .
- If /proc/1/limits is unavailable, fall back to a set of hard-coded values
- that shadow the currently known defaults on Linux.
- .
- Also, don't apply wildcard limits to the root account; only apply limits to
- root that reference root by name.
-Author: Peter Paluch <peterp@frcatel.fri.utc.sk>,
- Ben Collins <bcollins@debian.org>,
- Steve Langasek <vorlon@debian.org>,
+From: Peter Paluch <peterp@frcatel.fri.utc.sk>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: Allow explicit limits for root and reset limits on each session
+
Bug-Debian: http://bugs.debian.org/63230
-Index: pam/modules/pam_limits/pam_limits.c
+
+When crossing session boundaries (such as when su'ing from one user to
+another), if the target account has no limit specified in limits.conf we
+want to use the default, not the current value configured for the
+source account.
+
+If /proc/1/limits is unavailable, fall back to a set of hard-coded values
+that shadow the currently known defaults on Linux.
+
+Also, don't apply wildcard limits to the root account; only apply limits to
+root that reference root by name.
===================================================================
---- pam.orig/modules/pam_limits/pam_limits.c
-+++ pam/modules/pam_limits/pam_limits.c
-@@ -47,6 +47,14 @@
+---
+ modules/pam_limits/README | 1 +
+ modules/pam_limits/limits.conf | 4 ++
+ modules/pam_limits/limits.conf.5 | 5 ++
+ modules/pam_limits/limits.conf.5.xml | 6 +++
+ modules/pam_limits/pam_limits.c | 89 ++++++++++++++++++++++++++++++++----
+ 5 files changed, 96 insertions(+), 9 deletions(-)
+
+diff --git a/modules/pam_limits/README b/modules/pam_limits/README
+index 98264b9..dc560ef 100644
+--- a/modules/pam_limits/README
++++ b/modules/pam_limits/README
+@@ -68,6 +68,7 @@ These are some example lines which might be specified in /etc/security/
+ limits.conf.
+
+ * soft core 0
++root hard core 100000
+ * hard nofile 512
+ @student hard nproc 20
+ @faculty soft nproc 20
+diff --git a/modules/pam_limits/limits.conf b/modules/pam_limits/limits.conf
+index e8a746c..c6b058a 100644
+--- a/modules/pam_limits/limits.conf
++++ b/modules/pam_limits/limits.conf
+@@ -22,6 +22,9 @@
+ # - the wildcard *, for default entry
+ # - the wildcard %, can be also used with %group syntax,
+ # for maxlogin limit
++# - NOTE: group and wildcard limits are not applied to root.
++# To apply a limit to the root user, <domain> must be
++# the literal username root.
+ #
+ #<type> can have the two values:
+ # - "soft" for enforcing the soft limits
+@@ -51,6 +54,7 @@
+ #
+
+ #* soft core 0
++#root hard core 100000
+ #* hard rss 10000
+ #@student hard nproc 20
+ #@faculty soft nproc 20
+diff --git a/modules/pam_limits/limits.conf.5 b/modules/pam_limits/limits.conf.5
+index 25f4459..32c4b2f 100644
+--- a/modules/pam_limits/limits.conf.5
++++ b/modules/pam_limits/limits.conf.5
+@@ -145,6 +145,10 @@ a gid specified as
+ \fB%:\fR\fI<gid>\fR
+ applicable to maxlogins limit only\&. It limits the total number of logins of all users that are member of the group with the specified gid\&.
+ .RE
++.sp
++\fBNOTE:\fR
++group and wildcard limits are not applied to the root user\&. To set a limit for the root user, this field must contain the literal username
++\fBroot\fR\&.
+ .RE
+ .PP
+ <type>
+@@ -322,6 +326,7 @@ These are some example lines which might be specified in
+ .\}
+ .nf
+ * soft core 0
++root hard core 100000
+ * hard nofile 512
+ @student hard nproc 20
+ @faculty soft nproc 20
+diff --git a/modules/pam_limits/limits.conf.5.xml b/modules/pam_limits/limits.conf.5.xml
+index 2177da1..9f2662a 100644
+--- a/modules/pam_limits/limits.conf.5.xml
++++ b/modules/pam_limits/limits.conf.5.xml
+@@ -89,6 +89,11 @@
+ </para>
+ </listitem>
+ </itemizedlist>
++ <para>
++ <emphasis remap='B'>NOTE:</emphasis> group and wildcard limits are not
++ applied to the root user. To set a limit for the root user, this field
++ must contain the literal username <emphasis remap='B'>root</emphasis>.
++ </para>
+ </listitem>
+ </varlistentry>
+
+@@ -320,6 +325,7 @@
+ </para>
+ <programlisting>
+ * soft core 0
++root hard core 100000
+ * hard nofile 512
+ @student hard nproc 20
+ @faculty soft nproc 20
+diff --git a/modules/pam_limits/pam_limits.c b/modules/pam_limits/pam_limits.c
+index 87bb4b7..adda08b 100644
+--- a/modules/pam_limits/pam_limits.c
++++ b/modules/pam_limits/pam_limits.c
+@@ -47,10 +47,19 @@
#include <libaudit.h>
#endif
++
+ #ifndef PR_SET_NO_NEW_PRIVS
+ # define PR_SET_NO_NEW_PRIVS 38 /* from <linux/prctl.h> */
+ #endif
+
+#ifndef MLOCK_LIMIT
+#ifdef __FreeBSD_kernel__
+#define MLOCK_LIMIT RLIM_INFINITY
@@ -32,7 +128,7 @@ Index: pam/modules/pam_limits/pam_limits.c
/* Module defines */
#define LINE_LENGTH 1024
-@@ -84,6 +92,7 @@
+@@ -88,6 +97,7 @@ struct user_limits_struct {
/* internal data */
struct pam_limit_s {
@@ -40,7 +136,7 @@ Index: pam/modules/pam_limits/pam_limits.c
int login_limit; /* the max logins limit */
int login_limit_def; /* which entry set the login limit */
int flag_numsyslogins; /* whether to limit logins only for a
-@@ -447,9 +456,18 @@
+@@ -455,9 +465,18 @@ static int init_limits(pam_handle_t *pamh, struct pam_limit_s *pl, int ctrl)
{
int i;
int retval = PAM_SUCCESS;
@@ -59,7 +155,7 @@ Index: pam/modules/pam_limits/pam_limits.c
for(i = 0; i < RLIM_NLIMITS; i++) {
int r = getrlimit(i, &pl->limits[i].limit);
if (r == -1) {
-@@ -465,18 +483,68 @@
+@@ -473,18 +492,68 @@ static int init_limits(pam_handle_t *pamh, struct pam_limit_s *pl, int ctrl)
}
#ifdef __linux__
@@ -134,7 +230,7 @@ Index: pam/modules/pam_limits/pam_limits.c
errno = 0;
pl->priority = getpriority (PRIO_PROCESS, 0);
-@@ -881,7 +949,7 @@
+@@ -885,7 +954,7 @@ parse_config_file(pam_handle_t *pamh, const char *uname, uid_t uid, gid_t gid,
if (strcmp(uname, domain) == 0) /* this user have a limit */
process_limit(pamh, LIMITS_DEF_USER, ltype, item, value, ctrl, pl);
@@ -143,7 +239,7 @@ Index: pam/modules/pam_limits/pam_limits.c
if (ctrl & PAM_DEBUG_ARG) {
pam_syslog(pamh, LOG_DEBUG,
"checking if %s is in group %s",
-@@ -907,7 +975,7 @@
+@@ -911,7 +980,7 @@ parse_config_file(pam_handle_t *pamh, const char *uname, uid_t uid, gid_t gid,
process_limit(pamh, LIMITS_DEF_GROUP, ltype, item, value, ctrl,
pl);
}
@@ -152,7 +248,7 @@ Index: pam/modules/pam_limits/pam_limits.c
if (ctrl & PAM_DEBUG_ARG) {
pam_syslog(pamh, LOG_DEBUG,
"checking if %s is in group %s",
-@@ -941,7 +1009,7 @@
+@@ -945,7 +1014,7 @@ parse_config_file(pam_handle_t *pamh, const char *uname, uid_t uid, gid_t gid,
} else {
switch(rngtype) {
case LIMIT_RANGE_NONE:
@@ -161,93 +257,12 @@ Index: pam/modules/pam_limits/pam_limits.c
process_limit(pamh, LIMITS_DEF_DEFAULT, ltype, item, value, ctrl,
pl);
break;
-@@ -1134,6 +1202,8 @@
+@@ -1228,6 +1297,8 @@ pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED,
return PAM_ABORT;
}
+ if (pwd->pw_uid == 0)
+ pl->root = 1;
- retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid, ctrl, pl);
+ retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid,
+ ctrl, pl, conf_file_set_by_user);
if (retval == PAM_IGNORE) {
- D(("the configuration file ('%s') has an applicable '<domain> -' entry", CONF_FILE));
-Index: pam/modules/pam_limits/limits.conf
-===================================================================
---- pam.orig/modules/pam_limits/limits.conf
-+++ pam/modules/pam_limits/limits.conf
-@@ -22,6 +22,9 @@
- # - the wildcard *, for default entry
- # - the wildcard %, can be also used with %group syntax,
- # for maxlogin limit
-+# - NOTE: group and wildcard limits are not applied to root.
-+# To apply a limit to the root user, <domain> must be
-+# the literal username root.
- #
- #<type> can have the two values:
- # - "soft" for enforcing the soft limits
-@@ -52,6 +55,7 @@
- #
-
- #* soft core 0
-+#root hard core 100000
- #* hard rss 10000
- #@student hard nproc 20
- #@faculty soft nproc 20
-Index: pam/modules/pam_limits/limits.conf.5.xml
-===================================================================
---- pam.orig/modules/pam_limits/limits.conf.5.xml
-+++ pam/modules/pam_limits/limits.conf.5.xml
-@@ -96,6 +96,11 @@
- </para>
- </listitem>
- </itemizedlist>
-+ <para>
-+ <emphasis remap='B'>NOTE:</emphasis> group and wildcard limits are not
-+ applied to the root user. To set a limit for the root user, this field
-+ must contain the literal username <emphasis remap='B'>root</emphasis>.
-+ </para>
- </listitem>
- </varlistentry>
-
-@@ -333,6 +338,7 @@
- </para>
- <programlisting>
- * soft core 0
-+root hard core 100000
- * hard nofile 512
- @student hard nproc 20
- @faculty soft nproc 20
-Index: pam/modules/pam_limits/limits.conf.5
-===================================================================
---- pam.orig/modules/pam_limits/limits.conf.5
-+++ pam/modules/pam_limits/limits.conf.5
-@@ -145,6 +145,10 @@
- \fB%:\fR\fI<gid>\fR
- applicable to maxlogins limit only\&. It limits the total number of logins of all users that are member of the group with the specified gid\&.
- .RE
-+.sp
-+\fBNOTE:\fR
-+group and wildcard limits are not applied to the root user\&. To set a limit for the root user, this field must contain the literal username
-+\fBroot\fR\&.
- .RE
- .PP
- \fB<type>\fR
-@@ -327,6 +331,7 @@
- .\}
- .nf
- * soft core 0
-+root hard core 100000
- * hard nofile 512
- @student hard nproc 20
- @faculty soft nproc 20
-Index: pam/modules/pam_limits/README
-===================================================================
---- pam.orig/modules/pam_limits/README
-+++ pam/modules/pam_limits/README
-@@ -56,6 +56,7 @@
- limits.conf.
-
- * soft core 0
-+root hard core 100000
- * hard nofile 512
- @student hard nproc 20
- @faculty soft nproc 20
diff --git a/debian/patches-applied/031_pam_include b/debian/patches/031_pam_include
index 16cf6d31..5b632e2a 100644
--- a/debian/patches-applied/031_pam_include
+++ b/debian/patches/031_pam_include
@@ -1,14 +1,21 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: _pam_include
+
Patch to implement an @include directive for use in pam.d config files.
Authors: Jan Christoph Nordholz <hesso@pool.math.tu-berlin.de>
Upstream status: not yet submitted
+---
+ libpam/pam_handlers.c | 36 ++++++++++++++++++++++++++++++++----
+ 1 file changed, 32 insertions(+), 4 deletions(-)
-Index: pam/libpam/pam_handlers.c
-===================================================================
---- pam.orig/libpam/pam_handlers.c
-+++ pam/libpam/pam_handlers.c
-@@ -123,6 +123,10 @@
+diff --git a/libpam/pam_handlers.c b/libpam/pam_handlers.c
+index 1f1917b..c7045d2 100644
+--- a/libpam/pam_handlers.c
++++ b/libpam/pam_handlers.c
+@@ -123,6 +123,10 @@ static int _pam_parse_conf_file(pam_handle_t *pamh, FILE *f
module_type = PAM_T_ACCT;
} else if (!strcasecmp("password", tok)) {
module_type = PAM_T_PASS;
@@ -19,7 +26,7 @@ Index: pam/libpam/pam_handlers.c
} else {
/* Illegal module type */
D(("_pam_init_handlers: bad module type: %s", tok));
-@@ -193,8 +197,10 @@
+@@ -193,8 +197,10 @@ static int _pam_parse_conf_file(pam_handle_t *pamh, FILE *f
_pam_set_default_control(actions, _PAM_ACTION_BAD);
}
@@ -30,7 +37,7 @@ Index: pam/libpam/pam_handlers.c
if (substack) {
res = _pam_add_handler(pamh, PAM_HT_SUBSTACK, other,
stack_level, module_type, actions, tok,
-@@ -205,13 +211,35 @@
+@@ -205,13 +211,35 @@ static int _pam_parse_conf_file(pam_handle_t *pamh, FILE *f
return PAM_ABORT;
}
}
diff --git a/debian/patches-applied/032_pam_limits_EPERM_NOT_FATAL b/debian/patches/032_pam_limits_EPERM_NOT_FATAL
index ec97b441..62656746 100644
--- a/debian/patches-applied/032_pam_limits_EPERM_NOT_FATAL
+++ b/debian/patches/032_pam_limits_EPERM_NOT_FATAL
@@ -1,3 +1,7 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: _pam_limits_EPERM_NOT_FATAL
+
setrlimit will sometimes return EPERM for example if you try to increase the
number of open files too much. This is not something we want to consider
fatal. This also happens if you use non-root and try to decrease a limit.
@@ -6,12 +10,15 @@ Running PAM as non-root is not so great.
Authors: ?
Upstream status: submitted in <20070830171918.GB30563@dario.dodds.net>
+---
+ modules/pam_limits/pam_limits.c | 2 ++
+ 1 file changed, 2 insertions(+)
-Index: pam/modules/pam_limits/pam_limits.c
-===================================================================
---- pam.orig/modules/pam_limits/pam_limits.c
-+++ pam/modules/pam_limits/pam_limits.c
-@@ -1111,6 +1111,8 @@
+diff --git a/modules/pam_limits/pam_limits.c b/modules/pam_limits/pam_limits.c
+index a58d424..746c441 100644
+--- a/modules/pam_limits/pam_limits.c
++++ b/modules/pam_limits/pam_limits.c
+@@ -1124,6 +1124,8 @@ static int setup_limits(pam_handle_t *pamh,
if (res != 0)
pam_syslog(pamh, LOG_ERR, "Could not set limit for '%s': %m",
rlimit2str(i));
diff --git a/debian/patches-applied/036_pam_wheel_getlogin_considered_harmful b/debian/patches/036_pam_wheel_getlogin_considered_harmful
index 805c62f4..43979153 100644
--- a/debian/patches-applied/036_pam_wheel_getlogin_considered_harmful
+++ b/debian/patches/036_pam_wheel_getlogin_considered_harmful
@@ -1,3 +1,7 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: _pam_wheel_getlogin_considered_harmful
+
Patch for Debian bug #163787 et al
Always use the process uid, not getlogin(), to identify an applicant in
@@ -7,11 +11,73 @@ an xterm
Authors: Ben Collins <bcollins@debian.org>
Upstream status: submitted in <20070901175405.GA26092@dario.dodds.net>
+---
+ modules/pam_wheel/README | 6 ------
+ modules/pam_wheel/pam_wheel.8.xml | 17 +--------------
+ modules/pam_wheel/pam_wheel.c | 45 ++++++++-------------------------------
+ 3 files changed, 10 insertions(+), 58 deletions(-)
-Index: pam/modules/pam_wheel/pam_wheel.c
-===================================================================
---- pam.orig/modules/pam_wheel/pam_wheel.c
-+++ pam/modules/pam_wheel/pam_wheel.c
+diff --git a/modules/pam_wheel/README b/modules/pam_wheel/README
+index 5dae4b6..ec9e7d7 100644
+--- a/modules/pam_wheel/README
++++ b/modules/pam_wheel/README
+@@ -39,12 +39,6 @@ trust
+ modules the wheel members may be able to su to root without being prompted
+ for a passwd).
+
+-use_uid
+-
+- The check will be done against the real uid of the calling process, instead
+- of trying to obtain the user from the login session associated with the
+- terminal in use.
+-
+ EXAMPLES
+
+ The root account gains access by default (rootok), only wheel members can
+diff --git a/modules/pam_wheel/pam_wheel.8.xml b/modules/pam_wheel/pam_wheel.8.xml
+index af0fd61..b42e27d 100644
+--- a/modules/pam_wheel/pam_wheel.8.xml
++++ b/modules/pam_wheel/pam_wheel.8.xml
+@@ -30,9 +30,6 @@
+ <arg choice="opt" rep="norepeat">
+ trust
+ </arg>
+- <arg choice="opt" rep="norepeat">
+- use_uid
+- </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+@@ -113,18 +110,6 @@
+ </para>
+ </listitem>
+ </varlistentry>
+- <varlistentry>
+- <term>
+- use_uid
+- </term>
+- <listitem>
+- <para>
+- The check will be done against the real uid of the calling process,
+- instead of trying to obtain the user from the login session
+- associated with the terminal in use.
+- </para>
+- </listitem>
+- </varlistentry>
+ </variablelist>
+ </refsect1>
+
+@@ -237,4 +222,4 @@ su auth required pam_unix.so
+ </para>
+ </refsect1>
+
+-</refentry>
+\ No newline at end of file
++</refentry>
+diff --git a/modules/pam_wheel/pam_wheel.c b/modules/pam_wheel/pam_wheel.c
+index 179f56b..5eb7b82 100644
+--- a/modules/pam_wheel/pam_wheel.c
++++ b/modules/pam_wheel/pam_wheel.c
@@ -47,9 +47,8 @@
/* argument parsing */
@@ -24,7 +90,7 @@ Index: pam/modules/pam_wheel/pam_wheel.c
#define PAM_ROOT_ONLY_ARG 0x0020
static int
-@@ -68,8 +67,7 @@
+@@ -68,8 +67,7 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv,
if (!strcmp(*argv,"debug"))
ctrl |= PAM_DEBUG_ARG;
@@ -34,7 +100,7 @@ Index: pam/modules/pam_wheel/pam_wheel.c
else if (!strcmp(*argv,"trust"))
ctrl |= PAM_TRUST_ARG;
else if (!strcmp(*argv,"deny"))
-@@ -118,39 +116,14 @@
+@@ -118,39 +116,14 @@ perform_check (pam_handle_t *pamh, int ctrl, const char *use_group)
}
}
@@ -80,78 +146,3 @@ Index: pam/modules/pam_wheel/pam_wheel.c
/*
* At this point fromsu = username-of-invoker; tpwd = pwd ptr for fromsu
-Index: pam/modules/pam_wheel/pam_wheel.8.xml
-===================================================================
---- pam.orig/modules/pam_wheel/pam_wheel.8.xml
-+++ pam/modules/pam_wheel/pam_wheel.8.xml
-@@ -33,9 +33,6 @@
- <arg choice="opt">
- trust
- </arg>
-- <arg choice="opt">
-- use_uid
-- </arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
-@@ -116,18 +113,6 @@
- </para>
- </listitem>
- </varlistentry>
-- <varlistentry>
-- <term>
-- <option>use_uid</option>
-- </term>
-- <listitem>
-- <para>
-- The check will be done against the real uid of the calling process,
-- instead of trying to obtain the user from the login session
-- associated with the terminal in use.
-- </para>
-- </listitem>
-- </varlistentry>
- </variablelist>
- </refsect1>
-
-Index: pam/modules/pam_wheel/pam_wheel.8
-===================================================================
---- pam.orig/modules/pam_wheel/pam_wheel.8
-+++ pam/modules/pam_wheel/pam_wheel.8
-@@ -31,7 +31,7 @@
- pam_wheel \- Only permit root access to members of group wheel
- .SH "SYNOPSIS"
- .HP \w'\fBpam_wheel\&.so\fR\ 'u
--\fBpam_wheel\&.so\fR [debug] [deny] [group=\fIname\fR] [root_only] [trust] [use_uid]
-+\fBpam_wheel\&.so\fR [debug] [deny] [group=\fIname\fR] [root_only] [trust]
- .SH "DESCRIPTION"
- .PP
- The pam_wheel PAM module is used to enforce the so\-called
-@@ -72,11 +72,6 @@
- .RS 4
- The pam_wheel module will return PAM_SUCCESS instead of PAM_IGNORE if the user is a member of the wheel group (thus with a little play stacking the modules the wheel members may be able to su to root without being prompted for a passwd)\&.
- .RE
--.PP
--\fBuse_uid\fR
--.RS 4
--The check will be done against the real uid of the calling process, instead of trying to obtain the user from the login session associated with the terminal in use\&.
--.RE
- .SH "MODULE TYPES PROVIDED"
- .PP
- The
-Index: pam/modules/pam_wheel/README
-===================================================================
---- pam.orig/modules/pam_wheel/README
-+++ pam/modules/pam_wheel/README
-@@ -39,12 +39,6 @@
- modules the wheel members may be able to su to root without being prompted
- for a passwd).
-
--use_uid
--
-- The check will be done against the real uid of the calling process, instead
-- of trying to obtain the user from the login session associated with the
-- terminal in use.
--
- EXAMPLES
-
- The root account gains access by default (rootok), only wheel members can
diff --git a/debian/patches-applied/040_pam_limits_log_failure b/debian/patches/040_pam_limits_log_failure
index 0ef703bf..acb79450 100644
--- a/debian/patches-applied/040_pam_limits_log_failure
+++ b/debian/patches/040_pam_limits_log_failure
@@ -1,3 +1,7 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: _pam_limits_log_failure
+
Patch for Debian bug #180310
Generate some (low-severity) log information whenever setrlimit() fails,
@@ -6,12 +10,15 @@ for debugging purposes.
Authors: Sam Hartman <hartmans@debian.org>
Upstream status: submitted in <20070830171918.GB30563@dario.dodds.net>
+---
+ modules/pam_limits/pam_limits.c | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
-Index: pam/modules/pam_limits/pam_limits.c
-===================================================================
---- pam.orig/modules/pam_limits/pam_limits.c
-+++ pam/modules/pam_limits/pam_limits.c
-@@ -1108,9 +1108,19 @@
+diff --git a/modules/pam_limits/pam_limits.c b/modules/pam_limits/pam_limits.c
+index 529d2fc..da83b70 100644
+--- a/modules/pam_limits/pam_limits.c
++++ b/modules/pam_limits/pam_limits.c
+@@ -1131,9 +1131,19 @@ static int setup_limits(pam_handle_t *pamh,
if (pl->limits[i].limit.rlim_cur > pl->limits[i].limit.rlim_max)
pl->limits[i].limit.rlim_cur = pl->limits[i].limit.rlim_max;
res = setrlimit(i, &pl->limits[i].limit);
diff --git a/debian/patches-applied/045_pam_dispatch_jump_is_ignore b/debian/patches/045_pam_dispatch_jump_is_ignore
index e19a5456..af08a9e4 100644
--- a/debian/patches-applied/045_pam_dispatch_jump_is_ignore
+++ b/debian/patches/045_pam_dispatch_jump_is_ignore
@@ -1,14 +1,20 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: _pam_dispatch_jump_is_ignore
Previously jumps were treated as PAM_IGNORE in the freezing part of
the chain and PAM_OK (aka required) in the frozen part of the chain.
No one on pam-list was able to explain this behavior, so I changed it
to be consistent.
+---
+ libpam/pam_dispatch.c | 17 +----------------
+ 1 file changed, 1 insertion(+), 16 deletions(-)
-Index: pam/libpam/pam_dispatch.c
-===================================================================
---- pam.orig/libpam/pam_dispatch.c
-+++ pam/libpam/pam_dispatch.c
-@@ -260,22 +260,7 @@
+diff --git a/libpam/pam_dispatch.c b/libpam/pam_dispatch.c
+index 974104a..15cad01 100644
+--- a/libpam/pam_dispatch.c
++++ b/libpam/pam_dispatch.c
+@@ -260,22 +260,7 @@ static int _pam_dispatch_aux(pam_handle_t *pamh, int flags, struct handler *h,
if ( _PAM_ACTION_IS_JUMP(action) ) {
/* If we are evaluating a cached chain, we treat this
diff --git a/debian/patches/PAM-manpage-section b/debian/patches/PAM-manpage-section
new file mode 100644
index 00000000..0c2f40be
--- /dev/null
+++ b/debian/patches/PAM-manpage-section
@@ -0,0 +1,2286 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: PAM-manpage-section
+
+Patch to put the PAM manpage in section 7 (general topics) instead of 8
+(system administration commands)
+
+Authors: Steve Langasek <vorlon@debian.org>
+
+Upstream status: maybe provide a backwards-compatibility link first?
+---
+ doc/man/Makefile.am | 5 +-
+ doc/man/Makefile.in | 58 +++++-----
+ doc/man/PAM.7 | 138 ++++++++++++++++++++++++
+ doc/man/misc_conv.3 | 2 +-
+ doc/man/misc_conv.3.xml | 2 +-
+ doc/man/pam.7 | 1 +
+ doc/man/pam.8.xml | 2 +-
+ doc/man/pam_acct_mgmt.3 | 2 +-
+ doc/man/pam_acct_mgmt.3.xml | 2 +-
+ doc/man/pam_authenticate.3 | 2 +-
+ doc/man/pam_authenticate.3.xml | 2 +-
+ doc/man/pam_chauthtok.3 | 2 +-
+ doc/man/pam_chauthtok.3.xml | 2 +-
+ doc/man/pam_conv.3 | 2 +-
+ doc/man/pam_conv.3.xml | 2 +-
+ doc/man/pam_error.3 | 2 +-
+ doc/man/pam_error.3.xml | 2 +-
+ doc/man/pam_get_authtok.3 | 2 +-
+ doc/man/pam_get_authtok.3.xml | 2 +-
+ doc/man/pam_get_item.3 | 4 +-
+ doc/man/pam_getenv.3 | 2 +-
+ doc/man/pam_getenv.3.xml | 2 +-
+ doc/man/pam_getenvlist.3 | 2 +-
+ doc/man/pam_getenvlist.3.xml | 2 +-
+ doc/man/pam_info.3 | 2 +-
+ doc/man/pam_info.3.xml | 2 +-
+ doc/man/pam_misc_drop_env.3 | 2 +-
+ doc/man/pam_misc_drop_env.3.xml | 2 +-
+ doc/man/pam_misc_paste_env.3 | 2 +-
+ doc/man/pam_misc_paste_env.3.xml | 2 +-
+ doc/man/pam_misc_setenv.3 | 2 +-
+ doc/man/pam_misc_setenv.3.xml | 2 +-
+ doc/man/pam_prompt.3 | 6 +-
+ doc/man/pam_prompt.3.xml | 2 +-
+ doc/man/pam_putenv.3 | 2 +-
+ doc/man/pam_putenv.3.xml | 2 +-
+ doc/man/pam_strerror.3 | 2 +-
+ doc/man/pam_strerror.3.xml | 2 +-
+ doc/man/pam_syslog.3 | 2 +-
+ doc/man/pam_syslog.3.xml | 2 +-
+ modules/pam_access/access.conf.5 | 2 +-
+ modules/pam_access/access.conf.5.xml | 2 +-
+ modules/pam_access/pam_access.8 | 2 +-
+ modules/pam_access/pam_access.8.xml | 2 +-
+ modules/pam_debug/pam_debug.8 | 2 +-
+ modules/pam_debug/pam_debug.8.xml | 2 +-
+ modules/pam_deny/pam_deny.8 | 2 +-
+ modules/pam_deny/pam_deny.8.xml | 2 +-
+ modules/pam_echo/pam_echo.8 | 2 +-
+ modules/pam_echo/pam_echo.8.xml | 2 +-
+ modules/pam_env/pam_env.8 | 6 +-
+ modules/pam_env/pam_env.8.xml | 2 +-
+ modules/pam_env/pam_env.conf.5 | 2 +-
+ modules/pam_env/pam_env.conf.5.xml | 2 +-
+ modules/pam_exec/pam_exec.8 | 2 +-
+ modules/pam_exec/pam_exec.8.xml | 2 +-
+ modules/pam_faildelay/pam_faildelay.8 | 2 +-
+ modules/pam_faildelay/pam_faildelay.8.xml | 2 +-
+ modules/pam_filter/pam_filter.8 | 2 +-
+ modules/pam_filter/pam_filter.8.xml | 2 +-
+ modules/pam_ftp/pam_ftp.8 | 2 +-
+ modules/pam_ftp/pam_ftp.8.xml | 2 +-
+ modules/pam_group/group.conf.5 | 2 +-
+ modules/pam_group/group.conf.5.xml | 2 +-
+ modules/pam_group/pam_group.8 | 2 +-
+ modules/pam_group/pam_group.8.xml | 2 +-
+ modules/pam_issue/pam_issue.8 | 2 +-
+ modules/pam_issue/pam_issue.8.xml | 2 +-
+ modules/pam_keyinit/pam_keyinit.8 | 2 +-
+ modules/pam_keyinit/pam_keyinit.8.xml | 2 +-
+ modules/pam_lastlog/pam_lastlog.8 | 2 +-
+ modules/pam_lastlog/pam_lastlog.8.xml | 2 +-
+ modules/pam_limits/limits.conf.5 | 2 +-
+ modules/pam_limits/limits.conf.5.xml | 2 +-
+ modules/pam_limits/pam_limits.8 | 2 +-
+ modules/pam_limits/pam_limits.8.xml | 2 +-
+ modules/pam_listfile/pam_listfile.8 | 2 +-
+ modules/pam_listfile/pam_listfile.8.xml | 2 +-
+ modules/pam_localuser/pam_localuser.8 | 2 +-
+ modules/pam_localuser/pam_localuser.8.xml | 2 +-
+ modules/pam_loginuid/pam_loginuid.8 | 2 +-
+ modules/pam_loginuid/pam_loginuid.8.xml | 2 +-
+ modules/pam_mail/pam_mail.8 | 2 +-
+ modules/pam_mail/pam_mail.8.xml | 2 +-
+ modules/pam_mkhomedir/pam_mkhomedir.8 | 2 +-
+ modules/pam_mkhomedir/pam_mkhomedir.8.xml | 2 +-
+ modules/pam_motd/pam_motd.8 | 2 +-
+ modules/pam_motd/pam_motd.8.xml | 2 +-
+ modules/pam_namespace/namespace.conf.5 | 2 +-
+ modules/pam_namespace/namespace.conf.5.xml | 2 +-
+ modules/pam_namespace/pam_namespace.8 | 2 +-
+ modules/pam_namespace/pam_namespace.8.xml | 2 +-
+ modules/pam_nologin/pam_nologin.8 | 2 +-
+ modules/pam_nologin/pam_nologin.8.xml | 2 +-
+ modules/pam_permit/pam_permit.8 | 2 +-
+ modules/pam_permit/pam_permit.8.xml | 2 +-
+ modules/pam_pwhistory/pam_pwhistory.8 | 2 +-
+ modules/pam_pwhistory/pam_pwhistory.8.xml | 2 +-
+ modules/pam_rhosts/pam_rhosts.8 | 2 +-
+ modules/pam_rhosts/pam_rhosts.8.xml | 2 +-
+ modules/pam_rootok/pam_rootok.8 | 2 +-
+ modules/pam_rootok/pam_rootok.8.xml | 2 +-
+ modules/pam_securetty/pam_securetty.8 | 2 +-
+ modules/pam_securetty/pam_securetty.8.xml | 2 +-
+ modules/pam_selinux/pam_selinux.8 | 6 +-
+ modules/pam_selinux/pam_selinux.8.xml | 2 +-
+ modules/pam_sepermit/pam_sepermit.8 | 2 +-
+ modules/pam_sepermit/pam_sepermit.8.xml | 2 +-
+ modules/pam_sepermit/sepermit.conf.5 | 2 +-
+ modules/pam_sepermit/sepermit.conf.5.xml | 2 +-
+ modules/pam_shells/pam_shells.8 | 2 +-
+ modules/pam_shells/pam_shells.8.xml | 2 +-
+ modules/pam_succeed_if/pam_succeed_if.8 | 2 +-
+ modules/pam_succeed_if/pam_succeed_if.8.xml | 2 +-
+ modules/pam_time/pam_time.8 | 2 +-
+ modules/pam_time/pam_time.8.xml | 2 +-
+ modules/pam_time/time.conf.5 | 2 +-
+ modules/pam_time/time.conf.5.xml | 2 +-
+ modules/pam_timestamp/pam_timestamp.8 | 2 +-
+ modules/pam_timestamp/pam_timestamp.8.xml | 2 +-
+ modules/pam_timestamp/pam_timestamp_check.8 | 2 +-
+ modules/pam_timestamp/pam_timestamp_check.8.xml | 2 +-
+ modules/pam_tty_audit/pam_tty_audit.8 | 2 +-
+ modules/pam_tty_audit/pam_tty_audit.8.xml | 2 +-
+ modules/pam_umask/pam_umask.8 | 2 +-
+ modules/pam_umask/pam_umask.8.xml | 2 +-
+ modules/pam_unix/pam_unix.8 | 2 +-
+ modules/pam_unix/pam_unix.8.xml | 2 +-
+ modules/pam_userdb/pam_userdb.8 | 2 +-
+ modules/pam_userdb/pam_userdb.8.xml | 2 +-
+ modules/pam_warn/pam_warn.8 | 2 +-
+ modules/pam_warn/pam_warn.8.xml | 2 +-
+ modules/pam_wheel/pam_wheel.8 | 13 +--
+ modules/pam_wheel/pam_wheel.8.xml | 2 +-
+ modules/pam_xauth/pam_xauth.8 | 2 +-
+ modules/pam_xauth/pam_xauth.8.xml | 2 +-
+ 136 files changed, 315 insertions(+), 176 deletions(-)
+ create mode 100644 doc/man/PAM.7
+ create mode 100644 doc/man/pam.7
+
+diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am
+index aec365c..b81ca72 100644
+--- a/doc/man/Makefile.am
++++ b/doc/man/Makefile.am
+@@ -7,7 +7,7 @@ MAINTAINERCLEANFILES = $(MANS)
+
+ EXTRA_DIST = $(MANS) $(XMLS)
+
+-man_MANS = pam.3 PAM.8 pam.8 pam.conf.5 pam.d.5 \
++man_MANS = pam.3 PAM.7 pam.7 pam.conf.5 pam.d.5 \
+ pam_acct_mgmt.3 pam_authenticate.3 \
+ pam_chauthtok.3 pam_close_session.3 pam_conv.3 \
+ pam_end.3 pam_error.3 \
+@@ -46,7 +46,8 @@ XMLS = pam.3.xml pam.8.xml pam.conf.5.xml \
+
+
+ if ENABLE_REGENERATE_MAN
+-PAM.8: pam.8
++pam.8: pam.8.xml
++PAM.7 pam.7: pam.8
+ pam_get_authtok_noverify.3: pam_get_authtok.3
+ pam_get_authtok_verify.3: pam_get_authtok.3
+ pam_verror.3: pam_error.3
+diff --git a/doc/man/Makefile.in b/doc/man/Makefile.in
+index d18dc7d..30da4d0 100644
+--- a/doc/man/Makefile.in
++++ b/doc/man/Makefile.in
+@@ -1,7 +1,7 @@
+-# Makefile.in generated by automake 1.16.3 from Makefile.am.
++# Makefile.in generated by automake 1.16.5 from Makefile.am.
+ # @configure_input@
+
+-# Copyright (C) 1994-2020 Free Software Foundation, Inc.
++# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -163,9 +163,9 @@ am__uninstall_files_from_dir = { \
+ }
+ man3dir = $(mandir)/man3
+ am__installdirs = "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" \
+- "$(DESTDIR)$(man8dir)"
++ "$(DESTDIR)$(man7dir)"
+ man5dir = $(mandir)/man5
+-man8dir = $(mandir)/man8
++man7dir = $(mandir)/man7
+ NROFF = nroff
+ MANS = $(man_MANS)
+ am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+@@ -192,6 +192,8 @@ CPPFLAGS = @CPPFLAGS@
+ CRYPTO_LIBS = @CRYPTO_LIBS@
+ CRYPT_CFLAGS = @CRYPT_CFLAGS@
+ CRYPT_LIBS = @CRYPT_LIBS@
++CSCOPE = @CSCOPE@
++CTAGS = @CTAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -205,6 +207,7 @@ ECHO_T = @ECHO_T@
+ ECONF_CFLAGS = @ECONF_CFLAGS@
+ ECONF_LIBS = @ECONF_LIBS@
+ EGREP = @EGREP@
++ETAGS = @ETAGS@
+ EXEEXT = @EXEEXT@
+ EXE_CFLAGS = @EXE_CFLAGS@
+ EXE_LDFLAGS = @EXE_LDFLAGS@
+@@ -354,6 +357,7 @@ pdfdir = @pdfdir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ psdir = @psdir@
++runstatedir = @runstatedir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ srcdir = @srcdir@
+@@ -366,7 +370,7 @@ top_srcdir = @top_srcdir@
+ CLEANFILES = *~
+ MAINTAINERCLEANFILES = $(MANS)
+ EXTRA_DIST = $(MANS) $(XMLS)
+-man_MANS = pam.3 PAM.8 pam.8 pam.conf.5 pam.d.5 \
++man_MANS = pam.3 PAM.7 pam.7 pam.conf.5 pam.d.5 \
+ pam_acct_mgmt.3 pam_authenticate.3 \
+ pam_chauthtok.3 pam_close_session.3 pam_conv.3 \
+ pam_end.3 pam_error.3 \
+@@ -528,56 +532,55 @@ uninstall-man5:
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+-install-man8: $(man_MANS)
++install-man7: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+- test -n "$(man8dir)" \
++ test -n "$(man7dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+- echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+- $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
++ echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \
++ $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+- | sed -n '/\.8[a-z]*$$/p'; \
++ | sed -n '/\.7[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+- sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
++ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+- echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+- $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
++ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \
++ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+- $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
++ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \
++ $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \
+ done; }
+
+-uninstall-man8:
++uninstall-man7:
+ @$(NORMAL_UNINSTALL)
+- @list=''; test -n "$(man8dir)" || exit 0; \
++ @list=''; test -n "$(man7dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+- sed -n '/\.8[a-z]*$$/p'; \
+- } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
++ sed -n '/\.7[a-z]*$$/p'; \
++ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+- dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
++ dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir)
+ tags TAGS:
+
+ ctags CTAGS:
+
+ cscope cscopelist:
+
+-
+ distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+@@ -615,7 +618,7 @@ check-am: all-am
+ check: check-am
+ all-am: Makefile $(MANS)
+ installdirs:
+- for dir in "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
++ for dir in "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+ install: install-am
+@@ -686,7 +689,7 @@ install-info: install-info-am
+
+ install-info-am:
+
+-install-man: install-man3 install-man5 install-man8
++install-man: install-man3 install-man5 install-man7
+
+ install-pdf: install-pdf-am
+
+@@ -716,7 +719,7 @@ ps-am:
+
+ uninstall-am: uninstall-man
+
+-uninstall-man: uninstall-man3 uninstall-man5 uninstall-man8
++uninstall-man: uninstall-man3 uninstall-man5 uninstall-man7
+
+ .MAKE: install-am install-strip
+
+@@ -726,18 +729,19 @@ uninstall-man: uninstall-man3 uninstall-man5 uninstall-man8
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+- install-man3 install-man5 install-man8 install-pdf \
++ install-man3 install-man5 install-man7 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man3 uninstall-man5 \
+- uninstall-man8
++ uninstall-man7
+
+ .PRECIOUS: Makefile
+
+
+-@ENABLE_REGENERATE_MAN_TRUE@PAM.8: pam.8
++@ENABLE_REGENERATE_MAN_TRUE@pam.8: pam.8.xml
++@ENABLE_REGENERATE_MAN_TRUE@PAM.7 pam.7: pam.8
+ @ENABLE_REGENERATE_MAN_TRUE@pam_get_authtok_noverify.3: pam_get_authtok.3
+ @ENABLE_REGENERATE_MAN_TRUE@pam_get_authtok_verify.3: pam_get_authtok.3
+ @ENABLE_REGENERATE_MAN_TRUE@pam_verror.3: pam_error.3
+diff --git a/doc/man/PAM.7 b/doc/man/PAM.7
+new file mode 100644
+index 0000000..00b313f
+--- /dev/null
++++ b/doc/man/PAM.7
+@@ -0,0 +1,138 @@
++'\" t
++.\" Title: pam
++.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
++.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
++.\" Date: 09/15/2023
++.\" Manual: Linux-PAM Manual
++.\" Source: Linux-PAM
++.\" Language: English
++.\"
++.TH "PAM" "7" "09/15/2023" "Linux\-PAM" "Linux\-PAM Manual"
++.\" -----------------------------------------------------------------
++.\" * Define some portability stuff
++.\" -----------------------------------------------------------------
++.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++.\" http://bugs.debian.org/507673
++.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
++.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++.ie \n(.g .ds Aq \(aq
++.el .ds Aq '
++.\" -----------------------------------------------------------------
++.\" * set default formatting
++.\" -----------------------------------------------------------------
++.\" disable hyphenation
++.nh
++.\" disable justification (adjust text to left margin only)
++.ad l
++.\" -----------------------------------------------------------------
++.\" * MAIN CONTENT STARTS HERE *
++.\" -----------------------------------------------------------------
++.SH "NAME"
++PAM, pam \- Pluggable Authentication Modules for Linux
++.SH "DESCRIPTION"
++.PP
++This manual is intended to offer a quick introduction to
++\fBLinux\-PAM\fR\&. For more information the reader is directed to the
++\fBLinux\-PAM system administrators\*(Aq guide\fR\&.
++.PP
++\fBLinux\-PAM\fR
++is a system of libraries that handle the authentication tasks of applications (services) on the system\&. The library provides a stable general interface (Application Programming Interface \- API) that privilege granting programs (such as
++\fBlogin\fR(1)
++and
++\fBsu\fR(1)) defer to to perform standard authentication tasks\&.
++.PP
++The principal feature of the PAM approach is that the nature of the authentication is dynamically configurable\&. In other words, the system administrator is free to choose how individual service\-providing applications will authenticate users\&. This dynamic configuration is set by the contents of the single
++\fBLinux\-PAM\fR
++configuration file
++/etc/pam\&.conf\&. Alternatively and preferably, the configuration can be set by individual configuration files located in a
++pam\&.d
++directory\&. The presence of this directory will cause
++\fBLinux\-PAM\fR
++to
++\fIignore\fR
++/etc/pam\&.conf\&.
++.PP
++Vendor\-supplied PAM configuration files might be installed in the system directory
++/usr/lib/pam\&.d/
++or a configurable vendor specific directory instead of the machine configuration directory
++/etc/pam\&.d/\&. If no machine configuration file is found, the vendor\-supplied file is used\&. All files in
++/etc/pam\&.d/
++override files with the same name in other directories\&.
++.PP
++From the point of view of the system administrator, for whom this manual is provided, it is not of primary importance to understand the internal behavior of the
++\fBLinux\-PAM\fR
++library\&. The important point to recognize is that the configuration file(s)
++\fIdefine\fR
++the connection between applications
++(\fBservices\fR) and the pluggable authentication modules
++(\fBPAM\fRs) that perform the actual authentication tasks\&.
++.PP
++\fBLinux\-PAM\fR
++separates the tasks of
++\fIauthentication\fR
++into four independent management groups:
++\fBaccount\fR
++management;
++\fBauth\fRentication management;
++\fBpassword\fR
++management; and
++\fBsession\fR
++management\&. (We highlight the abbreviations used for these groups in the configuration file\&.)
++.PP
++Simply put, these groups take care of different aspects of a typical user\*(Aqs request for a restricted service:
++.PP
++\fBaccount\fR
++\- provide account verification types of service: has the user\*(Aqs password expired?; is this user permitted access to the requested service?
++.PP
++\fBauth\fRentication \- authenticate a user and set up user credentials\&. Typically this is via some challenge\-response request that the user must satisfy: if you are who you claim to be please enter your password\&. Not all authentications are of this type, there exist hardware based authentication schemes (such as the use of smart\-cards and biometric devices), with suitable modules, these may be substituted seamlessly for more standard approaches to authentication \- such is the flexibility of
++\fBLinux\-PAM\fR\&.
++.PP
++\fBpassword\fR
++\- this group\*(Aqs responsibility is the task of updating authentication mechanisms\&. Typically, such services are strongly coupled to those of the
++\fBauth\fR
++group\&. Some authentication mechanisms lend themselves well to being updated with such a function\&. Standard UN*X password\-based access is the obvious example: please enter a replacement password\&.
++.PP
++\fBsession\fR
++\- this group of tasks cover things that should be done prior to a service being given and after it is withdrawn\&. Such tasks include the maintenance of audit trails and the mounting of the user\*(Aqs home directory\&. The
++\fBsession\fR
++management group is important as it provides both an opening and closing hook for modules to affect the services available to a user\&.
++.SH "FILES"
++.PP
++/etc/pam\&.conf
++.RS 4
++the configuration file
++.RE
++.PP
++/etc/pam\&.d
++.RS 4
++the
++\fBLinux\-PAM\fR
++configuration directory\&. Generally, if this directory is present, the
++/etc/pam\&.conf
++file is ignored\&.
++.RE
++.PP
++/usr/lib/pam\&.d
++.RS 4
++the
++\fBLinux\-PAM\fR
++vendor configuration directory\&. Files in
++/etc/pam\&.d
++override files with the same name in this directory\&.
++.RE
++.SH "ERRORS"
++.PP
++Typically errors generated by the
++\fBLinux\-PAM\fR
++system of libraries, will be written to
++\fBsyslog\fR(3)\&.
++.SH "CONFORMING TO"
++.PP
++DCE\-RFC 86\&.0, October 1995\&. Contains additional features, but remains backwardly compatible with this RFC\&.
++.SH "SEE ALSO"
++.PP
++\fBpam\fR(3),
++\fBpam_authenticate\fR(3),
++\fBpam_sm_setcred\fR(3),
++\fBpam_strerror\fR(3),
++\fBPAM\fR(8)
+diff --git a/doc/man/misc_conv.3 b/doc/man/misc_conv.3
+index 6265664..85d32db 100644
+--- a/doc/man/misc_conv.3
++++ b/doc/man/misc_conv.3
+@@ -117,7 +117,7 @@ This function pointer is initialized to
+ .SH "SEE ALSO"
+ .PP
+ \fBpam_conv\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "STANDARDS"
+ .PP
+ The
+diff --git a/doc/man/misc_conv.3.xml b/doc/man/misc_conv.3.xml
+index 92d4acd..2971b3a 100644
+--- a/doc/man/misc_conv.3.xml
++++ b/doc/man/misc_conv.3.xml
+@@ -168,7 +168,7 @@
+ <refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam.7 b/doc/man/pam.7
+new file mode 100644
+index 0000000..a15cab9
+--- /dev/null
++++ b/doc/man/pam.7
+@@ -0,0 +1 @@
++.so PAM.7
+diff --git a/doc/man/pam.8.xml b/doc/man/pam.8.xml
+index 7f3b051..cb6a7d8 100644
+--- a/doc/man/pam.8.xml
++++ b/doc/man/pam.8.xml
+@@ -2,7 +2,7 @@
+
+ <refmeta>
+ <refentrytitle>pam</refentrytitle>
+- <manvolnum>8</manvolnum>
++ <manvolnum>7</manvolnum>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
+ </refmeta>
+diff --git a/doc/man/pam_acct_mgmt.3 b/doc/man/pam_acct_mgmt.3
+index 18e91d5..1cfb501 100644
+--- a/doc/man/pam_acct_mgmt.3
++++ b/doc/man/pam_acct_mgmt.3
+@@ -97,4 +97,4 @@ User unknown to password service\&.
+ \fBpam_authenticate\fR(3),
+ \fBpam_chauthtok\fR(3),
+ \fBpam_strerror\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+diff --git a/doc/man/pam_acct_mgmt.3.xml b/doc/man/pam_acct_mgmt.3.xml
+index de6a94a..6ff3ccb 100644
+--- a/doc/man/pam_acct_mgmt.3.xml
++++ b/doc/man/pam_acct_mgmt.3.xml
+@@ -136,7 +136,7 @@
+ <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_authenticate.3 b/doc/man/pam_authenticate.3
+index 1760e2a..463a518 100644
+--- a/doc/man/pam_authenticate.3
++++ b/doc/man/pam_authenticate.3
+@@ -107,4 +107,4 @@ User unknown to authentication service\&.
+ \fBpam_setcred\fR(3),
+ \fBpam_chauthtok\fR(3),
+ \fBpam_strerror\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+diff --git a/doc/man/pam_authenticate.3.xml b/doc/man/pam_authenticate.3.xml
+index 794a5c7..948b950 100644
+--- a/doc/man/pam_authenticate.3.xml
++++ b/doc/man/pam_authenticate.3.xml
+@@ -160,7 +160,7 @@
+ <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_chauthtok.3 b/doc/man/pam_chauthtok.3
+index 60d267f..d7a1c1b 100644
+--- a/doc/man/pam_chauthtok.3
++++ b/doc/man/pam_chauthtok.3
+@@ -106,4 +106,4 @@ User unknown to password service\&.
+ \fBpam_setcred\fR(3),
+ \fBpam_get_item\fR(3),
+ \fBpam_strerror\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+diff --git a/doc/man/pam_chauthtok.3.xml b/doc/man/pam_chauthtok.3.xml
+index e184f45..95af359 100644
+--- a/doc/man/pam_chauthtok.3.xml
++++ b/doc/man/pam_chauthtok.3.xml
+@@ -155,7 +155,7 @@
+ <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_conv.3 b/doc/man/pam_conv.3
+index 5ada083..35c35d0 100644
+--- a/doc/man/pam_conv.3
++++ b/doc/man/pam_conv.3
+@@ -174,4 +174,4 @@ Success\&.
+ \fBpam_set_item\fR(3),
+ \fBpam_get_item\fR(3),
+ \fBpam_strerror\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+diff --git a/doc/man/pam_conv.3.xml b/doc/man/pam_conv.3.xml
+index 31834f3..96bfd23 100644
+--- a/doc/man/pam_conv.3.xml
++++ b/doc/man/pam_conv.3.xml
+@@ -219,7 +219,7 @@ struct pam_conv {
+ <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_error.3 b/doc/man/pam_error.3
+index 9a6c3f8..6f04998 100644
+--- a/doc/man/pam_error.3
++++ b/doc/man/pam_error.3
+@@ -80,7 +80,7 @@ System error\&.
+ \fBpam_vinfo\fR(3),
+ \fBpam_prompt\fR(3),
+ \fBpam_vprompt\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "STANDARDS"
+ .PP
+ The
+diff --git a/doc/man/pam_error.3.xml b/doc/man/pam_error.3.xml
+index 0f294c2..82ea709 100644
+--- a/doc/man/pam_error.3.xml
++++ b/doc/man/pam_error.3.xml
+@@ -102,7 +102,7 @@
+ <refentrytitle>pam_vprompt</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_get_authtok.3 b/doc/man/pam_get_authtok.3
+index 105a217..3e6ddda 100644
+--- a/doc/man/pam_get_authtok.3
++++ b/doc/man/pam_get_authtok.3
+@@ -162,7 +162,7 @@ New authentication tokens mismatch\&.
+ .RE
+ .SH "SEE ALSO"
+ .PP
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "STANDARDS"
+ .PP
+ The
+diff --git a/doc/man/pam_get_authtok.3.xml b/doc/man/pam_get_authtok.3.xml
+index ba6d955..1cb7566 100644
+--- a/doc/man/pam_get_authtok.3.xml
++++ b/doc/man/pam_get_authtok.3.xml
+@@ -229,7 +229,7 @@
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_get_item.3 b/doc/man/pam_get_item.3
+index d08fde5..894c7f6 100644
+--- a/doc/man/pam_get_item.3
++++ b/doc/man/pam_get_item.3
+@@ -2,12 +2,12 @@
+ .\" Title: pam_get_item
+ .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+ .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+-.\" Date: 05/07/2023
++.\" Date: 09/15/2023
+ .\" Manual: Linux-PAM Manual
+ .\" Source: Linux-PAM
+ .\" Language: English
+ .\"
+-.TH "PAM_GET_ITEM" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
++.TH "PAM_GET_ITEM" "3" "09/15/2023" "Linux\-PAM" "Linux\-PAM Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+diff --git a/doc/man/pam_getenv.3 b/doc/man/pam_getenv.3
+index d0d3999..f639ef9 100644
+--- a/doc/man/pam_getenv.3
++++ b/doc/man/pam_getenv.3
+@@ -57,4 +57,4 @@ function returns NULL on failure\&.
+ \fBpam_start\fR(3),
+ \fBpam_getenvlist\fR(3),
+ \fBpam_putenv\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+diff --git a/doc/man/pam_getenv.3.xml b/doc/man/pam_getenv.3.xml
+index df25863..b5dbc12 100644
+--- a/doc/man/pam_getenv.3.xml
++++ b/doc/man/pam_getenv.3.xml
+@@ -58,7 +58,7 @@
+ <refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_getenvlist.3 b/doc/man/pam_getenvlist.3
+index 8369764..e2ae949 100644
+--- a/doc/man/pam_getenvlist.3
++++ b/doc/man/pam_getenvlist.3
+@@ -63,4 +63,4 @@ function returns NULL on failure\&.
+ \fBpam_start\fR(3),
+ \fBpam_getenv\fR(3),
+ \fBpam_putenv\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+diff --git a/doc/man/pam_getenvlist.3.xml b/doc/man/pam_getenvlist.3.xml
+index 54b1f41..7f755e5 100644
+--- a/doc/man/pam_getenvlist.3.xml
++++ b/doc/man/pam_getenvlist.3.xml
+@@ -76,7 +76,7 @@
+ <refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_info.3 b/doc/man/pam_info.3
+index d66dee4..a76e039 100644
+--- a/doc/man/pam_info.3
++++ b/doc/man/pam_info.3
+@@ -76,7 +76,7 @@ System error\&.
+ .RE
+ .SH "SEE ALSO"
+ .PP
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "STANDARDS"
+ .PP
+ The
+diff --git a/doc/man/pam_info.3.xml b/doc/man/pam_info.3.xml
+index 5155d41..9b4a3f0 100644
+--- a/doc/man/pam_info.3.xml
++++ b/doc/man/pam_info.3.xml
+@@ -90,7 +90,7 @@
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_misc_drop_env.3 b/doc/man/pam_misc_drop_env.3
+index b3d162c..ca84c1c 100644
+--- a/doc/man/pam_misc_drop_env.3
++++ b/doc/man/pam_misc_drop_env.3
+@@ -52,7 +52,7 @@ all memory before
+ .SH "SEE ALSO"
+ .PP
+ \fBpam_getenvlist\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "STANDARDS"
+ .PP
+ The
+diff --git a/doc/man/pam_misc_drop_env.3.xml b/doc/man/pam_misc_drop_env.3.xml
+index a7f6cc8..c7a2576 100644
+--- a/doc/man/pam_misc_drop_env.3.xml
++++ b/doc/man/pam_misc_drop_env.3.xml
+@@ -43,7 +43,7 @@
+ <refentrytitle>pam_getenvlist</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_misc_paste_env.3 b/doc/man/pam_misc_paste_env.3
+index d707daa..6ca8c50 100644
+--- a/doc/man/pam_misc_paste_env.3
++++ b/doc/man/pam_misc_paste_env.3
+@@ -47,7 +47,7 @@ PAM_SUCCESS\&.
+ .SH "SEE ALSO"
+ .PP
+ \fBpam_putenv\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "STANDARDS"
+ .PP
+ The
+diff --git a/doc/man/pam_misc_paste_env.3.xml b/doc/man/pam_misc_paste_env.3.xml
+index 06194a9..2d99a1f 100644
+--- a/doc/man/pam_misc_paste_env.3.xml
++++ b/doc/man/pam_misc_paste_env.3.xml
+@@ -41,7 +41,7 @@
+ <refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_misc_setenv.3 b/doc/man/pam_misc_setenv.3
+index 70030b7..0b1380a 100644
+--- a/doc/man/pam_misc_setenv.3
++++ b/doc/man/pam_misc_setenv.3
+@@ -52,7 +52,7 @@ are concatenated with an \*(Aq=\*(Aq to form a name=value and passed to
+ .SH "SEE ALSO"
+ .PP
+ \fBpam_putenv\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "STANDARDS"
+ .PP
+ The
+diff --git a/doc/man/pam_misc_setenv.3.xml b/doc/man/pam_misc_setenv.3.xml
+index 4414d54..c9403c5 100644
+--- a/doc/man/pam_misc_setenv.3.xml
++++ b/doc/man/pam_misc_setenv.3.xml
+@@ -48,7 +48,7 @@
+ <refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_prompt.3 b/doc/man/pam_prompt.3
+index 3070747..aeaaac0 100644
+--- a/doc/man/pam_prompt.3
++++ b/doc/man/pam_prompt.3
+@@ -2,12 +2,12 @@
+ .\" Title: pam_prompt
+ .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+ .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+-.\" Date: 05/07/2023
++.\" Date: 09/15/2023
+ .\" Manual: Linux-PAM Manual
+ .\" Source: Linux-PAM
+ .\" Language: English
+ .\"
+-.TH "PAM_PROMPT" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
++.TH "PAM_PROMPT" "3" "09/15/2023" "Linux\-PAM" "Linux\-PAM Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+@@ -70,7 +70,7 @@ System error\&.
+ .RE
+ .SH "SEE ALSO"
+ .PP
+-\fBpam\fR(8),
++\fBpam\fR(7),
+ \fBpam_conv\fR(3)
+ .SH "STANDARDS"
+ .PP
+diff --git a/doc/man/pam_prompt.3.xml b/doc/man/pam_prompt.3.xml
+index c65a0c9..b53f502 100644
+--- a/doc/man/pam_prompt.3.xml
++++ b/doc/man/pam_prompt.3.xml
+@@ -92,7 +92,7 @@
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
+diff --git a/doc/man/pam_putenv.3 b/doc/man/pam_putenv.3
+index 3b826b1..0e1002b 100644
+--- a/doc/man/pam_putenv.3
++++ b/doc/man/pam_putenv.3
+@@ -108,4 +108,4 @@ The environment variable was successfully updated\&.
+ \fBpam_getenv\fR(3),
+ \fBpam_getenvlist\fR(3),
+ \fBpam_strerror\fR(3),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+diff --git a/doc/man/pam_putenv.3.xml b/doc/man/pam_putenv.3.xml
+index 7267046..8daca00 100644
+--- a/doc/man/pam_putenv.3.xml
++++ b/doc/man/pam_putenv.3.xml
+@@ -143,7 +143,7 @@
+ <refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_strerror.3 b/doc/man/pam_strerror.3
+index 408eb3a..d6c5d51 100644
+--- a/doc/man/pam_strerror.3
++++ b/doc/man/pam_strerror.3
+@@ -49,4 +49,4 @@ function returns a pointer to a string describing the error code passed in the a
+ This function returns always a pointer to a string\&.
+ .SH "SEE ALSO"
+ .PP
+-\fBpam\fR(8)
++\fBpam\fR(7)
+diff --git a/doc/man/pam_strerror.3.xml b/doc/man/pam_strerror.3.xml
+index b76cbc4..2c7a8a9 100644
+--- a/doc/man/pam_strerror.3.xml
++++ b/doc/man/pam_strerror.3.xml
+@@ -48,7 +48,7 @@
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/doc/man/pam_syslog.3 b/doc/man/pam_syslog.3
+index 8223131..d1f2589 100644
+--- a/doc/man/pam_syslog.3
++++ b/doc/man/pam_syslog.3
+@@ -67,7 +67,7 @@ with the difference that it takes a set of arguments which have been obtained us
+ variable argument list macros\&.
+ .SH "SEE ALSO"
+ .PP
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "STANDARDS"
+ .PP
+ The
+diff --git a/doc/man/pam_syslog.3.xml b/doc/man/pam_syslog.3.xml
+index f5be287..5005476 100644
+--- a/doc/man/pam_syslog.3.xml
++++ b/doc/man/pam_syslog.3.xml
+@@ -63,7 +63,7 @@
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_access/access.conf.5 b/modules/pam_access/access.conf.5
+index b45e914..774e5cd 100644
+--- a/modules/pam_access/access.conf.5
++++ b/modules/pam_access/access.conf.5
+@@ -210,7 +210,7 @@ option, the spaces will become part of the actual item and the line will be most
+ .PP
+ \fBpam_access\fR(8),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHORS"
+ .PP
+ Original
+diff --git a/modules/pam_access/access.conf.5.xml b/modules/pam_access/access.conf.5.xml
+index ff1cb22..e1e5531 100644
+--- a/modules/pam_access/access.conf.5.xml
++++ b/modules/pam_access/access.conf.5.xml
+@@ -229,7 +229,7 @@
+ <para>
+ <citerefentry><refentrytitle>pam_access</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
++ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+diff --git a/modules/pam_access/pam_access.8 b/modules/pam_access/pam_access.8
+index c9f9d40..5b0e1a3 100644
+--- a/modules/pam_access/pam_access.8
++++ b/modules/pam_access/pam_access.8
+@@ -133,7 +133,7 @@ Default configuration file
+ .PP
+ \fBaccess.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)\&.
++\fBpam\fR(7)\&.
+ .SH "AUTHORS"
+ .PP
+ The logdaemon style login access control scheme was designed and implemented by Wietse Venema\&. The pam_access PAM module was developed by Alexei Nogin <alexei@nogin\&.dnttm\&.ru>\&. The IPv6 support and the network(address) / netmask feature was developed and provided by Mike Becher <mike\&.becher@lrz\-muenchen\&.de>\&.
+diff --git a/modules/pam_access/pam_access.8.xml b/modules/pam_access/pam_access.8.xml
+index 010e749..cc01d5c 100644
+--- a/modules/pam_access/pam_access.8.xml
++++ b/modules/pam_access/pam_access.8.xml
+@@ -270,7 +270,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+diff --git a/modules/pam_debug/pam_debug.8 b/modules/pam_debug/pam_debug.8
+index b1a6de7..2b2dee3 100644
+--- a/modules/pam_debug/pam_debug.8
++++ b/modules/pam_debug/pam_debug.8
+@@ -138,7 +138,7 @@ auth sufficient pam_debug\&.so auth=success cred=success
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_debug was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_debug/pam_debug.8.xml b/modules/pam_debug/pam_debug.8.xml
+index 1c98f17..939c19b 100644
+--- a/modules/pam_debug/pam_debug.8.xml
++++ b/modules/pam_debug/pam_debug.8.xml
+@@ -213,7 +213,7 @@ auth sufficient pam_debug.so auth=success cred=success
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_deny/pam_deny.8 b/modules/pam_deny/pam_deny.8
+index 85146f1..81d5343 100644
+--- a/modules/pam_deny/pam_deny.8
++++ b/modules/pam_deny/pam_deny.8
+@@ -96,7 +96,7 @@ other session required pam_deny\&.so
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_deny was written by Andrew G\&. Morgan <morgan@kernel\&.org>
+diff --git a/modules/pam_deny/pam_deny.8.xml b/modules/pam_deny/pam_deny.8.xml
+index db8fcb6..de41a59 100644
+--- a/modules/pam_deny/pam_deny.8.xml
++++ b/modules/pam_deny/pam_deny.8.xml
+@@ -117,7 +117,7 @@ other session required pam_deny.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_echo/pam_echo.8 b/modules/pam_echo/pam_echo.8
+index c927488..5f0712b 100644
+--- a/modules/pam_echo/pam_echo.8
++++ b/modules/pam_echo/pam_echo.8
+@@ -126,7 +126,7 @@ password required pam_unix\&.so
+ .PP
+ \fBpam.conf\fR(8),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ Thorsten Kukuk <kukuk@thkukuk\&.de>
+diff --git a/modules/pam_echo/pam_echo.8.xml b/modules/pam_echo/pam_echo.8.xml
+index 07b793d..cf2d006 100644
+--- a/modules/pam_echo/pam_echo.8.xml
++++ b/modules/pam_echo/pam_echo.8.xml
+@@ -156,7 +156,7 @@ password required pam_unix.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry></para>
+ </refsect1>
+
+diff --git a/modules/pam_env/pam_env.8 b/modules/pam_env/pam_env.8
+index f4e15f3..afef8b1 100644
+--- a/modules/pam_env/pam_env.8
++++ b/modules/pam_env/pam_env.8
+@@ -2,12 +2,12 @@
+ .\" Title: pam_env
+ .\" Author: [see the "AUTHOR" section]
+ .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+-.\" Date: 05/07/2023
++.\" Date: 09/13/2023
+ .\" Manual: Linux-PAM Manual
+ .\" Source: Linux-PAM
+ .\" Language: English
+ .\"
+-.TH "PAM_ENV" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
++.TH "PAM_ENV" "8" "09/13/2023" "Linux\-PAM" "Linux\-PAM Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+@@ -153,7 +153,7 @@ User specific environment file
+ .PP
+ \fBpam_env.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8),
++\fBpam\fR(7),
+ \fBenviron\fR(7)\&.
+ .SH "AUTHOR"
+ .PP
+diff --git a/modules/pam_env/pam_env.8.xml b/modules/pam_env/pam_env.8.xml
+index fb172e1..a720d37 100644
+--- a/modules/pam_env/pam_env.8.xml
++++ b/modules/pam_env/pam_env.8.xml
+@@ -295,7 +295,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum>
+diff --git a/modules/pam_env/pam_env.conf.5 b/modules/pam_env/pam_env.conf.5
+index 90de5ea..9d9af67 100644
+--- a/modules/pam_env/pam_env.conf.5
++++ b/modules/pam_env/pam_env.conf.5
+@@ -125,7 +125,7 @@ Silly examples of escaped variables, just to show how they work\&.
+ .PP
+ \fBpam_env\fR(8),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8),
++\fBpam\fR(7),
+ \fBenviron\fR(7)
+ .SH "AUTHOR"
+ .PP
+diff --git a/modules/pam_env/pam_env.conf.5.xml b/modules/pam_env/pam_env.conf.5.xml
+index 81fc961..38bc5fd 100644
+--- a/modules/pam_env/pam_env.conf.5.xml
++++ b/modules/pam_env/pam_env.conf.5.xml
+@@ -135,7 +135,7 @@
+ <para>
+ <citerefentry><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_exec/pam_exec.8 b/modules/pam_exec/pam_exec.8
+index 4c7023d..bfa49f8 100644
+--- a/modules/pam_exec/pam_exec.8
++++ b/modules/pam_exec/pam_exec.8
+@@ -182,7 +182,7 @@ with effective user ID\&.
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_exec was written by Thorsten Kukuk <kukuk@thkukuk\&.de> and Josh Triplett <josh@joshtriplett\&.org>\&.
+diff --git a/modules/pam_exec/pam_exec.8.xml b/modules/pam_exec/pam_exec.8.xml
+index 13abe6e..2eedb28 100644
+--- a/modules/pam_exec/pam_exec.8.xml
++++ b/modules/pam_exec/pam_exec.8.xml
+@@ -300,7 +300,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_faildelay/pam_faildelay.8 b/modules/pam_faildelay/pam_faildelay.8
+index 9d1d475..0e798cd 100644
+--- a/modules/pam_faildelay/pam_faildelay.8
++++ b/modules/pam_faildelay/pam_faildelay.8
+@@ -87,7 +87,7 @@ auth optional pam_faildelay\&.so delay=10000000
+ \fBpam_fail_delay\fR(3),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_faildelay was written by Darren Tucker <dtucker@zip\&.com\&.au>\&.
+diff --git a/modules/pam_faildelay/pam_faildelay.8.xml b/modules/pam_faildelay/pam_faildelay.8.xml
+index c31b507..49ec46f 100644
+--- a/modules/pam_faildelay/pam_faildelay.8.xml
++++ b/modules/pam_faildelay/pam_faildelay.8.xml
+@@ -118,7 +118,7 @@ auth optional pam_faildelay.so delay=10000000
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_filter/pam_filter.8 b/modules/pam_filter/pam_filter.8
+index 7a0735b..c9b2ee7 100644
+--- a/modules/pam_filter/pam_filter.8
++++ b/modules/pam_filter/pam_filter.8
+@@ -166,7 +166,7 @@ to see how to configure login to transpose upper and lower case letters once the
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_filter was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_filter/pam_filter.8.xml b/modules/pam_filter/pam_filter.8.xml
+index 8015f41..0b85e82 100644
+--- a/modules/pam_filter/pam_filter.8.xml
++++ b/modules/pam_filter/pam_filter.8.xml
+@@ -243,7 +243,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_ftp/pam_ftp.8 b/modules/pam_ftp/pam_ftp.8
+index e15dda7..c705ea1 100644
+--- a/modules/pam_ftp/pam_ftp.8
++++ b/modules/pam_ftp/pam_ftp.8
+@@ -119,7 +119,7 @@ auth required pam_listfile\&.so \e
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_ftp was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_ftp/pam_ftp.8.xml b/modules/pam_ftp/pam_ftp.8.xml
+index 03f3678..90079d3 100644
+--- a/modules/pam_ftp/pam_ftp.8.xml
++++ b/modules/pam_ftp/pam_ftp.8.xml
+@@ -165,7 +165,7 @@ auth required pam_listfile.so \
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_group/group.conf.5 b/modules/pam_group/group.conf.5
+index 96009fe..96bb061 100644
+--- a/modules/pam_group/group.conf.5
++++ b/modules/pam_group/group.conf.5
+@@ -115,7 +115,7 @@ xsh; tty* ;%admin;Al0000\-2400;plugdev
+ .PP
+ \fBpam_group\fR(8),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_group was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_group/group.conf.5.xml b/modules/pam_group/group.conf.5.xml
+index a8875b3..8d5b2d4 100644
+--- a/modules/pam_group/group.conf.5.xml
++++ b/modules/pam_group/group.conf.5.xml
+@@ -131,7 +131,7 @@ xsh; tty* ;%admin;Al0000-2400;plugdev
+ <para>
+ <citerefentry><refentrytitle>pam_group</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
++ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+diff --git a/modules/pam_group/pam_group.8 b/modules/pam_group/pam_group.8
+index 959c749..1553f20 100644
+--- a/modules/pam_group/pam_group.8
++++ b/modules/pam_group/pam_group.8
+@@ -103,7 +103,7 @@ Default configuration file
+ .PP
+ \fBgroup.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)\&.
++\fBpam\fR(7)\&.
+ .SH "AUTHORS"
+ .PP
+ pam_group was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_group/pam_group.8.xml b/modules/pam_group/pam_group.8.xml
+index 695a7ba..292ee1c 100644
+--- a/modules/pam_group/pam_group.8.xml
++++ b/modules/pam_group/pam_group.8.xml
+@@ -149,7 +149,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+diff --git a/modules/pam_issue/pam_issue.8 b/modules/pam_issue/pam_issue.8
+index fdeed52..745cc42 100644
+--- a/modules/pam_issue/pam_issue.8
++++ b/modules/pam_issue/pam_issue.8
+@@ -152,7 +152,7 @@ to set the user specific issue at login:
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_issue was written by Ben Collins <bcollins@debian\&.org>\&.
+diff --git a/modules/pam_issue/pam_issue.8.xml b/modules/pam_issue/pam_issue.8.xml
+index 20d3245..02b31f6 100644
+--- a/modules/pam_issue/pam_issue.8.xml
++++ b/modules/pam_issue/pam_issue.8.xml
+@@ -216,7 +216,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_keyinit/pam_keyinit.8 b/modules/pam_keyinit/pam_keyinit.8
+index 5d7b3e4..50e4fe6 100644
+--- a/modules/pam_keyinit/pam_keyinit.8
++++ b/modules/pam_keyinit/pam_keyinit.8
+@@ -137,7 +137,7 @@ This will prevent keys from one session leaking into another session for the sam
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8),
++\fBpam\fR(7),
+ \fBkeyctl\fR(1)
+ .SH "AUTHOR"
+ .PP
+diff --git a/modules/pam_keyinit/pam_keyinit.8.xml b/modules/pam_keyinit/pam_keyinit.8.xml
+index 7b0a73b..0bab086 100644
+--- a/modules/pam_keyinit/pam_keyinit.8.xml
++++ b/modules/pam_keyinit/pam_keyinit.8.xml
+@@ -229,7 +229,7 @@ session required pam_keyinit.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>keyctl</refentrytitle><manvolnum>1</manvolnum>
+diff --git a/modules/pam_lastlog/pam_lastlog.8 b/modules/pam_lastlog/pam_lastlog.8
+index 3a85ede..3c161ff 100644
+--- a/modules/pam_lastlog/pam_lastlog.8
++++ b/modules/pam_lastlog/pam_lastlog.8
+@@ -189,7 +189,7 @@ Lastlog logging file
+ \fBlimits.conf\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_lastlog was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_lastlog/pam_lastlog.8.xml b/modules/pam_lastlog/pam_lastlog.8.xml
+index 1fd9d9d..7c15b93 100644
+--- a/modules/pam_lastlog/pam_lastlog.8.xml
++++ b/modules/pam_lastlog/pam_lastlog.8.xml
+@@ -322,7 +322,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_limits/limits.conf.5 b/modules/pam_limits/limits.conf.5
+index ce0ca35..c9c4187 100644
+--- a/modules/pam_limits/limits.conf.5
++++ b/modules/pam_limits/limits.conf.5
+@@ -351,7 +351,7 @@ ftp hard nproc 0
+ .PP
+ \fBpam_limits\fR(8),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8),
++\fBpam\fR(7),
+ \fBgetrlimit\fR(2),
+ \fBgetrlimit\fR(3p)
+ .SH "AUTHOR"
+diff --git a/modules/pam_limits/limits.conf.5.xml b/modules/pam_limits/limits.conf.5.xml
+index f6f7d87..d389335 100644
+--- a/modules/pam_limits/limits.conf.5.xml
++++ b/modules/pam_limits/limits.conf.5.xml
+@@ -350,7 +350,7 @@ ftp hard nproc 0
+ <para>
+ <citerefentry><refentrytitle>pam_limits</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>getrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>getrlimit</refentrytitle><manvolnum>3p</manvolnum></citerefentry>
+ </para>
+diff --git a/modules/pam_limits/pam_limits.8 b/modules/pam_limits/pam_limits.8
+index a3d15f2..f971b64 100644
+--- a/modules/pam_limits/pam_limits.8
++++ b/modules/pam_limits/pam_limits.8
+@@ -146,7 +146,7 @@ Replace "login" for each service you are using this module\&.
+ .PP
+ \fBlimits.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)\&.
++\fBpam\fR(7)\&.
+ .SH "AUTHORS"
+ .PP
+ pam_limits was initially written by Cristian Gafton <gafton@redhat\&.com>
+diff --git a/modules/pam_limits/pam_limits.8.xml b/modules/pam_limits/pam_limits.8.xml
+index cca046c..8f026f0 100644
+--- a/modules/pam_limits/pam_limits.8.xml
++++ b/modules/pam_limits/pam_limits.8.xml
+@@ -264,7 +264,7 @@ session required pam_limits.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+diff --git a/modules/pam_listfile/pam_listfile.8 b/modules/pam_listfile/pam_listfile.8
+index 5052664..a23e6e5 100644
+--- a/modules/pam_listfile/pam_listfile.8
++++ b/modules/pam_listfile/pam_listfile.8
+@@ -205,7 +205,7 @@ to the root account\&.
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_listfile was written by Michael K\&. Johnson <johnsonm@redhat\&.com> and Elliot Lee <sopwith@cuc\&.edu>\&.
+diff --git a/modules/pam_listfile/pam_listfile.8.xml b/modules/pam_listfile/pam_listfile.8.xml
+index 8847415..af747c1 100644
+--- a/modules/pam_listfile/pam_listfile.8.xml
++++ b/modules/pam_listfile/pam_listfile.8.xml
+@@ -278,7 +278,7 @@ auth required pam_listfile.so \
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_localuser/pam_localuser.8 b/modules/pam_localuser/pam_localuser.8
+index 455fdb2..f4f2b29 100644
+--- a/modules/pam_localuser/pam_localuser.8
++++ b/modules/pam_localuser/pam_localuser.8
+@@ -117,7 +117,7 @@ Local user account information\&.
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_localuser was written by Nalin Dahyabhai <nalin@redhat\&.com>\&.
+diff --git a/modules/pam_localuser/pam_localuser.8.xml b/modules/pam_localuser/pam_localuser.8.xml
+index 2002d1d..e4b9e07 100644
+--- a/modules/pam_localuser/pam_localuser.8.xml
++++ b/modules/pam_localuser/pam_localuser.8.xml
+@@ -184,7 +184,7 @@ account required pam_wheel.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_loginuid/pam_loginuid.8 b/modules/pam_loginuid/pam_loginuid.8
+index 32f1b54..70669a2 100644
+--- a/modules/pam_loginuid/pam_loginuid.8
++++ b/modules/pam_loginuid/pam_loginuid.8
+@@ -85,7 +85,7 @@ session required pam_loginuid\&.so
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8),
++\fBpam\fR(7),
+ \fBauditctl\fR(8),
+ \fBauditd\fR(8)
+ .SH "AUTHOR"
+diff --git a/modules/pam_loginuid/pam_loginuid.8.xml b/modules/pam_loginuid/pam_loginuid.8.xml
+index d5285f0..1beba98 100644
+--- a/modules/pam_loginuid/pam_loginuid.8.xml
++++ b/modules/pam_loginuid/pam_loginuid.8.xml
+@@ -118,7 +118,7 @@ session required pam_loginuid.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>auditctl</refentrytitle><manvolnum>8</manvolnum>
+diff --git a/modules/pam_mail/pam_mail.8 b/modules/pam_mail/pam_mail.8
+index 36b95ba..ae4b890 100644
+--- a/modules/pam_mail/pam_mail.8
++++ b/modules/pam_mail/pam_mail.8
+@@ -153,7 +153,7 @@ session optional pam_mail\&.so standard
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_mail was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_mail/pam_mail.8.xml b/modules/pam_mail/pam_mail.8.xml
+index 2c0c054..9b4ce36 100644
+--- a/modules/pam_mail/pam_mail.8.xml
++++ b/modules/pam_mail/pam_mail.8.xml
+@@ -262,7 +262,7 @@ session optional pam_mail.so standard
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_mkhomedir/pam_mkhomedir.8 b/modules/pam_mkhomedir/pam_mkhomedir.8
+index 112b39b..6962971 100644
+--- a/modules/pam_mkhomedir/pam_mkhomedir.8
++++ b/modules/pam_mkhomedir/pam_mkhomedir.8
+@@ -129,7 +129,7 @@ A sample /etc/pam\&.d/login file:
+ .SH "SEE ALSO"
+ .PP
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)\&.
++\fBpam\fR(7)\&.
+ .SH "AUTHOR"
+ .PP
+ pam_mkhomedir was written by Jason Gunthorpe <jgg@debian\&.org>\&.
+diff --git a/modules/pam_mkhomedir/pam_mkhomedir.8.xml b/modules/pam_mkhomedir/pam_mkhomedir.8.xml
+index ad95724..25f5497 100644
+--- a/modules/pam_mkhomedir/pam_mkhomedir.8.xml
++++ b/modules/pam_mkhomedir/pam_mkhomedir.8.xml
+@@ -202,7 +202,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+diff --git a/modules/pam_motd/pam_motd.8 b/modules/pam_motd/pam_motd.8
+index b1a70c0..3f65bb5 100644
+--- a/modules/pam_motd/pam_motd.8
++++ b/modules/pam_motd/pam_motd.8
+@@ -185,7 +185,7 @@ session optional pam_motd\&.so motd=/elsewhere/motd motd_dir=/elsewhere/motd\&
+ \fBmotd\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_motd was written by Ben Collins <bcollins@debian\&.org>\&.
+diff --git a/modules/pam_motd/pam_motd.8.xml b/modules/pam_motd/pam_motd.8.xml
+index 7442037..2fc5310 100644
+--- a/modules/pam_motd/pam_motd.8.xml
++++ b/modules/pam_motd/pam_motd.8.xml
+@@ -193,7 +193,7 @@ session optional pam_motd.so motd=/elsewhere/motd motd_dir=/elsewhere/motd.d
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_namespace/namespace.conf.5 b/modules/pam_namespace/namespace.conf.5
+index cf2509c..e4e8cfd 100644
+--- a/modules/pam_namespace/namespace.conf.5
++++ b/modules/pam_namespace/namespace.conf.5
+@@ -162,7 +162,7 @@ This module also depends on pam_selinux\&.so setting the context\&.
+ .PP
+ \fBpam_namespace\fR(8),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHORS"
+ .PP
+ The namespace\&.conf manual page was written by Janak Desai <janak@us\&.ibm\&.com>\&. More features added by Tomas Mraz <tmraz@redhat\&.com>\&.
+diff --git a/modules/pam_namespace/namespace.conf.5.xml b/modules/pam_namespace/namespace.conf.5.xml
+index d398639..dcf6973 100644
+--- a/modules/pam_namespace/namespace.conf.5.xml
++++ b/modules/pam_namespace/namespace.conf.5.xml
+@@ -222,7 +222,7 @@
+ <para>
+ <citerefentry><refentrytitle>pam_namespace</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
++ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+diff --git a/modules/pam_namespace/pam_namespace.8 b/modules/pam_namespace/pam_namespace.8
+index 3c9e9b3..d69f9fd 100644
+--- a/modules/pam_namespace/pam_namespace.8
++++ b/modules/pam_namespace/pam_namespace.8
+@@ -148,7 +148,7 @@ To use polyinstantiation with graphical display manager gdm, please refer to gdm
+ \fBnamespace.conf\fR(5),
+ \fBpam.d\fR(5),
+ \fBmount\fR(8),
+-\fBpam\fR(8)\&.
++\fBpam\fR(7)\&.
+ .SH "AUTHORS"
+ .PP
+ The namespace setup scheme was designed by Stephen Smalley, Janak Desai and Chad Sellers\&. The pam_namespace PAM module was developed by Janak Desai <janak@us\&.ibm\&.com>, Chad Sellers <csellers@tresys\&.com> and Steve Grubb <sgrubb@redhat\&.com>\&. Additional improvements by Xavier Toth <txtoth@gmail\&.com> and Tomas Mraz <tmraz@redhat\&.com>\&.
+diff --git a/modules/pam_namespace/pam_namespace.8.xml b/modules/pam_namespace/pam_namespace.8.xml
+index 598037a..954093d 100644
+--- a/modules/pam_namespace/pam_namespace.8.xml
++++ b/modules/pam_namespace/pam_namespace.8.xml
+@@ -389,7 +389,7 @@
+ <refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+diff --git a/modules/pam_nologin/pam_nologin.8 b/modules/pam_nologin/pam_nologin.8
+index ceb0237..c5df1b7 100644
+--- a/modules/pam_nologin/pam_nologin.8
++++ b/modules/pam_nologin/pam_nologin.8
+@@ -124,7 +124,7 @@ modules would lead to a successful login because the nologin module
+ \fBnologin\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_nologin was written by Michael K\&. Johnson <johnsonm@redhat\&.com>\&.
+diff --git a/modules/pam_nologin/pam_nologin.8.xml b/modules/pam_nologin/pam_nologin.8.xml
+index 1ea725c..1cc721a 100644
+--- a/modules/pam_nologin/pam_nologin.8.xml
++++ b/modules/pam_nologin/pam_nologin.8.xml
+@@ -157,7 +157,7 @@ auth required pam_nologin.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_permit/pam_permit.8 b/modules/pam_permit/pam_permit.8
+index 5b1881f..5432b75 100644
+--- a/modules/pam_permit/pam_permit.8
++++ b/modules/pam_permit/pam_permit.8
+@@ -78,7 +78,7 @@ account required pam_permit\&.so
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_permit was written by Andrew G\&. Morgan, <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_permit/pam_permit.8.xml b/modules/pam_permit/pam_permit.8.xml
+index 0634e5e..9e6c7d0 100644
+--- a/modules/pam_permit/pam_permit.8.xml
++++ b/modules/pam_permit/pam_permit.8.xml
+@@ -88,7 +88,7 @@ account required pam_permit.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_pwhistory/pam_pwhistory.8 b/modules/pam_pwhistory/pam_pwhistory.8
+index df95ee3..e430bcd 100644
+--- a/modules/pam_pwhistory/pam_pwhistory.8
++++ b/modules/pam_pwhistory/pam_pwhistory.8
+@@ -179,7 +179,7 @@ Config file for pam_pwhistory options
+ \fBpwhistory.conf\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ \fBpam_get_authtok\fR(3)
+ .SH "AUTHOR"
+ .PP
+diff --git a/modules/pam_pwhistory/pam_pwhistory.8.xml b/modules/pam_pwhistory/pam_pwhistory.8.xml
+index d83d8d9..a5185fc 100644
+--- a/modules/pam_pwhistory/pam_pwhistory.8.xml
++++ b/modules/pam_pwhistory/pam_pwhistory.8.xml
+@@ -282,7 +282,7 @@ password required pam_unix.so use_authtok
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ <citerefentry>
+ <refentrytitle>pam_get_authtok</refentrytitle><manvolnum>3</manvolnum>
+diff --git a/modules/pam_rhosts/pam_rhosts.8 b/modules/pam_rhosts/pam_rhosts.8
+index 36077de..327ad22 100644
+--- a/modules/pam_rhosts/pam_rhosts.8
++++ b/modules/pam_rhosts/pam_rhosts.8
+@@ -122,7 +122,7 @@ auth required pam_unix\&.so
+ \fBrhosts\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_rhosts was written by Thorsten Kukuk <kukuk@thkukuk\&.de>
+diff --git a/modules/pam_rhosts/pam_rhosts.8.xml b/modules/pam_rhosts/pam_rhosts.8.xml
+index b8a5c1c..41d541c 100644
+--- a/modules/pam_rhosts/pam_rhosts.8.xml
++++ b/modules/pam_rhosts/pam_rhosts.8.xml
+@@ -153,7 +153,7 @@ auth required pam_unix.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_rootok/pam_rootok.8 b/modules/pam_rootok/pam_rootok.8
+index 5fc021f..984cadd 100644
+--- a/modules/pam_rootok/pam_rootok.8
++++ b/modules/pam_rootok/pam_rootok.8
+@@ -100,7 +100,7 @@ auth required pam_unix\&.so
+ \fBsu\fR(1),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_rootok was written by Andrew G\&. Morgan, <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_rootok/pam_rootok.8.xml b/modules/pam_rootok/pam_rootok.8.xml
+index a79c073..f30ad37 100644
+--- a/modules/pam_rootok/pam_rootok.8.xml
++++ b/modules/pam_rootok/pam_rootok.8.xml
+@@ -113,7 +113,7 @@ auth required pam_unix.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_securetty/pam_securetty.8 b/modules/pam_securetty/pam_securetty.8
+index ca90438..95804fb 100644
+--- a/modules/pam_securetty/pam_securetty.8
++++ b/modules/pam_securetty/pam_securetty.8
+@@ -134,7 +134,7 @@ auth required pam_unix\&.so
+ \fBsecuretty\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_securetty was written by Elliot Lee <sopwith@cuc\&.edu>\&.
+diff --git a/modules/pam_securetty/pam_securetty.8.xml b/modules/pam_securetty/pam_securetty.8.xml
+index 9038f5b..fcf0e88 100644
+--- a/modules/pam_securetty/pam_securetty.8.xml
++++ b/modules/pam_securetty/pam_securetty.8.xml
+@@ -184,7 +184,7 @@ auth required pam_unix.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_selinux/pam_selinux.8 b/modules/pam_selinux/pam_selinux.8
+index 260bc47..12fe015 100644
+--- a/modules/pam_selinux/pam_selinux.8
++++ b/modules/pam_selinux/pam_selinux.8
+@@ -2,12 +2,12 @@
+ .\" Title: pam_selinux
+ .\" Author: [see the "AUTHOR" section]
+ .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+-.\" Date: 05/07/2023
++.\" Date: 09/13/2023
+ .\" Manual: Linux-PAM Manual
+ .\" Source: Linux-PAM
+ .\" Language: English
+ .\"
+-.TH "PAM_SELINUX" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
++.TH "PAM_SELINUX" "8" "09/13/2023" "Linux\-PAM" "Linux\-PAM Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+@@ -144,7 +144,7 @@ session optional pam_selinux\&.so
+ \fBexecve\fR(2),
+ \fBtty\fR(4),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8),
++\fBpam\fR(7),
+ \fBselinux\fR(8)
+ .SH "AUTHOR"
+ .PP
+diff --git a/modules/pam_selinux/pam_selinux.8.xml b/modules/pam_selinux/pam_selinux.8.xml
+index 3aa632c..7ec5daf 100644
+--- a/modules/pam_selinux/pam_selinux.8.xml
++++ b/modules/pam_selinux/pam_selinux.8.xml
+@@ -255,7 +255,7 @@ session optional pam_selinux.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>selinux</refentrytitle><manvolnum>8</manvolnum>
+diff --git a/modules/pam_sepermit/pam_sepermit.8 b/modules/pam_sepermit/pam_sepermit.8
+index f47f4a8..3270746 100644
+--- a/modules/pam_sepermit/pam_sepermit.8
++++ b/modules/pam_sepermit/pam_sepermit.8
+@@ -124,7 +124,7 @@ session required pam_permit\&.so
+ \fBsepermit.conf\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ \fBselinux\fR(8)
+ .SH "AUTHOR"
+ .PP
+diff --git a/modules/pam_sepermit/pam_sepermit.8.xml b/modules/pam_sepermit/pam_sepermit.8.xml
+index 791d2bb..1ead429 100644
+--- a/modules/pam_sepermit/pam_sepermit.8.xml
++++ b/modules/pam_sepermit/pam_sepermit.8.xml
+@@ -177,7 +177,7 @@ session required pam_permit.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ <citerefentry>
+ <refentrytitle>selinux</refentrytitle><manvolnum>8</manvolnum>
+diff --git a/modules/pam_sepermit/sepermit.conf.5 b/modules/pam_sepermit/sepermit.conf.5
+index e2b1736..d2cd381 100644
+--- a/modules/pam_sepermit/sepermit.conf.5
++++ b/modules/pam_sepermit/sepermit.conf.5
+@@ -110,7 +110,7 @@ These are some example lines which might be specified in
+ .PP
+ \fBpam_sepermit\fR(8),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8),
++\fBpam\fR(7),
+ \fBselinux\fR(8),
+ .SH "AUTHOR"
+ .PP
+diff --git a/modules/pam_sepermit/sepermit.conf.5.xml b/modules/pam_sepermit/sepermit.conf.5.xml
+index ff924ce..1f1dcae 100644
+--- a/modules/pam_sepermit/sepermit.conf.5.xml
++++ b/modules/pam_sepermit/sepermit.conf.5.xml
+@@ -93,7 +93,7 @@
+ <para>
+ <citerefentry><refentrytitle>pam_sepermit</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>selinux</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ </para>
+ </refsect1>
+diff --git a/modules/pam_shells/pam_shells.8 b/modules/pam_shells/pam_shells.8
+index af3dc66..7962bad 100644
+--- a/modules/pam_shells/pam_shells.8
++++ b/modules/pam_shells/pam_shells.8
+@@ -84,7 +84,7 @@ auth required pam_shells\&.so
+ \fBshells\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_shells was written by Erik Troan <ewt@redhat\&.com>\&.
+diff --git a/modules/pam_shells/pam_shells.8.xml b/modules/pam_shells/pam_shells.8.xml
+index b9f90e9..bff889f 100644
+--- a/modules/pam_shells/pam_shells.8.xml
++++ b/modules/pam_shells/pam_shells.8.xml
+@@ -107,7 +107,7 @@ auth required pam_shells.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_succeed_if/pam_succeed_if.8 b/modules/pam_succeed_if/pam_succeed_if.8
+index e61af0c..98a9d85 100644
+--- a/modules/pam_succeed_if/pam_succeed_if.8
++++ b/modules/pam_succeed_if/pam_succeed_if.8
+@@ -220,7 +220,7 @@ type required othermodule\&.so arguments\&.\&.\&.
+ .SH "SEE ALSO"
+ .PP
+ \fBglob\fR(7),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ Nalin Dahyabhai <nalin@redhat\&.com>
+diff --git a/modules/pam_succeed_if/pam_succeed_if.8.xml b/modules/pam_succeed_if/pam_succeed_if.8.xml
+index 90fd114..b8f65e7 100644
+--- a/modules/pam_succeed_if/pam_succeed_if.8.xml
++++ b/modules/pam_succeed_if/pam_succeed_if.8.xml
+@@ -291,7 +291,7 @@ type required othermodule.so arguments...
+ <refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_time/pam_time.8 b/modules/pam_time/pam_time.8
+index 48c7ffc..13a53ef 100644
+--- a/modules/pam_time/pam_time.8
++++ b/modules/pam_time/pam_time.8
+@@ -116,7 +116,7 @@ login account required pam_time\&.so
+ .PP
+ \fBtime.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)\&.
++\fBpam\fR(7)\&.
+ .SH "AUTHOR"
+ .PP
+ pam_time was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_time/pam_time.8.xml b/modules/pam_time/pam_time.8.xml
+index 1fa60a1..748bcd1 100644
+--- a/modules/pam_time/pam_time.8.xml
++++ b/modules/pam_time/pam_time.8.xml
+@@ -186,7 +186,7 @@ login account required pam_time.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+diff --git a/modules/pam_time/time.conf.5 b/modules/pam_time/time.conf.5
+index c68dfa7..9064977 100644
+--- a/modules/pam_time/time.conf.5
++++ b/modules/pam_time/time.conf.5
+@@ -109,7 +109,7 @@ games ; * ; !waster ; Wd0000\-2400 | Wk1800\-0800
+ .PP
+ \fBpam_time\fR(8),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_time was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_time/time.conf.5.xml b/modules/pam_time/time.conf.5.xml
+index 3fe263d..30c9a92 100644
+--- a/modules/pam_time/time.conf.5.xml
++++ b/modules/pam_time/time.conf.5.xml
+@@ -133,7 +133,7 @@ games ; * ; !waster ; Wd0000-2400 | Wk1800-0800
+ <para>
+ <citerefentry><refentrytitle>pam_time</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+- <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
++ <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+diff --git a/modules/pam_timestamp/pam_timestamp.8 b/modules/pam_timestamp/pam_timestamp.8
+index a7b7e1c..347724b 100644
+--- a/modules/pam_timestamp/pam_timestamp.8
++++ b/modules/pam_timestamp/pam_timestamp.8
+@@ -124,7 +124,7 @@ timestamp files and directories
+ \fBpam_timestamp_check\fR(8),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_timestamp was written by Nalin Dahyabhai\&.
+diff --git a/modules/pam_timestamp/pam_timestamp.8.xml b/modules/pam_timestamp/pam_timestamp.8.xml
+index a763ad8..e6b2df7 100644
+--- a/modules/pam_timestamp/pam_timestamp.8.xml
++++ b/modules/pam_timestamp/pam_timestamp.8.xml
+@@ -190,7 +190,7 @@ session optional pam_timestamp.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_timestamp/pam_timestamp_check.8 b/modules/pam_timestamp/pam_timestamp_check.8
+index 3425a36..f19a225 100644
+--- a/modules/pam_timestamp/pam_timestamp_check.8
++++ b/modules/pam_timestamp/pam_timestamp_check.8
+@@ -127,7 +127,7 @@ timestamp files and directories
+ \fBpam_timestamp_check\fR(8),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_timestamp was written by Nalin Dahyabhai\&.
+diff --git a/modules/pam_timestamp/pam_timestamp_check.8.xml b/modules/pam_timestamp/pam_timestamp_check.8.xml
+index f0c0956..e947f75 100644
+--- a/modules/pam_timestamp/pam_timestamp_check.8.xml
++++ b/modules/pam_timestamp/pam_timestamp_check.8.xml
+@@ -189,7 +189,7 @@ session optional pam_timestamp.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_tty_audit/pam_tty_audit.8 b/modules/pam_tty_audit/pam_tty_audit.8
+index ada11ae..2ba5335 100644
+--- a/modules/pam_tty_audit/pam_tty_audit.8
++++ b/modules/pam_tty_audit/pam_tty_audit.8
+@@ -129,7 +129,7 @@ session required pam_tty_audit\&.so disable=* enable=root
+ \fBaureport\fR(8),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_tty_audit was written by Miloslav Trmač <mitr@redhat\&.com>\&. The log_passwd option was added by Richard Guy Briggs <rgb@redhat\&.com>\&.
+diff --git a/modules/pam_tty_audit/pam_tty_audit.8.xml b/modules/pam_tty_audit/pam_tty_audit.8.xml
+index b46bbf7..79d8115 100644
+--- a/modules/pam_tty_audit/pam_tty_audit.8.xml
++++ b/modules/pam_tty_audit/pam_tty_audit.8.xml
+@@ -178,7 +178,7 @@ session required pam_tty_audit.so disable=* enable=root
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_umask/pam_umask.8 b/modules/pam_umask/pam_umask.8
+index 741c316..c7636e2 100644
+--- a/modules/pam_umask/pam_umask.8
++++ b/modules/pam_umask/pam_umask.8
+@@ -170,7 +170,7 @@ to set the user specific umask at login:
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_umask was written by Thorsten Kukuk <kukuk@thkukuk\&.de>\&.
+diff --git a/modules/pam_umask/pam_umask.8.xml b/modules/pam_umask/pam_umask.8.xml
+index 0527667..acb3bc0 100644
+--- a/modules/pam_umask/pam_umask.8.xml
++++ b/modules/pam_umask/pam_umask.8.xml
+@@ -243,7 +243,7 @@
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_unix/pam_unix.8 b/modules/pam_unix/pam_unix.8
+index 6f5f19b..07f8308 100644
+--- a/modules/pam_unix/pam_unix.8
++++ b/modules/pam_unix/pam_unix.8
+@@ -310,7 +310,7 @@ session required pam_unix\&.so
+ \fBlogin.defs\fR(5),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_unix was written by various people\&.
+diff --git a/modules/pam_unix/pam_unix.8.xml b/modules/pam_unix/pam_unix.8.xml
+index 4e63a49..a025c0e 100644
+--- a/modules/pam_unix/pam_unix.8.xml
++++ b/modules/pam_unix/pam_unix.8.xml
+@@ -556,7 +556,7 @@ session required pam_unix.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_userdb/pam_userdb.8 b/modules/pam_userdb/pam_userdb.8
+index c639772..a2493b5 100644
+--- a/modules/pam_userdb/pam_userdb.8
++++ b/modules/pam_userdb/pam_userdb.8
+@@ -152,7 +152,7 @@ auth sufficient pam_userdb\&.so icase db=/etc/dbtest
+ \fBcrypt\fR(3),
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_userdb was written by Cristian Gafton >gafton@redhat\&.com<\&.
+diff --git a/modules/pam_userdb/pam_userdb.8.xml b/modules/pam_userdb/pam_userdb.8.xml
+index 0f96410..86ba895 100644
+--- a/modules/pam_userdb/pam_userdb.8.xml
++++ b/modules/pam_userdb/pam_userdb.8.xml
+@@ -276,7 +276,7 @@ auth sufficient pam_userdb.so icase db=/etc/dbtest
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_warn/pam_warn.8 b/modules/pam_warn/pam_warn.8
+index 3e507d7..0138c70 100644
+--- a/modules/pam_warn/pam_warn.8
++++ b/modules/pam_warn/pam_warn.8
+@@ -83,7 +83,7 @@ other session required pam_deny\&.so
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_warn was written by Andrew G\&. Morgan <morgan@kernel\&.org>\&.
+diff --git a/modules/pam_warn/pam_warn.8.xml b/modules/pam_warn/pam_warn.8.xml
+index a20c5f7..a69e1d6 100644
+--- a/modules/pam_warn/pam_warn.8.xml
++++ b/modules/pam_warn/pam_warn.8.xml
+@@ -87,7 +87,7 @@ other session required pam_deny.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_wheel/pam_wheel.8 b/modules/pam_wheel/pam_wheel.8
+index 8077e81..ca687e5 100644
+--- a/modules/pam_wheel/pam_wheel.8
++++ b/modules/pam_wheel/pam_wheel.8
+@@ -2,12 +2,12 @@
+ .\" Title: pam_wheel
+ .\" Author: [see the "AUTHOR" section]
+ .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+-.\" Date: 05/07/2023
++.\" Date: 09/13/2023
+ .\" Manual: Linux-PAM Manual
+ .\" Source: Linux-PAM
+ .\" Language: English
+ .\"
+-.TH "PAM_WHEEL" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
++.TH "PAM_WHEEL" "8" "09/13/2023" "Linux\-PAM" "Linux\-PAM Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+@@ -31,7 +31,7 @@
+ pam_wheel \- Only permit root access to members of group wheel
+ .SH "SYNOPSIS"
+ .HP \w'\fBpam_wheel\&.so\fR\ 'u
+-\fBpam_wheel\&.so\fR [debug] [deny] [group=\fIname\fR] [root_only] [trust] [use_uid]
++\fBpam_wheel\&.so\fR [debug] [deny] [group=\fIname\fR] [root_only] [trust]
+ .SH "DESCRIPTION"
+ .PP
+ The pam_wheel PAM module is used to enforce the so\-called
+@@ -72,11 +72,6 @@ trust
+ .RS 4
+ The pam_wheel module will return PAM_SUCCESS instead of PAM_IGNORE if the user is a member of the wheel group (thus with a little play stacking the modules the wheel members may be able to su to root without being prompted for a passwd)\&.
+ .RE
+-.PP
+-use_uid
+-.RS 4
+-The check will be done against the real uid of the calling process, instead of trying to obtain the user from the login session associated with the terminal in use\&.
+-.RE
+ .SH "MODULE TYPES PROVIDED"
+ .PP
+ The
+@@ -141,7 +136,7 @@ su auth required pam_unix\&.so
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_wheel was written by Cristian Gafton <gafton@redhat\&.com>\&.
+diff --git a/modules/pam_wheel/pam_wheel.8.xml b/modules/pam_wheel/pam_wheel.8.xml
+index b42e27d..86f2828 100644
+--- a/modules/pam_wheel/pam_wheel.8.xml
++++ b/modules/pam_wheel/pam_wheel.8.xml
+@@ -210,7 +210,7 @@ su auth required pam_unix.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+diff --git a/modules/pam_xauth/pam_xauth.8 b/modules/pam_xauth/pam_xauth.8
+index 31c9074..e6f23c1 100644
+--- a/modules/pam_xauth/pam_xauth.8
++++ b/modules/pam_xauth/pam_xauth.8
+@@ -177,7 +177,7 @@ XXX
+ .PP
+ \fBpam.conf\fR(5),
+ \fBpam.d\fR(5),
+-\fBpam\fR(8)
++\fBpam\fR(7)
+ .SH "AUTHOR"
+ .PP
+ pam_xauth was written by Nalin Dahyabhai <nalin@redhat\&.com>, based on original version by Michael K\&. Johnson <johnsonm@redhat\&.com>\&.
+diff --git a/modules/pam_xauth/pam_xauth.8.xml b/modules/pam_xauth/pam_xauth.8.xml
+index f5fc5a3..214226b 100644
+--- a/modules/pam_xauth/pam_xauth.8.xml
++++ b/modules/pam_xauth/pam_xauth.8.xml
+@@ -273,7 +273,7 @@ session optional pam_xauth.so
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+- <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
++ <refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
diff --git a/debian/patches-applied/fix-autoreconf.patch b/debian/patches/fix-autoreconf.patch
index bdd96262..927a0473 100644
--- a/debian/patches-applied/fix-autoreconf.patch
+++ b/debian/patches/fix-autoreconf.patch
@@ -8,11 +8,11 @@ Do not override user variables in Makefile.am, see the
doc/specs/Makefile.am | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
-Index: pam/doc/specs/Makefile.am
-===================================================================
---- pam.orig/doc/specs/Makefile.am
-+++ pam/doc/specs/Makefile.am
-@@ -12,9 +12,9 @@
+diff --git a/doc/specs/Makefile.am b/doc/specs/Makefile.am
+index 58e14b3..2ebd980 100644
+--- a/doc/specs/Makefile.am
++++ b/doc/specs/Makefile.am
+@@ -12,9 +12,9 @@ draft-morgan-pam-current.txt: padout draft-morgan-pam.raw
AM_YFLAGS = -d
CC = @CC_FOR_BUILD@
diff --git a/debian/patches-applied/hurd_no_setfsuid b/debian/patches/hurd_no_setfsuid
index 00610a87..16d8ba54 100644
--- a/debian/patches-applied/hurd_no_setfsuid
+++ b/debian/patches/hurd_no_setfsuid
@@ -1,14 +1,21 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: hurd_no_setfsuid
+
On systems without setfsuid(), use setreuid() instead.
Authors: Steve Langasek <vorlon@debian.org>
Upstream status: to be forwarded, now that pam_modutil_{drop,regain}_priv
are implemented
+---
+ libpam/pam_modutil_priv.c | 40 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 40 insertions(+)
-Index: pam/libpam/pam_modutil_priv.c
-===================================================================
---- pam.orig/libpam/pam_modutil_priv.c
-+++ pam/libpam/pam_modutil_priv.c
+diff --git a/libpam/pam_modutil_priv.c b/libpam/pam_modutil_priv.c
+index a463e06..7df6e6b 100644
+--- a/libpam/pam_modutil_priv.c
++++ b/libpam/pam_modutil_priv.c
@@ -14,7 +14,9 @@
#include <syslog.h>
#include <pwd.h>
diff --git a/debian/patches-applied/lib_security_multiarch_compat b/debian/patches/lib_security_multiarch_compat
index e386ff39..0e7ada42 100644
--- a/debian/patches-applied/lib_security_multiarch_compat
+++ b/debian/patches/lib_security_multiarch_compat
@@ -1,3 +1,7 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: lib_security_multiarch_compat
+
Unqualified module paths should always be looked up in *both* the default
module dir, *and* the ISA dir. That's what paths are for.
@@ -10,12 +14,15 @@ Upstream status: not ready to be committed - this needs tweaked, we're
currently abusing the existing variables and inverting their meaning in
order to get everything installed where we want it and get absolute paths
the way we want them.
+---
+ libpam/pam_handlers.c | 34 ++++++++++++++++++++++------------
+ 1 file changed, 22 insertions(+), 12 deletions(-)
-Index: pam-1.4.0/libpam/pam_handlers.c
-===================================================================
---- pam-1.4.0.orig/libpam/pam_handlers.c
-+++ pam-1.4.0/libpam/pam_handlers.c
-@@ -735,7 +735,27 @@ _pam_load_module(pam_handle_t *pamh, con
+diff --git a/libpam/pam_handlers.c b/libpam/pam_handlers.c
+index c7045d2..dc5f81f 100644
+--- a/libpam/pam_handlers.c
++++ b/libpam/pam_handlers.c
+@@ -737,7 +737,27 @@ _pam_load_module(pam_handle_t *pamh, const char *mod_path, int handler_type)
success = PAM_ABORT;
D(("_pam_load_module: _pam_dlopen(%s)", mod_path));
@@ -44,7 +51,7 @@ Index: pam-1.4.0/libpam/pam_handlers.c
D(("_pam_load_module: _pam_dlopen'ed"));
D(("_pam_load_module: dlopen'ed"));
if (mod->dl_handle == NULL) {
-@@ -812,7 +832,6 @@ int _pam_add_handler(pam_handle_t *pamh
+@@ -814,7 +834,6 @@ int _pam_add_handler(pam_handle_t *pamh
struct handler **handler_p2;
struct handlers *the_handlers;
const char *sym, *sym2;
@@ -52,7 +59,7 @@ Index: pam-1.4.0/libpam/pam_handlers.c
servicefn func, func2;
int mod_type = PAM_MT_FAULTY_MOD;
-@@ -824,16 +843,7 @@ int _pam_add_handler(pam_handle_t *pamh
+@@ -826,16 +845,7 @@ int _pam_add_handler(pam_handle_t *pamh
if ((handler_type == PAM_HT_MODULE || handler_type == PAM_HT_SILENT_MODULE) &&
mod_path != NULL) {
diff --git a/debian/patches/make_documentation_reproducible.patch b/debian/patches/make_documentation_reproducible.patch
new file mode 100644
index 00000000..105766a9
--- /dev/null
+++ b/debian/patches/make_documentation_reproducible.patch
@@ -0,0 +1,25 @@
+From: "jumapico@gmail.com" <jumapico@gmail.com>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: Make documentation reproducible
+
+Last-Update: 2019-01-06
+
+Add LC_ALL=C.UTF-8 to w3m to avoid changes in the output when build the
+documentation with different locales.
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9b0f83..5f11912 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -647,7 +647,7 @@ JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl-ns/current/manp
+
+ AC_PATH_PROG([BROWSER], [w3m])
+ if test -n "$BROWSER"; then
+- BROWSER="$BROWSER -T text/html -dump"
++ BROWSER="LC_ALL=C.UTF-8 $BROWSER -T text/html -dump"
+ else
+ AC_PATH_PROG([BROWSER], [elinks])
+ if test -n "$BROWSER"; then
diff --git a/debian/patches/no_PATH_MAX_on_hurd b/debian/patches/no_PATH_MAX_on_hurd
new file mode 100644
index 00000000..6c20ab8c
--- /dev/null
+++ b/debian/patches/no_PATH_MAX_on_hurd
@@ -0,0 +1,28 @@
+From: Steve Langasek <vorlon@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: define PATH_MAX for compatibility when it's not already set
+
+Bug-Debian: http://bugs.debian.org/552043
+
+Some platforms, such as the Hurd, don't set PATH_MAX. Set a reasonable
+default value in this case.
+---
+ tests/tst-dlopen.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/tests/tst-dlopen.c b/tests/tst-dlopen.c
+index 7092716..535ee1c 100644
+--- a/tests/tst-dlopen.c
++++ b/tests/tst-dlopen.c
+@@ -16,6 +16,11 @@
+ #include <limits.h>
+ #include <sys/stat.h>
+
++/* Hurd compatibility */
++#ifndef PATH_MAX
++#define PATH_MAX 4096
++#endif
++
+ /* Simple program to see if dlopen() would succeed. */
+ int main(int argc, char **argv)
+ {
diff --git a/debian/patches-applied/nullok_secure-compat.patch b/debian/patches/nullok_secure-compat.patch
index d85aa9fe..a69cd05e 100644
--- a/debian/patches-applied/nullok_secure-compat.patch
+++ b/debian/patches/nullok_secure-compat.patch
@@ -1,12 +1,17 @@
-Description: Support nullok_secure as a deprecated alias for nullok
-Author: Steve Langasek <vorlon@debian.org>
+From: Steve Langasek <vorlon@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: Support nullok_secure as a deprecated alias for nullok
+
Last-Update: 2020-08-11
+---
+ modules/pam_unix/support.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
-Index: pam/modules/pam_unix/support.h
-===================================================================
---- pam.orig/modules/pam_unix/support.h
-+++ pam/modules/pam_unix/support.h
-@@ -102,8 +102,9 @@
+diff --git a/modules/pam_unix/support.h b/modules/pam_unix/support.h
+index 91e7478..e15ee98 100644
+--- a/modules/pam_unix/support.h
++++ b/modules/pam_unix/support.h
+@@ -102,8 +102,9 @@ typedef struct {
#define UNIX_YESCRYPT_PASS 32 /* new password hashes will use yescrypt */
#define UNIX_NULLRESETOK 33 /* allow empty password if password reset is enforced */
#define UNIX_OBSCURE_CHECKS 34 /* enable obscure checks on passwords */
@@ -17,7 +22,7 @@ Index: pam/modules/pam_unix/support.h
#define UNIX_DES_CRYPT(ctrl) (off(UNIX_MD5_PASS,ctrl)&&off(UNIX_BIGCRYPT,ctrl)&&off(UNIX_SHA256_PASS,ctrl)&&off(UNIX_SHA512_PASS,ctrl)&&off(UNIX_BLOWFISH_PASS,ctrl)&&off(UNIX_GOST_YESCRYPT_PASS,ctrl)&&off(UNIX_YESCRYPT_PASS,ctrl))
-@@ -147,6 +148,7 @@
+@@ -147,6 +148,7 @@ static const UNIX_Ctrls unix_args[UNIX_CTRLS_] =
/* UNIX_YESCRYPT_PASS */ {"yescrypt", _ALL_ON_^(0x6EC22000ULL), 0x40000000, 1},
/* UNIX_NULLRESETOK */ {"nullresetok", _ALL_ON_, 0x80000000, 0},
/* UNIX_OBSCURE_CHECKS */ {"obscure", _ALL_ON_, 0x100000000, 0},
diff --git a/debian/patches-applied/pam-limits-nofile-fd-setsize-cap b/debian/patches/pam-limits-nofile-fd-setsize-cap
index 9c0503c7..866ff1e3 100644
--- a/debian/patches-applied/pam-limits-nofile-fd-setsize-cap
+++ b/debian/patches/pam-limits-nofile-fd-setsize-cap
@@ -1,5 +1,7 @@
From: Robie Basak <robie.basak@ubuntu.com>
-Subject: pam_limits: cap the default soft nofile limit read from pid 1 to FD_SETSIZE
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: pam_limits: cap the default soft nofile limit read from pid 1 to
+ FD_SETSIZE
Cap the default soft nofile limit read from pid 1 to FD_SETSIZE since
larger values can cause problems with fd_set overflow and systemd sets
@@ -38,12 +40,15 @@ Forwarded: no
Reviewed-by: Adam Conrad <adconrad@ubuntu.com>
Reviewed-by: Martin Pitt <martin.pitt@ubuntu.com>
Last-Update: 2015-04-22
+---
+ modules/pam_limits/pam_limits.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
-Index: pam/modules/pam_limits/pam_limits.c
-===================================================================
---- pam.orig/modules/pam_limits/pam_limits.c
-+++ pam/modules/pam_limits/pam_limits.c
-@@ -450,6 +450,14 @@
+diff --git a/modules/pam_limits/pam_limits.c b/modules/pam_limits/pam_limits.c
+index adda08b..a58d424 100644
+--- a/modules/pam_limits/pam_limits.c
++++ b/modules/pam_limits/pam_limits.c
+@@ -459,6 +459,14 @@ static void parse_kernel_limits(pam_handle_t *pamh, struct pam_limit_s *pl, int
pl->limits[i].src_hard = LIMITS_DEF_KERNEL;
}
fclose(limitsfile);
diff --git a/debian/patches-applied/pam_mkhomedir_stat_before_opendir b/debian/patches/pam_mkhomedir_stat_before_opendir
index aec49b69..50026225 100644
--- a/debian/patches-applied/pam_mkhomedir_stat_before_opendir
+++ b/debian/patches/pam_mkhomedir_stat_before_opendir
@@ -1,8 +1,17 @@
-Index: pam/modules/pam_mkhomedir/mkhomedir_helper.c
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: pam_mkhomedir_stat_before_opendir
+
===================================================================
---- pam.orig/modules/pam_mkhomedir/mkhomedir_helper.c
-+++ pam/modules/pam_mkhomedir/mkhomedir_helper.c
-@@ -39,6 +39,7 @@
+---
+ modules/pam_mkhomedir/mkhomedir_helper.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/modules/pam_mkhomedir/mkhomedir_helper.c b/modules/pam_mkhomedir/mkhomedir_helper.c
+index 3213f02..643d5d0 100644
+--- a/modules/pam_mkhomedir/mkhomedir_helper.c
++++ b/modules/pam_mkhomedir/mkhomedir_helper.c
+@@ -39,6 +39,7 @@ create_homedir(const struct passwd *pwd,
DIR *d;
struct dirent *dent;
int retval = PAM_SESSION_ERR;
@@ -10,7 +19,7 @@ Index: pam/modules/pam_mkhomedir/mkhomedir_helper.c
/* Create the new directory */
if (mkdir(dest, 0700) && errno != EEXIST)
-@@ -54,6 +55,12 @@
+@@ -54,6 +55,12 @@ create_homedir(const struct passwd *pwd,
goto go_out;
}
diff --git a/debian/patches/pam_namespace_o_directory b/debian/patches/pam_namespace_o_directory
new file mode 100644
index 00000000..f8838223
--- /dev/null
+++ b/debian/patches/pam_namespace_o_directory
@@ -0,0 +1,58 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Fri, 2 Feb 2024 11:38:09 -0700
+Subject: From: Matthias Gerstner <matthias.gerstner@suse.de> Date: Wed,
+ 27 Dec 2023 14:01:59 +0100 Subject: pam_namespace: protect_dir(): use
+ O_DIRECTORY to prevent local DoS situations Origin:
+ https://github.com/linux-pam/linux-pam/commit/031bb5a5d0d950253b68138b498dc93be69a64cb
+ Bug-Debian: https://bugs.debian.org/1061097 Bug-Debian-Security:
+ https://security-tracker.debian.org/tracker/CVE-2024-22365
+
+Without O_DIRECTORY the path crawling logic is subject to e.g. FIFOs
+being placed in user controlled directories, causing the PAM module to
+block indefinitely during `openat()`.
+
+Pass O_DIRECTORY to cause the `openat()` to fail if the path does not
+refer to a directory.
+
+With this the check whether the final path element is a directory
+becomes unnecessary, drop it.
+---
+ modules/pam_namespace/pam_namespace.c | 18 +-----------------
+ 1 file changed, 1 insertion(+), 17 deletions(-)
+
+diff --git a/modules/pam_namespace/pam_namespace.c b/modules/pam_namespace/pam_namespace.c
+index f34ce93..ef85644 100644
+--- a/modules/pam_namespace/pam_namespace.c
++++ b/modules/pam_namespace/pam_namespace.c
+@@ -1194,7 +1194,7 @@ static int protect_dir(const char *path, mode_t mode, int do_mkdir,
+ int dfd = AT_FDCWD;
+ int dfd_next;
+ int save_errno;
+- int flags = O_RDONLY;
++ int flags = O_RDONLY | O_DIRECTORY;
+ int rv = -1;
+ struct stat st;
+
+@@ -1248,22 +1248,6 @@ static int protect_dir(const char *path, mode_t mode, int do_mkdir,
+ rv = openat(dfd, dir, flags);
+ }
+
+- if (rv != -1) {
+- if (fstat(rv, &st) != 0) {
+- save_errno = errno;
+- close(rv);
+- rv = -1;
+- errno = save_errno;
+- goto error;
+- }
+- if (!S_ISDIR(st.st_mode)) {
+- close(rv);
+- errno = ENOTDIR;
+- rv = -1;
+- goto error;
+- }
+- }
+-
+ if (flags & O_NOFOLLOW) {
+ /* we are inside user-owned dir - protect */
+ if (protect_mount(rv, p, idata) == -1) {
diff --git a/debian/patches-applied/pam_unix_dont_trust_chkpwd_caller.patch b/debian/patches/pam_unix_dont_trust_chkpwd_caller.patch
index 6a9e525e..5a94c25d 100644
--- a/debian/patches-applied/pam_unix_dont_trust_chkpwd_caller.patch
+++ b/debian/patches/pam_unix_dont_trust_chkpwd_caller.patch
@@ -1,3 +1,7 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: pam_unix_dont_trust_chkpwd_caller
+
Dropping suid bits is not enough to let us trust the caller; the unix_chkpwd
helper could be sgid shadow instead of suid root, as it is in Debian and
Ubuntu by default. Drop any sgid bits as well.
@@ -6,12 +10,15 @@ Authors: Steve Langasek <vorlon@debian.org>,
Michael Spang <mspang@csclub.uwaterloo.ca>
Upstream status: to be submitted
+---
+ modules/pam_unix/unix_chkpwd.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
-Index: pam/modules/pam_unix/unix_chkpwd.c
-===================================================================
---- pam.orig/modules/pam_unix/unix_chkpwd.c
-+++ pam/modules/pam_unix/unix_chkpwd.c
-@@ -138,9 +138,10 @@
+diff --git a/modules/pam_unix/unix_chkpwd.c b/modules/pam_unix/unix_chkpwd.c
+index 556a2e2..5e7b571 100644
+--- a/modules/pam_unix/unix_chkpwd.c
++++ b/modules/pam_unix/unix_chkpwd.c
+@@ -138,9 +138,10 @@ int main(int argc, char *argv[])
/* if the caller specifies the username, verify that user
matches it */
if (user == NULL || strcmp(user, argv[1])) {
diff --git a/debian/patches-applied/series b/debian/patches/series
index 3ea285ae..dd734f94 100644
--- a/debian/patches-applied/series
+++ b/debian/patches/series
@@ -1,24 +1,22 @@
pam_unix_dont_trust_chkpwd_caller.patch
make_documentation_reproducible.patch
-007_modules_pam_unix
-008_modules_pam_limits_chroot
-021_nis_cleanup
+0003-pam_unix-obscure-checks.patch
022_pam_unix_group_time_miscfixes
026_pam_unix_passwd_unknown_user
-do_not_check_nis_accidentally
+031_pam_include
+036_pam_wheel_getlogin_considered_harmful
027_pam_limits_better_init_allow_explicit_root
-031_pam_include
+pam-limits-nofile-fd-setsize-cap
032_pam_limits_EPERM_NOT_FATAL
-036_pam_wheel_getlogin_considered_harmful
-hurd_no_setfsuid
+008_modules_pam_limits_chroot
040_pam_limits_log_failure
045_pam_dispatch_jump_is_ignore
-PAM-manpage-section
+hurd_no_setfsuid
+PAM-manpage-section
update-motd
-no_PATH_MAX_on_hurd
lib_security_multiarch_compat
-pam-limits-nofile-fd-setsize-cap
+no_PATH_MAX_on_hurd
fix-autoreconf.patch
nullok_secure-compat.patch
-
pam_mkhomedir_stat_before_opendir
+pam_namespace_o_directory
diff --git a/debian/patches-applied/update-motd b/debian/patches/update-motd
index 14d5fee4..fc9c9d8d 100644
--- a/debian/patches-applied/update-motd
+++ b/debian/patches/update-motd
@@ -1,3 +1,7 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: update-motd
+
Provide a more dynamic MOTD, based on the short-lived update-motd project.
Authors: Dustin Kirkland <kirkland@canonical.com>
@@ -5,12 +9,73 @@ Authors: Dustin Kirkland <kirkland@canonical.com>
Last-Update: 2019-02-12
Forwarded: no
Bug-Ubuntu: https://bugs.launchpad.net/bugs/399071
+---
+ modules/pam_motd/README | 4 ++++
+ modules/pam_motd/pam_motd.8 | 7 +++++++
+ modules/pam_motd/pam_motd.8.xml | 11 +++++++++++
+ modules/pam_motd/pam_motd.c | 18 ++++++++++++++++++
+ 4 files changed, 40 insertions(+)
-Index: pam/modules/pam_motd/pam_motd.c
-===================================================================
---- pam.orig/modules/pam_motd/pam_motd.c
-+++ pam/modules/pam_motd/pam_motd.c
-@@ -352,6 +352,7 @@
+diff --git a/modules/pam_motd/README b/modules/pam_motd/README
+index 01bc64e..375ec80 100644
+--- a/modules/pam_motd/README
++++ b/modules/pam_motd/README
+@@ -52,6 +52,10 @@ motd_dir=/path/dirname.d
+ colon-separated list. By default this option is set to /etc/motd.d:/run/
+ motd.d:/usr/lib/motd.d.
+
++noupdate
++
++ Don't run the scripts in /etc/update-motd.d to refresh the motd file.
++
+ When no options are given, the default behavior applies for both options.
+ Specifying either option (or both) will disable the default behavior for both
+ options.
+diff --git a/modules/pam_motd/pam_motd.8 b/modules/pam_motd/pam_motd.8
+index 3f65bb5..6a6ab4e 100644
+--- a/modules/pam_motd/pam_motd.8
++++ b/modules/pam_motd/pam_motd.8
+@@ -109,6 +109,13 @@ directory is scanned and each file contained inside of it is displayed\&. Multip
+ /etc/motd\&.d:/run/motd\&.d:/usr/lib/motd\&.d\&.
+ .RE
+ .PP
++\fBnoupdate\fR
++.RS 4
++Don\*(Aqt run the scripts in
++/etc/update\-motd\&.d
++to refresh the motd file\&.
++.RE
++.PP
+ When no options are given, the default behavior applies for both options\&. Specifying either option (or both) will disable the default behavior for both options\&.
+ .SH "MODULE TYPES PROVIDED"
+ .PP
+diff --git a/modules/pam_motd/pam_motd.8.xml b/modules/pam_motd/pam_motd.8.xml
+index 2fc5310..8369779 100644
+--- a/modules/pam_motd/pam_motd.8.xml
++++ b/modules/pam_motd/pam_motd.8.xml
+@@ -112,6 +112,17 @@
+ </para>
+ </listitem>
+ </varlistentry>
++ <varlistentry>
++ <term>
++ <option>noupdate</option>
++ </term>
++ <listitem>
++ <para>
++ Don't run the scripts in <filename>/etc/update-motd.d</filename>
++ to refresh the motd file.
++ </para>
++ </listitem>
++ </varlistentry>
+ </variablelist>
+ <para>
+ When no options are given, the default behavior applies for both
+diff --git a/modules/pam_motd/pam_motd.c b/modules/pam_motd/pam_motd.c
+index 5ca486e..8472dd6 100644
+--- a/modules/pam_motd/pam_motd.c
++++ b/modules/pam_motd/pam_motd.c
+@@ -383,6 +383,7 @@ int pam_sm_open_session(pam_handle_t *pamh, int flags,
int argc, const char **argv)
{
int retval = PAM_IGNORE;
@@ -18,7 +83,7 @@ Index: pam/modules/pam_motd/pam_motd.c
const char *motd_path = NULL;
char *motd_path_copy = NULL;
unsigned int num_motd_paths = 0;
-@@ -361,6 +362,7 @@
+@@ -392,6 +393,7 @@ int pam_sm_open_session(pam_handle_t *pamh, int flags,
unsigned int num_motd_dir_paths = 0;
char **motd_dir_path_split = NULL;
int report_missing;
@@ -26,7 +91,7 @@ Index: pam/modules/pam_motd/pam_motd.c
if (flags & PAM_SILENT) {
return retval;
-@@ -390,6 +392,9 @@
+@@ -421,6 +423,9 @@ int pam_sm_open_session(pam_handle_t *pamh, int flags,
"motd_dir= specification missing argument - ignored");
}
}
@@ -36,7 +101,7 @@ Index: pam/modules/pam_motd/pam_motd.c
else
pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv);
}
-@@ -402,6 +407,19 @@
+@@ -433,6 +438,19 @@ int pam_sm_open_session(pam_handle_t *pamh, int flags,
report_missing = 1;
}
@@ -56,58 +121,3 @@ Index: pam/modules/pam_motd/pam_motd.c
if (motd_path != NULL) {
motd_path_copy = strdup(motd_path);
}
-Index: pam/modules/pam_motd/pam_motd.8.xml
-===================================================================
---- pam.orig/modules/pam_motd/pam_motd.8.xml
-+++ pam/modules/pam_motd/pam_motd.8.xml
-@@ -115,6 +115,17 @@
- </para>
- </listitem>
- </varlistentry>
-+ <varlistentry>
-+ <term>
-+ <option>noupdate</option>
-+ </term>
-+ <listitem>
-+ <para>
-+ Don't run the scripts in <filename>/etc/update-motd.d</filename>
-+ to refresh the motd file.
-+ </para>
-+ </listitem>
-+ </varlistentry>
- </variablelist>
- <para>
- When no options are given, the default behavior applies for both
-Index: pam/modules/pam_motd/pam_motd.8
-===================================================================
---- pam.orig/modules/pam_motd/pam_motd.8
-+++ pam/modules/pam_motd/pam_motd.8
-@@ -109,6 +109,13 @@
- /etc/motd\&.d:/run/motd\&.d:/usr/lib/motd\&.d\&.
- .RE
- .PP
-+\fBnoupdate\fR
-+.RS 4
-+Don\*(Aqt run the scripts in
-+/etc/update\-motd\&.d
-+to refresh the motd file\&.
-+.RE
-+.PP
- When no options are given, the default behavior applies for both options\&. Specifying either option (or both) will disable the default behavior for both options\&.
- .SH "MODULE TYPES PROVIDED"
- .PP
-Index: pam/modules/pam_motd/README
-===================================================================
---- pam.orig/modules/pam_motd/README
-+++ pam/modules/pam_motd/README
-@@ -52,6 +52,10 @@
- colon-separated list. By default this option is set to /etc/motd.d:/run/
- motd.d:/usr/lib/motd.d.
-
-+noupdate
-+
-+ Don't run the scripts in /etc/update-motd.d to refresh the motd file.
-+
- When no options are given, the default behavior applies for both options.
- Specifying either option (or both) will disable the default behavior for both
- options.
diff --git a/debian/po/sv.po b/debian/po/sv.po
index 8c44bbaf..03ac092e 100644
--- a/debian/po/sv.po
+++ b/debian/po/sv.po
@@ -1,8 +1,8 @@
-# Debconf questions for the pam package translated to Swedish.
-# Copyright (C) 2007 Steve Langasek <vorlon@debian.org>
+# Translation of pam debconf template to Swedish
+# Copyright (C) 2023 Martin Bagge <brother@persilja.net>
# This file is distributed under the same license as the pam package.
#
-# Martin Bagge <brother@bsnet.se>, 2009, 2010, 2011
+# Martin Bagge <brother@persilja.net>, 2009, 2010, 2011, 2023
# Christer Andersson <klamm@comhem.se>, 2007.
msgid ""
msgstr ""
@@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2014-04-08 11:37+0200\n"
-"Last-Translator: Martin Bagge / brother <brother@bsnet.se>\n"
+"Last-Translator: Martin Bagge / brother <brother@persilja.net>\n"
"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@@ -28,12 +28,6 @@ msgstr "Tjänster att starta om efter uppgradering av PAM-biblioteket:"
#. Type: string
#. Description
#: ../libpam0g.templates:1001
-#, fuzzy
-#| msgid ""
-#| "Most services that use PAM need to be restarted to use modules built for "
-#| "this new version of libpam. Please review the following space-separated "
-#| "list of init.d scripts for services to be restarted now, and correct it "
-#| "if needed."
msgid ""
"Most services that use PAM need to be restarted to use modules built for "
"this new version of libpam. Please review the following space-separated "
@@ -41,8 +35,8 @@ msgid ""
msgstr ""
"De flesta tjänster som använder PAM behöver startas om för att använda "
"moduler som byggts för denna nya libpam-version. Gå igenom följande lista av "
-"init.d-skript (separerade med mellanslag) för tjänster som nu kommer att "
-"startas om och korrigera den om nödvändigt."
+"tjänster (separerade med mellanslag) som nu kommer att startas om och "
+"korrigera den om nödvändigt."
#. Type: error
#. Description
@@ -243,7 +237,7 @@ msgstr ""
#. Description
#: ../libpam-modules.templates:2001
msgid "PAM Profiles with Deprecated Modules Disabled"
-msgstr ""
+msgstr "PAM-profiler med utfasade moduler har avaktiverats"
#. Type: error
#. Description
@@ -254,12 +248,16 @@ msgid ""
"prevent users from accessing your system. As a result, these profiles have "
"been disabled."
msgstr ""
+"Ditt system hade PAM-profiler med PAM-modulerna ${modules} aktiverade. Dessa "
+"moduler har tagits bort från PAM. Om PAM-profilerna fortsatt skulle vara "
+"aktiverade så hade det förhindrat användare för att komma åt systemet. I och "
+"med detta så har profilerna inaktiverats."
#. Type: error
#. Description
#: ../libpam-modules.templates:3001
msgid "you are using pam_tally or pam_tally2 in your configuration"
-msgstr ""
+msgstr "Du använder pam_tally eller pam_tally2 i dina inställningar"
#. Type: error
#. Description
@@ -271,42 +269,14 @@ msgid ""
"modules in your PAM configuration after the upgrade will stop users from "
"being able to log into the system."
msgstr ""
+"pam_tally och pam_tally2 har tagits bort från PAM. Du använder någon av "
+"dessa moduler i PAMs inställningar i /etc/pam.d. Du måste ta bort "
+"användandet av dessa moduler innan PAM kan uppgraderas. Att ha dessa moduler "
+"i dina inställningar efter uppgraderingen kommer hindra användare från att "
+"logga in i ditt system."
#. Type: error
#. Description
#: ../libpam-modules.templates:3001
msgid "Consider the pam_faillock module as a replacement for pam_tally."
-msgstr ""
-
-#~ msgid "Your system allowed access without a password!"
-#~ msgstr "Ditt system tillät anslutningar utan lösenord!"
-
-#~ msgid ""
-#~ "A bug in a previous version of libpam-runtime resulted in no PAM profiles "
-#~ "being selected for use on this system. As a result, access was allowed "
-#~ "for a time to all accounts on your system, with or without a correct "
-#~ "password. Especially if this system can be accessed from the Internet, it "
-#~ "is likely that it has been compromised. Unless you are familiar with "
-#~ "recovering from security failures, viruses, and malicious software, you "
-#~ "should re-install this system from scratch or obtain the services of a "
-#~ "skilled system administrator. For more information, see:"
-#~ msgstr ""
-#~ "Ett fel i en tidigare version av libpam-runtime innebar att inga PAM-"
-#~ "profiler användes på systemet. Detta betydde i sin tur att alla konton på "
-#~ "systemet kunde använda skal, med eller utan ett korrekt lösenord. Om "
-#~ "detta system är åtkomligt via nätet är det mycket troligt att det kan ha "
-#~ "infiltrerats. Om du inte är säker på hur du ska återställa eventuella fel "
-#~ "på grund av intrång, virus eller skadlig programvara bör du installera om "
-#~ "systemet från grunden eller inhämta hjälp av en erfaren "
-#~ "systemadministratör. Läs mer om detta på:"
-
-#~ msgid ""
-#~ "The bug that allowed this wrong configuration is fixed in the current "
-#~ "version of libpam-runtime, and your configuration has now been corrected. "
-#~ "We apologize that previous versions of libpam-runtime did not detect and "
-#~ "prevent this situation."
-#~ msgstr ""
-#~ "Felet som orsakade dessa problem är åtgärdat i och med den aktuella "
-#~ "versionen av libpam-runtime och dina inställningar ha korrigerats. Vi ber "
-#~ "om ursäkt för att tidigare versioner av libpam-runtime inte upptäckte och "
-#~ "förhindrade att dessa fel uppstod."
+msgstr "Överväg att använda modulen pam_faillock som ersättare för pam_tally."
diff --git a/debian/rules b/debian/rules
index 73819f0c..075391ff 100755
--- a/debian/rules
+++ b/debian/rules
@@ -13,25 +13,30 @@ DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
LC_COLLATE=C
export LC_COLLATE
-export QUILT_PATCH_DIR = debian/patches-applied
d = $(CURDIR)/debian
dl = $(d)/local
%:
- dh $@ --with quilt,autoreconf
+ dh $@
+
# avoid libaudit-dev when bootstrapping
ifneq (,$(filter stage1,$(DEB_BUILD_PROFILES)))
CONFIGURE_OPTS += --disable-audit
-endif
+endif
+
+CONFIGURE_OPTS += --enable-logind
override_dh_auto_configure:
+ # Explicitly set libdir, sbindir to avoid upstream's override logic.
dh_auto_configure -- --enable-static --enable-shared \
- --libdir=/lib/$(DEB_HOST_MULTIARCH) \
- --enable-isadir=/lib/security \
+ --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
+ --sbindir=/usr/sbin \
+ --enable-isadir=/usr/lib/security \
--with-systemdunitdir=/usr/lib/systemd/system \
--disable-nis \
+ --enable-usergroups \
$(CONFIGURE_OPTS)
# .install files don't have "except for" handling, so we need to exclude
@@ -66,9 +71,14 @@ override_dh_installman:
override_dh_fixperms:
dh_fixperms
ifneq (,$(findstring libpam-modules, $(shell dh_listpackages)))
- chgrp shadow $(d)/libpam-modules-bin/sbin/unix_chkpwd
- chmod 02755 $(d)/libpam-modules-bin/sbin/unix_chkpwd
+ chgrp shadow $(d)/libpam-modules-bin/usr/sbin/unix_chkpwd
+ chmod 02755 $(d)/libpam-modules-bin/usr/sbin/unix_chkpwd
endif
override_dh_installchangelogs:
dh_installchangelogs NEWS
+
+debian/%:debian/%.in
+ sed -e 's/#DEB_HOST_MULTIARCH#/$(DEB_HOST_MULTIARCH)/g' $< > $@
+
+execute_before_dh_installdeb:debian/libpam0t64.preinst debian/libpam0t64.postrm
diff --git a/debian/source.lintian-overrides b/debian/source/lintian-overrides
index 85133c70..85133c70 100644
--- a/debian/source.lintian-overrides
+++ b/debian/source/lintian-overrides
diff --git a/debian/upstream/metadata b/debian/upstream/metadata
new file mode 100644
index 00000000..9728068d
--- /dev/null
+++ b/debian/upstream/metadata
@@ -0,0 +1,4 @@
+---
+Bug-Database: https://github.com/linux-pam/linux-pam/issues
+Bug-Submit: https://github.com/linux-pam/linux-pam/issues/new
+Repository-Browse: https://github.com/linux-pam/linux-pam
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 38319f5b..3b772427 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -8,7 +8,7 @@ CLEANFILES = *~
dist_html_DATA = index.html
-EXTRA_DIST = custom-html.xsl custom-man.xsl
+EXTRA_DIST = custom-html.xsl.in custom-man.xsl.in
#######################################################
diff --git a/doc/Makefile.in b/doc/Makefile.in
index ff0b3159..361d6df4 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -253,6 +253,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -265,11 +266,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -301,12 +304,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -329,6 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -339,12 +345,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -413,7 +423,7 @@ top_srcdir = @top_srcdir@
SUBDIRS = man specs sag adg mwg
CLEANFILES = *~
dist_html_DATA = index.html
-EXTRA_DIST = custom-html.xsl custom-man.xsl
+EXTRA_DIST = custom-html.xsl.in custom-man.xsl.in
all: all-recursive
.SUFFIXES:
diff --git a/doc/adg/Linux-PAM_ADG.xml b/doc/adg/Linux-PAM_ADG.xml
index 79452e17..169e15cf 100644
--- a/doc/adg/Linux-PAM_ADG.xml
+++ b/doc/adg/Linux-PAM_ADG.xml
@@ -1,50 +1,39 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<book id="adg">
- <bookinfo>
+<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg">
+ <info>
<title>The Linux-PAM Application Developers' Guide</title>
<authorgroup>
- <author>
- <firstname>Andrew G.</firstname>
- <surname>Morgan</surname>
- <email>morgan@kernel.org</email>
- </author>
- <author>
- <firstname>Thorsten</firstname>
- <surname>Kukuk</surname>
- <email>kukuk@thkukuk.de</email>
- </author>
+ <author><personname><firstname>Andrew G.</firstname><surname>Morgan</surname></personname><email>morgan@kernel.org</email></author>
+ <author><personname><firstname>Thorsten</firstname><surname>Kukuk</surname></personname><email>kukuk@thkukuk.de</email></author>
</authorgroup>
<releaseinfo>Version 1.1.2, 31. August 2010</releaseinfo>
<abstract>
<para>
This manual documents what an application developer needs to know
- about the <emphasis remap='B'>Linux-PAM</emphasis> library. It
+ about the <emphasis remap="B">Linux-PAM</emphasis> library. It
describes how an application might use the
- <emphasis remap='B'>Linux-PAM</emphasis> library to authenticate
+ <emphasis remap="B">Linux-PAM</emphasis> library to authenticate
users. In addition it contains a description of the functions
to be found in <filename>libpam_misc</filename> library, that can
be used in general applications. Finally, it contains some comments
on PAM related security issues for the application developer.
</para>
</abstract>
- </bookinfo>
+ </info>
- <chapter id="adg-introduction">
+ <chapter xml:id="adg-introduction">
<title>Introduction</title>
- <section id="adg-introduction-description">
+ <section xml:id="adg-introduction-description">
<title>Description</title>
<para>
- <emphasis remap='B'>Linux-PAM</emphasis>
+ <emphasis remap="B">Linux-PAM</emphasis>
(Pluggable Authentication Modules for Linux) is a library that enables
the local system administrator to choose how individual applications
authenticate users. For an overview of the
- <emphasis remap='B'>Linux-PAM</emphasis> library see the
+ <emphasis remap="B">Linux-PAM</emphasis> library see the
<emphasis>Linux-PAM System Administrators' Guide</emphasis>.
</para>
<para>
- It is the purpose of the <emphasis remap='B'>Linux-PAM</emphasis>
+ It is the purpose of the <emphasis remap="B">Linux-PAM</emphasis>
project to liberate the development of privilege granting software
from the development of secure and appropriate authentication schemes.
This is accomplished by providing a documented library of functions
@@ -64,11 +53,11 @@
</para>
</section>
- <section id="adg-introduction-synopsis">
+ <section xml:id="adg-introduction-synopsis">
<title>Synopsis</title>
<para>
For general applications that wish to use the services provided by
- <emphasis remap='B'>Linux-PAM</emphasis> the following is a summary
+ <emphasis remap="B">Linux-PAM</emphasis> the following is a summary
of the relevant linking information:
<programlisting>
#include &lt;security/pam_appl.h&gt;
@@ -92,7 +81,7 @@ cc -o application .... -lpam -lpam_misc
</section>
</chapter>
- <chapter id="adg-overview">
+ <chapter xml:id="adg-overview">
<title>Overview</title>
<para>
Most service-giving applications are restricted. In other words,
@@ -108,7 +97,7 @@ cc -o application .... -lpam -lpam_misc
authentication-token (password changing) management services. It is
important to realize when writing a PAM based application that these
services are provided in a manner that is
- <emphasis remap='B'>transparent</emphasis> to the application. That is
+ <emphasis remap="B">transparent</emphasis> to the application. That is
to say, when the application is written, no assumptions can be made
about <emphasis>how</emphasis> the client will be authenticated.
</para>
@@ -206,74 +195,58 @@ cc -o application .... -lpam -lpam_misc
</para>
</chapter>
- <chapter id="adg-interface">
+ <chapter xml:id="adg-interface">
<title>
- The public interface to <emphasis remap='B'>Linux-PAM</emphasis>
+ The public interface to <emphasis remap="B">Linux-PAM</emphasis>
</title>
<para>
Firstly, the relevant include file for the
- <emphasis remap='B'>Linux-PAM</emphasis> library is
+ <emphasis remap="B">Linux-PAM</emphasis> library is
<function>&lt;security/pam_appl.h&gt;</function>.
It contains the definitions for a number of functions. After
listing these functions, we collect some guiding remarks for
programmers.
</para>
- <section id="adg-interface-by-app-expected">
+ <section xml:id="adg-interface-by-app-expected">
<title>What can be expected by the application</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_start.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_end.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_set_item.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_get_item.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_strerror.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_fail_delay.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_authenticate.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_setcred.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_acct_mgmt.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_chauthtok.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_open_session.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_close_session.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_putenv.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_getenv.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_getenvlist.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_start.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_end.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_set_item.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_get_item.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_strerror.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_fail_delay.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_authenticate.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_setcred.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_acct_mgmt.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_chauthtok.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_open_session.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_close_session.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_putenv.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_getenv.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_getenvlist.xml"/>
</section>
- <section id="adg-interface-of-app-expected">
+ <section xml:id="adg-interface-of-app-expected">
<title>What is expected of an application</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_conv.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_conv.xml"/>
</section>
- <section id="adg-interface-programming-notes">
+ <section xml:id="adg-interface-programming-notes">
<title>Programming notes</title>
<para>
Note, all of the authentication service function calls accept the
- token <emphasis remap='B'>PAM_SILENT</emphasis>, which instructs
+ token <emphasis remap="B">PAM_SILENT</emphasis>, which instructs
the modules to not send messages to the application. This token
can be logically OR'd with any one of the permitted tokens specific
to the individual function calls.
- <emphasis remap='B'>PAM_SILENT</emphasis> does not override the
+ <emphasis remap="B">PAM_SILENT</emphasis> does not override the
prompting of the user for passwords etc., it only stops informative
messages from being generated.
</para>
</section>
</chapter>
- <chapter id="adg-security">
+ <chapter xml:id="adg-security">
<title>
- Security issues of <emphasis remap='B'>Linux-PAM</emphasis>
+ Security issues of <emphasis remap="B">Linux-PAM</emphasis>
</title>
<para>
PAM, from the perspective of an application, is a convenient API for
@@ -284,19 +257,19 @@ cc -o application .... -lpam -lpam_misc
</para>
<para>
A poorly (or maliciously) written application can defeat any
- <emphasis remap='B'>Linux-PAM</emphasis> module's authentication
+ <emphasis remap="B">Linux-PAM</emphasis> module's authentication
mechanisms by simply ignoring it's return values. It is the
applications task and responsibility to grant privileges and access
- to services. The <emphasis remap='B'>Linux-PAM</emphasis> library
+ to services. The <emphasis remap="B">Linux-PAM</emphasis> library
simply assumes the responsibility of <emphasis>authenticating</emphasis>
the user; ascertaining that the user <emphasis>is</emphasis> who they
say they are. Care should be taken to anticipate all of the documented
- behavior of the <emphasis remap='B'>Linux-PAM</emphasis> library
+ behavior of the <emphasis remap="B">Linux-PAM</emphasis> library
functions. A failure to do this will most certainly lead to a future
security breach.
</para>
- <section id="adg-security-library-calls">
+ <section xml:id="adg-security-library-calls">
<title>Care about standard library calls</title>
<para>
In general, writers of authorization-granting applications should
@@ -308,9 +281,9 @@ cc -o application .... -lpam -lpam_misc
function is likely to corrupt a pointer previously
obtained by the application. The application programmer should
either re-call such a 'libc' function after a call to the
- <emphasis remap='B'>Linux-PAM</emphasis> library, or copy the
+ <emphasis remap="B">Linux-PAM</emphasis> library, or copy the
structure contents to some safe area of memory before passing
- control to the <emphasis remap='B'>Linux-PAM</emphasis> library.
+ control to the <emphasis remap="B">Linux-PAM</emphasis> library.
</para>
<para>
Two important function classes that fall into this category are
@@ -322,12 +295,12 @@ cc -o application .... -lpam -lpam_misc
</para>
</section>
- <section id="adg-security-service-name">
+ <section xml:id="adg-security-service-name">
<title>Choice of a service name</title>
<para>
When picking the <emphasis>service-name</emphasis> that
corresponds to the first entry in the
- <emphasis remap='B'>Linux-PAM</emphasis> configuration file,
+ <emphasis remap="B">Linux-PAM</emphasis> configuration file,
the application programmer should <emphasis>avoid</emphasis>
the temptation of choosing something related to
<varname>argv[0]</varname>. It is a trivial matter for any user
@@ -352,11 +325,11 @@ cc -o application .... -lpam -lpam_misc
and then run <command>./preferred_name</command>.
</para>
<para>
- By studying the <emphasis remap='B'>Linux-PAM</emphasis>
+ By studying the <emphasis remap="B">Linux-PAM</emphasis>
configuration file(s), an attacker can choose the
<command>preferred_name</command> to be that of a service enjoying
minimal protection; for example a game which uses
- <emphasis remap='B'>Linux-PAM</emphasis> to restrict access to
+ <emphasis remap="B">Linux-PAM</emphasis> to restrict access to
certain hours of the day. If the service-name were to be linked
to the filename under which the service was invoked, it
is clear that the user is effectively in the position of
@@ -370,7 +343,7 @@ cc -o application .... -lpam -lpam_misc
</para>
</section>
- <section id="adg-security-conv-function">
+ <section xml:id="adg-security-conv-function">
<title>The conversation function</title>
<para>
Care should be taken to ensure that the <function>conv()</function>
@@ -380,10 +353,10 @@ cc -o application .... -lpam -lpam_misc
</para>
</section>
- <section id="adg-security-user-identity">
+ <section xml:id="adg-security-user-identity">
<title>The identity of the user</title>
<para>
- The <emphasis remap='B'>Linux-PAM</emphasis> modules will need
+ The <emphasis remap="B">Linux-PAM</emphasis> modules will need
to determine the identity of the user who requests a service,
and the identity of the user who grants the service. These two
users will seldom be the same. Indeed there is generally a third
@@ -444,7 +417,7 @@ cc -o application .... -lpam -lpam_misc
</para>
</section>
- <section id="adg-security-resources">
+ <section xml:id="adg-security-resources">
<title>Sufficient resources</title>
<para>
Care should be taken to ensure that the proper execution of an
@@ -465,7 +438,7 @@ cc -o application .... -lpam -lpam_misc
</section>
</chapter>
- <chapter id='adg-libpam_misc'>
+ <chapter xml:id="adg-libpam_misc">
<title>A library of miscellaneous helper functions</title>
<para>
To aid the work of the application developer a library of
@@ -479,24 +452,20 @@ cc -o application .... -lpam -lpam_misc
library can be defined by including
<function>&lt;security/pam_misc.h&gt;</function>. It should be
noted that this library is specific to
- <emphasis remap='B'>Linux-PAM</emphasis> and is not referred to in
+ <emphasis remap="B">Linux-PAM</emphasis> and is not referred to in
the defining DCE-RFC (see <link linkend="adg-see-also">See also</link>)
below.
</para>
- <section id='adg-libpam-functions'>
+ <section xml:id="adg-libpam-functions">
<title>Functions supplied</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_misc_conv.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_misc_paste_env.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_misc_drop_env.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_misc_setenv.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_misc_conv.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_misc_paste_env.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_misc_drop_env.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_misc_setenv.xml"/>
</section>
</chapter>
- <chapter id='adg-porting'>
+ <chapter xml:id="adg-porting">
<title>Porting legacy applications</title>
<para>
The point of PAM is that the application is not supposed to
@@ -545,7 +514,7 @@ cc -o application .... -lpam -lpam_misc
</para>
</chapter>
- <chapter id='adg-glossary'>
+ <chapter xml:id="adg-glossary">
<title>Glossary of PAM related terms</title>
<para>
The following are a list of terms used within this document.
@@ -585,17 +554,17 @@ cc -o application .... -lpam -lpam_misc
</variablelist>
</chapter>
- <chapter id='adg-example'>
+ <chapter xml:id="adg-example">
<title>An example application</title>
<para>
- To get a flavor of the way a <emphasis remap='B'>Linux-PAM</emphasis>
+ To get a flavor of the way a <emphasis remap="B">Linux-PAM</emphasis>
application is written we include the following example. It prompts
the user for their password and indicates whether their account
is valid on the standard output, its return code also indicates
the success (<returnvalue>0</returnvalue> for success;
<returnvalue>1</returnvalue> for failure).
</para>
- <programlisting><![CDATA[
+ <programlisting>
/*
This program was contributed by Shane Watts
[modifications by AGM and kukuk]
@@ -607,9 +576,9 @@ cc -o application .... -lpam -lpam_misc
account required pam_unix.so
*/
-#include <security/pam_appl.h>
-#include <security/pam_misc.h>
-#include <stdio.h>
+#include &lt;security/pam_appl.h&gt;
+#include &lt;security/pam_misc.h&gt;
+#include &lt;stdio.h&gt;
static struct pam_conv conv = {
misc_conv,
@@ -626,12 +595,12 @@ int main(int argc, char *argv[])
user = argv[1];
}
- if(argc > 2) {
+ if(argc &gt; 2) {
fprintf(stderr, "Usage: check_user [username]\n");
exit(1);
}
- retval = pam_start("check_user", user, &conv, &pamh);
+ retval = pam_start("check_user", user, &amp;conv, &amp;pamh);
if (retval == PAM_SUCCESS)
retval = pam_authenticate(pamh, 0); /* is user really user? */
@@ -655,24 +624,24 @@ int main(int argc, char *argv[])
return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */
}
-]]>
+
</programlisting>
</chapter>
- <chapter id='adg-files'>
+ <chapter xml:id="adg-files">
<title>Files</title>
<variablelist>
<varlistentry>
- <term><filename>/usr/include/security/pam_appl.h</filename></term>
+ <term>/usr/include/security/pam_appl.h</term>
<listitem>
<para>
Header file with interfaces for
- <emphasis remap='B'>Linux-PAM</emphasis> applications.
+ <emphasis remap="B">Linux-PAM</emphasis> applications.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><filename>/usr/include/security/pam_misc.h</filename></term>
+ <term>/usr/include/security/pam_misc.h</term>
<listitem>
<para>
Header file for useful library functions for making
@@ -683,7 +652,7 @@ int main(int argc, char *argv[])
</variablelist>
</chapter>
- <chapter id="adg-see-also">
+ <chapter xml:id="adg-see-also">
<title>See also</title>
<itemizedlist>
<listitem>
@@ -706,7 +675,7 @@ int main(int argc, char *argv[])
</itemizedlist>
</chapter>
- <chapter id='adg-author'>
+ <chapter xml:id="adg-author">
<title>Author/acknowledgments</title>
<para>
This document was written by Andrew G. Morgan (morgan@kernel.org)
@@ -726,14 +695,14 @@ int main(int argc, char *argv[])
<para>
Thanks are also due to Sun Microsystems, especially to Vipin Samar and
Charlie Lai for their advice. At an early stage in the development of
- <emphasis remap='B'>Linux-PAM</emphasis>, Sun graciously made the
+ <emphasis remap="B">Linux-PAM</emphasis>, Sun graciously made the
documentation for their implementation of PAM available. This act
greatly accelerated the development of
- <emphasis remap='B'>Linux-PAM</emphasis>.
+ <emphasis remap="B">Linux-PAM</emphasis>.
</para>
</chapter>
- <chapter id='adg-copyright'>
+ <chapter xml:id="adg-copyright">
<title>Copyright information for this document</title>
<programlisting>
Copyright (c) 2006 Thorsten Kukuk &lt;kukuk@thkukuk.de&gt;
@@ -777,4 +746,4 @@ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
</programlisting>
</chapter>
-</book>
+</book> \ No newline at end of file
diff --git a/doc/adg/Makefile.am b/doc/adg/Makefile.am
index 77bd7a99..77abdb71 100644
--- a/doc/adg/Makefile.am
+++ b/doc/adg/Makefile.am
@@ -16,28 +16,28 @@ all: Linux-PAM_ADG.txt html/Linux-PAM_ADG.html Linux-PAM_ADG.pdf
Linux-PAM_ADG.pdf: $(XMLS) $(DEP_XMLS)
if ENABLE_GENERATE_PDF
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam generate.toc "book toc" \
--stringparam section.autolabel 1 \
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 3 --xinclude --nonet \
- http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_ADG.fo
+ $(PDF_STYLESHEET) $< > Linux-PAM_ADG.fo
$(FO2PDF) Linux-PAM_ADG.fo $@
else
echo "No fo2pdf processor installed, skip PDF generation"
endif
Linux-PAM_ADG.txt: $(XMLS) $(DEP_XMLS)
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam generate.toc "book toc" \
--stringparam section.autolabel 1 \
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 3 --xinclude --nonet \
- http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@
+ $(TXT_STYLESHEET) $< | $(BROWSER) > $@
html/Linux-PAM_ADG.html: $(XMLS) $(DEP_XMLS)
@test -d html || mkdir -p html
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam base.dir html/ \
--stringparam root.filename Linux-PAM_ADG \
--stringparam use.id.as.filename 1 \
@@ -46,7 +46,7 @@ html/Linux-PAM_ADG.html: $(XMLS) $(DEP_XMLS)
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 3 --xinclude --nonet \
--stringparam chunker.output.encoding UTF-8 \
- http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $<
+ $(HTML_STYLESHEET) $<
distclean-local:
-rm -rf html Linux-PAM_ADG.txt Linux-PAM_ADG.pdf
diff --git a/doc/adg/Makefile.in b/doc/adg/Makefile.in
index 194c8a05..3cb17bbf 100644
--- a/doc/adg/Makefile.in
+++ b/doc/adg/Makefile.in
@@ -162,6 +162,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -174,11 +175,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -210,12 +213,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -238,6 +243,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -248,12 +254,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -526,26 +536,26 @@ uninstall-am: uninstall-local
@ENABLE_REGENERATE_MAN_TRUE@all: Linux-PAM_ADG.txt html/Linux-PAM_ADG.html Linux-PAM_ADG.pdf
@ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_ADG.pdf: $(XMLS) $(DEP_XMLS)
-@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \
-@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_ADG.fo
+@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(PDF_STYLESHEET) $< > Linux-PAM_ADG.fo
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(FO2PDF) Linux-PAM_ADG.fo $@
@ENABLE_GENERATE_PDF_FALSE@@ENABLE_REGENERATE_MAN_TRUE@ echo "No fo2pdf processor installed, skip PDF generation"
@ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_ADG.txt: $(XMLS) $(DEP_XMLS)
-@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \
-@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@
+@ENABLE_REGENERATE_MAN_TRUE@ $(TXT_STYLESHEET) $< | $(BROWSER) > $@
@ENABLE_REGENERATE_MAN_TRUE@html/Linux-PAM_ADG.html: $(XMLS) $(DEP_XMLS)
@ENABLE_REGENERATE_MAN_TRUE@ @test -d html || mkdir -p html
-@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam base.dir html/ \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam root.filename Linux-PAM_ADG \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam use.id.as.filename 1 \
@@ -554,7 +564,7 @@ uninstall-am: uninstall-local
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunker.output.encoding UTF-8 \
-@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(HTML_STYLESHEET) $<
@ENABLE_REGENERATE_MAN_TRUE@distclean-local:
@ENABLE_REGENERATE_MAN_TRUE@ -rm -rf html Linux-PAM_ADG.txt Linux-PAM_ADG.pdf
diff --git a/doc/adg/pam_acct_mgmt.xml b/doc/adg/pam_acct_mgmt.xml
index 6a3a37d2..afcf2f2f 100644
--- a/doc/adg/pam_acct_mgmt.xml
+++ b/doc/adg/pam_acct_mgmt.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_acct_mgmt'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_acct_mgmt">
<title>Account validation management</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_acct_mgmt-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(id("pam_acct_mgmt-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_acct_mgmt-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(//refsect1[@id = "pam_acct_mgmt-description"]/*)'/>
+ <section xml:id="adg-pam_acct_mgmt-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(id("pam_acct_mgmt-description")/*)'/>
</section>
- <section id='adg-pam_acct_mgmt-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(//refsect1[@id = "pam_acct_mgmt-return_values"]/*)'/>
+ <section xml:id="adg-pam_acct_mgmt-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(id("pam_acct_mgmt-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_authenticate.xml b/doc/adg/pam_authenticate.xml
index 2ca9b540..aa36c687 100644
--- a/doc/adg/pam_authenticate.xml
+++ b/doc/adg/pam_authenticate.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_authenticate'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_authenticate">
<title>Authenticating the user</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_authenticate.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_authenticate-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_authenticate.3.xml" xpointer='xpointer(id("pam_authenticate-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_authenticate-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_authenticate.3.xml" xpointer='xpointer(//refsect1[@id = "pam_authenticate-description"]/*)'/>
+ <section xml:id="adg-pam_authenticate-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_authenticate.3.xml" xpointer='xpointer(id("pam_authenticate-description")/*)'/>
</section>
- <section id='adg-pam_authenticate-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_authenticate.3.xml" xpointer='xpointer(//refsect1[@id = "pam_authenticate-return_values"]/*)'/>
+ <section xml:id="adg-pam_authenticate-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_authenticate.3.xml" xpointer='xpointer(id("pam_authenticate-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_chauthtok.xml b/doc/adg/pam_chauthtok.xml
index 1c613da7..e6815dde 100644
--- a/doc/adg/pam_chauthtok.xml
+++ b/doc/adg/pam_chauthtok.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_chauthtok'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_chauthtok">
<title>Updating authentication tokens</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_chauthtok.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_chauthtok-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_chauthtok.3.xml" xpointer='xpointer(id("pam_chauthtok-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_chauthtok-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_chauthtok.3.xml" xpointer='xpointer(//refsect1[@id = "pam_chauthtok-description"]/*)'/>
+ <section xml:id="adg-pam_chauthtok-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_chauthtok.3.xml" xpointer='xpointer(id("pam_chauthtok-description")/*)'/>
</section>
- <section id='adg-pam_chauthtok-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_chauthtok.3.xml" xpointer='xpointer(//refsect1[@id = "pam_chauthtok-return_values"]/*)'/>
+ <section xml:id="adg-pam_chauthtok-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_chauthtok.3.xml" xpointer='xpointer(id("pam_chauthtok-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_close_session.xml b/doc/adg/pam_close_session.xml
index 4b93fc3a..ed83d7a1 100644
--- a/doc/adg/pam_close_session.xml
+++ b/doc/adg/pam_close_session.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_close_session'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_close_session">
<title>terminating PAM session management</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_close_session.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_close_session-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_close_session.3.xml" xpointer='xpointer(id("pam_close_session-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_close_session-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_close_session.3.xml" xpointer='xpointer(//refsect1[@id = "pam_close_session-description"]/*)'/>
+ <section xml:id="adg-pam_close_session-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_close_session.3.xml" xpointer='xpointer(id("pam_close_session-description")/*)'/>
</section>
- <section id='adg-pam_close_session-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_close_session.3.xml" xpointer='xpointer(//refsect1[@id = "pam_close_session-return_values"]/*)'/>
+ <section xml:id="adg-pam_close_session-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_close_session.3.xml" xpointer='xpointer(id("pam_close_session-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_conv.xml b/doc/adg/pam_conv.xml
index 01b75127..b2ba876e 100644
--- a/doc/adg/pam_conv.xml
+++ b/doc/adg/pam_conv.xml
@@ -1,11 +1,7 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_conv'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_conv">
<title>The conversation function</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_conv.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_conv-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-synopsis")/*)'/>
</funcsynopsis>
<programlisting>
struct pam_message {
@@ -24,12 +20,10 @@ struct pam_conv {
void *appdata_ptr;
};
</programlisting>
- <section id='adg-pam_conv-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_conv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_conv-description"]/*)'/>
+ <section xml:id="adg-pam_conv-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-description")/*)'/>
</section>
- <section id='adg-pam_conv-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_conv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_conv-return_values"]/*)'/>
+ <section xml:id="adg-pam_conv-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_end.xml b/doc/adg/pam_end.xml
index efa328be..5e719255 100644
--- a/doc/adg/pam_end.xml
+++ b/doc/adg/pam_end.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_end'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_end">
<title>Termination of PAM transaction</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_end.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_end-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_end.3.xml" xpointer='xpointer(id("pam_end-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_end-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_end.3.xml" xpointer='xpointer(//refsect1[@id = "pam_end-description"]/*)'/>
+ <section xml:id="adg-pam_end-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_end.3.xml" xpointer='xpointer(id("pam_end-description")/*)'/>
</section>
- <section id='adg-pam_end-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_end.3.xml" xpointer='xpointer(//refsect1[@id = "pam_end-return_values"]/*)'/>
+ <section xml:id="adg-pam_end-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_end.3.xml" xpointer='xpointer(id("pam_end-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_fail_delay.xml b/doc/adg/pam_fail_delay.xml
index 589e1148..d602a1f7 100644
--- a/doc/adg/pam_fail_delay.xml
+++ b/doc/adg/pam_fail_delay.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_fail_delay'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_fail_delay">
<title>Request a delay on failure</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_fail_delay.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_fail_delay-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_fail_delay-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_fail_delay.3.xml" xpointer='xpointer(//refsect1[@id = "pam_fail_delay-description"]/*)'/>
+ <section xml:id="adg-pam_fail_delay-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-description")/*)'/>
</section>
- <section id='adg-pam_fail_delay-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_fail_delay.3.xml" xpointer='xpointer(//refsect1[@id = "pam_fail_delay-return_values"]/*)'/>
+ <section xml:id="adg-pam_fail_delay-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_get_item.xml b/doc/adg/pam_get_item.xml
index f23c734b..d12cb17d 100644
--- a/doc/adg/pam_get_item.xml
+++ b/doc/adg/pam_get_item.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_get_item'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_get_item">
<title>Getting PAM items</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_item.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_get_item-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_get_item-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_item.3.xml" xpointer='xpointer(//refsect1[@id = "pam_get_item-description"]/*)'/>
+ <section xml:id="adg-pam_get_item-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-description")/*)'/>
</section>
- <section id='adg-pam_get_item-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_item.3.xml" xpointer='xpointer(//refsect1[@id = "pam_get_item-return_values"]/*)'/>
+ <section xml:id="adg-pam_get_item-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_getenv.xml b/doc/adg/pam_getenv.xml
index 61d69c33..f7b483ed 100644
--- a/doc/adg/pam_getenv.xml
+++ b/doc/adg/pam_getenv.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_getenv'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_getenv">
<title>Get a PAM environment variable</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenv.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_getenv-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_getenv-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_getenv-description"]/*)'/>
+ <section xml:id="adg-pam_getenv-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-description")/*)'/>
</section>
- <section id='adg-pam_getenv-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_getenv-return_values"]/*)'/>
+ <section xml:id="adg-pam_getenv-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_getenvlist.xml b/doc/adg/pam_getenvlist.xml
index d3c2fcd3..4433c04d 100644
--- a/doc/adg/pam_getenvlist.xml
+++ b/doc/adg/pam_getenvlist.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_getenvlist'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_getenvlist">
<title>Getting the PAM environment</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenvlist.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_getenvlist-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_getenvlist-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenvlist.3.xml" xpointer='xpointer(//refsect1[@id = "pam_getenvlist-description"]/*)'/>
+ <section xml:id="adg-pam_getenvlist-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-description")/*)'/>
</section>
- <section id='adg-pam_getenvlist-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenvlist.3.xml" xpointer='xpointer(//refsect1[@id = "pam_getenvlist-return_values"]/*)'/>
+ <section xml:id="adg-pam_getenvlist-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_misc_conv.xml b/doc/adg/pam_misc_conv.xml
index 2dc760cc..4f54e11a 100644
--- a/doc/adg/pam_misc_conv.xml
+++ b/doc/adg/pam_misc_conv.xml
@@ -1,14 +1,9 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-misc_conv'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-misc_conv">
<title>Text based conversation function</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/misc_conv.3.xml" xpointer='xpointer(//funcsynopsis[@id = "misc_conv-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/misc_conv.3.xml" xpointer='xpointer(id("misc_conv-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-misc_conv-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/misc_conv.3.xml" xpointer='xpointer(//refsect1[@id = "misc_conv-description"]/*)'/>
+ <section xml:id="adg-misc_conv-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/misc_conv.3.xml" xpointer='xpointer(id("misc_conv-description")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_misc_drop_env.xml b/doc/adg/pam_misc_drop_env.xml
index 956d4815..cacb770e 100644
--- a/doc/adg/pam_misc_drop_env.xml
+++ b/doc/adg/pam_misc_drop_env.xml
@@ -1,14 +1,9 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_misc_drop_env'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_misc_drop_env">
<title>Liberating a locally saved environment</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_misc_drop_env.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_misc_drop_env-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_drop_env.3.xml" xpointer='xpointer(id("pam_misc_drop_env-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_misc_drop_env-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_misc_drop_env.3.xml" xpointer='xpointer(//refsect1[@id = "pam_misc_drop_env-description"]/*)'/>
+ <section xml:id="adg-pam_misc_drop_env-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_drop_env.3.xml" xpointer='xpointer(id("pam_misc_drop_env-description")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_misc_paste_env.xml b/doc/adg/pam_misc_paste_env.xml
index c6d3856b..8ab2440a 100644
--- a/doc/adg/pam_misc_paste_env.xml
+++ b/doc/adg/pam_misc_paste_env.xml
@@ -1,14 +1,9 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_misc_paste_env'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_misc_paste_env">
<title>Transcribing an environment to that of PAM</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_misc_paste_env.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_misc_paste_env-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_paste_env.3.xml" xpointer='xpointer(id("pam_misc_paste_env-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_misc_paste_env-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_misc_paste_env.3.xml" xpointer='xpointer(//refsect1[@id = "pam_misc_paste_env-description"]/*)'/>
+ <section xml:id="adg-pam_misc_paste_env-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_paste_env.3.xml" xpointer='xpointer(id("pam_misc_paste_env-description")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_misc_setenv.xml b/doc/adg/pam_misc_setenv.xml
index 3b1a32e4..7e8c489b 100644
--- a/doc/adg/pam_misc_setenv.xml
+++ b/doc/adg/pam_misc_setenv.xml
@@ -1,14 +1,9 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_misc_setenv'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_misc_setenv">
<title>BSD like PAM environment variable setting</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_misc_setenv.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_misc_setenv-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_setenv.3.xml" xpointer='xpointer(id("pam_misc_setenv-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_misc_setenv-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_misc_setenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_misc_setenv-description"]/*)'/>
+ <section xml:id="adg-pam_misc_setenv-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_setenv.3.xml" xpointer='xpointer(id("pam_misc_setenv-description")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_open_session.xml b/doc/adg/pam_open_session.xml
index ba738a55..10afa755 100644
--- a/doc/adg/pam_open_session.xml
+++ b/doc/adg/pam_open_session.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_open_session'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_open_session">
<title>Start PAM session management</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_open_session.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_open_session-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_open_session.3.xml" xpointer='xpointer(id("pam_open_session-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_open_session-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_open_session.3.xml" xpointer='xpointer(//refsect1[@id = "pam_open_session-description"]/*)'/>
+ <section xml:id="adg-pam_open_session-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_open_session.3.xml" xpointer='xpointer(id("pam_open_session-description")/*)'/>
</section>
- <section id='adg-pam_open_session-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_open_session.3.xml" xpointer='xpointer(//refsect1[@id = "pam_open_session-return_values"]/*)'/>
+ <section xml:id="adg-pam_open_session-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_open_session.3.xml" xpointer='xpointer(id("pam_open_session-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_putenv.xml b/doc/adg/pam_putenv.xml
index e55f1a42..6378a15b 100644
--- a/doc/adg/pam_putenv.xml
+++ b/doc/adg/pam_putenv.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_putenv'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_putenv">
<title>Set or change PAM environment variable</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_putenv.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_putenv-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_putenv-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_putenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_putenv-description"]/*)'/>
+ <section xml:id="adg-pam_putenv-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-description")/*)'/>
</section>
- <section id='adg-pam_putenv-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_putenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_putenv-return_values"]/*)'/>
+ <section xml:id="adg-pam_putenv-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_set_item.xml b/doc/adg/pam_set_item.xml
index 41169387..efc4292b 100644
--- a/doc/adg/pam_set_item.xml
+++ b/doc/adg/pam_set_item.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_set_item'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_set_item">
<title>Setting PAM items</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_item.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_set_item-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_set_item-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_item.3.xml" xpointer='xpointer(//refsect1[@id = "pam_set_item-description"]/*)'/>
+ <section xml:id="adg-pam_set_item-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-description")/*)'/>
</section>
- <section id='adg-pam_set_item-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_item.3.xml" xpointer='xpointer(//refsect1[@id = "pam_set_item-return_values"]/*)'/>
+ <section xml:id="adg-pam_set_item-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_setcred.xml b/doc/adg/pam_setcred.xml
index 1d3d23cd..488028cd 100644
--- a/doc/adg/pam_setcred.xml
+++ b/doc/adg/pam_setcred.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_setcred'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_setcred">
<title>Setting user credentials</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_setcred.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_setcred-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_setcred.3.xml" xpointer='xpointer(id("pam_setcred-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_setcred-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_setcred.3.xml" xpointer='xpointer(//refsect1[@id = "pam_setcred-description"]/*)'/>
+ <section xml:id="adg-pam_setcred-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_setcred.3.xml" xpointer='xpointer(id("pam_setcred-description")/*)'/>
</section>
- <section id='adg-pam_setcred-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_setcred.3.xml" xpointer='xpointer(//refsect1[@id = "pam_setcred-return_values"]/*)'/>
+ <section xml:id="adg-pam_setcred-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_setcred.3.xml" xpointer='xpointer(id("pam_setcred-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_start.xml b/doc/adg/pam_start.xml
index e5ec8481..c7ee4494 100644
--- a/doc/adg/pam_start.xml
+++ b/doc/adg/pam_start.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_start'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_start">
<title>Initialization of PAM transaction</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_start.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_start-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_start.3.xml" xpointer='xpointer(id("pam_start-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_start-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_start.3.xml" xpointer='xpointer(//refsect1[@id = "pam_start-description"]/*)'/>
+ <section xml:id="adg-pam_start-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_start.3.xml" xpointer='xpointer(id("pam_start-description")/*)'/>
</section>
- <section id='adg-pam_start-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_start.3.xml" xpointer='xpointer(//refsect1[@id = "pam_start-return_values"]/*)'/>
+ <section xml:id="adg-pam_start-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_start.3.xml" xpointer='xpointer(id("pam_start-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/adg/pam_strerror.xml b/doc/adg/pam_strerror.xml
index 35b08a27..e4e1c56a 100644
--- a/doc/adg/pam_strerror.xml
+++ b/doc/adg/pam_strerror.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_strerror'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_strerror">
<title>Strings describing PAM error codes</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_strerror.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_strerror-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_strerror-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_strerror.3.xml" xpointer='xpointer(//refsect1[@id = "pam_strerror-description"]/*)'/>
+ <section xml:id="adg-pam_strerror-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-description")/*)'/>
</section>
- <section id='adg-pam_strerror-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_strerror.3.xml" xpointer='xpointer(//refsect1[@id = "pam_strerror-return_values"]/*)'/>
+ <section xml:id="adg-pam_strerror-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/custom-html.xsl b/doc/custom-html.xsl.in
index fdd5df7d..b2eaf150 100644
--- a/doc/custom-html.xsl
+++ b/doc/custom-html.xsl.in
@@ -3,7 +3,7 @@
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"
xmlns:exsl="http://exslt.org/common" version="1.0">
- <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"/>
+ <xsl:import href="HTML_STYLESHEET"/>
<xsl:param name="vendordir"/>
<xsl:template match="filename">
diff --git a/doc/custom-man.xsl b/doc/custom-man.xsl.in
index a3408e6c..258627bf 100644
--- a/doc/custom-man.xsl
+++ b/doc/custom-man.xsl.in
@@ -1,6 +1,6 @@
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0" version="1.0">
- <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl"/>
+ <xsl:import href="MAN_STYLESHEET"/>
<xsl:param name="vendordir"/>
<xsl:param name="man.string.subst.map.local.pre">
diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am
index 78c891df..aec365cf 100644
--- a/doc/man/Makefile.am
+++ b/doc/man/Makefile.am
@@ -25,25 +25,25 @@ man_MANS = pam.3 PAM.8 pam.8 pam.conf.5 pam.d.5 \
pam_verror.3 pam_vinfo.3 pam_vprompt.3 pam_vsyslog.3 \
misc_conv.3 pam_misc_paste_env.3 pam_misc_drop_env.3 \
pam_misc_setenv.3
-XMLS = pam.3.xml pam.8.xml \
+XMLS = pam.3.xml pam.8.xml pam.conf.5.xml \
pam_acct_mgmt.3.xml pam_authenticate.3.xml \
pam_chauthtok.3.xml pam_close_session.3.xml pam_conv.3.xml \
- pam_end.3.xml pam_error.3.xml \
- pam_fail_delay.3.xml pam_xauth_data.3 \
+ pam_end.3.xml pam_error.3.xml pam_fail_delay.3.xml \
pam_get_authtok.3.xml pam_get_data.3.xml pam_get_item.3.xml \
pam_get_user.3.xml pam_getenv.3.xml pam_getenvlist.3.xml \
- pam_info.3.xml \
- pam_open_session.3.xml \
+ pam_info.3.xml pam_misc_drop_env.3.xml pam_misc_paste_env.3.xml \
+ pam_misc_setenv.3.xml pam_open_session.3.xml \
pam_prompt.3.xml pam_putenv.3.xml \
- pam_set_data.3.xml pam_set_item.3.xml pam_syslog.3.xml \
- pam_setcred.3.xml pam_sm_acct_mgmt.3.xml pam_sm_authenticate.3.xml \
- pam_sm_close_session.3.xml pam_sm_open_session.3.xml \
- pam_sm_setcred.3.xml pam_start.3.xml pam_strerror.3.xml \
- pam_sm_chauthtok.3.xml \
+ pam_set_data.3.xml pam_set_item.3.xml pam_setcred.3.xml \
+ pam_sm_acct_mgmt.3.xml pam_sm_authenticate.3.xml \
+ pam_sm_chauthtok.3.xml pam_sm_close_session.3.xml \
+ pam_sm_open_session.3.xml pam_sm_setcred.3.xml \
+ pam_start.3.xml pam_strerror.3.xml \
+ pam_syslog.3.xml pam_xauth_data.3.xml \
pam_item_types_std.inc.xml pam_item_types_ext.inc.xml \
pam.conf-desc.xml pam.conf-dir.xml pam.conf-syntax.xml \
- misc_conv.3.xml pam_misc_paste_env.3.xml pam_misc_drop_env.3.xml \
- pam_misc_setenv.3.xml
+ misc_conv.3.xml
+
if ENABLE_REGENERATE_MAN
PAM.8: pam.8
diff --git a/doc/man/Makefile.in b/doc/man/Makefile.in
index 42fd8d0c..d18dc7d4 100644
--- a/doc/man/Makefile.in
+++ b/doc/man/Makefile.in
@@ -196,6 +196,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -208,11 +209,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -244,12 +247,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -272,6 +277,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -282,12 +288,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -375,25 +385,24 @@ man_MANS = pam.3 PAM.8 pam.8 pam.conf.5 pam.d.5 \
misc_conv.3 pam_misc_paste_env.3 pam_misc_drop_env.3 \
pam_misc_setenv.3
-XMLS = pam.3.xml pam.8.xml \
+XMLS = pam.3.xml pam.8.xml pam.conf.5.xml \
pam_acct_mgmt.3.xml pam_authenticate.3.xml \
pam_chauthtok.3.xml pam_close_session.3.xml pam_conv.3.xml \
- pam_end.3.xml pam_error.3.xml \
- pam_fail_delay.3.xml pam_xauth_data.3 \
+ pam_end.3.xml pam_error.3.xml pam_fail_delay.3.xml \
pam_get_authtok.3.xml pam_get_data.3.xml pam_get_item.3.xml \
pam_get_user.3.xml pam_getenv.3.xml pam_getenvlist.3.xml \
- pam_info.3.xml \
- pam_open_session.3.xml \
+ pam_info.3.xml pam_misc_drop_env.3.xml pam_misc_paste_env.3.xml \
+ pam_misc_setenv.3.xml pam_open_session.3.xml \
pam_prompt.3.xml pam_putenv.3.xml \
- pam_set_data.3.xml pam_set_item.3.xml pam_syslog.3.xml \
- pam_setcred.3.xml pam_sm_acct_mgmt.3.xml pam_sm_authenticate.3.xml \
- pam_sm_close_session.3.xml pam_sm_open_session.3.xml \
- pam_sm_setcred.3.xml pam_start.3.xml pam_strerror.3.xml \
- pam_sm_chauthtok.3.xml \
+ pam_set_data.3.xml pam_set_item.3.xml pam_setcred.3.xml \
+ pam_sm_acct_mgmt.3.xml pam_sm_authenticate.3.xml \
+ pam_sm_chauthtok.3.xml pam_sm_close_session.3.xml \
+ pam_sm_open_session.3.xml pam_sm_setcred.3.xml \
+ pam_start.3.xml pam_strerror.3.xml \
+ pam_syslog.3.xml pam_xauth_data.3.xml \
pam_item_types_std.inc.xml pam_item_types_ext.inc.xml \
pam.conf-desc.xml pam.conf-dir.xml pam.conf-syntax.xml \
- misc_conv.3.xml pam_misc_paste_env.3.xml pam_misc_drop_env.3.xml \
- pam_misc_setenv.3.xml
+ misc_conv.3.xml
all: all-am
diff --git a/doc/man/PAM.8 b/doc/man/PAM.8
index da3a5d6c..57fefc56 100644
--- a/doc/man/PAM.8
+++ b/doc/man/PAM.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -44,8 +44,8 @@ and
The principal feature of the PAM approach is that the nature of the authentication is dynamically configurable\&. In other words, the system administrator is free to choose how individual service\-providing applications will authenticate users\&. This dynamic configuration is set by the contents of the single
\fBLinux\-PAM\fR
configuration file
-/etc/pam\&.conf\&. Alternatively, the configuration can be set by individual configuration files located in the
-/etc/pam\&.d/
+/etc/pam\&.conf\&. Alternatively and preferably, the configuration can be set by individual configuration files located in a
+pam\&.d
directory\&. The presence of this directory will cause
\fBLinux\-PAM\fR
to
@@ -120,17 +120,6 @@ vendor configuration directory\&. Files in
/etc/pam\&.d
override files with the same name in this directory\&.
.RE
-.PP
-<vendordir>/pam\&.d
-.RS 4
-the
-\fBLinux\-PAM\fR
-vendor configuration directory\&. Files in
-/etc/pam\&.d
-and
-/usr/lib/pam\&.d
-override files with the same name in this directory\&. Only available if Linux\-PAM was compiled with vendordir enabled\&.
-.RE
.SH "ERRORS"
.PP
Typically errors generated by the
diff --git a/doc/man/misc_conv.3 b/doc/man/misc_conv.3
index 8049e57a..62656642 100644
--- a/doc/man/misc_conv.3
+++ b/doc/man/misc_conv.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: misc_conv
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "MISC_CONV" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "MISC_CONV" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -51,7 +51,7 @@ library\&. This function will prompt the user with the appropriate comments and
In addition to simply slotting into the appropriate
\fBpam_conv\fR(3), this function provides some time\-out facilities\&. The function exports five variables that can be used by an application programmer to limit the amount of time this conversation function will spend waiting for the user to type something\&. The five variables are as follows:
.PP
-\fBtime_t\fR \fIpam_misc_conv_warn_time\fR;
+time_t pam_misc_conv_warn_time;
.RS 4
This variable contains the
\fItime\fR
@@ -62,7 +62,7 @@ This variable contains the
library\&.
.RE
.PP
-\fBconst char *\fR\fIpam_misc_conv_warn_line\fR;
+const char *pam_misc_conv_warn_line;
.RS 4
Used in conjunction with
\fIpam_misc_conv_warn_time\fR, this variable is a pointer to the string that will be displayed when it becomes time to warn the user that the timeout is approaching\&. Its default value is a translated version of
@@ -70,7 +70,7 @@ Used in conjunction with
\fILinux\-PAM\fR\&.
.RE
.PP
-\fBtime_t\fR \fIpam_misc_conv_die_time\fR;
+time_t pam_misc_conv_die_time;
.RS 4
This variable contains the
\fItime\fR
@@ -81,7 +81,7 @@ This variable contains the
library\&.
.RE
.PP
-\fBconst char *\fR\fIpam_misc_conv_die_line\fR;
+const char *pam_misc_conv_die_line;
.RS 4
Used in conjunction with
\fIpam_misc_conv_die_time\fR, this variable is a pointer to the string that will be displayed when the conversation times out\&. Its default value is a translated version of
@@ -89,7 +89,7 @@ Used in conjunction with
\fILinux\-PAM\fR\&.
.RE
.PP
-\fBint\fR \fIpam_misc_conv_died\fR;
+int pam_misc_conv_died;
.RS 4
Following a return from the
\fILinux\-PAM\fR
@@ -102,14 +102,14 @@ The following two function pointers are available for supporting binary prompts
\fBlibpamc\fR
library and are subject to change\&.
.PP
-\fBint\fR \fI(*pam_binary_handler_fn)\fR(\fBvoid *\fR\fIappdata\fR, \fBpamc_bp_t *\fR\fIprompt_p\fR);
+int (*pam_binary_handler_fn)(void *appdata, pamc_bp_t *prompt_p);
.RS 4
This function pointer is initialized to
NULL
but can be filled with a function that provides machine\-machine (hidden) message exchange\&. It is intended for use with hidden authentication protocols such as RSA or Diffie\-Hellman key exchanges\&. (This is still under development\&.)
.RE
.PP
-\fBint\fR \fI(*pam_binary_handler_free)\fR(\fBvoid *\fR\fIappdata\fR, \fBpamc_bp_t *\fR\fIdelete_me\fR);
+int (*pam_binary_handler_free)(void *appdata, pamc_bp_t *delete_me);
.RS 4
This function pointer is initialized to
\fBPAM_BP_RENEW(delete_me, 0, 0)\fR, but can be redefined as desired by the application\&.
diff --git a/doc/man/misc_conv.3.xml b/doc/man/misc_conv.3.xml
index d902ba83..92d4acd1 100644
--- a/doc/man/misc_conv.3.xml
+++ b/doc/man/misc_conv.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="misc_conv">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="misc_conv">
<refmeta>
<refentrytitle>misc_conv</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="misc_conv-name">
+ <refnamediv xml:id="misc_conv-name">
<refname>misc_conv</refname>
<refpurpose>text based conversation function</refpurpose>
</refnamediv>
@@ -18,7 +15,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="misc_conv-synopsis">
+ <funcsynopsis xml:id="misc_conv-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_misc.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>misc_conv</function></funcdef>
@@ -30,7 +27,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='misc_conv-description'>
+ <refsect1 xml:id="misc_conv-description">
<title>DESCRIPTION</title>
<para>
The <function>misc_conv</function> function is part of
@@ -50,7 +47,7 @@
</para>
<variablelist>
<varlistentry>
- <term><type>time_t</type> <varname>pam_misc_conv_warn_time</varname>;</term>
+ <term>time_t pam_misc_conv_warn_time;</term>
<listitem>
<para>
This variable contains the <emphasis>time</emphasis> (as
@@ -67,7 +64,7 @@
</varlistentry>
<varlistentry>
- <term><type>const char *</type><varname>pam_misc_conv_warn_line</varname>;</term>
+ <term>const char *pam_misc_conv_warn_line;</term>
<listitem>
<para>
Used in conjunction with
@@ -83,7 +80,7 @@
</varlistentry>
<varlistentry>
- <term><type>time_t</type> <varname>pam_misc_conv_die_time</varname>;</term>
+ <term>time_t pam_misc_conv_die_time;</term>
<listitem>
<para>
This variable contains the <emphasis>time</emphasis> (as
@@ -100,7 +97,7 @@
</varlistentry>
<varlistentry>
- <term><type>const char *</type><varname>pam_misc_conv_die_line</varname>;</term>
+ <term>const char *pam_misc_conv_die_line;</term>
<listitem>
<para>
Used in conjunction with
@@ -116,7 +113,7 @@
</varlistentry>
<varlistentry>
- <term><type>int</type> <varname>pam_misc_conv_died</varname>;</term>
+ <term>int pam_misc_conv_died;</term>
<listitem>
<para>
Following a return from the <emphasis>Linux-PAM</emphasis>
@@ -136,7 +133,7 @@
<variablelist>
<varlistentry>
<term>
- <type>int</type> <varname>(*pam_binary_handler_fn)</varname>(<type>void *</type><varname>appdata</varname>, <type>pamc_bp_t *</type><varname>prompt_p</varname>);
+ int (*pam_binary_handler_fn)(void *appdata, pamc_bp_t *prompt_p);
</term>
<listitem>
<para>
@@ -151,7 +148,7 @@
</varlistentry>
<varlistentry>
<term>
- <type>int</type> <varname>(*pam_binary_handler_free)</varname>(<type>void *</type><varname>appdata</varname>, <type>pamc_bp_t *</type><varname>delete_me</varname>);
+ int (*pam_binary_handler_free)(void *appdata, pamc_bp_t *delete_me);
</term>
<listitem>
<para>
@@ -164,7 +161,7 @@
</variablelist>
</refsect1>
- <refsect1 id='misc_conv-see_also'>
+ <refsect1 xml:id="misc_conv-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -176,7 +173,7 @@
</para>
</refsect1>
- <refsect1 id='misc_conv-standards'>
+ <refsect1 xml:id="misc_conv-standards">
<title>STANDARDS</title>
<para>
The <function>misc_conv</function> function is part of the
@@ -185,4 +182,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam.3 b/doc/man/pam.3
index 63f3e768..e103ceab 100644
--- a/doc/man/pam.3
+++ b/doc/man/pam.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam.3.xml b/doc/man/pam.3.xml
index 0b1efccf..4b828016 100644
--- a/doc/man/pam.3.xml
+++ b/doc/man/pam.3.xml
@@ -1,20 +1,18 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam3'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam3">
<refmeta>
<refentrytitle>pam</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam3-name'>
+ <refnamediv xml:id="pam3-name">
<refname>pam</refname>
<refpurpose>Pluggable Authentication Modules Library</refpurpose>
</refnamediv>
- <refsynopsisdiv id='pam3-synopsis'>
+ <refsynopsisdiv xml:id="pam3-synopsis">
<funcsynopsis>
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
@@ -22,10 +20,10 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam3-description'>
+ <refsect1 xml:id="pam3-description">
<title>DESCRIPTION</title>
<para>
- <emphasis remap='B'>PAM</emphasis> is a system of libraries
+ <emphasis remap="B">PAM</emphasis> is a system of libraries
that handle the authentication tasks of applications (services)
on the system. The library provides a stable general interface
(Application Programming Interface - API) that privilege granting
@@ -38,7 +36,7 @@
defer to to perform standard authentication tasks.
</para>
- <refsect2 id='pam3-initialization_and_cleanup'>
+ <refsect2 xml:id="pam3-initialization_and_cleanup">
<title>Initialization and Cleanup</title>
<para>
The
@@ -64,7 +62,7 @@
</para>
</refsect2>
- <refsect2 id='pam3-authentication'>
+ <refsect2 xml:id="pam3-authentication">
<title>Authentication</title>
<para>
The
@@ -85,7 +83,7 @@
</para>
</refsect2>
- <refsect2 id='pam3-account_management'>
+ <refsect2 xml:id="pam3-account_management">
<title>Account Management</title>
<para>
The
@@ -98,7 +96,7 @@
</para>
</refsect2>
- <refsect2 id='pam3-password_management'>
+ <refsect2 xml:id="pam3-password_management">
<title>Password Management</title>
<para>
The
@@ -109,7 +107,7 @@
</para>
</refsect2>
- <refsect2 id='pam3-session_management'>
+ <refsect2 xml:id="pam3-session_management">
<title>Session Management</title>
<para>
The
@@ -124,7 +122,7 @@
</para>
</refsect2>
- <refsect2 id='pam3-conversation'>
+ <refsect2 xml:id="pam3-conversation">
<title>Conversation</title>
<para>
The PAM library uses an application-defined callback to allow
@@ -141,7 +139,7 @@
</para>
</refsect2>
- <refsect2 id='pam3-data'>
+ <refsect2 xml:id="pam3-data">
<title>Data Objects</title>
<para>
The
@@ -176,7 +174,7 @@
</para>
</refsect2>
- <refsect2 id='pam3-miscellaneous'>
+ <refsect2 xml:id="pam3-miscellaneous">
<title>Environment and Error Management</title>
<para>
The
@@ -202,7 +200,7 @@
</refsect2>
</refsect1>
- <refsect1 id='pam3-return_values'>
+ <refsect1 xml:id="pam3-return_values">
<title>RETURN VALUES</title>
<para>
The following return codes are known by PAM:
@@ -389,7 +387,7 @@
</variablelist>
</refsect1>
- <refsect1 id='see_also'><title>SEE ALSO</title>
+ <refsect1 xml:id="see_also"><title>SEE ALSO</title>
<para>
<citerefentry>
<refentrytitle>pam_acct_mgmt</refentrytitle><manvolnum>3</manvolnum>
@@ -430,10 +428,10 @@
</citerefentry>
</para>
</refsect1>
- <refsect1 id='pam3-notes'><title>NOTES</title>
+ <refsect1 xml:id="pam3-notes"><title>NOTES</title>
<para>
The <emphasis>libpam</emphasis> interfaces are only thread-safe if each
thread within the multithreaded application uses its own PAM handle.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam.8 b/doc/man/pam.8
index da9773b9..78b1afa0 100644
--- a/doc/man/pam.8
+++ b/doc/man/pam.8
@@ -1 +1 @@
-.so man8/PAM.8
+.so PAM.8
diff --git a/doc/man/pam.8.xml b/doc/man/pam.8.xml
index 464af0e5..7f3b051c 100644
--- a/doc/man/pam.8.xml
+++ b/doc/man/pam.8.xml
@@ -1,32 +1,29 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam8'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam8">
<refmeta>
<refentrytitle>pam</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam8-name'>
+ <refnamediv xml:id="pam8-name">
<refname>PAM</refname>
<refname>pam</refname>
<refpurpose>Pluggable Authentication Modules for Linux</refpurpose>
</refnamediv>
- <refsect1 id='pam8-description'>
+ <refsect1 xml:id="pam8-description">
<title>DESCRIPTION</title>
<para>
This manual is intended to offer a quick introduction to
- <emphasis remap='B'>Linux-PAM</emphasis>. For more information
+ <emphasis remap="B">Linux-PAM</emphasis>. For more information
the reader is directed to the
- <emphasis remap='B'>Linux-PAM system administrators' guide</emphasis>.
+ <emphasis remap="B">Linux-PAM system administrators' guide</emphasis>.
</para>
<para>
- <emphasis remap='B'>Linux-PAM</emphasis> is a system of libraries
+ <emphasis remap="B">Linux-PAM</emphasis> is a system of libraries
that handle the authentication tasks of applications (services) on
the system. The library provides a stable general interface
(Application Programming Interface - API) that privilege granting
@@ -43,12 +40,12 @@
system administrator is free to choose how individual
service-providing applications will authenticate users. This dynamic
configuration is set by the contents of the single
- <emphasis remap='B'>Linux-PAM</emphasis> configuration file
- <filename>/etc/pam.conf</filename>. Alternatively, the configuration
- can be set by individual configuration files located in the
- <filename>/etc/pam.d/</filename> directory. The presence of this
- directory will cause <emphasis remap='B'>Linux-PAM</emphasis> to
- <emphasis remap='I'>ignore</emphasis> <filename>/etc/pam.conf</filename>.
+ <emphasis remap="B">Linux-PAM</emphasis> configuration file
+ <filename>/etc/pam.conf</filename>. Alternatively and preferably,
+ the configuration can be set by individual configuration files
+ located in a <filename>pam.d</filename> directory. The presence of this
+ directory will cause <emphasis remap="B">Linux-PAM</emphasis> to
+ <emphasis remap="I">ignore</emphasis> <filename>/etc/pam.conf</filename>.
</para>
<para>
@@ -64,26 +61,26 @@
<para>From the point of view of the system administrator, for whom this
manual is provided, it is not of primary importance to understand the
internal behavior of the
-<emphasis remap='B'>Linux-PAM</emphasis>
+<emphasis remap="B">Linux-PAM</emphasis>
library. The important point to recognize is that the configuration
file(s)
-<emphasis remap='I'>define</emphasis>
+<emphasis remap="I">define</emphasis>
the connection between applications
-<emphasis remap='B'></emphasis>(<emphasis remap='B'>services</emphasis>)
+<emphasis remap="B"/>(<emphasis remap="B">services</emphasis>)
and the pluggable authentication modules
-<emphasis remap='B'></emphasis>(<emphasis remap='B'>PAM</emphasis>s)
+<emphasis remap="B"/>(<emphasis remap="B">PAM</emphasis>s)
that perform the actual authentication tasks.</para>
-<para><emphasis remap='B'>Linux-PAM</emphasis>
+<para><emphasis remap="B">Linux-PAM</emphasis>
separates the tasks of
-<emphasis remap='I'>authentication</emphasis>
+<emphasis remap="I">authentication</emphasis>
into four independent management groups:
-<emphasis remap='B'>account</emphasis> management;
-<emphasis remap='B'>auth</emphasis>entication management;
-<emphasis remap='B'>password</emphasis> management;
+<emphasis remap="B">account</emphasis> management;
+<emphasis remap="B">auth</emphasis>entication management;
+<emphasis remap="B">password</emphasis> management;
and
-<emphasis remap='B'>session</emphasis> management.
+<emphasis remap="B">session</emphasis> management.
(We highlight the abbreviations used for these groups in the
configuration file.)</para>
@@ -92,12 +89,12 @@ configuration file.)</para>
user's request for a restricted service:</para>
-<para><emphasis remap='B'>account</emphasis> -
+<para><emphasis remap="B">account</emphasis> -
provide account verification types of service: has the user's password
expired?; is this user permitted access to the requested service?</para>
<!-- .br -->
-<para><emphasis remap='B'>auth</emphasis>entication -
+<para><emphasis remap="B">auth</emphasis>entication -
authenticate a user and set up user credentials. Typically this is via
some challenge-response request that the user must satisfy: if you are
who you claim to be please enter your password. Not all authentications
@@ -105,86 +102,85 @@ are of this type, there exist hardware based authentication schemes
(such as the use of smart-cards and biometric devices), with suitable
modules, these may be substituted seamlessly for more standard
approaches to authentication - such is the flexibility of
-<emphasis remap='B'>Linux-PAM</emphasis>.</para>
+<emphasis remap="B">Linux-PAM</emphasis>.</para>
<!-- .br -->
-<para><emphasis remap='B'>password</emphasis> -
+<para><emphasis remap="B">password</emphasis> -
this group's responsibility is the task of updating authentication
mechanisms. Typically, such services are strongly coupled to those of
the
-<emphasis remap='B'>auth</emphasis>
+<emphasis remap="B">auth</emphasis>
group. Some authentication mechanisms lend themselves well to being
updated with such a function. Standard UN*X password-based access is
the obvious example: please enter a replacement password.</para>
<!-- .br -->
-<para><emphasis remap='B'>session</emphasis> -
+<para><emphasis remap="B">session</emphasis> -
this group of tasks cover things that should be done prior to a
service being given and after it is withdrawn. Such tasks include the
maintenance of audit trails and the mounting of the user's home
directory. The
-<emphasis remap='B'>session</emphasis>
+<emphasis remap="B">session</emphasis>
management group is important as it provides both an opening and
closing hook for modules to affect the services available to a user.</para>
</refsect1>
- <refsect1 id='pam8-files'>
+ <refsect1 xml:id="pam8-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/pam.conf</filename></term>
+ <term>/etc/pam.conf</term>
<listitem>
<para>the configuration file</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><filename>/etc/pam.d</filename></term>
+ <term>/etc/pam.d</term>
<listitem>
<para>
- the <emphasis remap='B'>Linux-PAM</emphasis> configuration
+ the <emphasis remap="B">Linux-PAM</emphasis> configuration
directory. Generally, if this directory is present, the
<filename>/etc/pam.conf</filename> file is ignored.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><filename>/usr/lib/pam.d</filename></term>
+ <term>/usr/lib/pam.d</term>
<listitem>
<para>
- the <emphasis remap='B'>Linux-PAM</emphasis> vendor configuration
+ the <emphasis remap="B">Linux-PAM</emphasis> vendor configuration
directory. Files in <filename>/etc/pam.d</filename> override
files with the same name in this directory.
</para>
</listitem>
</varlistentry>
- <varlistentry>
- <term><filename>%vendordir%/pam.d</filename></term>
+ <varlistentry condition="with_vendordir">
+ <term>%vendordir%/pam.d</term>
<listitem>
<para>
- the <emphasis remap='B'>Linux-PAM</emphasis> vendor configuration
- directory. Files in <filename>/etc/pam.d</filename> and
- <filename>/usr/lib/pam.d</filename> override files with the same
- name in this directory. Only available if Linux-PAM was compiled
- with vendordir enabled.
+ additional <emphasis remap="B">Linux-PAM</emphasis> vendor
+ configuration directory. Files in <filename>/etc/pam.d</filename>
+ and <filename>/usr/lib/pam.d</filename> override files with the
+ same name in this directory.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
- <refsect1 id='pam8-errors'>
+ <refsect1 xml:id="pam8-errors">
<title>ERRORS</title>
<para>
Typically errors generated by the
- <emphasis remap='B'>Linux-PAM</emphasis> system of libraries, will
+ <emphasis remap="B">Linux-PAM</emphasis> system of libraries, will
be written to <citerefentry>
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>.
</para>
</refsect1>
- <refsect1 id='pam8-conforming_to'>
+ <refsect1 xml:id="pam8-conforming_to">
<title>CONFORMING TO</title>
<para>
DCE-RFC 86.0, October 1995.
@@ -193,7 +189,7 @@ closing hook for modules to affect the services available to a user.</para>
</para>
</refsect1>
- <refsect1 id='pam8-see_also'>
+ <refsect1 xml:id="pam8-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
diff --git a/doc/man/pam.conf-desc.xml b/doc/man/pam.conf-desc.xml
index 909dcdbe..60c2d71d 100644
--- a/doc/man/pam.conf-desc.xml
+++ b/doc/man/pam.conf-desc.xml
@@ -1,16 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<section id='pam.conf-desc'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam.conf-desc">
<para>
When a <emphasis>PAM</emphasis> aware privilege granting application
is started, it activates its attachment to the PAM-API. This
activation performs a number of tasks, the most important being the
reading of the configuration file(s): <filename>/etc/pam.conf</filename>.
- Alternatively, this may be the contents of the
- <filename>/etc/pam.d/</filename> directory. The presence of this
- directory will cause Linux-PAM to ignore
- <filename>/etc/pam.conf</filename>.
+ Alternatively and preferably, the configuration can be set by individual
+ configuration files located in a <filename>pam.d</filename> directory.
+ The presence of this directory will cause
+ <emphasis remap="B">Linux-PAM</emphasis> to
+ <emphasis remap="I">ignore</emphasis> <filename>/etc/pam.conf</filename>.
</para>
<para>
These files list the <emphasis>PAM</emphasis>s that will do the
diff --git a/doc/man/pam.conf-dir.xml b/doc/man/pam.conf-dir.xml
index 8446cf35..57b2991c 100644
--- a/doc/man/pam.conf-dir.xml
+++ b/doc/man/pam.conf-dir.xml
@@ -1,18 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<section id='pam.conf-dir'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam.conf-dir">
<para>
More flexible than the single configuration file is it to
- configure libpam via the contents of the
- <filename>/etc/pam.d/</filename> directory. In this case the
- directory is filled with files each of which has a filename
+ configure libpam via the contents of
+ <filename>pam.d</filename> directories. In this case the
+ directories are filled with files each of which has a filename
equal to a service-name (in lower-case): it is the personal
configuration file for the named service.
</para>
<para>
- The syntax of each file in /etc/pam.d/ is similar to that of the
+ Vendor-supplied PAM configuration files might be installed in
+ the system directory <filename>/usr/lib/pam.d/</filename> or
+ a configurable vendor specific directory instead
+ of the machine configuration directory <filename>/etc/pam.d/</filename>.
+ If no machine configuration file is found, the vendor-supplied file
+ is used. All files in <filename>/etc/pam.d/</filename> override
+ files with the same name in other directories.
+ </para>
+
+ <para>
+ The syntax of each file in pam.d is similar to that of the
<filename>/etc/pam.conf</filename> file and is made up of lines
of the following form:
</para>
@@ -25,6 +32,6 @@ type control module-path module-arguments
The only difference being that the service-name is not present. The
service-name is of course the name of the given configuration file.
For example, <filename>/etc/pam.d/login</filename> contains the
- configuration for the <emphasis remap='B'>login</emphasis> service.
+ configuration for the <emphasis remap="B">login</emphasis> service.
</para>
</section>
diff --git a/doc/man/pam.conf-syntax.xml b/doc/man/pam.conf-syntax.xml
index 5112f930..c7d90081 100644
--- a/doc/man/pam.conf-syntax.xml
+++ b/doc/man/pam.conf-syntax.xml
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<section id='pam.conf-syntax'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam.conf-syntax">
<para>
The syntax of the <filename>/etc/pam.conf</filename>
configuration file is as follows. The file is made up of a list
@@ -18,7 +14,7 @@
</para>
<para>
- <emphasis remap='B'> service type control module-path module-arguments</emphasis>
+ <emphasis remap="B"> service type control module-path module-arguments</emphasis>
</para>
<para>
@@ -411,7 +407,7 @@
should use `\]'. In other words:
</para>
<programlisting>
- [..[..\]..] --> ..[..]..
+ [..[..\]..] --&gt; ..[..]..
</programlisting>
<para>
@@ -424,4 +420,4 @@
</citerefentry>.
</para>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/man/pam.conf.5 b/doc/man/pam.conf.5
index 703bcf60..bd74f9dd 100644
--- a/doc/man/pam.conf.5
+++ b/doc/man/pam.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam.conf
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -34,9 +34,12 @@ pam.conf, pam.d \- PAM configuration files
When a
\fIPAM\fR
aware privilege granting application is started, it activates its attachment to the PAM\-API\&. This activation performs a number of tasks, the most important being the reading of the configuration file(s):
-/etc/pam\&.conf\&. Alternatively, this may be the contents of the
-/etc/pam\&.d/
-directory\&. The presence of this directory will cause Linux\-PAM to ignore
+/etc/pam\&.conf\&. Alternatively and preferably, the configuration can be set by individual configuration files located in a
+pam\&.d
+directory\&. The presence of this directory will cause
+\fBLinux\-PAM\fR
+to
+\fIignore\fR
/etc/pam\&.conf\&.
.PP
These files list the
@@ -351,11 +354,18 @@ When using this convention, you can include `[\*(Aq characters inside the string
Any line in (one of) the configuration file(s), that is not formatted correctly, will generally tend (erring on the side of caution) to make the authentication process fail\&. A corresponding error is written to the system log files with a call to
\fBsyslog\fR(3)\&.
.PP
-More flexible than the single configuration file is it to configure libpam via the contents of the
+More flexible than the single configuration file is it to configure libpam via the contents of
+pam\&.d
+directories\&. In this case the directories are filled with files each of which has a filename equal to a service\-name (in lower\-case): it is the personal configuration file for the named service\&.
+.PP
+Vendor\-supplied PAM configuration files might be installed in the system directory
+/usr/lib/pam\&.d/
+or a configurable vendor specific directory instead of the machine configuration directory
+/etc/pam\&.d/\&. If no machine configuration file is found, the vendor\-supplied file is used\&. All files in
/etc/pam\&.d/
-directory\&. In this case the directory is filled with files each of which has a filename equal to a service\-name (in lower\-case): it is the personal configuration file for the named service\&.
+override files with the same name in other directories\&.
.PP
-The syntax of each file in /etc/pam\&.d/ is similar to that of the
+The syntax of each file in pam\&.d is similar to that of the
/etc/pam\&.conf
file and is made up of lines of the following form:
.sp
@@ -375,6 +385,30 @@ The only difference being that the service\-name is not present\&. The service\-
contains the configuration for the
\fBlogin\fR
service\&.
+.SH "FILES"
+.PP
+/etc/pam\&.conf
+.RS 4
+the configuration file
+.RE
+.PP
+/etc/pam\&.d
+.RS 4
+the
+\fBLinux\-PAM\fR
+configuration directory\&. Generally, if this directory is present, the
+/etc/pam\&.conf
+file is ignored\&.
+.RE
+.PP
+/usr/lib/pam\&.d
+.RS 4
+the
+\fBLinux\-PAM\fR
+vendor configuration directory\&. Files in
+/etc/pam\&.d
+override files with the same name in this directory\&.
+.RE
.SH "SEE ALSO"
.PP
\fBpam\fR(3),
diff --git a/doc/man/pam.conf.5.xml b/doc/man/pam.conf.5.xml
new file mode 100644
index 00000000..997776bb
--- /dev/null
+++ b/doc/man/pam.conf.5.xml
@@ -0,0 +1,85 @@
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam.conf">
+
+ <refmeta>
+ <refentrytitle>pam.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
+ </refmeta>
+
+ <refnamediv xml:id="pam.conf-name">
+ <refname>pam.conf</refname>
+ <refname>pam.d</refname>
+ <refpurpose>PAM configuration files</refpurpose>
+ </refnamediv>
+
+<!-- body begins here -->
+
+ <refsect1 xml:id="pam.conf-description">
+ <title>DESCRIPTION</title>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam.conf-desc.xml" xpointer='xpointer(id("pam.conf-desc")/*)' />
+
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam.conf-syntax.xml" xpointer='xpointer(id("pam.conf-syntax")/*)' />
+
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam.conf-dir.xml" xpointer='xpointer(id("pam.conf-dir")/*)' />
+ </refsect1>
+
+ <refsect1 xml:id="pam8-files">
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term>/etc/pam.conf</term>
+ <listitem>
+ <para>the configuration file</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>/etc/pam.d</term>
+ <listitem>
+ <para>
+ the <emphasis remap="B">Linux-PAM</emphasis> configuration
+ directory. Generally, if this directory is present, the
+ <filename>/etc/pam.conf</filename> file is ignored.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>/usr/lib/pam.d</term>
+ <listitem>
+ <para>
+ the <emphasis remap="B">Linux-PAM</emphasis> vendor configuration
+ directory. Files in <filename>/etc/pam.d</filename> override
+ files with the same name in this directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="with_vendordir">
+ <term>%vendordir%/pam.d</term>
+ <listitem>
+ <para>
+ additional <emphasis remap="B">Linux-PAM</emphasis> vendor
+ configuration directory. Files in <filename>/etc/pam.d</filename>
+ and <filename>/usr/lib/pam.d</filename> override files with the
+ same name in this directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 xml:id="pam.conf-see_also">
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>
+ </para>
+
+ </refsect1>
+</refentry>
diff --git a/doc/man/pam.d.5 b/doc/man/pam.d.5
index e4606aed..91277d6e 100644
--- a/doc/man/pam.d.5
+++ b/doc/man/pam.d.5
@@ -1 +1 @@
-.so man5/pam.conf.5
+.so pam.conf.5
diff --git a/doc/man/pam_acct_mgmt.3 b/doc/man/pam_acct_mgmt.3
index 1d95505f..18e91d56 100644
--- a/doc/man/pam_acct_mgmt.3
+++ b/doc/man/pam_acct_mgmt.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_acct_mgmt
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_ACCT_MGMT" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_ACCT_MGMT" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_acct_mgmt.3.xml b/doc/man/pam_acct_mgmt.3.xml
index 59760d7f..de6a94ab 100644
--- a/doc/man/pam_acct_mgmt.3.xml
+++ b/doc/man/pam_acct_mgmt.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_acct_mgmt'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_acct_mgmt">
<refmeta>
<refentrytitle>pam_acct_mgmt</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_acct_mgmt-name">
+ <refnamediv xml:id="pam_acct_mgmt-name">
<refname>pam_acct_mgmt</refname>
<refpurpose>PAM account validation management</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_acct_mgmt-synopsis'>
+ <funcsynopsis xml:id="pam_acct_mgmt-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_acct_mgmt</function></funcdef>
@@ -27,7 +25,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_acct_mgmt-description'>
+ <refsect1 xml:id="pam_acct_mgmt-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_acct_mgmt</function> function is used to determine
@@ -62,7 +60,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_acct_mgmt-return_values">
+ <refsect1 xml:id="pam_acct_mgmt-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -122,7 +120,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_acct_mgmt-see_also'>
+ <refsect1 xml:id="pam_acct_mgmt-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -142,4 +140,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_authenticate.3 b/doc/man/pam_authenticate.3
index e3257bfb..1760e2ac 100644
--- a/doc/man/pam_authenticate.3
+++ b/doc/man/pam_authenticate.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_authenticate
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_AUTHENTICATE" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_AUTHENTICATE" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_authenticate.3.xml b/doc/man/pam_authenticate.3.xml
index c2004eb4..794a5c71 100644
--- a/doc/man/pam_authenticate.3.xml
+++ b/doc/man/pam_authenticate.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_authenticate'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_authenticate">
<refmeta>
<refentrytitle>pam_authenticate</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_authenticate-name">
+ <refnamediv xml:id="pam_authenticate-name">
<refname>pam_authenticate</refname>
<refpurpose>account authentication</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_authenticate-synopsis'>
+ <funcsynopsis xml:id="pam_authenticate-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_authenticate</function></funcdef>
@@ -27,7 +25,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_authenticate-description'>
+ <refsect1 xml:id="pam_authenticate-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_authenticate</function> function is used to
@@ -77,7 +75,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_authenticate-return_values">
+ <refsect1 xml:id="pam_authenticate-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -146,7 +144,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_authenticate-see_also'>
+ <refsect1 xml:id="pam_authenticate-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -166,4 +164,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_chauthtok.3 b/doc/man/pam_chauthtok.3
index d2e0b460..60d267ff 100644
--- a/doc/man/pam_chauthtok.3
+++ b/doc/man/pam_chauthtok.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_chauthtok
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_CHAUTHTOK" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_CHAUTHTOK" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_chauthtok.3.xml b/doc/man/pam_chauthtok.3.xml
index f42bc68f..e184f45f 100644
--- a/doc/man/pam_chauthtok.3.xml
+++ b/doc/man/pam_chauthtok.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_chauthtok'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_chauthtok">
<refmeta>
<refentrytitle>pam_chauthtok</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_chauthtok-name">
+ <refnamediv xml:id="pam_chauthtok-name">
<refname>pam_chauthtok</refname>
<refpurpose>updating authentication tokens</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_chauthtok-synopsis'>
+ <funcsynopsis xml:id="pam_chauthtok-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_chauthtok</function></funcdef>
@@ -27,7 +25,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_chauthtok-description'>
+ <refsect1 xml:id="pam_chauthtok-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_chauthtok</function> function is used to change the
@@ -64,7 +62,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_chauthtok-return_values">
+ <refsect1 xml:id="pam_chauthtok-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -138,7 +136,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_chauthtok-see_also'>
+ <refsect1 xml:id="pam_chauthtok-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -161,4 +159,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_close_session.3 b/doc/man/pam_close_session.3
index 3a7d56b8..8322f91f 100644
--- a/doc/man/pam_close_session.3
+++ b/doc/man/pam_close_session.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_close_session
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_CLOSE_SESSION" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_CLOSE_SESSION" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_close_session.3.xml b/doc/man/pam_close_session.3.xml
index db549bda..e1c74ebd 100644
--- a/doc/man/pam_close_session.3.xml
+++ b/doc/man/pam_close_session.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_send'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_send">
<refmeta>
<refentrytitle>pam_close_session</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_close_session-name">
+ <refnamediv xml:id="pam_close_session-name">
<refname>pam_close_session</refname>
<refpurpose>terminate PAM session management</refpurpose>
</refnamediv>
@@ -18,7 +15,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_close_session-synopsis">
+ <funcsynopsis xml:id="pam_close_session-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_close_session</function></funcdef>
@@ -29,7 +26,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_close_session-description">
+ <refsect1 xml:id="pam_close_session-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_close_session</function> function is used
@@ -63,7 +60,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_close_session-return_values">
+ <refsect1 xml:id="pam_close_session-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -101,7 +98,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_close_session-see_also">
+ <refsect1 xml:id="pam_close_session-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -112,4 +109,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_conv.3 b/doc/man/pam_conv.3
index 5f65b2e9..5ada0837 100644
--- a/doc/man/pam_conv.3
+++ b/doc/man/pam_conv.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_conv
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_CONV" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_CONV" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_conv.3.xml b/doc/man/pam_conv.3.xml
index 5106ddf7..31834f3c 100644
--- a/doc/man/pam_conv.3.xml
+++ b/doc/man/pam_conv.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_conv'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_conv">
<refmeta>
<refentrytitle>pam_conv</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_conv-name">
+ <refnamediv xml:id="pam_conv-name">
<refname>pam_conv</refname>
<refpurpose>PAM conversation function</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_conv-synopsis">
+ <funcsynopsis xml:id="pam_conv-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
</funcsynopsis>
<programlisting>
@@ -38,7 +36,7 @@ struct pam_conv {
</programlisting>
</refsynopsisdiv>
- <refsect1 id='pam_conv-description'>
+ <refsect1 xml:id="pam_conv-description">
<title>DESCRIPTION</title>
<para>
The PAM library uses an application-defined callback to allow
@@ -174,7 +172,7 @@ struct pam_conv {
</itemizedlist>
</refsect1>
- <refsect1 id="pam_conv-return_values">
+ <refsect1 xml:id="pam_conv-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -205,7 +203,7 @@ struct pam_conv {
</variablelist>
</refsect1>
- <refsect1 id='pam_conv-see_also'>
+ <refsect1 xml:id="pam_conv-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -225,4 +223,4 @@ struct pam_conv {
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_end.3 b/doc/man/pam_end.3
index be4815e2..752f86cb 100644
--- a/doc/man/pam_end.3
+++ b/doc/man/pam_end.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_end
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_END" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_END" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_end.3.xml b/doc/man/pam_end.3.xml
index 5febf85a..b2584e73 100644
--- a/doc/man/pam_end.3.xml
+++ b/doc/man/pam_end.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_end'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_end">
<refmeta>
<refentrytitle>pam_end</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_end-name">
+ <refnamediv xml:id="pam_end-name">
<refname>pam_end</refname>
<refpurpose>termination of PAM transaction</refpurpose>
</refnamediv>
@@ -18,7 +15,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_end-synopsis">
+ <funcsynopsis xml:id="pam_end-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_end</function></funcdef>
@@ -29,7 +26,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_end-description">
+ <refsect1 xml:id="pam_end-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_end</function> function terminates the PAM
@@ -79,7 +76,7 @@
</para>
</refsect1>
- <refsect1 id="pam_end-return_values">
+ <refsect1 xml:id="pam_end-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -102,7 +99,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_end-see_also">
+ <refsect1 xml:id="pam_end-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -119,4 +116,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_error.3 b/doc/man/pam_error.3
index b28d7080..9a6c3f8d 100644
--- a/doc/man/pam_error.3
+++ b/doc/man/pam_error.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_error
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_ERROR" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_ERROR" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_error.3.xml b/doc/man/pam_error.3.xml
index de167f2c..0f294c22 100644
--- a/doc/man/pam_error.3.xml
+++ b/doc/man/pam_error.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_error">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_error">
<refmeta>
<refentrytitle>pam_error</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_error-name">
+ <refnamediv xml:id="pam_error-name">
<refname>pam_error</refname>
<refname>pam_verror</refname>
<refpurpose>display error messages to the user</refpurpose>
@@ -18,7 +15,7 @@
<!-- body begins here -->
- <refsynopsisdiv id="pam_error-synopsis">
+ <refsynopsisdiv xml:id="pam_error-synopsis">
<funcsynopsis>
<funcsynopsisinfo>#include &lt;security/pam_ext.h&gt;</funcsynopsisinfo>
<funcprototype>
@@ -36,7 +33,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_error-description'>
+ <refsect1 xml:id="pam_error-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_error</function> function prints error messages
@@ -51,7 +48,7 @@
</citerefentry> variable argument list macros.
</para>
</refsect1>
- <refsect1 id="pam_error-return_values">
+ <refsect1 xml:id="pam_error-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -89,7 +86,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_error-see_also'>
+ <refsect1 xml:id="pam_error-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -110,7 +107,7 @@
</para>
</refsect1>
- <refsect1 id='pam_error-standards'>
+ <refsect1 xml:id="pam_error-standards">
<title>STANDARDS</title>
<para>
The <function>pam_error</function> and <function>pam_verror</function>
@@ -118,4 +115,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_fail_delay.3 b/doc/man/pam_fail_delay.3
index bbf2c361..c647e642 100644
--- a/doc/man/pam_fail_delay.3
+++ b/doc/man/pam_fail_delay.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_fail_delay
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_FAIL_DELAY" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_FAIL_DELAY" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_fail_delay.3.xml b/doc/man/pam_fail_delay.3.xml
index 53c1f89e..c400736a 100644
--- a/doc/man/pam_fail_delay.3.xml
+++ b/doc/man/pam_fail_delay.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_fail_delay">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_fail_delay">
<refmeta>
<refentrytitle>pam_fail_delay</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_fail_delay-name">
+ <refnamediv xml:id="pam_fail_delay-name">
<refname>pam_fail_delay</refname>
<refpurpose>request a delay on failure</refpurpose>
</refnamediv>
@@ -18,7 +15,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_fail_delay-synopsis">
+ <funcsynopsis xml:id="pam_fail_delay-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_fail_delay</function></funcdef>
@@ -28,7 +25,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_fail_delay-description'>
+ <refsect1 xml:id="pam_fail_delay-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_fail_delay</function> function provides a
@@ -105,7 +102,7 @@ void (*delay_fn)(int retval, unsigned usec_delay, void *appdata_ptr);
</para>
</refsect1>
- <refsect1 id='pam_fail_delay-rationale'>
+ <refsect1 xml:id="pam_fail_delay-rationale">
<title>RATIONALE</title>
<para>
It is often possible to attack an authentication scheme by exploiting
@@ -129,7 +126,7 @@ void (*delay_fn)(int retval, unsigned usec_delay, void *appdata_ptr);
</para>
</refsect1>
- <refsect1 id='pam_fail_delay-example'>
+ <refsect1 xml:id="pam_fail_delay-example">
<title>EXAMPLE</title>
<para>
For example, a login application may require a failure delay of
@@ -161,7 +158,7 @@ module #2: pam_fail_delay (pamh, 4000000);
</para>
</refsect1>
- <refsect1 id='pam_fail_delay-return_values'>
+ <refsect1 xml:id="pam_fail_delay-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -183,7 +180,7 @@ module #2: pam_fail_delay (pamh, 4000000);
</variablelist>
</refsect1>
- <refsect1 id='pam_fail_delay-see_also'>
+ <refsect1 xml:id="pam_fail_delay-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -198,7 +195,7 @@ module #2: pam_fail_delay (pamh, 4000000);
</para>
</refsect1>
- <refsect1 id='pam_fail_delay-standards'>
+ <refsect1 xml:id="pam_fail_delay-standards">
<title>STANDARDS</title>
<para>
The <function>pam_fail_delay</function> function is an
@@ -206,4 +203,4 @@ module #2: pam_fail_delay (pamh, 4000000);
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_get_authtok.3 b/doc/man/pam_get_authtok.3
index 755dd689..105a217e 100644
--- a/doc/man/pam_get_authtok.3
+++ b/doc/man/pam_get_authtok.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_get_authtok
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_GET_AUTHTOK" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_GET_AUTHTOK" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -109,26 +109,26 @@ be
\fBpam_get_authtok\fR
honours the following module options:
.PP
-\fBtry_first_pass\fR
+try_first_pass
.RS 4
Before prompting the user for their password, the module first tries the previous stacked module\*(Aqs password in case that satisfies this module as well\&.
.RE
.PP
-\fBuse_first_pass\fR
+use_first_pass
.RS 4
The argument
\fBuse_first_pass\fR
forces the module to use a previous stacked modules password and will never prompt the user \- if no password is available or the password is not appropriate, the user will be denied access\&.
.RE
.PP
-\fBuse_authtok\fR
+use_authtok
.RS 4
When password changing enforce the module to set the new token to the one provided by a previously stacked
\fBpassword\fR
module\&. If no token is available token changing will fail\&.
.RE
.PP
-\fBauthtok_type=\fR\fB\fIXXX\fR\fR
+authtok_type=XXX
.RS 4
The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: "\&. The example word
\fIUNIX\fR
diff --git a/doc/man/pam_get_authtok.3.xml b/doc/man/pam_get_authtok.3.xml
index 5d50b168..ba6d955e 100644
--- a/doc/man/pam_get_authtok.3.xml
+++ b/doc/man/pam_get_authtok.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_get_authtok">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_get_authtok">
<refmeta>
<refentrytitle>pam_get_authtok</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_get_authtok-name">
+ <refnamediv xml:id="pam_get_authtok-name">
<refname>pam_get_authtok</refname>
<refname>pam_get_authtok_verify</refname>
<refname>pam_get_authtok_noverify</refname>
@@ -19,7 +16,7 @@
<!-- body begins here -->
- <refsynopsisdiv id="pam_get_authtok-synopsis">
+ <refsynopsisdiv xml:id="pam_get_authtok-synopsis">
<funcsynopsis>
<funcsynopsisinfo>#include &lt;security/pam_ext.h&gt;</funcsynopsisinfo>
<funcprototype>
@@ -44,7 +41,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_get_authtok-description'>
+ <refsect1 xml:id="pam_get_authtok-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_get_authtok</function> function returns the
@@ -119,7 +116,7 @@
</para>
</refsect1>
- <refsect1 id="pam_get_authtok-options">
+ <refsect1 xml:id="pam_get_authtok-options">
<title>OPTIONS</title>
<para>
<function>pam_get_authtok</function> honours the following module
@@ -128,7 +125,7 @@
<variablelist>
<varlistentry>
<term>
- <option>try_first_pass</option>
+ try_first_pass
</term>
<listitem>
<para>
@@ -140,7 +137,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_first_pass</option>
+ use_first_pass
</term>
<listitem>
<para>
@@ -153,7 +150,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_authtok</option>
+ use_authtok
</term>
<listitem>
<para>
@@ -166,7 +163,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>authtok_type=<replaceable>XXX</replaceable></option>
+ authtok_type=XXX
</term>
<listitem>
<para>
@@ -182,7 +179,7 @@
</refsect1>
- <refsect1 id="pam_get_authtok-return_values">
+ <refsect1 xml:id="pam_get_authtok-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -228,7 +225,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_get_authtok-see_also'>
+ <refsect1 xml:id="pam_get_authtok-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -237,7 +234,7 @@
</para>
</refsect1>
- <refsect1 id='pam_get_authtok-standards'>
+ <refsect1 xml:id="pam_get_authtok-standards">
<title>STANDARDS</title>
<para>
The <function>pam_get_authtok</function> function is a Linux-PAM
@@ -245,4 +242,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_get_authtok_noverify.3 b/doc/man/pam_get_authtok_noverify.3
index a990dbc4..07acbd0c 100644
--- a/doc/man/pam_get_authtok_noverify.3
+++ b/doc/man/pam_get_authtok_noverify.3
@@ -1 +1 @@
-.so man3/pam_get_authtok.3
+.so pam_get_authtok.3
diff --git a/doc/man/pam_get_authtok_verify.3 b/doc/man/pam_get_authtok_verify.3
index a990dbc4..07acbd0c 100644
--- a/doc/man/pam_get_authtok_verify.3
+++ b/doc/man/pam_get_authtok_verify.3
@@ -1 +1 @@
-.so man3/pam_get_authtok.3
+.so pam_get_authtok.3
diff --git a/doc/man/pam_get_data.3 b/doc/man/pam_get_data.3
index 3eac2ef4..b2e6da8b 100644
--- a/doc/man/pam_get_data.3
+++ b/doc/man/pam_get_data.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_get_data
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_GET_DATA" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_GET_DATA" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_get_data.3.xml b/doc/man/pam_get_data.3.xml
index e84e5a4c..1e71cf3b 100644
--- a/doc/man/pam_get_data.3.xml
+++ b/doc/man/pam_get_data.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_get_data'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_get_data">
<refmeta>
<refentrytitle>pam_get_data</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_get_data-name'>
+ <refnamediv xml:id="pam_get_data-name">
<refname>pam_get_data</refname>
<refpurpose>
get module internal data
@@ -22,7 +19,7 @@
<refsynopsisdiv>
- <funcsynopsis id="pam_get_data-synopsis">
+ <funcsynopsis xml:id="pam_get_data-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_get_data</function></funcdef>
@@ -35,7 +32,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_get_data-description">
+ <refsect1 xml:id="pam_get_data-description">
<title>DESCRIPTION</title>
<para>
This function together with the
@@ -58,7 +55,7 @@
</para>
</refsect1>
- <refsect1 id="pam_get_data-return_values">
+ <refsect1 xml:id="pam_get_data-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -90,7 +87,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_get_data-see_also">
+ <refsect1 xml:id="pam_get_data-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -105,4 +102,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_get_item.3 b/doc/man/pam_get_item.3
index b0e05d1c..d08fde5f 100644
--- a/doc/man/pam_get_item.3
+++ b/doc/man/pam_get_item.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_get_item
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_GET_ITEM" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_GET_ITEM" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -74,11 +74,13 @@ The string used when prompting for a user\*(Aqs name\&. The default value for th
.PP
PAM_TTY
.RS 4
-The terminal name: prefixed by
+The terminal name prefixed by
/dev/
-if it is a device file; for graphical, X\-based, applications the value for this item should be the
+for device files\&. In the past, graphical X\-based applications used to store the
\fI$DISPLAY\fR
-variable\&.
+variable here, but with the introduction of
+\fIPAM_XDISPLAY\fR
+this usage is deprecated\&.
.RE
.PP
PAM_RUSER
diff --git a/doc/man/pam_get_item.3.xml b/doc/man/pam_get_item.3.xml
index 1145273c..c30a279f 100644
--- a/doc/man/pam_get_item.3.xml
+++ b/doc/man/pam_get_item.3.xml
@@ -1,22 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
-[
-<!--
-<!ENTITY accessconf SYSTEM "pam_item_types_std.inc.xml">
-<!ENTITY accessconf SYSTEM "pam_item_types_ext.inc.xml">
--->
-]>
-
-<refentry id='pam_get_item'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_get_item">
<refmeta>
<refentrytitle>pam_get_item</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_get_item-name'>
+ <refnamediv xml:id="pam_get_item-name">
<refname>pam_get_item</refname>
<refpurpose>
getting PAM information
@@ -28,7 +19,7 @@
<refsynopsisdiv>
- <funcsynopsis id="pam_get_item-synopsis">
+ <funcsynopsis xml:id="pam_get_item-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_get_item</function></funcdef>
@@ -41,7 +32,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_get_item-description">
+ <refsect1 xml:id="pam_get_item-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_get_item</function> function allows applications
@@ -55,16 +46,14 @@
<emphasis>item_type</emphasis>:
</para>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_item_types_std.inc.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_item_types_std.inc.xml"/>
<para>
The following additional items are specific to Linux-PAM and should not be used in
portable applications:
</para>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_item_types_ext.inc.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_item_types_ext.inc.xml"/>
<para>
If a service module wishes to obtain the name of the user,
@@ -80,7 +69,7 @@
</refsect1>
- <refsect1 id="pam_get_item-return_values">
+ <refsect1 xml:id="pam_get_item-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -128,7 +117,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_get_item-see_also">
+ <refsect1 xml:id="pam_get_item-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -140,4 +129,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_get_user.3 b/doc/man/pam_get_user.3
index 12cfaf4f..fcf99e86 100644
--- a/doc/man/pam_get_user.3
+++ b/doc/man/pam_get_user.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_get_user
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_GET_USER" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_GET_USER" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_get_user.3.xml b/doc/man/pam_get_user.3.xml
index 8bb176e4..121b3aa7 100644
--- a/doc/man/pam_get_user.3.xml
+++ b/doc/man/pam_get_user.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_get_user'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_get_user">
<refmeta>
<refentrytitle>pam_get_user</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_get_user-name'>
+ <refnamediv xml:id="pam_get_user-name">
<refname>pam_get_user</refname>
<refpurpose>
get user name
@@ -22,7 +19,7 @@
<refsynopsisdiv>
- <funcsynopsis id="pam_get_user-synopsis">
+ <funcsynopsis xml:id="pam_get_user-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_get_user</function></funcdef>
@@ -35,7 +32,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_get_user-description">
+ <refsect1 xml:id="pam_get_user-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_get_user</function> function returns the
@@ -87,7 +84,7 @@
</para>
</refsect1>
- <refsect1 id="pam_get_user-return_values">
+ <refsect1 xml:id="pam_get_user-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -143,7 +140,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_get_user-see_also">
+ <refsect1 xml:id="pam_get_user-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -161,4 +158,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_getenv.3 b/doc/man/pam_getenv.3
index 56f32bac..d0d39990 100644
--- a/doc/man/pam_getenv.3
+++ b/doc/man/pam_getenv.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_getenv
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_GETENV" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_GETENV" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_getenv.3.xml b/doc/man/pam_getenv.3.xml
index 7e8db015..df25863b 100644
--- a/doc/man/pam_getenv.3.xml
+++ b/doc/man/pam_getenv.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_getenv'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_getenv">
<refmeta>
<refentrytitle>pam_getenv</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_getenv-name">
+ <refnamediv xml:id="pam_getenv-name">
<refname>pam_getenv</refname>
<refpurpose>get a PAM environment variable</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_getenv-synopsis'>
+ <funcsynopsis xml:id="pam_getenv-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>const char *<function>pam_getenv</function></funcdef>
@@ -27,7 +25,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_getenv-description'>
+ <refsect1 xml:id="pam_getenv-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_getenv</function> function searches the
@@ -39,7 +37,7 @@
</para>
</refsect1>
- <refsect1 id="pam_getenv-return_values">
+ <refsect1 xml:id="pam_getenv-return_values">
<title>RETURN VALUES</title>
<para>
The <function>pam_getenv</function> function returns NULL
@@ -47,7 +45,7 @@
</para>
</refsect1>
- <refsect1 id='pam_getenv-see_also'>
+ <refsect1 xml:id="pam_getenv-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -64,4 +62,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_getenvlist.3 b/doc/man/pam_getenvlist.3
index 9ce441d2..83697643 100644
--- a/doc/man/pam_getenvlist.3
+++ b/doc/man/pam_getenvlist.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_getenvlist
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_GETENVLIST" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_GETENVLIST" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_getenvlist.3.xml b/doc/man/pam_getenvlist.3.xml
index 1c29b737..54b1f411 100644
--- a/doc/man/pam_getenvlist.3.xml
+++ b/doc/man/pam_getenvlist.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_getenvlist'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_getenvlist">
<refmeta>
<refentrytitle>pam_getenvlist</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_getenvlist-name">
+ <refnamediv xml:id="pam_getenvlist-name">
<refname>pam_getenvlist</refname>
<refpurpose>getting the PAM environment</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_getenvlist-synopsis'>
+ <funcsynopsis xml:id="pam_getenvlist-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>char **<function>pam_getenvlist</function></funcdef>
@@ -26,7 +24,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_getenvlist-description'>
+ <refsect1 xml:id="pam_getenvlist-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_getenvlist</function> function returns a complete
@@ -57,7 +55,7 @@
</para>
</refsect1>
- <refsect1 id="pam_getenvlist-return_values">
+ <refsect1 xml:id="pam_getenvlist-return_values">
<title>RETURN VALUES</title>
<para>
The <function>pam_getenvlist</function> function returns NULL
@@ -65,7 +63,7 @@
</para>
</refsect1>
- <refsect1 id='pam_getenvlist-see_also'>
+ <refsect1 xml:id="pam_getenvlist-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -82,4 +80,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_info.3 b/doc/man/pam_info.3
index c6d175b9..d66dee4b 100644
--- a/doc/man/pam_info.3
+++ b/doc/man/pam_info.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_info
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_INFO" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_INFO" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_info.3.xml b/doc/man/pam_info.3.xml
index 88e671c7..5155d419 100644
--- a/doc/man/pam_info.3.xml
+++ b/doc/man/pam_info.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_info">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_info">
<refmeta>
<refentrytitle>pam_info</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_info-name">
+ <refnamediv xml:id="pam_info-name">
<refname>pam_info</refname>
<refname>pam_vinfo</refname>
<refpurpose>display messages to the user</refpurpose>
@@ -18,7 +15,7 @@
<!-- body begins here -->
- <refsynopsisdiv id="pam_info-synopsis">
+ <refsynopsisdiv xml:id="pam_info-synopsis">
<funcsynopsis>
<funcsynopsisinfo>#include &lt;security/pam_ext.h&gt;</funcsynopsisinfo>
<funcprototype>
@@ -36,7 +33,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_info-description'>
+ <refsect1 xml:id="pam_info-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_info</function> function prints messages
@@ -51,7 +48,7 @@
</citerefentry> variable argument list macros.
</para>
</refsect1>
- <refsect1 id="pam_info-return_values">
+ <refsect1 xml:id="pam_info-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -89,7 +86,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_info-see_also'>
+ <refsect1 xml:id="pam_info-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -98,7 +95,7 @@
</para>
</refsect1>
- <refsect1 id='pam_info-standards'>
+ <refsect1 xml:id="pam_info-standards">
<title>STANDARDS</title>
<para>
The <function>pam_info</function> and <function>pam_vinfo</function>
@@ -106,4 +103,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_item_types_ext.inc.xml b/doc/man/pam_item_types_ext.inc.xml
index d36a5bd1..a5fee9c2 100644
--- a/doc/man/pam_item_types_ext.inc.xml
+++ b/doc/man/pam_item_types_ext.inc.xml
@@ -1,6 +1,5 @@
<!-- this file is included by pam_set_item and pam_get_item -->
-
- <variablelist>
+<variablelist xmlns="http://docbook.org/ns/docbook" version="5.0">
<varlistentry>
<term>PAM_FAIL_DELAY</term>
<listitem>
@@ -58,4 +57,4 @@
</listitem>
</varlistentry>
- </variablelist>
+ </variablelist> \ No newline at end of file
diff --git a/doc/man/pam_item_types_std.inc.xml b/doc/man/pam_item_types_std.inc.xml
index 81f240b0..b91c71bd 100644
--- a/doc/man/pam_item_types_std.inc.xml
+++ b/doc/man/pam_item_types_std.inc.xml
@@ -1,6 +1,5 @@
<!-- this file is included by pam_set_item and pam_get_item -->
-
- <variablelist>
+<variablelist xmlns="http://docbook.org/ns/docbook" version="5.0">
<varlistentry>
<term>PAM_SERVICE</term>
<listitem>
@@ -41,10 +40,12 @@
<term>PAM_TTY</term>
<listitem>
<para>
- The terminal name: prefixed by <filename>/dev/</filename> if
- it is a device file; for graphical, X-based, applications the
- value for this item should be the
- <emphasis>$DISPLAY</emphasis> variable.
+ The terminal name prefixed by <filename>/dev/</filename> for
+ device files.
+ In the past, graphical X-based applications used to store the
+ <emphasis>$DISPLAY</emphasis> variable here, but with the
+ introduction of <emphasis>PAM_XDISPLAY</emphasis> this usage
+ is deprecated.
</para>
</listitem>
</varlistentry>
diff --git a/doc/man/pam_misc_drop_env.3 b/doc/man/pam_misc_drop_env.3
index 5decbe5f..b3d162ce 100644
--- a/doc/man/pam_misc_drop_env.3
+++ b/doc/man/pam_misc_drop_env.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_misc_drop_env
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_MISC_DROP_ENV" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_MISC_DROP_ENV" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_misc_drop_env.3.xml b/doc/man/pam_misc_drop_env.3.xml
index 1941f589..a7f6cc80 100644
--- a/doc/man/pam_misc_drop_env.3.xml
+++ b/doc/man/pam_misc_drop_env.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_misc_drop_env">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_misc_drop_env">
<refmeta>
<refentrytitle>pam_misc_drop_env</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_misc_drop_env-name">
+ <refnamediv xml:id="pam_misc_drop_env-name">
<refname>pam_misc_drop_env</refname>
<refpurpose>liberating a locally saved environment</refpurpose>
</refnamediv>
@@ -18,7 +15,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_misc_drop_env-synopsis">
+ <funcsynopsis xml:id="pam_misc_drop_env-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_misc.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_misc_drop_env</function></funcdef>
@@ -27,7 +24,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_misc_drop_env-description'>
+ <refsect1 xml:id="pam_misc_drop_env-description">
<title>DESCRIPTION</title>
<para>
This function is defined to complement the <citerefentry>
@@ -39,7 +36,7 @@
</para>
</refsect1>
- <refsect1 id='pam_misc_drop_env-see_also'>
+ <refsect1 xml:id="pam_misc_drop_env-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -51,7 +48,7 @@
</para>
</refsect1>
- <refsect1 id='pam_misc_drop_env-standards'>
+ <refsect1 xml:id="pam_misc_drop_env-standards">
<title>STANDARDS</title>
<para>
The <function>pam_misc_drop_env</function> function is part of the
@@ -60,4 +57,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_misc_paste_env.3 b/doc/man/pam_misc_paste_env.3
index 41456d1d..d707daa4 100644
--- a/doc/man/pam_misc_paste_env.3
+++ b/doc/man/pam_misc_paste_env.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_misc_paste_env
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_MISC_PASTE_ENV" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_MISC_PASTE_ENV" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_misc_paste_env.3.xml b/doc/man/pam_misc_paste_env.3.xml
index d9a282c0..06194a9d 100644
--- a/doc/man/pam_misc_paste_env.3.xml
+++ b/doc/man/pam_misc_paste_env.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_misc_paste_env">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_misc_paste_env">
<refmeta>
<refentrytitle>pam_misc_paste_env</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_misc_paste_env-name">
+ <refnamediv xml:id="pam_misc_paste_env-name">
<refname>pam_misc_paste_env</refname>
<refpurpose>transcribing an environment to that of PAM</refpurpose>
</refnamediv>
@@ -18,7 +15,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_misc_paste_env-synopsis">
+ <funcsynopsis xml:id="pam_misc_paste_env-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_misc.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_misc_paste_env</function></funcdef>
@@ -28,7 +25,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_misc_paste_env-description'>
+ <refsect1 xml:id="pam_misc_paste_env-description">
<title>DESCRIPTION</title>
<para>
This function takes the supplied list of environment pointers and
@@ -37,7 +34,7 @@
</para>
</refsect1>
- <refsect1 id='pam_misc_paste_env-see_also'>
+ <refsect1 xml:id="pam_misc_paste_env-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -49,7 +46,7 @@
</para>
</refsect1>
- <refsect1 id='pam_misc_paste_env-standards'>
+ <refsect1 xml:id="pam_misc_paste_env-standards">
<title>STANDARDS</title>
<para>
The <function>pam_misc_paste_env</function> function is part of the
@@ -58,4 +55,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_misc_setenv.3 b/doc/man/pam_misc_setenv.3
index 575456d3..70030b74 100644
--- a/doc/man/pam_misc_setenv.3
+++ b/doc/man/pam_misc_setenv.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_misc_setenv
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_MISC_SETENV" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_MISC_SETENV" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_misc_setenv.3.xml b/doc/man/pam_misc_setenv.3.xml
index 7e61a8dd..4414d54d 100644
--- a/doc/man/pam_misc_setenv.3.xml
+++ b/doc/man/pam_misc_setenv.3.xml
@@ -1,15 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_misc_setenv">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_misc_setenv">
<refmeta>
<refentrytitle>pam_misc_setenv</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_misc_setenv-name">
+ <refnamediv xml:id="pam_misc_setenv-name">
<refname>pam_misc_setenv</refname>
<refpurpose>BSD like PAM environment variable setting</refpurpose>
</refnamediv>
@@ -17,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_misc_setenv-synopsis">
+ <funcsynopsis xml:id="pam_misc_setenv-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_misc.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_misc_setenv</function></funcdef>
@@ -29,7 +26,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_misc_setenv-description'>
+ <refsect1 xml:id="pam_misc_setenv-description">
<title>DESCRIPTION</title>
<para>
This function performs a task equivalent to <citerefentry>
@@ -44,7 +41,7 @@
</para>
</refsect1>
- <refsect1 id='pam_misc_setenv-see_also'>
+ <refsect1 xml:id="pam_misc_setenv-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -56,7 +53,7 @@
</para>
</refsect1>
- <refsect1 id='pam_misc_setenv-standards'>
+ <refsect1 xml:id="pam_misc_setenv-standards">
<title>STANDARDS</title>
<para>
The <function>pam_misc_setenv</function> function is part of the
@@ -65,4 +62,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_open_session.3 b/doc/man/pam_open_session.3
index a80a9e11..e56e1371 100644
--- a/doc/man/pam_open_session.3
+++ b/doc/man/pam_open_session.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_open_session
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_OPEN_SESSION" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_OPEN_SESSION" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_open_session.3.xml b/doc/man/pam_open_session.3.xml
index eba0bc01..d37b3e59 100644
--- a/doc/man/pam_open_session.3.xml
+++ b/doc/man/pam_open_session.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_send'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_send">
<refmeta>
<refentrytitle>pam_open_session</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_open_session-name">
+ <refnamediv xml:id="pam_open_session-name">
<refname>pam_open_session</refname>
<refpurpose>start PAM session management</refpurpose>
</refnamediv>
@@ -18,7 +15,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_open_session-synopsis">
+ <funcsynopsis xml:id="pam_open_session-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_open_session</function></funcdef>
@@ -29,7 +26,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_open_session-description">
+ <refsect1 xml:id="pam_open_session-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_open_session</function> function sets up a
@@ -63,7 +60,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_open_session-return_values">
+ <refsect1 xml:id="pam_open_session-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -101,7 +98,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_open_session-see_also">
+ <refsect1 xml:id="pam_open_session-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -112,4 +109,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_prompt.3 b/doc/man/pam_prompt.3
index 3ff08e7f..30707477 100644
--- a/doc/man/pam_prompt.3
+++ b/doc/man/pam_prompt.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_prompt
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_PROMPT" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_PROMPT" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_prompt.3.xml b/doc/man/pam_prompt.3.xml
index bf0c9bf6..c65a0c90 100644
--- a/doc/man/pam_prompt.3.xml
+++ b/doc/man/pam_prompt.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_prompt">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_prompt">
<refmeta>
<refentrytitle>pam_prompt</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_prompt-name">
+ <refnamediv xml:id="pam_prompt-name">
<refname>pam_prompt</refname>
<refname>pam_vprompt</refname>
<refpurpose>interface to conversation function</refpurpose>
@@ -18,7 +15,7 @@
<!-- body begins here -->
- <refsynopsisdiv id="pam_prompt-synopsis">
+ <refsynopsisdiv xml:id="pam_prompt-synopsis">
<funcsynopsis>
<funcsynopsisinfo>#include &lt;security/pam_ext.h&gt;</funcsynopsisinfo>
<funcprototype>
@@ -40,7 +37,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_prompt-description'>
+ <refsect1 xml:id="pam_prompt-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_prompt</function> function constructs a message
@@ -52,7 +49,7 @@
</para>
</refsect1>
- <refsect1 id="pam_prompt-return_values">
+ <refsect1 xml:id="pam_prompt-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -91,7 +88,7 @@
</refsect1>
- <refsect1 id='pam_prompt-see_also'>
+ <refsect1 xml:id="pam_prompt-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -103,7 +100,7 @@
</para>
</refsect1>
- <refsect1 id='pam_prompt-standards'>
+ <refsect1 xml:id="pam_prompt-standards">
<title>STANDARDS</title>
<para>
The <function>pam_prompt</function> and <function>pam_vprompt</function>
@@ -111,4 +108,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_putenv.3 b/doc/man/pam_putenv.3
index b832950d..3b826b19 100644
--- a/doc/man/pam_putenv.3
+++ b/doc/man/pam_putenv.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_putenv
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_PUTENV" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_PUTENV" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_putenv.3.xml b/doc/man/pam_putenv.3.xml
index 2d4afbc5..7267046f 100644
--- a/doc/man/pam_putenv.3.xml
+++ b/doc/man/pam_putenv.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_putenv'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_putenv">
<refmeta>
<refentrytitle>pam_putenv</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_putenv-name">
+ <refnamediv xml:id="pam_putenv-name">
<refname>pam_putenv</refname>
<refpurpose>set or change PAM environment variable</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_putenv-synopsis'>
+ <funcsynopsis xml:id="pam_putenv-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_putenv</function></funcdef>
@@ -27,7 +25,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_putenv-description'>
+ <refsect1 xml:id="pam_putenv-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_putenv</function> function is used to
@@ -83,7 +81,7 @@
</para>
</refsect1>
- <refsect1 id="pam_putenv-return_values">
+ <refsect1 xml:id="pam_putenv-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -129,7 +127,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_putenv-see_also'>
+ <refsect1 xml:id="pam_putenv-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -149,4 +147,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_set_data.3 b/doc/man/pam_set_data.3
index ea000566..59fcb979 100644
--- a/doc/man/pam_set_data.3
+++ b/doc/man/pam_set_data.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_set_data
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SET_DATA" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SET_DATA" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -94,7 +94,8 @@ PAM_DATA_SILENT
.RS 4
Which indicates that the process would prefer to perform the
\fBcleanup()\fR
-quietly\&. That is, discourages logging/messages to the user\&.
+quietly\&. That is, discourages logging/messages to the user\&. It is generally used to indicate that the current closing of the library is in a
+\fBfork\fR(2)ed process, and that the parent will take care of cleaning up things that exist outside of the current process space (files etc\&.)\&.
.RE
.SH "RETURN VALUES"
.PP
diff --git a/doc/man/pam_set_data.3.xml b/doc/man/pam_set_data.3.xml
index c20068c6..f8c89883 100644
--- a/doc/man/pam_set_data.3.xml
+++ b/doc/man/pam_set_data.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_set_data'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_set_data">
<refmeta>
<refentrytitle>pam_set_data</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_set_data-name'>
+ <refnamediv xml:id="pam_set_data-name">
<refname>pam_set_data</refname>
<refpurpose>
set module internal data
@@ -22,7 +19,7 @@
<refsynopsisdiv>
- <funcsynopsis id="pam_set_data-synopsis">
+ <funcsynopsis xml:id="pam_set_data-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_set_data</function></funcdef>
@@ -36,7 +33,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_set_data-description">
+ <refsect1 xml:id="pam_set_data-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_set_data</function> function associates a pointer
@@ -116,14 +113,20 @@
<para>
Which indicates that the process would prefer to perform the
<function>cleanup()</function> quietly. That is, discourages
- logging/messages to the user.
+ logging/messages to the user. It is generally used to indicate that
+ the current closing of the library is in a
+ <citerefentry>
+ <refentrytitle>fork</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>ed
+ process, and that the parent will take care of cleaning up things
+ that exist outside of the current process space (files etc.).
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
- <refsect1 id="pam_set_data-return_values">
+ <refsect1 xml:id="pam_set_data-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -154,7 +157,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_set_data-see_also">
+ <refsect1 xml:id="pam_set_data-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -169,4 +172,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_set_item.3 b/doc/man/pam_set_item.3
index 867897db..17ab1f34 100644
--- a/doc/man/pam_set_item.3
+++ b/doc/man/pam_set_item.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_set_item
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SET_ITEM" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SET_ITEM" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -69,11 +69,13 @@ The string used when prompting for a user\*(Aqs name\&. The default value for th
.PP
PAM_TTY
.RS 4
-The terminal name: prefixed by
+The terminal name prefixed by
/dev/
-if it is a device file; for graphical, X\-based, applications the value for this item should be the
+for device files\&. In the past, graphical X\-based applications used to store the
\fI$DISPLAY\fR
-variable\&.
+variable here, but with the introduction of
+\fIPAM_XDISPLAY\fR
+this usage is deprecated\&.
.RE
.PP
PAM_RUSER
diff --git a/doc/man/pam_set_item.3.xml b/doc/man/pam_set_item.3.xml
index 30ab92b9..1dbaeebf 100644
--- a/doc/man/pam_set_item.3.xml
+++ b/doc/man/pam_set_item.3.xml
@@ -1,22 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
-[
-<!--
-<!ENTITY accessconf SYSTEM "pam_item_types_std.inc.xml">
-<!ENTITY accessconf SYSTEM "pam_item_types_ext.inc.xml">
--->
-]>
-
-<refentry id='pam_set_item'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_set_item">
<refmeta>
<refentrytitle>pam_set_item</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_set_item-name'>
+ <refnamediv xml:id="pam_set_item-name">
<refname>pam_set_item</refname>
<refpurpose>
set and update PAM information
@@ -28,7 +19,7 @@
<refsynopsisdiv>
- <funcsynopsis id="pam_set_item-synopsis">
+ <funcsynopsis xml:id="pam_set_item-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_set_item</function></funcdef>
@@ -41,7 +32,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_set_item-description">
+ <refsect1 xml:id="pam_set_item-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_set_item</function> function allows applications
@@ -52,16 +43,14 @@
supported:
</para>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_item_types_std.inc.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_item_types_std.inc.xml"/>
<para>
The following additional items are specific to Linux-PAM and should not be used in
portable applications:
</para>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_item_types_ext.inc.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_item_types_ext.inc.xml"/>
<para>
For all <emphasis>item_type</emphasis>s, other than PAM_CONV and
@@ -81,7 +70,7 @@
</refsect1>
- <refsect1 id="pam_set_item-return_values">
+ <refsect1 xml:id="pam_set_item-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -121,7 +110,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_set_item-see_also">
+ <refsect1 xml:id="pam_set_item-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -133,4 +122,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_setcred.3 b/doc/man/pam_setcred.3
index 3ed0fd74..1a662da1 100644
--- a/doc/man/pam_setcred.3
+++ b/doc/man/pam_setcred.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_setcred
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SETCRED" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SETCRED" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_setcred.3.xml b/doc/man/pam_setcred.3.xml
index 62922482..09fe30d1 100644
--- a/doc/man/pam_setcred.3.xml
+++ b/doc/man/pam_setcred.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_setcred">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_setcred">
<refmeta>
<refentrytitle>pam_setcred</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_setcred-name">
+ <refnamediv xml:id="pam_setcred-name">
<refname>pam_setcred</refname>
<refpurpose>
establish / delete user credentials
@@ -19,7 +16,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_setcred-synopsis'>
+ <funcsynopsis xml:id="pam_setcred-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_setcred</function></funcdef>
@@ -30,7 +27,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_setcred-description'>
+ <refsect1 xml:id="pam_setcred-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_setcred</function> function is used to establish,
@@ -95,7 +92,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_setcred-return_values'>
+ <refsect1 xml:id="pam_setcred-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -160,7 +157,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_set_data-see_also">
+ <refsect1 xml:id="pam_set_data-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -177,4 +174,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_sm_acct_mgmt.3 b/doc/man/pam_sm_acct_mgmt.3
index 58c0e983..d44294d4 100644
--- a/doc/man/pam_sm_acct_mgmt.3
+++ b/doc/man/pam_sm_acct_mgmt.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_sm_acct_mgmt
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SM_ACCT_MGMT" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SM_ACCT_MGMT" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_sm_acct_mgmt.3.xml b/doc/man/pam_sm_acct_mgmt.3.xml
index b37dc306..822a338a 100644
--- a/doc/man/pam_sm_acct_mgmt.3.xml
+++ b/doc/man/pam_sm_acct_mgmt.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_sm_acct_mgmt'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_acct_mgmt">
<refmeta>
<refentrytitle>pam_sm_acct_mgmt</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_sm_acct_mgmt-name">
+ <refnamediv xml:id="pam_sm_acct_mgmt-name">
<refname>pam_sm_acct_mgmt</refname>
<refpurpose>PAM service function for account management</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_sm_acct_mgmt-synopsis'>
+ <funcsynopsis xml:id="pam_sm_acct_mgmt-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_sm_acct_mgmt</function></funcdef>
@@ -29,7 +27,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_sm_acct_mgmt-description'>
+ <refsect1 xml:id="pam_sm_acct_mgmt-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_sm_acct_mgmt</function> function is the service
@@ -64,7 +62,7 @@
<term>PAM_DISALLOW_NULL_AUTHTOK</term>
<listitem>
<para>
- Return <emphasis remap='B'>PAM_AUTH_ERR</emphasis> if the
+ Return <emphasis remap="B">PAM_AUTH_ERR</emphasis> if the
database of authentication tokens for this authentication
mechanism has a <emphasis>NULL</emphasis> entry for the user.
</para>
@@ -73,7 +71,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_sm_acct_mgmt-return_values">
+ <refsect1 xml:id="pam_sm_acct_mgmt-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -131,7 +129,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_sm_acct_mgmt-see_also'>
+ <refsect1 xml:id="pam_sm_acct_mgmt-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -151,4 +149,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_sm_authenticate.3 b/doc/man/pam_sm_authenticate.3
index 3e4b8680..d622e5bf 100644
--- a/doc/man/pam_sm_authenticate.3
+++ b/doc/man/pam_sm_authenticate.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_sm_authenticate
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SM_AUTHENTICATE" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SM_AUTHENTICATE" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_sm_authenticate.3.xml b/doc/man/pam_sm_authenticate.3.xml
index ef3a8f15..ec3de2fd 100644
--- a/doc/man/pam_sm_authenticate.3.xml
+++ b/doc/man/pam_sm_authenticate.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_sm_authenticate'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_authenticate">
<refmeta>
<refentrytitle>pam_sm_authenticate</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_sm_authenticate-name">
+ <refnamediv xml:id="pam_sm_authenticate-name">
<refname>pam_sm_authenticate</refname>
<refpurpose>PAM service function for user authentication</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_sm_authenticate-synopsis'>
+ <funcsynopsis xml:id="pam_sm_authenticate-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_sm_authenticate</function></funcdef>
@@ -29,7 +27,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_sm_authenticate-description'>
+ <refsect1 xml:id="pam_sm_authenticate-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_sm_authenticate</function> function is the service
@@ -58,7 +56,7 @@
<term>PAM_DISALLOW_NULL_AUTHTOK</term>
<listitem>
<para>
- Return <emphasis remap='B'>PAM_AUTH_ERR</emphasis> if the
+ Return <emphasis remap="B">PAM_AUTH_ERR</emphasis> if the
database of authentication tokens for this authentication
mechanism has a <emphasis>NULL</emphasis> entry for the user.
Without this flag, such a <emphasis>NULL</emphasis> token
@@ -69,7 +67,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_sm_authenticate-return_values">
+ <refsect1 xml:id="pam_sm_authenticate-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -128,7 +126,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_sm_authenticate-see_also'>
+ <refsect1 xml:id="pam_sm_authenticate-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -148,4 +146,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_sm_chauthtok.3 b/doc/man/pam_sm_chauthtok.3
index e68876fa..39f927e5 100644
--- a/doc/man/pam_sm_chauthtok.3
+++ b/doc/man/pam_sm_chauthtok.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_sm_chauthtok
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SM_CHAUTHTOK" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SM_CHAUTHTOK" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_sm_chauthtok.3.xml b/doc/man/pam_sm_chauthtok.3.xml
index 25e17d02..692bc620 100644
--- a/doc/man/pam_sm_chauthtok.3.xml
+++ b/doc/man/pam_sm_chauthtok.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_sm_chauthtok'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_chauthtok">
<refmeta>
<refentrytitle>pam_sm_chauthtok</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_sm_chauthtok-name">
+ <refnamediv xml:id="pam_sm_chauthtok-name">
<refname>pam_sm_chauthtok</refname>
<refpurpose>PAM service function for authentication token management</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_sm_chauthtok-synopsis'>
+ <funcsynopsis xml:id="pam_sm_chauthtok-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_sm_chauthtok</function></funcdef>
@@ -29,7 +27,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_sm_chauthtok-description'>
+ <refsect1 xml:id="pam_sm_chauthtok-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_sm_chauthtok</function> function is the service
@@ -77,7 +75,7 @@
some network it should attempt to verify it can connect to
this system on receiving this flag. If a module cannot establish
it is ready to update the user's authentication token it should
- return <emphasis remap='B'>PAM_TRY_AGAIN</emphasis>, this
+ return <emphasis remap="B">PAM_TRY_AGAIN</emphasis>, this
information will be passed back to the application.
</para>
<para>
@@ -93,7 +91,7 @@
<para>
This informs the module that this is the call it should change
the authorization tokens. If the flag is logically OR'd with
- <emphasis remap='B'>PAM_CHANGE_EXPIRED_AUTHTOK</emphasis>, the
+ <emphasis remap="B">PAM_CHANGE_EXPIRED_AUTHTOK</emphasis>, the
token is only changed if it has actually expired.
</para>
</listitem>
@@ -101,15 +99,15 @@
</variablelist>
<para>
The PAM library calls this function twice in succession. The first
- time with <emphasis remap='B'>PAM_PRELIM_CHECK</emphasis> and then,
+ time with <emphasis remap="B">PAM_PRELIM_CHECK</emphasis> and then,
if the module does not return
- <emphasis remap='B'>PAM_TRY_AGAIN</emphasis>, subsequently with
- <emphasis remap='B'>PAM_UPDATE_AUTHTOK</emphasis>. It is only on
+ <emphasis remap="B">PAM_TRY_AGAIN</emphasis>, subsequently with
+ <emphasis remap="B">PAM_UPDATE_AUTHTOK</emphasis>. It is only on
the second call that the authorization token is (possibly) changed.
</para>
</refsect1>
- <refsect1 id="pam_sm_chauthtok-return_values">
+ <refsect1 xml:id="pam_sm_chauthtok-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -181,7 +179,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_sm_chauthtok-see_also'>
+ <refsect1 xml:id="pam_sm_chauthtok-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -201,4 +199,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_sm_close_session.3 b/doc/man/pam_sm_close_session.3
index c1b4d5d9..2b77dd69 100644
--- a/doc/man/pam_sm_close_session.3
+++ b/doc/man/pam_sm_close_session.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_sm_close_session
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SM_CLOSE_SESSION" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SM_CLOSE_SESSION" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_sm_close_session.3.xml b/doc/man/pam_sm_close_session.3.xml
index 6d8278ec..e76693fd 100644
--- a/doc/man/pam_sm_close_session.3.xml
+++ b/doc/man/pam_sm_close_session.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-close.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_sm_close_session'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_close_session">
<refmeta>
<refentrytitle>pam_sm_close_session</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_sm_close_session-name">
+ <refnamediv xml:id="pam_sm_close_session-name">
<refname>pam_sm_close_session</refname>
<refpurpose>PAM service function to terminate session management</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_sm_close_session-synopsis'>
+ <funcsynopsis xml:id="pam_sm_close_session-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_sm_close_session</function></funcdef>
@@ -29,7 +27,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_sm_close_session-description'>
+ <refsect1 xml:id="pam_sm_close_session-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_sm_close_session</function> function is the service
@@ -40,7 +38,7 @@
</para>
<para>
This function is called to terminate a session. The only valid
- value for <varname role='parameter'>flags</varname> is zero or:
+ value for <varname role="parameter">flags</varname> is zero or:
</para>
<variablelist>
<varlistentry>
@@ -54,7 +52,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_sm_close_session-return_values">
+ <refsect1 xml:id="pam_sm_close_session-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -76,7 +74,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_sm_close_session-see_also'>
+ <refsect1 xml:id="pam_sm_close_session-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -96,4 +94,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_sm_open_session.3 b/doc/man/pam_sm_open_session.3
index b979b124..6a97842f 100644
--- a/doc/man/pam_sm_open_session.3
+++ b/doc/man/pam_sm_open_session.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_sm_open_session
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SM_OPEN_SESSION" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SM_OPEN_SESSION" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_sm_open_session.3.xml b/doc/man/pam_sm_open_session.3.xml
index ead7ca77..392225a4 100644
--- a/doc/man/pam_sm_open_session.3.xml
+++ b/doc/man/pam_sm_open_session.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_sm_open_session'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_open_session">
<refmeta>
<refentrytitle>pam_sm_open_session</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_sm_open_session-name">
+ <refnamediv xml:id="pam_sm_open_session-name">
<refname>pam_sm_open_session</refname>
<refpurpose>PAM service function to start session management</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_sm_open_session-synopsis'>
+ <funcsynopsis xml:id="pam_sm_open_session-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_sm_open_session</function></funcdef>
@@ -29,7 +27,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_sm_open_session-description'>
+ <refsect1 xml:id="pam_sm_open_session-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_sm_open_session</function> function is the service
@@ -40,7 +38,7 @@
</para>
<para>
This function is called to commence a session. The only valid
- value for <varname role='parameter'>flags</varname> is zero or:
+ value for <varname role="parameter">flags</varname> is zero or:
</para>
<variablelist>
<varlistentry>
@@ -54,7 +52,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_sm_open_session-return_values">
+ <refsect1 xml:id="pam_sm_open_session-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -76,7 +74,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_sm_open_session-see_also'>
+ <refsect1 xml:id="pam_sm_open_session-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -96,4 +94,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_sm_setcred.3 b/doc/man/pam_sm_setcred.3
index 6493870c..801f204c 100644
--- a/doc/man/pam_sm_setcred.3
+++ b/doc/man/pam_sm_setcred.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_sm_setcred
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SM_SETCRED" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SM_SETCRED" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_sm_setcred.3.xml b/doc/man/pam_sm_setcred.3.xml
index bb04a2df..93a69e3e 100644
--- a/doc/man/pam_sm_setcred.3.xml
+++ b/doc/man/pam_sm_setcred.3.xml
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id='pam_sm_setcred'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_setcred">
<refmeta>
<refentrytitle>pam_sm_setcred</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_sm_setcred-name">
+ <refnamediv xml:id="pam_sm_setcred-name">
<refname>pam_sm_setcred</refname>
<refpurpose>PAM service function to alter credentials</refpurpose>
</refnamediv>
@@ -16,7 +14,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id='pam_sm_setcred-synopsis'>
+ <funcsynopsis xml:id="pam_sm_setcred-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_modules.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_sm_setcred</function></funcdef>
@@ -29,7 +27,7 @@
</refsynopsisdiv>
- <refsect1 id='pam_sm_setcred-description'>
+ <refsect1 xml:id="pam_sm_setcred-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_sm_setcred</function> function is the service
@@ -92,7 +90,7 @@
</varlistentry>
</variablelist>
<para>
- The way the <emphasis remap='B'>auth</emphasis> stack is
+ The way the <emphasis remap="B">auth</emphasis> stack is
navigated in order to evaluate the <function>pam_setcred</function>()
function call, independent of the <function>pam_sm_setcred</function>()
return codes, is exactly the same way that it was navigated when
@@ -102,11 +100,11 @@
libpam evaluates the <function>pam_setcred</function>() function
call. Otherwise, the return codes from each module specific
<function>pam_sm_setcred</function>() call are treated as
- <emphasis remap='B'>required</emphasis>.
+ <emphasis remap="B">required</emphasis>.
</para>
</refsect1>
- <refsect1 id="pam_sm_setcred-return_values">
+ <refsect1 xml:id="pam_sm_setcred-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -158,7 +156,7 @@
</para>
</refsect1>
- <refsect1 id='pam_sm_setcred-see_also'>
+ <refsect1 xml:id="pam_sm_setcred-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -181,4 +179,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_start.3 b/doc/man/pam_start.3
index 35ba148b..904b3821 100644
--- a/doc/man/pam_start.3
+++ b/doc/man/pam_start.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_start
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_START" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_START" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_start.3.xml b/doc/man/pam_start.3.xml
index 1d544e64..470c6cec 100644
--- a/doc/man/pam_start.3.xml
+++ b/doc/man/pam_start.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_start'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_start">
<refmeta>
<refentrytitle>pam_start</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_start-name">
+ <refnamediv xml:id="pam_start-name">
<refname>pam_start</refname>
<refname>pam_start_confdir</refname>
<refpurpose>initialization of PAM transaction</refpurpose>
@@ -19,7 +16,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_start-synopsis">
+ <funcsynopsis xml:id="pam_start-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>pam_start</function></funcdef>
@@ -40,7 +37,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_start-description">
+ <refsect1 xml:id="pam_start-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_start</function> function creates the PAM context
@@ -108,7 +105,7 @@
</para>
</refsect1>
- <refsect1 id="pam_start-return_values">
+ <refsect1 xml:id="pam_start-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -147,7 +144,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_start-see_also">
+ <refsect1 xml:id="pam_start-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -164,4 +161,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_strerror.3 b/doc/man/pam_strerror.3
index 0d15203a..408eb3a0 100644
--- a/doc/man/pam_strerror.3
+++ b/doc/man/pam_strerror.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_strerror
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_STRERROR" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_STRERROR" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_strerror.3.xml b/doc/man/pam_strerror.3.xml
index 954e131d..b76cbc4d 100644
--- a/doc/man/pam_strerror.3.xml
+++ b/doc/man/pam_strerror.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_strerror'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_strerror">
<refmeta>
<refentrytitle>pam_strerror</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_strerror-name">
+ <refnamediv xml:id="pam_strerror-name">
<refname>pam_strerror</refname>
<refpurpose>return string describing PAM error code</refpurpose>
</refnamediv>
@@ -18,7 +15,7 @@
<!-- body begins here -->
<refsynopsisdiv>
- <funcsynopsis id="pam_strerror-synopsis">
+ <funcsynopsis xml:id="pam_strerror-synopsis">
<funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>const char *<function>pam_strerror</function></funcdef>
@@ -29,7 +26,7 @@
</refsynopsisdiv>
- <refsect1 id="pam_strerror-description">
+ <refsect1 xml:id="pam_strerror-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_strerror</function> function returns a pointer to
@@ -40,14 +37,14 @@
modify this string.
</para>
</refsect1>
- <refsect1 id="pam_strerror-return_values">
+ <refsect1 xml:id="pam_strerror-return_values">
<title>RETURN VALUES</title>
<para>
This function returns always a pointer to a string.
</para>
</refsect1>
- <refsect1 id="pam_strerror-see_also">
+ <refsect1 xml:id="pam_strerror-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -55,4 +52,4 @@
</citerefentry>
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_syslog.3 b/doc/man/pam_syslog.3
index eda2e409..82231311 100644
--- a/doc/man/pam_syslog.3
+++ b/doc/man/pam_syslog.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_syslog
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SYSLOG" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_SYSLOG" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_syslog.3.xml b/doc/man/pam_syslog.3.xml
index ca28587e..f5be287f 100644
--- a/doc/man/pam_syslog.3.xml
+++ b/doc/man/pam_syslog.3.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id="pam_syslog">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_syslog">
<refmeta>
<refentrytitle>pam_syslog</refentrytitle>
<manvolnum>3</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_syslog-name">
+ <refnamediv xml:id="pam_syslog-name">
<refname>pam_syslog</refname>
<refname>pam_vsyslog</refname>
<refpurpose>send messages to the system logger</refpurpose>
@@ -18,7 +15,7 @@
<!-- body begins here -->
- <refsynopsisdiv id="pam_syslog-synopsis">
+ <refsynopsisdiv xml:id="pam_syslog-synopsis">
<funcsynopsis>
<funcsynopsisinfo>#include &lt;syslog.h&gt;</funcsynopsisinfo>
<funcsynopsisinfo>#include &lt;security/pam_ext.h&gt;</funcsynopsisinfo>
@@ -39,7 +36,7 @@
</funcsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_syslog-description'>
+ <refsect1 xml:id="pam_syslog-description">
<title>DESCRIPTION</title>
<para>
The <function>pam_syslog</function> function logs messages using
@@ -62,7 +59,7 @@
</para>
</refsect1>
- <refsect1 id='pam_syslog-see_also'>
+ <refsect1 xml:id="pam_syslog-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -71,7 +68,7 @@
</para>
</refsect1>
- <refsect1 id='pam_syslog-standards'>
+ <refsect1 xml:id="pam_syslog-standards">
<title>STANDARDS</title>
<para>
The <function>pam_syslog</function> and <function>pam_vsyslog</function>
@@ -79,4 +76,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/doc/man/pam_verror.3 b/doc/man/pam_verror.3
index 6e052ef6..a0292f44 100644
--- a/doc/man/pam_verror.3
+++ b/doc/man/pam_verror.3
@@ -1 +1 @@
-.so man3/pam_error.3
+.so pam_error.3
diff --git a/doc/man/pam_vinfo.3 b/doc/man/pam_vinfo.3
index 79f3a153..4aea758b 100644
--- a/doc/man/pam_vinfo.3
+++ b/doc/man/pam_vinfo.3
@@ -1 +1 @@
-.so man3/pam_info.3
+.so pam_info.3
diff --git a/doc/man/pam_vprompt.3 b/doc/man/pam_vprompt.3
index bba0b1d3..cec7f44c 100644
--- a/doc/man/pam_vprompt.3
+++ b/doc/man/pam_vprompt.3
@@ -1 +1 @@
-.so man3/pam_prompt.3
+.so pam_prompt.3
diff --git a/doc/man/pam_vsyslog.3 b/doc/man/pam_vsyslog.3
index b987b067..8d6a07e9 100644
--- a/doc/man/pam_vsyslog.3
+++ b/doc/man/pam_vsyslog.3
@@ -1 +1 @@
-.so man3/pam_syslog.3
+.so pam_syslog.3
diff --git a/doc/man/pam_xauth_data.3 b/doc/man/pam_xauth_data.3
index 6bd4093c..254eb56a 100644
--- a/doc/man/pam_xauth_data.3
+++ b/doc/man/pam_xauth_data.3
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_xauth_data
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_XAUTH_DATA" "3" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_XAUTH_DATA" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/man/pam_xauth_data.3.xml b/doc/man/pam_xauth_data.3.xml
new file mode 100644
index 00000000..447a9c2d
--- /dev/null
+++ b/doc/man/pam_xauth_data.3.xml
@@ -0,0 +1,91 @@
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_xauth_data">
+
+ <refmeta>
+ <refentrytitle>pam_xauth_data</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
+ </refmeta>
+
+ <refnamediv xml:id="pam_xauth_data-name">
+ <refname>pam_xauth_data</refname>
+ <refpurpose>structure containing X authentication data</refpurpose>
+ </refnamediv>
+
+<!-- body begins here -->
+
+ <refsynopsisdiv>
+ <funcsynopsis xml:id="pam_xauth_data-synopsis">
+ <funcsynopsisinfo>#include &lt;security/pam_appl.h&gt;</funcsynopsisinfo>
+ </funcsynopsis>
+ <programlisting>
+struct pam_xauth_data {
+ int namelen;
+ char *name;
+ int datalen;
+ char *data;
+};
+ </programlisting>
+ </refsynopsisdiv>
+
+ <refsect1 xml:id="pam_xauth_data-description">
+ <title>DESCRIPTION</title>
+ <para>
+ The <function>pam_xauth_data</function> structure contains X
+ authentication data used to make a connection to an X display.
+ Using this mechanism, an application can communicate X
+ authentication data to PAM service modules. This allows modules to
+ make a connection to the user's X display in order to label the
+ user's session on login, display visual feedback or for other
+ purposes.
+ </para>
+ <para>
+ The <emphasis>name</emphasis> field contains the name of the
+ authentication method, such as "MIT-MAGIC-COOKIE-1". The
+ <emphasis>namelen</emphasis> field contains the length of this string,
+ not including the trailing NUL character.
+ </para>
+ <para>
+ The <emphasis>data</emphasis> field contains the authentication
+ method-specific data corresponding to the specified name. The
+ <emphasis>datalen</emphasis> field contains its length in bytes.
+ </para>
+ <para>
+ The X authentication data can be changed with the
+ <emphasis>PAM_XAUTH_DATA</emphasis> item. It can be queried and
+ set with
+ <citerefentry>
+ <refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>
+ and
+ <citerefentry>
+ <refentrytitle>pam_set_item </refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry> respectively. The value used to set it should be
+ a pointer to a pam_xauth_data structure. An internal copy of both
+ the structure itself and its fields is made by PAM when setting the
+ item.
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pam_xauth_data-see_also">
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pam_xauth_data-standards">
+ <title>STANDARDS</title>
+ <para>
+ The <function>pam_xauth_data</function> structure and
+ <emphasis>PAM_XAUTH_DATA</emphasis> item are
+ Linux-PAM extensions.
+ </para>
+ </refsect1>
+
+</refentry> \ No newline at end of file
diff --git a/doc/mwg/Linux-PAM_MWG.xml b/doc/mwg/Linux-PAM_MWG.xml
index 3022538c..046c3c48 100644
--- a/doc/mwg/Linux-PAM_MWG.xml
+++ b/doc/mwg/Linux-PAM_MWG.xml
@@ -1,49 +1,38 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<book id="mwg">
- <bookinfo>
+<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg">
+ <info>
<title>The Linux-PAM Module Writers' Guide</title>
<authorgroup>
- <author>
- <firstname>Andrew G.</firstname>
- <surname>Morgan</surname>
- <email>morgan@kernel.org</email>
- </author>
- <author>
- <firstname>Thorsten</firstname>
- <surname>Kukuk</surname>
- <email>kukuk@thkukuk.de</email>
- </author>
+ <author><personname><firstname>Andrew G.</firstname><surname>Morgan</surname></personname><email>morgan@kernel.org</email></author>
+ <author><personname><firstname>Thorsten</firstname><surname>Kukuk</surname></personname><email>kukuk@thkukuk.de</email></author>
</authorgroup>
<releaseinfo>Version 1.1.2, 31. August 2010</releaseinfo>
<abstract>
<para>
This manual documents what a programmer needs to know in order
to write a module that conforms to the
- <emphasis remap='B'>Linux-PAM</emphasis> standard.It also
+ <emphasis remap="B">Linux-PAM</emphasis> standard.It also
discusses some security issues from the point of view of the
module programmer.
</para>
</abstract>
- </bookinfo>
+ </info>
- <chapter id="mwg-introduction">
+ <chapter xml:id="mwg-introduction">
<title>Introduction</title>
- <section id="mwg-introduction-description">
+ <section xml:id="mwg-introduction-description">
<title>Description</title>
<para>
- <emphasis remap='B'>Linux-PAM</emphasis> (Pluggable Authentication
+ <emphasis remap="B">Linux-PAM</emphasis> (Pluggable Authentication
Modules for Linux) is a library that enables the local system
administrator to choose how individual applications authenticate
users. For an overview of the
- <emphasis remap='B'>Linux-PAM</emphasis> library see the
+ <emphasis remap="B">Linux-PAM</emphasis> library see the
<emphasis>Linux-PAM System Administrators' Guide</emphasis>.
</para>
<para>
- A <emphasis remap='B'>Linux-PAM</emphasis> module is a single
+ A <emphasis remap="B">Linux-PAM</emphasis> module is a single
executable binary file that can be loaded by the
- <emphasis remap='B'>Linux-PAM</emphasis> interface library.
+ <emphasis remap="B">Linux-PAM</emphasis> interface library.
This PAM library is configured locally with a system file,
<filename>/etc/pam.conf</filename>, to authenticate a user
request via the locally available authentication modules. The
@@ -54,14 +43,14 @@
<citerefentry>
<refentrytitle>dlopen</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>. Alternatively, the modules can be statically
- linked into the <emphasis remap='B'>Linux-PAM</emphasis> library;
- this is mostly to allow <emphasis remap='B'>Linux-PAM</emphasis> to
+ linked into the <emphasis remap="B">Linux-PAM</emphasis> library;
+ this is mostly to allow <emphasis remap="B">Linux-PAM</emphasis> to
be used on platforms without dynamic linking available, but this is
a <emphasis>deprecated</emphasis> functionality. It is the
- <emphasis remap='B'>Linux-PAM</emphasis> interface that is called
+ <emphasis remap="B">Linux-PAM</emphasis> interface that is called
by an application and it is the responsibility of the library to
locate, load and call the appropriate functions in a
- <emphasis remap='B'>Linux-PAM</emphasis>-module.
+ <emphasis remap="B">Linux-PAM</emphasis>-module.
</para>
<para>
Except for the immediate purpose of interacting with the user
@@ -71,7 +60,7 @@
</para>
</section>
- <section id="mwg-introduction-synopsis">
+ <section xml:id="mwg-introduction-synopsis">
<title>Synopsis</title>
<programlisting>
#include &lt;security/pam_modules.h&gt;
@@ -82,63 +71,52 @@ gcc -shared -o pam_module.so pam_module.o -lpam
</section>
</chapter>
- <chapter id="mwg-expected-by-module">
+ <chapter xml:id="mwg-expected-by-module">
<title>What can be expected by the module</title>
<para>
Here we list the interface that the conventions that all
- <emphasis remap='B'>Linux-PAM</emphasis> modules must adhere to.
+ <emphasis remap="B">Linux-PAM</emphasis> modules must adhere to.
</para>
- <section id="mwg-expected-by-module-item">
+ <section xml:id="mwg-expected-by-module-item">
<title>
Getting and setting <emphasis>PAM_ITEM</emphasis>s and
<emphasis>data</emphasis>
</title>
<para>
First, we cover what the module should expect from the
- <emphasis remap='B'>Linux-PAM</emphasis> library and a
- <emphasis remap='B'>Linux-PAM</emphasis> aware application.
+ <emphasis remap="B">Linux-PAM</emphasis> library and a
+ <emphasis remap="B">Linux-PAM</emphasis> aware application.
Essentially this is the <filename>libpam.*</filename> library.
</para>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_set_data.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_get_data.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_set_item.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_get_item.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_get_user.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_conv.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_putenv.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_getenv.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_getenvlist.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_set_data.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_get_data.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_set_item.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_get_item.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_get_user.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_conv.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_putenv.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_getenv.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_getenvlist.xml"/>
</section>
- <section id="mwg-expected-by-module-other">
+ <section xml:id="mwg-expected-by-module-other">
<title>
Other functions provided by <filename>libpam</filename>
</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_strerror.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_fail_delay.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_strerror.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_fail_delay.xml"/>
</section>
</chapter>
- <chapter id="mwg-expected-of-module">
+ <chapter xml:id="mwg-expected-of-module">
<title>What is expected of a module</title>
<para>
The module must supply a sub-set of the six functions listed
below. Together they define the function of a
- <emphasis remap='B'>Linux-PAM module</emphasis>. Module developers
+ <emphasis remap="B">Linux-PAM module</emphasis>. Module developers
are strongly urged to read the comments on security that follow
this list.
</para>
- <section id="mwg-expected-of-module-overview">
+ <section xml:id="mwg-expected-of-module-overview">
<title>Overview</title>
<para>
The six module functions are grouped into four independent
@@ -149,7 +127,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam
at least one of these groups. A single module may contain the
necessary functions for <emphasis>all</emphasis> four groups.
</para>
- <section id="mwg-expected-of-module-overview-1">
+ <section xml:id="mwg-expected-of-module-overview-1">
<title>Functional independence</title>
<para>
The independence of the four groups of service a module can
@@ -163,7 +141,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam
As an informative example, consider the possibility that an
application applies to change a user's authentication token,
without having first requested that
- <emphasis remap='B'>Linux-PAM</emphasis> authenticate the
+ <emphasis remap="B">Linux-PAM</emphasis> authenticate the
user. In some cases this may be deemed appropriate: when
<command>root</command> wants to change the authentication
token of some lesser user. In other cases it may not be
@@ -176,7 +154,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam
this when implementing a given module.
</para>
</section>
- <section id="mwg-expected-of-module-overview-2">
+ <section xml:id="mwg-expected-of-module-overview-2">
<title>Minimizing administration problems</title>
<para>
To avoid system administration problems and the poor
@@ -189,7 +167,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam
simply return <errorname>PAM_IGNORE</errorname>.
</para>
</section>
- <section id="mwg-expected-of-module-overview-3">
+ <section xml:id="mwg-expected-of-module-overview-3">
<title>Arguments supplied to the module</title>
<para>
The <parameter>flags</parameter> argument of each of
@@ -203,7 +181,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam
arguments are taken from the line appropriate to this
module---that is, with the <emphasis>service_name</emphasis>
matching that of the application---in the configuration file
- (see the <emphasis remap='B'>Linux-PAM</emphasis>
+ (see the <emphasis remap="B">Linux-PAM</emphasis>
System Administrators' Guide). Together these two parameters
provide the number of arguments and an array of pointers to
the individual argument tokens. This will be familiar to C
@@ -214,33 +192,27 @@ gcc -shared -o pam_module.so pam_module.o -lpam
</para>
</section>
</section>
- <section id="mwg-expected-of-module-auth">
+ <section xml:id="mwg-expected-of-module-auth">
<title>Authentication management</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sm_authenticate.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sm_setcred.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_authenticate.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_setcred.xml"/>
</section>
- <section id="mwg-expected-of-module-acct">
+ <section xml:id="mwg-expected-of-module-acct">
<title>Account management</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sm_acct_mgmt.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_acct_mgmt.xml"/>
</section>
- <section id="mwg-expected-of-module-session">
+ <section xml:id="mwg-expected-of-module-session">
<title>Session management</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sm_open_session.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sm_close_session.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_open_session.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_close_session.xml"/>
</section>
- <section id="mwg-expected-of-module-chauthtok">
+ <section xml:id="mwg-expected-of-module-chauthtok">
<title>Authentication token management</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sm_chauthtok.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_chauthtok.xml"/>
</section>
</chapter>
- <chapter id="mwg-see-options">
+ <chapter xml:id="mwg-see-options">
<title>Generic optional arguments</title>
<para>
Here we list the generic arguments that all modules can expect to
@@ -276,17 +248,17 @@ gcc -shared -o pam_module.so pam_module.o -lpam
</variablelist>
</chapter>
- <chapter id="mwg-see-programming">
+ <chapter xml:id="mwg-see-programming">
<title>Programming notes</title>
<para>
Here we collect some pointers for the module writer to bear in mind
- when writing/developing a <emphasis remap='B'>Linux-PAM</emphasis>
+ when writing/developing a <emphasis remap="B">Linux-PAM</emphasis>
compatible module.
</para>
- <section id="mwg-see-programming-sec">
+ <section xml:id="mwg-see-programming-sec">
<title>Security issues for module creation</title>
- <section id="mwg-see-programming-sec-res">
+ <section xml:id="mwg-see-programming-sec-res">
<title>Sufficient resources</title>
<para>
Care should be taken to ensure that the proper execution
@@ -299,7 +271,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam
consideration.
</para>
</section>
- <section id="mwg-see-programming-sec-who">
+ <section xml:id="mwg-see-programming-sec-who">
<title>Who´s who?</title>
<para>
Generally, the module may wish to establish the identity of
@@ -349,13 +321,13 @@ gcc -shared -o pam_module.so pam_module.o -lpam
Z, the user under whose identity the service will be granted.
This is the username returned by
<function>pam_get_user()</function> and also stored in the
- <emphasis remap='B'>Linux-PAM</emphasis> item,
+ <emphasis remap="B">Linux-PAM</emphasis> item,
<emphasis>PAM_USER</emphasis>.
</para>
</listitem>
<listitem>
<para>
- <emphasis remap='B'>Linux-PAM</emphasis> has a place for
+ <emphasis remap="B">Linux-PAM</emphasis> has a place for
an additional user identity that a module may care to make
use of. This is the <emphasis>PAM_RUSER</emphasis> item.
Generally, network sensitive modules/applications may wish
@@ -369,10 +341,10 @@ gcc -shared -o pam_module.so pam_module.o -lpam
<emphasis>uid</emphasis> or <emphasis>euid</emphasis> of the
running process, it should take care to restore the original
values prior to returning control to the
- <emphasis remap='B'>Linux-PAM</emphasis> library.
+ <emphasis remap="B">Linux-PAM</emphasis> library.
</para>
</section>
- <section id="mwg-see-programming-sec-conv">
+ <section xml:id="mwg-see-programming-sec-conv">
<title>Using the conversation function</title>
<para>
Prior to calling the conversation function, the module should
@@ -389,7 +361,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam
indicating failure.
</para>
</section>
- <section id="mwg-see-programming-sec-token">
+ <section xml:id="mwg-see-programming-sec-token">
<title>Authentication tokens</title>
<para>
To ensure that the authentication tokens are not left lying
@@ -403,7 +375,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam
general rule the module should overwrite authentication tokens
as soon as they are no longer needed. Especially before
<function>free()</function>'ing them. The
- <emphasis remap='B'>Linux-PAM</emphasis> library is
+ <emphasis remap="B">Linux-PAM</emphasis> library is
required to do this when either of these authentication
token items are (re)set.
</para>
@@ -437,7 +409,7 @@ int cleanup(pam_handle_t *pamh, void *data, int error_status)
</para>
</section>
</section>
- <section id="mwg-see-programming-syslog">
+ <section xml:id="mwg-see-programming-syslog">
<title>Use of <citerefentry>
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
</citerefentry></title>
@@ -451,7 +423,7 @@ int cleanup(pam_handle_t *pamh, void *data, int error_status)
<citerefentry>
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
</citerefentry> with <emphasis>facility-type</emphasis>
- <emphasis remap='B'>LOG_AUTHPRIV</emphasis>.
+ <emphasis remap="B">LOG_AUTHPRIV</emphasis>.
</para>
<para>
With a few exceptions, the level of logging is, at the discretion
@@ -501,7 +473,7 @@ int cleanup(pam_handle_t *pamh, void *data, int error_status)
</listitem>
</itemizedlist>
</section>
- <section id="mwg-see-programming-libs">
+ <section xml:id="mwg-see-programming-libs">
<title>Modules that require system libraries</title>
<para>
Writing a module is much like writing an application. You
@@ -526,16 +498,16 @@ int cleanup(pam_handle_t *pamh, void *data, int error_status)
</section>
</chapter>
- <chapter id="mwg-example">
+ <chapter xml:id="mwg-example">
<title>An example module</title>
<para>
At some point, we may include a fully commented example of a module in
this document. For now, please look at the modules directory of the
- <emphasis remap='B'>Linux-PAM</emphasis> sources.
+ <emphasis remap="B">Linux-PAM</emphasis> sources.
</para>
</chapter>
- <chapter id="mwg-see-also">
+ <chapter xml:id="mwg-see-also">
<title>See also</title>
<itemizedlist>
<listitem>
@@ -558,7 +530,7 @@ int cleanup(pam_handle_t *pamh, void *data, int error_status)
</itemizedlist>
</chapter>
- <chapter id='mwg-author'>
+ <chapter xml:id="mwg-author">
<title>Author/acknowledgments</title>
<para>
This document was written by Andrew G. Morgan (morgan@kernel.org)
@@ -578,14 +550,14 @@ int cleanup(pam_handle_t *pamh, void *data, int error_status)
<para>
Thanks are also due to Sun Microsystems, especially to Vipin Samar and
Charlie Lai for their advice. At an early stage in the development of
- <emphasis remap='B'>Linux-PAM</emphasis>, Sun graciously made the
+ <emphasis remap="B">Linux-PAM</emphasis>, Sun graciously made the
documentation for their implementation of PAM available. This act
greatly accelerated the development of
- <emphasis remap='B'>Linux-PAM</emphasis>.
+ <emphasis remap="B">Linux-PAM</emphasis>.
</para>
</chapter>
- <chapter id='mwg-copyright'>
+ <chapter xml:id="mwg-copyright">
<title>Copyright information for this document</title>
<programlisting>
Copyright (c) 2006 Thorsten Kukuk &lt;kukuk@thkukuk.de&gt;
@@ -629,4 +601,4 @@ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
</programlisting>
</chapter>
-</book>
+</book> \ No newline at end of file
diff --git a/doc/mwg/Makefile.am b/doc/mwg/Makefile.am
index 2bbb2d0b..340249c6 100644
--- a/doc/mwg/Makefile.am
+++ b/doc/mwg/Makefile.am
@@ -16,28 +16,28 @@ all: Linux-PAM_MWG.txt html/Linux-PAM_MWG.html Linux-PAM_MWG.pdf
Linux-PAM_MWG.pdf: $(XMLS) $(DEP_XMLS)
if ENABLE_GENERATE_PDF
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam generate.toc "book toc" \
--stringparam section.autolabel 1 \
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 3 --xinclude --nonet \
- http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_MWG.fo
+ $(PDF_STYLESHEET) $< > Linux-PAM_MWG.fo
$(FO2PDF) Linux-PAM_MWG.fo $@
else
echo "No fo2pdf processor installed, skip PDF generation"
endif
Linux-PAM_MWG.txt: $(XMLS) $(DEP_XMLS)
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam generate.toc "book toc" \
--stringparam section.autolabel 1 \
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 3 --xinclude --nonet \
- http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@
+ $(TXT_STYLESHEET) $< | $(BROWSER) > $@
html/Linux-PAM_MWG.html: $(XMLS) $(DEP_XMLS)
@test -d html || mkdir -p html
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam base.dir html/ \
--stringparam root.filename Linux-PAM_MWG \
--stringparam use.id.as.filename 1 \
@@ -46,7 +46,7 @@ html/Linux-PAM_MWG.html: $(XMLS) $(DEP_XMLS)
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 3 --xinclude --nonet \
--stringparam chunker.output.encoding UTF-8 \
- http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $<
+ $(HTML_STYLESHEET) $<
distclean-local:
-rm -rf html Linux-PAM_MWG.txt Linux-PAM_MWG.pdf
diff --git a/doc/mwg/Makefile.in b/doc/mwg/Makefile.in
index 45123b3b..2f20d573 100644
--- a/doc/mwg/Makefile.in
+++ b/doc/mwg/Makefile.in
@@ -162,6 +162,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -174,11 +175,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -210,12 +213,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -238,6 +243,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -248,12 +254,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -526,26 +536,26 @@ uninstall-am: uninstall-local
@ENABLE_REGENERATE_MAN_TRUE@all: Linux-PAM_MWG.txt html/Linux-PAM_MWG.html Linux-PAM_MWG.pdf
@ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_MWG.pdf: $(XMLS) $(DEP_XMLS)
-@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \
-@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_MWG.fo
+@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(PDF_STYLESHEET) $< > Linux-PAM_MWG.fo
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(FO2PDF) Linux-PAM_MWG.fo $@
@ENABLE_GENERATE_PDF_FALSE@@ENABLE_REGENERATE_MAN_TRUE@ echo "No fo2pdf processor installed, skip PDF generation"
@ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_MWG.txt: $(XMLS) $(DEP_XMLS)
-@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \
-@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@
+@ENABLE_REGENERATE_MAN_TRUE@ $(TXT_STYLESHEET) $< | $(BROWSER) > $@
@ENABLE_REGENERATE_MAN_TRUE@html/Linux-PAM_MWG.html: $(XMLS) $(DEP_XMLS)
@ENABLE_REGENERATE_MAN_TRUE@ @test -d html || mkdir -p html
-@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam base.dir html/ \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam root.filename Linux-PAM_MWG \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam use.id.as.filename 1 \
@@ -554,7 +564,7 @@ uninstall-am: uninstall-local
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunker.output.encoding UTF-8 \
-@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(HTML_STYLESHEET) $<
@ENABLE_REGENERATE_MAN_TRUE@distclean-local:
@ENABLE_REGENERATE_MAN_TRUE@ -rm -rf html Linux-PAM_MWG.txt Linux-PAM_MWG.pdf
diff --git a/doc/mwg/pam_conv.xml b/doc/mwg/pam_conv.xml
index a2b470af..2b369503 100644
--- a/doc/mwg/pam_conv.xml
+++ b/doc/mwg/pam_conv.xml
@@ -1,11 +1,7 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_conv'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_conv">
<title>The conversation function</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_conv.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_conv-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-synopsis")/*)'/>
</funcsynopsis>
<programlisting>
struct pam_message {
@@ -24,12 +20,10 @@ struct pam_conv {
void *appdata_ptr;
};
</programlisting>
- <section id='mwg-pam_conv-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_conv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_conv-description"]/*)'/>
+ <section xml:id="mwg-pam_conv-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-description")/*)'/>
</section>
- <section id='mwg-pam_conv-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_conv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_conv-return_values"]/*)'/>
+ <section xml:id="mwg-pam_conv-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_fail_delay.xml b/doc/mwg/pam_fail_delay.xml
index 589e1148..d602a1f7 100644
--- a/doc/mwg/pam_fail_delay.xml
+++ b/doc/mwg/pam_fail_delay.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_fail_delay'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_fail_delay">
<title>Request a delay on failure</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_fail_delay.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_fail_delay-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_fail_delay-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_fail_delay.3.xml" xpointer='xpointer(//refsect1[@id = "pam_fail_delay-description"]/*)'/>
+ <section xml:id="adg-pam_fail_delay-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-description")/*)'/>
</section>
- <section id='adg-pam_fail_delay-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_fail_delay.3.xml" xpointer='xpointer(//refsect1[@id = "pam_fail_delay-return_values"]/*)'/>
+ <section xml:id="adg-pam_fail_delay-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_get_data.xml b/doc/mwg/pam_get_data.xml
index b1afdb3f..e1342d16 100644
--- a/doc/mwg/pam_get_data.xml
+++ b/doc/mwg/pam_get_data.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_get_data'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_get_data">
<title>Get module internal data</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_data.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_get_data-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_data.3.xml" xpointer='xpointer(id("pam_get_data-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_get_data-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_data.3.xml" xpointer='xpointer(//refsect1[@id = "pam_get_data-description"]/*)'/>
+ <section xml:id="mwg-pam_get_data-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_data.3.xml" xpointer='xpointer(id("pam_get_data-description")/*)'/>
</section>
- <section id='mwg-pam_get_data-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_data.3.xml" xpointer='xpointer(//refsect1[@id = "pam_get_data-return_values"]/*)'/>
+ <section xml:id="mwg-pam_get_data-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_data.3.xml" xpointer='xpointer(id("pam_get_data-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_get_item.xml b/doc/mwg/pam_get_item.xml
index 370a10a1..e0635d21 100644
--- a/doc/mwg/pam_get_item.xml
+++ b/doc/mwg/pam_get_item.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_get_item'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_get_item">
<title>Getting PAM items</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_item.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_get_item-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_get_item-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_item.3.xml" xpointer='xpointer(//refsect1[@id = "pam_get_item-description"]/*)'/>
+ <section xml:id="mwg-pam_get_item-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-description")/*)'/>
</section>
- <section id='mwg-pam_get_item-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_item.3.xml" xpointer='xpointer(//refsect1[@id = "pam_get_item-return_values"]/*)'/>
+ <section xml:id="mwg-pam_get_item-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_get_user.xml b/doc/mwg/pam_get_user.xml
index 1cb7fdf3..3b79fe07 100644
--- a/doc/mwg/pam_get_user.xml
+++ b/doc/mwg/pam_get_user.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_get_user'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_get_user">
<title>Get user name</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_user.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_get_user-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_user.3.xml" xpointer='xpointer(id("pam_get_user-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_get_user-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_user.3.xml" xpointer='xpointer(//refsect1[@id = "pam_get_user-description"]/*)'/>
+ <section xml:id="mwg-pam_get_user-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_user.3.xml" xpointer='xpointer(id("pam_get_user-description")/*)'/>
</section>
- <section id='mwg-pam_get_user-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_get_user.3.xml" xpointer='xpointer(//refsect1[@id = "pam_get_user-return_values"]/*)'/>
+ <section xml:id="mwg-pam_get_user-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_user.3.xml" xpointer='xpointer(id("pam_get_user-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_getenv.xml b/doc/mwg/pam_getenv.xml
index 61d69c33..f7b483ed 100644
--- a/doc/mwg/pam_getenv.xml
+++ b/doc/mwg/pam_getenv.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_getenv'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_getenv">
<title>Get a PAM environment variable</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenv.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_getenv-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_getenv-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_getenv-description"]/*)'/>
+ <section xml:id="adg-pam_getenv-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-description")/*)'/>
</section>
- <section id='adg-pam_getenv-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_getenv-return_values"]/*)'/>
+ <section xml:id="adg-pam_getenv-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_getenvlist.xml b/doc/mwg/pam_getenvlist.xml
index d3c2fcd3..4433c04d 100644
--- a/doc/mwg/pam_getenvlist.xml
+++ b/doc/mwg/pam_getenvlist.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_getenvlist'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_getenvlist">
<title>Getting the PAM environment</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenvlist.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_getenvlist-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_getenvlist-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenvlist.3.xml" xpointer='xpointer(//refsect1[@id = "pam_getenvlist-description"]/*)'/>
+ <section xml:id="adg-pam_getenvlist-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-description")/*)'/>
</section>
- <section id='adg-pam_getenvlist-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_getenvlist.3.xml" xpointer='xpointer(//refsect1[@id = "pam_getenvlist-return_values"]/*)'/>
+ <section xml:id="adg-pam_getenvlist-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_putenv.xml b/doc/mwg/pam_putenv.xml
index e55f1a42..6378a15b 100644
--- a/doc/mwg/pam_putenv.xml
+++ b/doc/mwg/pam_putenv.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_putenv'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_putenv">
<title>Set or change PAM environment variable</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_putenv.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_putenv-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_putenv-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_putenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_putenv-description"]/*)'/>
+ <section xml:id="adg-pam_putenv-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-description")/*)'/>
</section>
- <section id='adg-pam_putenv-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_putenv.3.xml" xpointer='xpointer(//refsect1[@id = "pam_putenv-return_values"]/*)'/>
+ <section xml:id="adg-pam_putenv-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_set_data.xml b/doc/mwg/pam_set_data.xml
index 18b2711b..3fb3b1fe 100644
--- a/doc/mwg/pam_set_data.xml
+++ b/doc/mwg/pam_set_data.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_set_data'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_set_data">
<title>Set module internal data</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_data.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_set_data-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_data.3.xml" xpointer='xpointer(id("pam_set_data-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_set_data-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_data.3.xml" xpointer='xpointer(//refsect1[@id = "pam_set_data-description"]/*)'/>
+ <section xml:id="mwg-pam_set_data-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_data.3.xml" xpointer='xpointer(id("pam_set_data-description")/*)'/>
</section>
- <section id='mwg-pam_set_data-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_data.3.xml" xpointer='xpointer(//refsect1[@id = "pam_set_data-return_values"]/*)'/>
+ <section xml:id="mwg-pam_set_data-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_data.3.xml" xpointer='xpointer(id("pam_set_data-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_set_item.xml b/doc/mwg/pam_set_item.xml
index 7d19925e..7a8ee8de 100644
--- a/doc/mwg/pam_set_item.xml
+++ b/doc/mwg/pam_set_item.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_set_item'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_set_item">
<title>Setting PAM items</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_item.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_set_item-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_set_item-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_item.3.xml" xpointer='xpointer(//refsect1[@id = "pam_set_item-description"]/*)'/>
+ <section xml:id="mwg-pam_set_item-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-description")/*)'/>
</section>
- <section id='mwg-pam_set_item-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_set_item.3.xml" xpointer='xpointer(//refsect1[@id = "pam_set_item-return_values"]/*)'/>
+ <section xml:id="mwg-pam_set_item-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_sm_acct_mgmt.xml b/doc/mwg/pam_sm_acct_mgmt.xml
index 10b3c9e9..c17a9bf0 100644
--- a/doc/mwg/pam_sm_acct_mgmt.xml
+++ b/doc/mwg/pam_sm_acct_mgmt.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_sm_acct_mgmt'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_sm_acct_mgmt">
<title>Service function for account management</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_acct_mgmt.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_sm_acct_mgmt-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_acct_mgmt.3.xml" xpointer='xpointer(id("pam_sm_acct_mgmt-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_sm_acct_mgmt-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_acct_mgmt.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_acct_mgmt-description"]/*)'/>
+ <section xml:id="mwg-pam_sm_acct_mgmt-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_acct_mgmt.3.xml" xpointer='xpointer(id("pam_sm_acct_mgmt-description")/*)'/>
</section>
- <section id='mwg-pam_sm_acct_mgmt-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_acct_mgmt.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_acct_mgmt-return_values"]/*)'/>
+ <section xml:id="mwg-pam_sm_acct_mgmt-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_acct_mgmt.3.xml" xpointer='xpointer(id("pam_sm_acct_mgmt-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_sm_authenticate.xml b/doc/mwg/pam_sm_authenticate.xml
index 54c79af6..138fc1ff 100644
--- a/doc/mwg/pam_sm_authenticate.xml
+++ b/doc/mwg/pam_sm_authenticate.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_sm_authenticate'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_sm_authenticate">
<title>Service function for user authentication</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_authenticate.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_sm_authenticate-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_authenticate.3.xml" xpointer='xpointer(id("pam_sm_authenticate-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_sm_authenticate-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_authenticate.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_authenticate-description"]/*)'/>
+ <section xml:id="mwg-pam_sm_authenticate-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_authenticate.3.xml" xpointer='xpointer(id("pam_sm_authenticate-description")/*)'/>
</section>
- <section id='mwg-pam_sm_authenticate-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_authenticate.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_authenticate-return_values"]/*)'/>
+ <section xml:id="mwg-pam_sm_authenticate-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_authenticate.3.xml" xpointer='xpointer(id("pam_sm_authenticate-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_sm_chauthtok.xml b/doc/mwg/pam_sm_chauthtok.xml
index a1364315..546ae662 100644
--- a/doc/mwg/pam_sm_chauthtok.xml
+++ b/doc/mwg/pam_sm_chauthtok.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_sm_chauthtok'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_sm_chauthtok">
<title>Service function to alter authentication token</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_chauthtok.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_sm_chauthtok-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_chauthtok.3.xml" xpointer='xpointer(id("pam_sm_chauthtok-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_sm_chauthtok-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_chauthtok.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_chauthtok-description"]/*)'/>
+ <section xml:id="mwg-pam_sm_chauthtok-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_chauthtok.3.xml" xpointer='xpointer(id("pam_sm_chauthtok-description")/*)'/>
</section>
- <section id='mwg-pam_sm_chauthtok-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_chauthtok.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_chauthtok-return_values"]/*)'/>
+ <section xml:id="mwg-pam_sm_chauthtok-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_chauthtok.3.xml" xpointer='xpointer(id("pam_sm_chauthtok-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_sm_close_session.xml b/doc/mwg/pam_sm_close_session.xml
index 9346c506..69140b81 100644
--- a/doc/mwg/pam_sm_close_session.xml
+++ b/doc/mwg/pam_sm_close_session.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-close.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_sm_close_session'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_sm_close_session">
<title>Service function to terminate session management</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_close_session.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_sm_close_session-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_close_session.3.xml" xpointer='xpointer(id("pam_sm_close_session-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_sm_close_session-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_close_session.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_close_session-description"]/*)'/>
+ <section xml:id="mwg-pam_sm_close_session-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_close_session.3.xml" xpointer='xpointer(id("pam_sm_close_session-description")/*)'/>
</section>
- <section id='mwg-pam_sm_close_session-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_close_session.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_close_session-return_values"]/*)'/>
+ <section xml:id="mwg-pam_sm_close_session-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_close_session.3.xml" xpointer='xpointer(id("pam_sm_close_session-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_sm_open_session.xml b/doc/mwg/pam_sm_open_session.xml
index b8e3fa90..aba28a3e 100644
--- a/doc/mwg/pam_sm_open_session.xml
+++ b/doc/mwg/pam_sm_open_session.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_sm_open_session'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_sm_open_session">
<title>Service function to start session management</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_open_session.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_sm_open_session-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_open_session.3.xml" xpointer='xpointer(id("pam_sm_open_session-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_sm_open_session-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_open_session.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_open_session-description"]/*)'/>
+ <section xml:id="mwg-pam_sm_open_session-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_open_session.3.xml" xpointer='xpointer(id("pam_sm_open_session-description")/*)'/>
</section>
- <section id='mwg-pam_sm_open_session-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_open_session.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_open_session-return_values"]/*)'/>
+ <section xml:id="mwg-pam_sm_open_session-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_open_session.3.xml" xpointer='xpointer(id("pam_sm_open_session-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_sm_setcred.xml b/doc/mwg/pam_sm_setcred.xml
index eee8e1d6..36e43c04 100644
--- a/doc/mwg/pam_sm_setcred.xml
+++ b/doc/mwg/pam_sm_setcred.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='mwg-pam_sm_setcred'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_sm_setcred">
<title>Service function to alter credentials</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_setcred.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_sm_setcred-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_setcred.3.xml" xpointer='xpointer(id("pam_sm_setcred-synopsis")/*)'/>
</funcsynopsis>
- <section id='mwg-pam_sm_setcred-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_setcred.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_setcred-description"]/*)'/>
+ <section xml:id="mwg-pam_sm_setcred-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_setcred.3.xml" xpointer='xpointer(id("pam_sm_setcred-description")/*)'/>
</section>
- <section id='mwg-pam_sm_setcred-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_sm_setcred.3.xml" xpointer='xpointer(//refsect1[@id = "pam_sm_setcred-return_values"]/*)'/>
+ <section xml:id="mwg-pam_sm_setcred-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_sm_setcred.3.xml" xpointer='xpointer(id("pam_sm_setcred-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/mwg/pam_strerror.xml b/doc/mwg/pam_strerror.xml
index 35b08a27..e4e1c56a 100644
--- a/doc/mwg/pam_strerror.xml
+++ b/doc/mwg/pam_strerror.xml
@@ -1,18 +1,12 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='adg-pam_strerror'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_strerror">
<title>Strings describing PAM error codes</title>
<funcsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_strerror.3.xml" xpointer='xpointer(//funcsynopsis[@id = "pam_strerror-synopsis"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-synopsis")/*)'/>
</funcsynopsis>
- <section id='adg-pam_strerror-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_strerror.3.xml" xpointer='xpointer(//refsect1[@id = "pam_strerror-description"]/*)'/>
+ <section xml:id="adg-pam_strerror-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-description")/*)'/>
</section>
- <section id='adg-pam_strerror-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam_strerror.3.xml" xpointer='xpointer(//refsect1[@id = "pam_strerror-return_values"]/*)'/>
+ <section xml:id="adg-pam_strerror-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-return_values")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/Linux-PAM_SAG.xml b/doc/sag/Linux-PAM_SAG.xml
index 0f33e0f6..952f224b 100644
--- a/doc/sag/Linux-PAM_SAG.xml
+++ b/doc/sag/Linux-PAM_SAG.xml
@@ -1,36 +1,25 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<book id="sag">
- <bookinfo>
+<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag">
+ <info>
<title>The Linux-PAM System Administrators' Guide</title>
<authorgroup>
- <author>
- <firstname>Andrew G.</firstname>
- <surname>Morgan</surname>
- <email>morgan@kernel.org</email>
- </author>
- <author>
- <firstname>Thorsten</firstname>
- <surname>Kukuk</surname>
- <email>kukuk@thkukuk.de</email>
- </author>
+ <author><personname><firstname>Andrew G.</firstname><surname>Morgan</surname></personname><email>morgan@kernel.org</email></author>
+ <author><personname><firstname>Thorsten</firstname><surname>Kukuk</surname></personname><email>kukuk@thkukuk.de</email></author>
</authorgroup>
<releaseinfo>Version 1.1.2, 31. August 2010</releaseinfo>
<abstract>
<para>
This manual documents what a system-administrator needs to know about
- the <emphasis remap='B'>Linux-PAM</emphasis> library. It covers the
+ the <emphasis remap="B">Linux-PAM</emphasis> library. It covers the
correct syntax of the PAM configuration file and discusses strategies
for maintaining a secure system.
</para>
</abstract>
- </bookinfo>
+ </info>
- <chapter id='sag-introduction'>
+ <chapter xml:id="sag-introduction">
<title>Introduction</title>
<para>
- <emphasis remap='B'>Linux-PAM</emphasis> (Pluggable Authentication
+ <emphasis remap="B">Linux-PAM</emphasis> (Pluggable Authentication
Modules for Linux) is a suite of shared libraries that enable the
local system administrator to choose how applications authenticate users.
</para>
@@ -58,7 +47,7 @@
on entries in the <filename>/etc/group</filename> file.
</para>
<para>
- It is the purpose of the <emphasis remap='B'>Linux-PAM</emphasis>
+ It is the purpose of the <emphasis remap="B">Linux-PAM</emphasis>
project to separate the development of privilege granting software
from the development of secure and appropriate authentication schemes.
This is accomplished by providing a library of functions that an
@@ -76,7 +65,7 @@
</para>
</chapter>
- <chapter id="sag-text-conventions">
+ <chapter xml:id="sag-text-conventions">
<title>Some comments on the text</title>
<para>
Before proceeding to read the rest of this document, it should be
@@ -91,7 +80,7 @@
<para>
As an example of the above, where it is explicit, the text assumes
that PAM loadable object files (the
- <emphasis remap='B'>modules</emphasis>) are to be located in
+ <emphasis remap="B">modules</emphasis>) are to be located in
the following directory: <filename>/lib/security/</filename> or
<filename>/lib64/security</filename> depending on the architecture.
This is generally the location that seems to be compatible with the
@@ -103,7 +92,7 @@
</para>
</chapter>
- <chapter id="sag-overview">
+ <chapter xml:id="sag-overview">
<title>Overview</title>
<para>
For the uninitiated, we begin by considering an example. We take an
@@ -121,16 +110,16 @@
password and then verifying that it agrees with that located on
the system; hence verifying that as far as the system is concerned
the user is who they claim to be. This is the task that is delegated
- to <emphasis remap='B'>Linux-PAM</emphasis>.
+ to <emphasis remap="B">Linux-PAM</emphasis>.
</para>
<para>
From the perspective of the application programmer (in this case
the person that wrote the <command>login</command> application),
- <emphasis remap='B'>Linux-PAM</emphasis> takes care of this
+ <emphasis remap="B">Linux-PAM</emphasis> takes care of this
authentication task -- verifying the identity of the user.
</para>
<para>
- The flexibility of <emphasis remap='B'>Linux-PAM</emphasis> is
+ The flexibility of <emphasis remap="B">Linux-PAM</emphasis> is
that <emphasis>you</emphasis>, the system administrator, have
the freedom to stipulate which authentication scheme is to be
used. You have the freedom to set the scheme for any/all
@@ -152,7 +141,7 @@
authentication can be upgraded to include (long) division!
</para>
<para>
- <emphasis remap='B'>Linux-PAM</emphasis> deals with four
+ <emphasis remap="B">Linux-PAM</emphasis> deals with four
separate types of (management) task. These are:
<emphasis>authentication management</emphasis>;
<emphasis>account management</emphasis>;
@@ -160,15 +149,15 @@
<emphasis>password management</emphasis>.
The association of the preferred management scheme with the behavior
of an application is made with entries in the relevant
- <emphasis remap='B'>Linux-PAM</emphasis> configuration file.
+ <emphasis remap="B">Linux-PAM</emphasis> configuration file.
The management functions are performed by <emphasis>modules</emphasis>
specified in the configuration file. The syntax for this
file is discussed in the section
- <link linkend="sag-configuration">below</link>.
+ <link linkend="sag-configuration">below</link>.
</para>
<para>
Here is a figure that describes the overall organization of
- <emphasis remap='B'>Linux-PAM</emphasis>:
+ <emphasis remap="B">Linux-PAM</emphasis>:
<programlisting>
+----------------+
| application: X |
@@ -193,14 +182,14 @@
</programlisting>
By way of explanation, the left of the figure represents the
application; application X. Such an application interfaces with the
- <emphasis remap='B'>Linux-PAM</emphasis> library and knows none of
+ <emphasis remap="B">Linux-PAM</emphasis> library and knows none of
the specifics of its configured authentication method. The
- <emphasis remap='B'>Linux-PAM</emphasis> library (in the center)
+ <emphasis remap="B">Linux-PAM</emphasis> library (in the center)
consults the contents of the PAM configuration file and loads the
modules that are appropriate for application-X. These modules fall
into one of four management groups (lower-center) and are stacked in
the order they appear in the configuration file. These modules, when
- called by <emphasis remap='B'>Linux-PAM</emphasis>, perform the
+ called by <emphasis remap="B">Linux-PAM</emphasis>, perform the
various authentication tasks for the application. Textual information,
required from/or offered to the user, can be exchanged through the
use of the application-supplied <emphasis>conversation</emphasis>
@@ -216,34 +205,28 @@
</para>
</chapter>
- <chapter id="sag-configuration">
+ <chapter xml:id="sag-configuration">
<title>The Linux-PAM configuration file</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam.conf-desc.xml"
- xpointer='xpointer(//section[@id = "pam.conf-desc"]/*)' />
- <section id='sag-configuration-file'>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam.conf-desc.xml" xpointer='xpointer(id("pam.conf-desc")/*)'/>
+ <section xml:id="sag-configuration-file">
<title>Configuration file syntax</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam.conf-syntax.xml"
- xpointer='xpointer(//section[@id = "pam.conf-syntax"]/*)' />
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam.conf-syntax.xml" xpointer='xpointer(id("pam.conf-syntax")/*)'/>
</section>
- <section id='sag-configuration-directory'>
+ <section xml:id="sag-configuration-directory">
<title>Directory based configuration</title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../man/pam.conf-dir.xml"
- xpointer='xpointer(//section[@id = "pam.conf-dir"]/*)' />
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam.conf-dir.xml" xpointer='xpointer(id("pam.conf-dir")/*)'/>
</section>
- <section id='sag-configuration-example'>
+ <section xml:id="sag-configuration-example">
<title>Example configuration file entries</title>
<para>
In this section, we give some examples of entries that can
- be present in the <emphasis remap='B'>Linux-PAM</emphasis>
+ be present in the <emphasis remap="B">Linux-PAM</emphasis>
configuration file. As a first attempt at configuring your
system you could do worse than to implement these.
</para>
<para>
If a system is to be considered secure, it had better have a
- reasonably secure '<emphasis remap='B'>other</emphasis> entry.
+ reasonably secure '<emphasis remap="B">other</emphasis> entry.
The following is a paranoid setting (which is not a bad place
to start!):
</para>
@@ -311,7 +294,7 @@ session required pam_deny.so
<para>
On a less sensitive computer, one on which the system
administrator wishes to remain ignorant of much of the
- power of <emphasis remap='B'>Linux-PAM</emphasis>, the
+ power of <emphasis remap="B">Linux-PAM</emphasis>, the
following selection of lines (in
<filename>/etc/pam.d/other</filename>) is likely to
mimic the historically familiar Linux setup.
@@ -331,21 +314,21 @@ session required pam_unix.so
</section>
</chapter>
- <chapter id='sag-security-issues'>
+ <chapter xml:id="sag-security-issues">
<title>Security issues</title>
- <section id='sag-security-issues-wrong'>
+ <section xml:id="sag-security-issues-wrong">
<title>If something goes wrong</title>
<para>
- <emphasis remap='B'>Linux-PAM</emphasis> has the potential
+ <emphasis remap="B">Linux-PAM</emphasis> has the potential
to seriously change the security of your system. You can
choose to have no security or absolute security (no access
- permitted). In general, <emphasis remap='B'>Linux-PAM</emphasis>
+ permitted). In general, <emphasis remap="B">Linux-PAM</emphasis>
errs towards the latter. Any number of configuration errors
can disable access to your system partially, or completely.
</para>
<para>
The most dramatic problem that is likely to be encountered when
- configuring <emphasis remap='B'>Linux-PAM</emphasis> is that of
+ configuring <emphasis remap="B">Linux-PAM</emphasis> is that of
<emphasis>deleting</emphasis> the configuration file(s):
<filename>/etc/pam.d/*</filename> and/or
<filename>/etc/pam.conf</filename>. This will lock you out of
@@ -357,11 +340,11 @@ session required pam_unix.so
things from there.
</para>
</section>
- <section id='sag-security-issues-other'>
+ <section xml:id="sag-security-issues-other">
<title>Avoid having a weak `other' configuration</title>
<para>
It is not a good thing to have a weak default
- (<emphasis remap='B'>other</emphasis>) entry.
+ (<emphasis remap="B">other</emphasis>) entry.
This service is the default configuration for all PAM aware
applications and if it is weak, your system is likely to be
vulnerable to attack.
@@ -388,91 +371,57 @@ session required pam_warn.so
</section>
</chapter>
- <chapter id='sag-module-reference'>
+ <chapter xml:id="sag-module-reference">
<title>A reference guide for available modules</title>
<para>
Here, we collect together the descriptions of the various modules
coming with Linux-PAM.
</para>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_access.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_debug.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_deny.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_echo.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_env.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_exec.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faildelay.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_filter.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_ftp.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_group.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_issue.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_keyinit.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_lastlog.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_limits.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_listfile.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_localuser.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_loginuid.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mail.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mkhomedir.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_motd.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_namespace.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_nologin.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_permit.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_pwhistory.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rhosts.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rootok.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_securetty.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_selinux.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_shells.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_succeed_if.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_time.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_timestamp.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_umask.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_unix.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_userdb.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_warn.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_wheel.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_xauth.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_access.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_debug.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_deny.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_echo.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_env.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_exec.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faildelay.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faillock.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_filter.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_ftp.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_group.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_issue.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_keyinit.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_lastlog.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_limits.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_listfile.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_localuser.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_loginuid.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mail.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mkhomedir.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_motd.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_namespace.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_nologin.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_permit.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_pwhistory.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rhosts.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rootok.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_securetty.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_selinux.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sepermit.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_setquota.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_shells.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_succeed_if.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_time.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_timestamp.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tty_audit.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_umask.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_unix.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_userdb.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_warn.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_wheel.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_xauth.xml"/>
</chapter>
- <chapter id="sag-see-also">
+ <chapter xml:id="sag-see-also">
<title>See also</title>
<itemizedlist>
<listitem>
@@ -495,7 +444,7 @@ session required pam_warn.so
</itemizedlist>
</chapter>
- <chapter id='sag-author'>
+ <chapter xml:id="sag-author">
<title>Author/acknowledgments</title>
<para>
This document was written by Andrew G. Morgan (morgan@kernel.org)
@@ -516,14 +465,14 @@ session required pam_warn.so
<para>
Thanks are also due to Sun Microsystems, especially to Vipin Samar and
Charlie Lai for their advice. At an early stage in the development of
- <emphasis remap='B'>Linux-PAM</emphasis>, Sun graciously made the
+ <emphasis remap="B">Linux-PAM</emphasis>, Sun graciously made the
documentation for their implementation of PAM available. This act
greatly accelerated the development of
- <emphasis remap='B'>Linux-PAM</emphasis>.
+ <emphasis remap="B">Linux-PAM</emphasis>.
</para>
</chapter>
- <chapter id='sag-copyright'>
+ <chapter xml:id="sag-copyright">
<title>Copyright information for this document</title>
<programlisting>
Copyright (c) 2006 Thorsten Kukuk &lt;kukuk@thkukuk.de&gt;
@@ -567,4 +516,4 @@ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
</programlisting>
</chapter>
-</book>
+</book> \ No newline at end of file
diff --git a/doc/sag/Makefile.am b/doc/sag/Makefile.am
index 31816aa0..04c90919 100644
--- a/doc/sag/Makefile.am
+++ b/doc/sag/Makefile.am
@@ -7,7 +7,6 @@ CLEANFILES = Linux-PAM_SAG.fo *~
EXTRA_DIST = $(XMLS)
XMLS = Linux-PAM_SAG.xml $(shell ls $(srcdir)/pam_*.xml)
-
DEP_XMLS = $(shell ls $(top_srcdir)/modules/pam_*/pam_*.xml)
if ENABLE_REGENERATE_MAN
@@ -17,28 +16,28 @@ all: Linux-PAM_SAG.txt html/Linux-PAM_SAG.html Linux-PAM_SAG.pdf
Linux-PAM_SAG.pdf: $(XMLS) $(DEP_XMLS)
if ENABLE_GENERATE_PDF
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam generate.toc "book toc" \
--stringparam section.autolabel 1 \
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 2 --xinclude --nonet \
- http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_SAG.fo
+ $(PDF_STYLESHEET) $< > Linux-PAM_SAG.fo
$(FO2PDF) Linux-PAM_SAG.fo $@
else
echo "No fo2pdf processor installed, skip PDF generation"
endif
Linux-PAM_SAG.txt: $(XMLS) $(DEP_XMLS)
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam generate.toc "book toc" \
--stringparam section.autolabel 1 \
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 2 --xinclude --nonet \
- http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@
+ $(TXT_STYLESHEET) $< | $(BROWSER) > $@
html/Linux-PAM_SAG.html: $(XMLS) $(DEP_XMLS)
@test -d html || mkdir -p html
- $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
$(XSLTPROC) --stringparam base.dir html/ \
--stringparam root.filename Linux-PAM_SAG \
--stringparam use.id.as.filename 1 \
@@ -47,7 +46,7 @@ html/Linux-PAM_SAG.html: $(XMLS) $(DEP_XMLS)
--stringparam section.label.includes.component.label 1 \
--stringparam toc.max.depth 2 --xinclude --nonet \
--stringparam chunker.output.encoding UTF-8 \
- http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $<
+ $(HTML_STYLESHEET) $<
distclean-local:
-rm -rf html Linux-PAM_SAG.txt Linux-PAM_SAG.pdf
diff --git a/doc/sag/Makefile.in b/doc/sag/Makefile.in
index 1597c1f4..435ab867 100644
--- a/doc/sag/Makefile.in
+++ b/doc/sag/Makefile.in
@@ -162,6 +162,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -174,11 +175,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -210,12 +213,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -238,6 +243,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -248,12 +254,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -526,26 +536,26 @@ uninstall-am: uninstall-local
@ENABLE_REGENERATE_MAN_TRUE@all: Linux-PAM_SAG.txt html/Linux-PAM_SAG.html Linux-PAM_SAG.pdf
@ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_SAG.pdf: $(XMLS) $(DEP_XMLS)
-@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 2 --xinclude --nonet \
-@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_SAG.fo
+@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(PDF_STYLESHEET) $< > Linux-PAM_SAG.fo
@ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(FO2PDF) Linux-PAM_SAG.fo $@
@ENABLE_GENERATE_PDF_FALSE@@ENABLE_REGENERATE_MAN_TRUE@ echo "No fo2pdf processor installed, skip PDF generation"
@ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_SAG.txt: $(XMLS) $(DEP_XMLS)
-@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 2 --xinclude --nonet \
-@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@
+@ENABLE_REGENERATE_MAN_TRUE@ $(TXT_STYLESHEET) $< | $(BROWSER) > $@
@ENABLE_REGENERATE_MAN_TRUE@html/Linux-PAM_SAG.html: $(XMLS) $(DEP_XMLS)
@ENABLE_REGENERATE_MAN_TRUE@ @test -d html || mkdir -p html
-@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --relaxng $(DOCBOOK_RNG) --noent --noout $<
@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam base.dir html/ \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam root.filename Linux-PAM_SAG \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam use.id.as.filename 1 \
@@ -554,7 +564,7 @@ uninstall-am: uninstall-local
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 2 --xinclude --nonet \
@ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunker.output.encoding UTF-8 \
-@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $<
+@ENABLE_REGENERATE_MAN_TRUE@ $(HTML_STYLESHEET) $<
@ENABLE_REGENERATE_MAN_TRUE@distclean-local:
@ENABLE_REGENERATE_MAN_TRUE@ -rm -rf html Linux-PAM_SAG.txt Linux-PAM_SAG.pdf
diff --git a/doc/sag/pam_access.xml b/doc/sag/pam_access.xml
index b9bf39d0..75f14b37 100644
--- a/doc/sag/pam_access.xml
+++ b/doc/sag/pam_access.xml
@@ -1,42 +1,30 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_access'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_access">
<title>pam_access - logdaemon style login access control</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_access-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(id("pam_access-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_access-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-description"]/*)'/>
+ <section xml:id="sag-pam_access-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(id("pam_access-description")/*)'/>
</section>
- <section id='sag-access.conf-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/access.conf.5.xml" xpointer='xpointer(//refsect1[@id = "access.conf-description"]/*)'/>
+ <section xml:id="sag-access.conf-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/access.conf.5.xml" xpointer='xpointer(id("access.conf-description")/*)'/>
</section>
- <section id='sag-pam_access-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-options"]/*)'/>
+ <section xml:id="sag-pam_access-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(id("pam_access-options")/*)'/>
</section>
- <section id='sag-pam_access-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-types"]/*)'/>
+ <section xml:id="sag-pam_access-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(id("pam_access-types")/*)'/>
</section>
- <section id='sag-pam_access-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-return_values"]/*)'/>
+ <section xml:id="sag-pam_access-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(id("pam_access-return_values")/*)'/>
</section>
- <section id='sag-pam_access-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-files"]/*)'/>
+ <section xml:id="sag-pam_access-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(id("pam_access-files")/*)'/>
</section>
- <section id='sag-access.conf-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/access.conf.5.xml" xpointer='xpointer(//refsect1[@id = "access.conf-examples"]/*)'/>
+ <section xml:id="sag-access.conf-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/access.conf.5.xml" xpointer='xpointer(id("access.conf-examples")/*)'/>
</section>
- <section id='sag-pam_access-authors'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-authors"]/*)'/>
+ <section xml:id="sag-pam_access-authors">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(id("pam_access-authors")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_debug.xml b/doc/sag/pam_debug.xml
index b131954c..0c8aa940 100644
--- a/doc/sag/pam_debug.xml
+++ b/doc/sag/pam_debug.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_debug'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_debug">
<title>pam_debug - debug the PAM stack</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_debug-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(id("pam_debug-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_debug-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-description"]/*)'/>
+ <section xml:id="sag-pam_debug-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(id("pam_debug-description")/*)'/>
</section>
- <section id='sag-pam_debug-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-options"]/*)'/>
+ <section xml:id="sag-pam_debug-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(id("pam_debug-options")/*)'/>
</section>
- <section id='sag-pam_debug-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-types"]/*)'/>
+ <section xml:id="sag-pam_debug-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(id("pam_debug-types")/*)'/>
</section>
- <section id='sag-pam_debug-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-return_values"]/*)'/>
+ <section xml:id="sag-pam_debug-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(id("pam_debug-return_values")/*)'/>
</section>
- <section id='sag-pam_debug-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-examples"]/*)'/>
+ <section xml:id="sag-pam_debug-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(id("pam_debug-examples")/*)'/>
</section>
- <section id='sag-pam_debug-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-author"]/*)'/>
+ <section xml:id="sag-pam_debug-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(id("pam_debug-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_deny.xml b/doc/sag/pam_deny.xml
index 2cb71a03..fdd2aaae 100644
--- a/doc/sag/pam_deny.xml
+++ b/doc/sag/pam_deny.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_deny'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_deny">
<title>pam_deny - locking-out PAM module</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_deny-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(id("pam_deny-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_deny-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-description"]/*)'/>
+ <section xml:id="sag-pam_deny-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(id("pam_deny-description")/*)'/>
</section>
- <section id='sag-pam_deny-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-options"]/*)'/>
+ <section xml:id="sag-pam_deny-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(id("pam_deny-options")/*)'/>
</section>
- <section id='sag-pam_deny-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-types"]/*)'/>
+ <section xml:id="sag-pam_deny-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(id("pam_deny-types")/*)'/>
</section>
- <section id='sag-pam_deny-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-return_values"]/*)'/>
+ <section xml:id="sag-pam_deny-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(id("pam_deny-return_values")/*)'/>
</section>
- <section id='sag-pam_deny-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-examples"]/*)'/>
+ <section xml:id="sag-pam_deny-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(id("pam_deny-examples")/*)'/>
</section>
- <section id='sag-pam_deny-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-author"]/*)'/>
+ <section xml:id="sag-pam_deny-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(id("pam_deny-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_echo.xml b/doc/sag/pam_echo.xml
index b066d4ac..e4de8862 100644
--- a/doc/sag/pam_echo.xml
+++ b/doc/sag/pam_echo.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_echo'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_echo">
<title>pam_echo - print text messages</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_echo-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(id("pam_echo-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_echo-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-description"]/*)'/>
+ <section xml:id="sag-pam_echo-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(id("pam_echo-description")/*)'/>
</section>
- <section id='sag-pam_echo-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-options"]/*)'/>
+ <section xml:id="sag-pam_echo-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(id("pam_echo-options")/*)'/>
</section>
- <section id='sag-pam_echo-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-types"]/*)'/>
+ <section xml:id="sag-pam_echo-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(id("pam_echo-types")/*)'/>
</section>
- <section id='sag-pam_echo-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-return_values"]/*)'/>
+ <section xml:id="sag-pam_echo-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(id("pam_echo-return_values")/*)'/>
</section>
- <section id='sag-pam_echo-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-examples"]/*)'/>
+ <section xml:id="sag-pam_echo-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(id("pam_echo-examples")/*)'/>
</section>
- <section id='sag-pam_echo-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-author"]/*)'/>
+ <section xml:id="sag-pam_echo-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(id("pam_echo-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_env.xml b/doc/sag/pam_env.xml
index 9f6e6331..68b7c4f0 100644
--- a/doc/sag/pam_env.xml
+++ b/doc/sag/pam_env.xml
@@ -1,42 +1,30 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_env'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_env">
<title>pam_env - set/unset environment variables</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_env-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(id("pam_env-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_env-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-description"]/*)'/>
+ <section xml:id="sag-pam_env-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(id("pam_env-description")/*)'/>
</section>
- <section id='sag-pam_env.conf-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.conf.5.xml" xpointer='xpointer(//refsect1[@id = "pam_env.conf-description"]/*)'/>
+ <section xml:id="sag-pam_env.conf-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.conf.5.xml" xpointer='xpointer(id("pam_env.conf-description")/*)'/>
</section>
- <section id='sag-pam_env-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-options"]/*)'/>
+ <section xml:id="sag-pam_env-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(id("pam_env-options")/*)'/>
</section>
- <section id='sag-pam_env-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-types"]/*)'/>
+ <section xml:id="sag-pam_env-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(id("pam_env-types")/*)'/>
</section>
- <section id='sag-pam_env-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-return_values"]/*)'/>
+ <section xml:id="sag-pam_env-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(id("pam_env-return_values")/*)'/>
</section>
- <section id='sag-pam_env-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-files"]/*)'/>
+ <section xml:id="sag-pam_env-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(id("pam_env-files")/*)'/>
</section>
- <section id='sag-pam_env.conf-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.conf.5.xml" xpointer='xpointer(//refsect1[@id = "pam_env.conf-examples"]/*)'/>
+ <section xml:id="sag-pam_env.conf-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.conf.5.xml" xpointer='xpointer(id("pam_env.conf-examples")/*)'/>
</section>
- <section id='sag-pam_env-authors'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-authors"]/*)'/>
+ <section xml:id="sag-pam_env-authors">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(id("pam_env-authors")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_exec.xml b/doc/sag/pam_exec.xml
index 265e7f41..859bb3b9 100644
--- a/doc/sag/pam_exec.xml
+++ b/doc/sag/pam_exec.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_exec'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_exec">
<title>pam_exec - call an external command</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_exec-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(id("pam_exec-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_exec-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-description"]/*)'/>
+ <section xml:id="sag-pam_exec-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(id("pam_exec-description")/*)'/>
</section>
- <section id='sag-pam_exec-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-options"]/*)'/>
+ <section xml:id="sag-pam_exec-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(id("pam_exec-options")/*)'/>
</section>
- <section id='sag-pam_exec-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-types"]/*)'/>
+ <section xml:id="sag-pam_exec-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(id("pam_exec-types")/*)'/>
</section>
- <section id='sag-pam_exec-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-return_values"]/*)'/>
+ <section xml:id="sag-pam_exec-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(id("pam_exec-return_values")/*)'/>
</section>
- <section id='sag-pam_exec-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-examples"]/*)'/>
+ <section xml:id="sag-pam_exec-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(id("pam_exec-examples")/*)'/>
</section>
- <section id='sag-pam_exec-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-author"]/*)'/>
+ <section xml:id="sag-pam_exec-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(id("pam_exec-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_faildelay.xml b/doc/sag/pam_faildelay.xml
index 1d8295e0..96902087 100644
--- a/doc/sag/pam_faildelay.xml
+++ b/doc/sag/pam_faildelay.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_faildelay'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_faildelay">
<title>pam_faildelay - change the delay on failure per-application</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_faildelay-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_faildelay-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-description"]/*)'/>
+ <section xml:id="sag-pam_faildelay-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-description")/*)'/>
</section>
- <section id='sag-pam_faildelay-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-options"]/*)'/>
+ <section xml:id="sag-pam_faildelay-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-options")/*)'/>
</section>
- <section id='sag-pam_faildelay-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-types"]/*)'/>
+ <section xml:id="sag-pam_faildelay-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-types")/*)'/>
</section>
- <section id='sag-pam_faildelay-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-return_values"]/*)'/>
+ <section xml:id="sag-pam_faildelay-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-return_values")/*)'/>
</section>
- <section id='sag-pam_faildelay-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-examples"]/*)'/>
+ <section xml:id="sag-pam_faildelay-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-examples")/*)'/>
</section>
- <section id='sag-pam_faildelay-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-author"]/*)'/>
+ <section xml:id="sag-pam_faildelay-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_faillock.xml b/doc/sag/pam_faillock.xml
index 96940c6b..32777b1d 100644
--- a/doc/sag/pam_faillock.xml
+++ b/doc/sag/pam_faillock.xml
@@ -1,38 +1,27 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_faillock'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_faillock">
<title>pam_faillock - temporarily locking access based on failed authentication attempts during an interval</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_faillock-cmdsynopsisauth"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-cmdsynopsisauth")/*)'/>
</cmdsynopsis>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_faillock-cmdsynopsisacct"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-cmdsynopsisacct")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_faillock-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-description"]/*)'/>
+ <section xml:id="sag-pam_faillock-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-description")/*)'/>
</section>
- <section id='sag-pam_faillock-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-options"]/*)'/>
+ <section xml:id="sag-pam_faillock-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-options")/*)'/>
</section>
- <section id='sag-pam_faillock-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-types"]/*)'/>
+ <section xml:id="sag-pam_faillock-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-types")/*)'/>
</section>
- <section id='sag-pam_faillock-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-return_values"]/*)'/>
+ <section xml:id="sag-pam_faillock-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-return_values")/*)'/>
</section>
- <section id='sag-pam_faillock-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-examples"]/*)'/>
+ <section xml:id="sag-pam_faillock-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-examples")/*)'/>
</section>
- <section id='sag-pam_faillock-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-author"]/*)'/>
+ <section xml:id="sag-pam_faillock-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_faillock/pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_filter.xml b/doc/sag/pam_filter.xml
index 6a4a1ba2..56af28cb 100644
--- a/doc/sag/pam_filter.xml
+++ b/doc/sag/pam_filter.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_filter'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_filter">
<title>pam_filter - filter module</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_filter-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(id("pam_filter-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_filter-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-description"]/*)'/>
+ <section xml:id="sag-pam_filter-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(id("pam_filter-description")/*)'/>
</section>
- <section id='sag-pam_filter-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-options"]/*)'/>
+ <section xml:id="sag-pam_filter-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(id("pam_filter-options")/*)'/>
</section>
- <section id='sag-pam_filter-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-types"]/*)'/>
+ <section xml:id="sag-pam_filter-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(id("pam_filter-types")/*)'/>
</section>
- <section id='sag-pam_filter-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-return_values"]/*)'/>
+ <section xml:id="sag-pam_filter-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(id("pam_filter-return_values")/*)'/>
</section>
- <section id='sag-pam_filter-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-examples"]/*)'/>
+ <section xml:id="sag-pam_filter-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(id("pam_filter-examples")/*)'/>
</section>
- <section id='sag-pam_filter-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-author"]/*)'/>
+ <section xml:id="sag-pam_filter-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(id("pam_filter-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_ftp.xml b/doc/sag/pam_ftp.xml
index b2456265..13fe40a0 100644
--- a/doc/sag/pam_ftp.xml
+++ b/doc/sag/pam_ftp.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_ftp'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_ftp">
<title>pam_ftp - module for anonymous access</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_ftp-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_ftp-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-description"]/*)'/>
+ <section xml:id="sag-pam_ftp-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-description")/*)'/>
</section>
- <section id='sag-pam_ftp-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-options"]/*)'/>
+ <section xml:id="sag-pam_ftp-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-options")/*)'/>
</section>
- <section id='sag-pam_ftp-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-types"]/*)'/>
+ <section xml:id="sag-pam_ftp-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-types")/*)'/>
</section>
- <section id='sag-pam_ftp-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-return_values"]/*)'/>
+ <section xml:id="sag-pam_ftp-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-return_values")/*)'/>
</section>
- <section id='sag-pam_ftp-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-examples"]/*)'/>
+ <section xml:id="sag-pam_ftp-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-examples")/*)'/>
</section>
- <section id='sag-pam_ftp-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-author"]/*)'/>
+ <section xml:id="sag-pam_ftp-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_group.xml b/doc/sag/pam_group.xml
index ce82bf0f..e4efc035 100644
--- a/doc/sag/pam_group.xml
+++ b/doc/sag/pam_group.xml
@@ -1,42 +1,30 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_group'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_group">
<title>pam_group - module to modify group access</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_group-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(id("pam_group-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_group-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(//refsect1[@id = "pam_group-description"]/*)'/>
+ <section xml:id="sag-pam_group-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(id("pam_group-description")/*)'/>
</section>
- <section id='sag-group.conf-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/group.conf.5.xml" xpointer='xpointer(//refsect1[@id = "group.conf-description"]/*)'/>
+ <section xml:id="sag-group.conf-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/group.conf.5.xml" xpointer='xpointer(id("group.conf-description")/*)'/>
</section>
- <section id='sag-pam_group-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(//refsect1[@id = "pam_group-options"]/*)'/>
+ <section xml:id="sag-pam_group-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(id("pam_group-options")/*)'/>
</section>
- <section id='sag-pam_group-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(//refsect1[@id = "pam_group-types"]/*)'/>
+ <section xml:id="sag-pam_group-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(id("pam_group-types")/*)'/>
</section>
- <section id='sag-pam_group-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(//refsect1[@id = "pam_group-return_values"]/*)'/>
+ <section xml:id="sag-pam_group-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(id("pam_group-return_values")/*)'/>
</section>
- <section id='sag-pam_group-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(//refsect1[@id = "pam_group-files"]/*)'/>
+ <section xml:id="sag-pam_group-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(id("pam_group-files")/*)'/>
</section>
- <section id='sag-group.conf-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/group.conf.5.xml" xpointer='xpointer(//refsect1[@id = "group.conf-examples"]/*)'/>
+ <section xml:id="sag-group.conf-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/group.conf.5.xml" xpointer='xpointer(id("group.conf-examples")/*)'/>
</section>
- <section id='sag-pam_group-authors'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(//refsect1[@id = "pam_group-authors"]/*)'/>
+ <section xml:id="sag-pam_group-authors">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(id("pam_group-authors")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_issue.xml b/doc/sag/pam_issue.xml
index 5033d23f..f56cc463 100644
--- a/doc/sag/pam_issue.xml
+++ b/doc/sag/pam_issue.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_issue'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_issue">
<title>pam_issue - add issue file to user prompt</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_issue-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(id("pam_issue-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_issue-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-description"]/*)'/>
+ <section xml:id="sag-pam_issue-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(id("pam_issue-description")/*)'/>
</section>
- <section id='sag-pam_issue-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-options"]/*)'/>
+ <section xml:id="sag-pam_issue-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(id("pam_issue-options")/*)'/>
</section>
- <section id='sag-pam_issue-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-types"]/*)'/>
+ <section xml:id="sag-pam_issue-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(id("pam_issue-types")/*)'/>
</section>
- <section id='sag-pam_issue-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-return_values"]/*)'/>
+ <section xml:id="sag-pam_issue-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(id("pam_issue-return_values")/*)'/>
</section>
- <section id='sag-pam_issue-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-examples"]/*)'/>
+ <section xml:id="sag-pam_issue-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(id("pam_issue-examples")/*)'/>
</section>
- <section id='sag-pam_issue-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-author"]/*)'/>
+ <section xml:id="sag-pam_issue-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(id("pam_issue-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_keyinit.xml b/doc/sag/pam_keyinit.xml
index 3caa4c27..d8013512 100644
--- a/doc/sag/pam_keyinit.xml
+++ b/doc/sag/pam_keyinit.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_keyinit'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_keyinit">
<title>pam_keyinit - display the keyinit file</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_keyinit-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_keyinit-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-description"]/*)'/>
+ <section xml:id="sag-pam_keyinit-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-description")/*)'/>
</section>
- <section id='sag-pam_keyinit-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-options"]/*)'/>
+ <section xml:id="sag-pam_keyinit-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-options")/*)'/>
</section>
- <section id='sag-pam_keyinit-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-types"]/*)'/>
+ <section xml:id="sag-pam_keyinit-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-types")/*)'/>
</section>
- <section id='sag-pam_keyinit-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-return_values"]/*)'/>
+ <section xml:id="sag-pam_keyinit-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-return_values")/*)'/>
</section>
- <section id='sag-pam_keyinit-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-examples"]/*)'/>
+ <section xml:id="sag-pam_keyinit-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-examples")/*)'/>
</section>
- <section id='sag-pam_keyinit-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-author"]/*)'/>
+ <section xml:id="sag-pam_keyinit-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_lastlog.xml b/doc/sag/pam_lastlog.xml
index c250c018..1c9c6b2c 100644
--- a/doc/sag/pam_lastlog.xml
+++ b/doc/sag/pam_lastlog.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_lastlog'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_lastlog">
<title>pam_lastlog - display date of last login</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_lastlog-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_lastlog-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-description"]/*)'/>
+ <section xml:id="sag-pam_lastlog-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-description")/*)'/>
</section>
- <section id='sag-pam_lastlog-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-options"]/*)'/>
+ <section xml:id="sag-pam_lastlog-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-options")/*)'/>
</section>
- <section id='sag-pam_lastlog-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-types"]/*)'/>
+ <section xml:id="sag-pam_lastlog-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-types")/*)'/>
</section>
- <section id='sag-pam_lastlog-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-return_values"]/*)'/>
+ <section xml:id="sag-pam_lastlog-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-return_values")/*)'/>
</section>
- <section id='sag-pam_lastlog-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-examples"]/*)'/>
+ <section xml:id="sag-pam_lastlog-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-examples")/*)'/>
</section>
- <section id='sag-pam_lastlog-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-author"]/*)'/>
+ <section xml:id="sag-pam_lastlog-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_limits.xml b/doc/sag/pam_limits.xml
index 7f898a40..f03a1e41 100644
--- a/doc/sag/pam_limits.xml
+++ b/doc/sag/pam_limits.xml
@@ -1,42 +1,30 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_limits'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_limits">
<title>pam_limits - limit resources</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_limits-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(id("pam_limits-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_limits-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-description"]/*)'/>
+ <section xml:id="sag-pam_limits-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(id("pam_limits-description")/*)'/>
</section>
- <section id='sag-limits.conf-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/limits.conf.5.xml" xpointer='xpointer(//refsect1[@id = "limits.conf-description"]/*)'/>
+ <section xml:id="sag-limits.conf-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/limits.conf.5.xml" xpointer='xpointer(id("limits.conf-description")/*)'/>
</section>
- <section id='sag-pam_limits-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-options"]/*)'/>
+ <section xml:id="sag-pam_limits-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(id("pam_limits-options")/*)'/>
</section>
- <section id='sag-pam_limits-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-types"]/*)'/>
+ <section xml:id="sag-pam_limits-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(id("pam_limits-types")/*)'/>
</section>
- <section id='sag-pam_limits-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-return_values"]/*)'/>
+ <section xml:id="sag-pam_limits-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(id("pam_limits-return_values")/*)'/>
</section>
- <section id='sag-pam_limits-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-files"]/*)'/>
+ <section xml:id="sag-pam_limits-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(id("pam_limits-files")/*)'/>
</section>
- <section id='sag-limits.conf-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/limits.conf.5.xml" xpointer='xpointer(//refsect1[@id = "limits.conf-examples"]/*)'/>
+ <section xml:id="sag-limits.conf-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/limits.conf.5.xml" xpointer='xpointer(id("limits.conf-examples")/*)'/>
</section>
- <section id='sag-pam_limits-authors'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-authors"]/*)'/>
+ <section xml:id="sag-pam_limits-authors">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(id("pam_limits-authors")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_listfile.xml b/doc/sag/pam_listfile.xml
index db7acdc6..66d7a82e 100644
--- a/doc/sag/pam_listfile.xml
+++ b/doc/sag/pam_listfile.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_listfile'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_listfile">
<title>pam_listfile - deny or allow services based on an arbitrary file</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_listfile-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_listfile-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-description"]/*)'/>
+ <section xml:id="sag-pam_listfile-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-description")/*)'/>
</section>
- <section id='sag-pam_listfile-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-options"]/*)'/>
+ <section xml:id="sag-pam_listfile-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-options")/*)'/>
</section>
- <section id='sag-pam_listfile-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-types"]/*)'/>
+ <section xml:id="sag-pam_listfile-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-types")/*)'/>
</section>
- <section id='sag-pam_listfile-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-return_values"]/*)'/>
+ <section xml:id="sag-pam_listfile-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-return_values")/*)'/>
</section>
- <section id='sag-pam_listfile-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-examples"]/*)'/>
+ <section xml:id="sag-pam_listfile-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-examples")/*)'/>
</section>
- <section id='sag-pam_listfile-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-author"]/*)'/>
+ <section xml:id="sag-pam_listfile-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_localuser.xml b/doc/sag/pam_localuser.xml
index 480ff96e..a3cee75f 100644
--- a/doc/sag/pam_localuser.xml
+++ b/doc/sag/pam_localuser.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_localuser'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_localuser">
<title>pam_localuser - require users to be listed in /etc/passwd</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_localuser-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_localuser-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-description"]/*)'/>
+ <section xml:id="sag-pam_localuser-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-description")/*)'/>
</section>
- <section id='sag-pam_localuser-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-options"]/*)'/>
+ <section xml:id="sag-pam_localuser-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-options")/*)'/>
</section>
- <section id='sag-pam_localuser-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-types"]/*)'/>
+ <section xml:id="sag-pam_localuser-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-types")/*)'/>
</section>
- <section id='sag-pam_localuser-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-return_values"]/*)'/>
+ <section xml:id="sag-pam_localuser-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-return_values")/*)'/>
</section>
- <section id='sag-pam_localuser-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-examples"]/*)'/>
+ <section xml:id="sag-pam_localuser-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-examples")/*)'/>
</section>
- <section id='sag-pam_localuser-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-author"]/*)'/>
+ <section xml:id="sag-pam_localuser-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_loginuid.xml b/doc/sag/pam_loginuid.xml
index 3b442843..fc4a0967 100644
--- a/doc/sag/pam_loginuid.xml
+++ b/doc/sag/pam_loginuid.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_loginuid'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_loginuid">
<title>pam_loginuid - record user's login uid to the process attribute</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_loginuid-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_loginuid-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-description"]/*)'/>
+ <section xml:id="sag-pam_loginuid-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-description")/*)'/>
</section>
- <section id='sag-pam_loginuid-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-options"]/*)'/>
+ <section xml:id="sag-pam_loginuid-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-options")/*)'/>
</section>
- <section id='sag-pam_loginuid-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-types"]/*)'/>
+ <section xml:id="sag-pam_loginuid-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-types")/*)'/>
</section>
- <section id='sag-pam_loginuid-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-return_values"]/*)'/>
+ <section xml:id="sag-pam_loginuid-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-return_values")/*)'/>
</section>
- <section id='sag-pam_loginuid-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-examples"]/*)'/>
+ <section xml:id="sag-pam_loginuid-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-examples")/*)'/>
</section>
- <section id='sag-pam_loginuid-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-author"]/*)'/>
+ <section xml:id="sag-pam_loginuid-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_mail.xml b/doc/sag/pam_mail.xml
index 031f786d..6b76770e 100644
--- a/doc/sag/pam_mail.xml
+++ b/doc/sag/pam_mail.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_mail'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_mail">
<title>pam_mail - inform about available mail</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_mail-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(id("pam_mail-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_mail-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-description"]/*)'/>
+ <section xml:id="sag-pam_mail-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(id("pam_mail-description")/*)'/>
</section>
- <section id='sag-pam_mail-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-options"]/*)'/>
+ <section xml:id="sag-pam_mail-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(id("pam_mail-options")/*)'/>
</section>
- <section id='sag-pam_mail-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-types"]/*)'/>
+ <section xml:id="sag-pam_mail-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(id("pam_mail-types")/*)'/>
</section>
- <section id='sag-pam_mail-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-return_values"]/*)'/>
+ <section xml:id="sag-pam_mail-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(id("pam_mail-return_values")/*)'/>
</section>
- <section id='sag-pam_mail-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-examples"]/*)'/>
+ <section xml:id="sag-pam_mail-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(id("pam_mail-examples")/*)'/>
</section>
- <section id='sag-pam_mail-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-author"]/*)'/>
+ <section xml:id="sag-pam_mail-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(id("pam_mail-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_mkhomedir.xml b/doc/sag/pam_mkhomedir.xml
index dc6a1eb7..141395cd 100644
--- a/doc/sag/pam_mkhomedir.xml
+++ b/doc/sag/pam_mkhomedir.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_mkhomedir'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_mkhomedir">
<title>pam_mkhomedir - create users home directory</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_mkhomedir-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_mkhomedir-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-description"]/*)'/>
+ <section xml:id="sag-pam_mkhomedir-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-description")/*)'/>
</section>
- <section id='sag-pam_mkhomedir-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-options"]/*)'/>
+ <section xml:id="sag-pam_mkhomedir-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-options")/*)'/>
</section>
- <section id='sag-pam_mkhomedir-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-types"]/*)'/>
+ <section xml:id="sag-pam_mkhomedir-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-types")/*)'/>
</section>
- <section id='sag-pam_mkhomedir-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-return_values"]/*)'/>
+ <section xml:id="sag-pam_mkhomedir-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-return_values")/*)'/>
</section>
- <section id='sag-pam_mkhomedir-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-examples"]/*)'/>
+ <section xml:id="sag-pam_mkhomedir-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-examples")/*)'/>
</section>
- <section id='sag-pam_mkhomedir-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-author"]/*)'/>
+ <section xml:id="sag-pam_mkhomedir-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_motd.xml b/doc/sag/pam_motd.xml
index 7a7d2dee..9af77bb5 100644
--- a/doc/sag/pam_motd.xml
+++ b/doc/sag/pam_motd.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_motd'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_motd">
<title>pam_motd - display the motd file</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_motd-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(id("pam_motd-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_motd-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-description"]/*)'/>
+ <section xml:id="sag-pam_motd-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(id("pam_motd-description")/*)'/>
</section>
- <section id='sag-pam_motd-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-options"]/*)'/>
+ <section xml:id="sag-pam_motd-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(id("pam_motd-options")/*)'/>
</section>
- <section id='sag-pam_motd-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-types"]/*)'/>
+ <section xml:id="sag-pam_motd-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(id("pam_motd-types")/*)'/>
</section>
- <section id='sag-pam_motd-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-return_values"]/*)'/>
+ <section xml:id="sag-pam_motd-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(id("pam_motd-return_values")/*)'/>
</section>
- <section id='sag-pam_motd-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-examples"]/*)'/>
+ <section xml:id="sag-pam_motd-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(id("pam_motd-examples")/*)'/>
</section>
- <section id='sag-pam_motd-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-author"]/*)'/>
+ <section xml:id="sag-pam_motd-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(id("pam_motd-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_namespace.xml b/doc/sag/pam_namespace.xml
index 6ece9bc1..e18bc0f7 100644
--- a/doc/sag/pam_namespace.xml
+++ b/doc/sag/pam_namespace.xml
@@ -1,42 +1,30 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_namespace'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_namespace">
<title>pam_namespace - setup a private namespace</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_namespace-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_namespace-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-description"]/*)'/>
+ <section xml:id="sag-pam_namespace-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-description")/*)'/>
</section>
- <section id='sag-namespace.conf-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/namespace.conf.5.xml" xpointer='xpointer(//refsect1[@id = "namespace.conf-description"]/*)'/>
+ <section xml:id="sag-namespace.conf-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/namespace.conf.5.xml" xpointer='xpointer(id("namespace.conf-description")/*)'/>
</section>
- <section id='sag-pam_namespace-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-options"]/*)'/>
+ <section xml:id="sag-pam_namespace-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-options")/*)'/>
</section>
- <section id='sag-pam_namespace-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-types"]/*)'/>
+ <section xml:id="sag-pam_namespace-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-types")/*)'/>
</section>
- <section id='sag-pam_namespace-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-return_values"]/*)'/>
+ <section xml:id="sag-pam_namespace-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-return_values")/*)'/>
</section>
- <section id='sag-pam_namespace-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-files"]/*)'/>
+ <section xml:id="sag-pam_namespace-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-files")/*)'/>
</section>
- <section id='sag-namespace.conf-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/namespace.conf.5.xml" xpointer='xpointer(//refsect1[@id = "namespace.conf-examples"]/*)'/>
+ <section xml:id="sag-namespace.conf-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/namespace.conf.5.xml" xpointer='xpointer(id("namespace.conf-examples")/*)'/>
</section>
- <section id='sag-pam_namespace-authors'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-authors"]/*)'/>
+ <section xml:id="sag-pam_namespace-authors">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-authors")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_nologin.xml b/doc/sag/pam_nologin.xml
index 0c626b82..f2acf492 100644
--- a/doc/sag/pam_nologin.xml
+++ b/doc/sag/pam_nologin.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_nologin'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_nologin">
<title>pam_nologin - prevent non-root users from login</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_nologin-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_nologin-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-description"]/*)'/>
+ <section xml:id="sag-pam_nologin-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-description")/*)'/>
</section>
- <section id='sag-pam_nologin-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-options"]/*)'/>
+ <section xml:id="sag-pam_nologin-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-options")/*)'/>
</section>
- <section id='sag-pam_nologin-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-types"]/*)'/>
+ <section xml:id="sag-pam_nologin-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-types")/*)'/>
</section>
- <section id='sag-pam_nologin-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-return_values"]/*)'/>
+ <section xml:id="sag-pam_nologin-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-return_values")/*)'/>
</section>
- <section id='sag-pam_nologin-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-examples"]/*)'/>
+ <section xml:id="sag-pam_nologin-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-examples")/*)'/>
</section>
- <section id='sag-pam_nologin-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-author"]/*)'/>
+ <section xml:id="sag-pam_nologin-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_permit.xml b/doc/sag/pam_permit.xml
index 7c200478..52548c0d 100644
--- a/doc/sag/pam_permit.xml
+++ b/doc/sag/pam_permit.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_permit'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_permit">
<title>pam_permit - the promiscuous module</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_permit-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(id("pam_permit-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_permit-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-description"]/*)'/>
+ <section xml:id="sag-pam_permit-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(id("pam_permit-description")/*)'/>
</section>
- <section id='sag-pam_permit-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-options"]/*)'/>
+ <section xml:id="sag-pam_permit-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(id("pam_permit-options")/*)'/>
</section>
- <section id='sag-pam_permit-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-types"]/*)'/>
+ <section xml:id="sag-pam_permit-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(id("pam_permit-types")/*)'/>
</section>
- <section id='sag-pam_permit-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-return_values"]/*)'/>
+ <section xml:id="sag-pam_permit-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(id("pam_permit-return_values")/*)'/>
</section>
- <section id='sag-pam_permit-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-examples"]/*)'/>
+ <section xml:id="sag-pam_permit-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(id("pam_permit-examples")/*)'/>
</section>
- <section id='sag-pam_permit-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-author"]/*)'/>
+ <section xml:id="sag-pam_permit-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(id("pam_permit-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_pwhistory.xml b/doc/sag/pam_pwhistory.xml
index 0677eae3..867a1bca 100644
--- a/doc/sag/pam_pwhistory.xml
+++ b/doc/sag/pam_pwhistory.xml
@@ -1,38 +1,27 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_pwhistory'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_pwhistory">
<title>pam_pwhistory - grant access using .pwhistory file</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_pwhistory-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_pwhistory-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-description"]/*)'/>
+ <section xml:id="sag-pam_pwhistory-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-description")/*)'/>
</section>
- <section id='sag-pam_pwhistory-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-options"]/*)'/>
+ <section xml:id="sag-pam_pwhistory-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-options")/*)'/>
</section>
- <section id='sag-pam_pwhistory-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-types"]/*)'/>
+ <section xml:id="sag-pam_pwhistory-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-types")/*)'/>
</section>
- <section id='sag-pam_pwhistory-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-return_values"]/*)'/>
+ <section xml:id="sag-pam_pwhistory-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-return_values")/*)'/>
</section>
- <section id='sag-pam_pwhistory-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-files"]/*)'/>
+ <section xml:id="sag-pam_pwhistory-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-files")/*)'/>
</section>
- <section id='sag-pam_pwhistory-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-examples"]/*)'/>
+ <section xml:id="sag-pam_pwhistory-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-examples")/*)'/>
</section>
- <section id='sag-pam_pwhistory-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-author"]/*)'/>
+ <section xml:id="sag-pam_pwhistory-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_rhosts.xml b/doc/sag/pam_rhosts.xml
index 680a70c1..f70b1fbf 100644
--- a/doc/sag/pam_rhosts.xml
+++ b/doc/sag/pam_rhosts.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_rhosts'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_rhosts">
<title>pam_rhosts - grant access using .rhosts file</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_rhosts-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_rhosts-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-description"]/*)'/>
+ <section xml:id="sag-pam_rhosts-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-description")/*)'/>
</section>
- <section id='sag-pam_rhosts-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-options"]/*)'/>
+ <section xml:id="sag-pam_rhosts-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-options")/*)'/>
</section>
- <section id='sag-pam_rhosts-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-types"]/*)'/>
+ <section xml:id="sag-pam_rhosts-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-types")/*)'/>
</section>
- <section id='sag-pam_rhosts-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-return_values"]/*)'/>
+ <section xml:id="sag-pam_rhosts-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-return_values")/*)'/>
</section>
- <section id='sag-pam_rhosts-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-examples"]/*)'/>
+ <section xml:id="sag-pam_rhosts-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-examples")/*)'/>
</section>
- <section id='sag-pam_rhosts-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-author"]/*)'/>
+ <section xml:id="sag-pam_rhosts-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_rootok.xml b/doc/sag/pam_rootok.xml
index 59c99ae9..ab4b4438 100644
--- a/doc/sag/pam_rootok.xml
+++ b/doc/sag/pam_rootok.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_rootok'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_rootok">
<title>pam_rootok - gain only root access</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_rootok-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_rootok-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-description"]/*)'/>
+ <section xml:id="sag-pam_rootok-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-description")/*)'/>
</section>
- <section id='sag-pam_rootok-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-options"]/*)'/>
+ <section xml:id="sag-pam_rootok-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-options")/*)'/>
</section>
- <section id='sag-pam_rootok-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-types"]/*)'/>
+ <section xml:id="sag-pam_rootok-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-types")/*)'/>
</section>
- <section id='sag-pam_rootok-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-return_values"]/*)'/>
+ <section xml:id="sag-pam_rootok-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-return_values")/*)'/>
</section>
- <section id='sag-pam_rootok-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-examples"]/*)'/>
+ <section xml:id="sag-pam_rootok-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-examples")/*)'/>
</section>
- <section id='sag-pam_rootok-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-author"]/*)'/>
+ <section xml:id="sag-pam_rootok-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_securetty.xml b/doc/sag/pam_securetty.xml
index 6ed13e59..9bd9fe21 100644
--- a/doc/sag/pam_securetty.xml
+++ b/doc/sag/pam_securetty.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_securetty'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_securetty">
<title>pam_securetty - limit root login to special devices</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_securetty-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_securetty-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-description"]/*)'/>
+ <section xml:id="sag-pam_securetty-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-description")/*)'/>
</section>
- <section id='sag-pam_securetty-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-options"]/*)'/>
+ <section xml:id="sag-pam_securetty-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-options")/*)'/>
</section>
- <section id='sag-pam_securetty-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-types"]/*)'/>
+ <section xml:id="sag-pam_securetty-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-types")/*)'/>
</section>
- <section id='sag-pam_securetty-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-return_values"]/*)'/>
+ <section xml:id="sag-pam_securetty-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-return_values")/*)'/>
</section>
- <section id='sag-pam_securetty-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-examples"]/*)'/>
+ <section xml:id="sag-pam_securetty-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-examples")/*)'/>
</section>
- <section id='sag-pam_securetty-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-author"]/*)'/>
+ <section xml:id="sag-pam_securetty-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_selinux.xml b/doc/sag/pam_selinux.xml
index 9a4f9878..cb64bcfe 100644
--- a/doc/sag/pam_selinux.xml
+++ b/doc/sag/pam_selinux.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_selinux'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_selinux">
<title>pam_selinux - set the default security context</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_selinux-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_selinux-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-description"]/*)'/>
+ <section xml:id="sag-pam_selinux-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-description")/*)'/>
</section>
- <section id='sag-pam_selinux-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-options"]/*)'/>
+ <section xml:id="sag-pam_selinux-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-options")/*)'/>
</section>
- <section id='sag-pam_selinux-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-types"]/*)'/>
+ <section xml:id="sag-pam_selinux-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-types")/*)'/>
</section>
- <section id='sag-pam_selinux-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-return_values"]/*)'/>
+ <section xml:id="sag-pam_selinux-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-return_values")/*)'/>
</section>
- <section id='sag-pam_selinux-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-examples"]/*)'/>
+ <section xml:id="sag-pam_selinux-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-examples")/*)'/>
</section>
- <section id='sag-pam_selinux-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-author"]/*)'/>
+ <section xml:id="sag-pam_selinux-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_sepermit.xml b/doc/sag/pam_sepermit.xml
index 9831a13f..26426615 100644
--- a/doc/sag/pam_sepermit.xml
+++ b/doc/sag/pam_sepermit.xml
@@ -1,38 +1,27 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_sepermit'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_sepermit">
<title>pam_sepermit - allow/reject access based on SELinux mode</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_sepermit-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_sepermit-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-description"]/*)'/>
+ <section xml:id="sag-pam_sepermit-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-description")/*)'/>
</section>
- <section id='sag-pam_sepermit-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-options"]/*)'/>
+ <section xml:id="sag-pam_sepermit-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-options")/*)'/>
</section>
- <section id='sag-pam_sepermit-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-types"]/*)'/>
+ <section xml:id="sag-pam_sepermit-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-types")/*)'/>
</section>
- <section id='sag-pam_sepermit-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-return_values"]/*)'/>
+ <section xml:id="sag-pam_sepermit-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-return_values")/*)'/>
</section>
- <section id='sag-pam_sepermit-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-files"]/*)'/>
+ <section xml:id="sag-pam_sepermit-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-files")/*)'/>
</section>
- <section id='sag-pam_sepermit-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-examples"]/*)'/>
+ <section xml:id="sag-pam_sepermit-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-examples")/*)'/>
</section>
- <section id='sag-pam_sepermit-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-author"]/*)'/>
+ <section xml:id="sag-pam_sepermit-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_setquota.xml b/doc/sag/pam_setquota.xml
index 368dfd8e..01d18732 100644
--- a/doc/sag/pam_setquota.xml
+++ b/doc/sag/pam_setquota.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_setquota'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_setquota">
<title>pam_setquota - set or modify disk quotas on session start</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_setquota-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_setquota-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-description"]/*)'/>
+ <section xml:id="sag-pam_setquota-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-description")/*)'/>
</section>
- <section id='sag-pam_setquota-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-options"]/*)'/>
+ <section xml:id="sag-pam_setquota-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-options")/*)'/>
</section>
- <section id='sag-pam_setquota-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-types"]/*)'/>
+ <section xml:id="sag-pam_setquota-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-types")/*)'/>
</section>
- <section id='sag-pam_setquota-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-return_values"]/*)'/>
+ <section xml:id="sag-pam_setquota-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-return_values")/*)'/>
</section>
- <section id='sag-pam_setquota-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-examples"]/*)'/>
+ <section xml:id="sag-pam_setquota-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-examples")/*)'/>
</section>
- <section id='sag-pam_setquota-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-author"]/*)'/>
+ <section xml:id="sag-pam_setquota-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_setquota/pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_shells.xml b/doc/sag/pam_shells.xml
index b3b3d327..6765a197 100644
--- a/doc/sag/pam_shells.xml
+++ b/doc/sag/pam_shells.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_shells'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_shells">
<title>pam_shells - check for valid login shell</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_shells-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(id("pam_shells-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_shells-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-description"]/*)'/>
+ <section xml:id="sag-pam_shells-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(id("pam_shells-description")/*)'/>
</section>
- <section id='sag-pam_shells-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-options"]/*)'/>
+ <section xml:id="sag-pam_shells-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(id("pam_shells-options")/*)'/>
</section>
- <section id='sag-pam_shells-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-types"]/*)'/>
+ <section xml:id="sag-pam_shells-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(id("pam_shells-types")/*)'/>
</section>
- <section id='sag-pam_shells-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-return_values"]/*)'/>
+ <section xml:id="sag-pam_shells-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(id("pam_shells-return_values")/*)'/>
</section>
- <section id='sag-pam_shells-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-examples"]/*)'/>
+ <section xml:id="sag-pam_shells-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(id("pam_shells-examples")/*)'/>
</section>
- <section id='sag-pam_shells-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-author"]/*)'/>
+ <section xml:id="sag-pam_shells-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(id("pam_shells-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_succeed_if.xml b/doc/sag/pam_succeed_if.xml
index ce0792d9..7c9f4934 100644
--- a/doc/sag/pam_succeed_if.xml
+++ b/doc/sag/pam_succeed_if.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_succeed_if'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_succeed_if">
<title>pam_succeed_if - test account characteristics</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_succeed_if-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_succeed_if-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-description"]/*)'/>
+ <section xml:id="sag-pam_succeed_if-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-description")/*)'/>
</section>
- <section id='sag-pam_succeed_if-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-options"]/*)'/>
+ <section xml:id="sag-pam_succeed_if-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-options")/*)'/>
</section>
- <section id='sag-pam_succeed_if-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-types"]/*)'/>
+ <section xml:id="sag-pam_succeed_if-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-types")/*)'/>
</section>
- <section id='sag-pam_succeed_if-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-return_values"]/*)'/>
+ <section xml:id="sag-pam_succeed_if-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-return_values")/*)'/>
</section>
- <section id='sag-pam_succeed_if-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-examples"]/*)'/>
+ <section xml:id="sag-pam_succeed_if-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-examples")/*)'/>
</section>
- <section id='sag-pam_succeed_if-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-author"]/*)'/>
+ <section xml:id="sag-pam_succeed_if-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_time.xml b/doc/sag/pam_time.xml
index 74e9e02a..e15d20a0 100644
--- a/doc/sag/pam_time.xml
+++ b/doc/sag/pam_time.xml
@@ -1,42 +1,30 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_time'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_time">
<title>pam_time - time controlled access</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_time-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(id("pam_time-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_time-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(//refsect1[@id = "pam_time-description"]/*)'/>
+ <section xml:id="sag-pam_time-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(id("pam_time-description")/*)'/>
</section>
- <section id='sag-time.conf-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/time.conf.5.xml" xpointer='xpointer(//refsect1[@id = "time.conf-description"]/*)'/>
+ <section xml:id="sag-time.conf-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/time.conf.5.xml" xpointer='xpointer(id("time.conf-description")/*)'/>
</section>
- <section id='sag-pam_time-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(//refsect1[@id = "pam_time-options"]/*)'/>
+ <section xml:id="sag-pam_time-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(id("pam_time-options")/*)'/>
</section>
- <section id='sag-pam_time-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(//refsect1[@id = "pam_time-types"]/*)'/>
+ <section xml:id="sag-pam_time-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(id("pam_time-types")/*)'/>
</section>
- <section id='sag-pam_time-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(//refsect1[@id = "pam_time-return_values"]/*)'/>
+ <section xml:id="sag-pam_time-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(id("pam_time-return_values")/*)'/>
</section>
- <section id='sag-pam_time-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(//refsect1[@id = "pam_time-files"]/*)'/>
+ <section xml:id="sag-pam_time-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(id("pam_time-files")/*)'/>
</section>
- <section id='sag-time.conf-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/time.conf.5.xml" xpointer='xpointer(//refsect1[@id = "time.conf-examples"]/*)'/>
+ <section xml:id="sag-time.conf-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/time.conf.5.xml" xpointer='xpointer(id("time.conf-examples")/*)'/>
</section>
- <section id='sag-pam_time-authors'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(//refsect1[@id = "pam_time-authors"]/*)'/>
+ <section xml:id="sag-pam_time-authors">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(id("pam_time-authors")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_timestamp.xml b/doc/sag/pam_timestamp.xml
index 833a6bac..dfe87e7d 100644
--- a/doc/sag/pam_timestamp.xml
+++ b/doc/sag/pam_timestamp.xml
@@ -1,42 +1,30 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_timestamp'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_timestamp">
<title>pam_timestamp - authenticate using cached successful authentication attempts</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_timestamp-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_timestamp-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-description"]/*)'/>
+ <section xml:id="sag-pam_timestamp-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-description")/*)'/>
</section>
- <section id='sag-pam_timestamp-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-options"]/*)'/>
+ <section xml:id="sag-pam_timestamp-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-options")/*)'/>
</section>
- <section id='sag-pam_timestamp-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-types"]/*)'/>
+ <section xml:id="sag-pam_timestamp-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-types")/*)'/>
</section>
- <section id='sag-pam_timestamp-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-return_values"]/*)'/>
+ <section xml:id="sag-pam_timestamp-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-return_values")/*)'/>
</section>
- <section id='sag-pam_timestamp-notes'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-notes"]/*)'/>
+ <section xml:id="sag-pam_timestamp-notes">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-notes")/*)'/>
</section>
- <section id='sag-pam_timestamp-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-examples"]/*)'/>
+ <section xml:id="sag-pam_timestamp-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-examples")/*)'/>
</section>
- <section id='sag-pam_timestamp-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-files"]/*)'/>
+ <section xml:id="sag-pam_timestamp-files">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-files")/*)'/>
</section>
- <section id='sag-pam_timestamp-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-author"]/*)'/>
+ <section xml:id="sag-pam_timestamp-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_timestamp/pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_tty_audit.xml b/doc/sag/pam_tty_audit.xml
index 86d1cd03..44de8105 100644
--- a/doc/sag/pam_tty_audit.xml
+++ b/doc/sag/pam_tty_audit.xml
@@ -1,38 +1,27 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_tty_audit'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_tty_audit">
<title>pam_tty_audit - enable/disable tty auditing</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_tty_audit-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_tty_audit-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-description"]/*)'/>
+ <section xml:id="sag-pam_tty_audit-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-description")/*)'/>
</section>
- <section id='sag-pam_tty_audit-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-options"]/*)'/>
+ <section xml:id="sag-pam_tty_audit-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-options")/*)'/>
</section>
- <section id='sag-pam_tty_audit-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-types"]/*)'/>
+ <section xml:id="sag-pam_tty_audit-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-types")/*)'/>
</section>
- <section id='sag-pam_tty_audit-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-return_values"]/*)'/>
+ <section xml:id="sag-pam_tty_audit-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-return_values")/*)'/>
</section>
- <section id='sag-pam_tty_audit-notes'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-notes"]/*)'/>
+ <section xml:id="sag-pam_tty_audit-notes">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-notes")/*)'/>
</section>
- <section id='sag-pam_tty_audit-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-examples"]/*)'/>
+ <section xml:id="sag-pam_tty_audit-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-examples")/*)'/>
</section>
- <section id='sag-pam_tty_audit-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-author"]/*)'/>
+ <section xml:id="sag-pam_tty_audit-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_umask.xml b/doc/sag/pam_umask.xml
index b0535086..2fb200bb 100644
--- a/doc/sag/pam_umask.xml
+++ b/doc/sag/pam_umask.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_umask'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_umask">
<title>pam_umask - set the file mode creation mask</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_umask-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(id("pam_umask-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_umask-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-description"]/*)'/>
+ <section xml:id="sag-pam_umask-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(id("pam_umask-description")/*)'/>
</section>
- <section id='sag-pam_umask-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-options"]/*)'/>
+ <section xml:id="sag-pam_umask-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(id("pam_umask-options")/*)'/>
</section>
- <section id='sag-pam_umask-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-types"]/*)'/>
+ <section xml:id="sag-pam_umask-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(id("pam_umask-types")/*)'/>
</section>
- <section id='sag-pam_umask-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-return_values"]/*)'/>
+ <section xml:id="sag-pam_umask-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(id("pam_umask-return_values")/*)'/>
</section>
- <section id='sag-pam_umask-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-examples"]/*)'/>
+ <section xml:id="sag-pam_umask-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(id("pam_umask-examples")/*)'/>
</section>
- <section id='sag-pam_umask-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-author"]/*)'/>
+ <section xml:id="sag-pam_umask-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(id("pam_umask-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_unix.xml b/doc/sag/pam_unix.xml
index 24bbaec3..bb341224 100644
--- a/doc/sag/pam_unix.xml
+++ b/doc/sag/pam_unix.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_unix'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_unix">
<title>pam_unix - traditional password authentication</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_unix-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(id("pam_unix-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_unix-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-description"]/*)'/>
+ <section xml:id="sag-pam_unix-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(id("pam_unix-description")/*)'/>
</section>
- <section id='sag-pam_unix-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-options"]/*)'/>
+ <section xml:id="sag-pam_unix-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(id("pam_unix-options")/*)'/>
</section>
- <section id='sag-pam_unix-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-types"]/*)'/>
+ <section xml:id="sag-pam_unix-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(id("pam_unix-types")/*)'/>
</section>
- <section id='sag-pam_unix-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-return_values"]/*)'/>
+ <section xml:id="sag-pam_unix-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(id("pam_unix-return_values")/*)'/>
</section>
- <section id='sag-pam_unix-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-examples"]/*)'/>
+ <section xml:id="sag-pam_unix-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(id("pam_unix-examples")/*)'/>
</section>
- <section id='sag-pam_unix-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-author"]/*)'/>
+ <section xml:id="sag-pam_unix-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(id("pam_unix-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_userdb.xml b/doc/sag/pam_userdb.xml
index 47c2c727..3c1bbc17 100644
--- a/doc/sag/pam_userdb.xml
+++ b/doc/sag/pam_userdb.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_userdb'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_userdb">
<title>pam_userdb - authenticate against a db database</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_userdb-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_userdb-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-description"]/*)'/>
+ <section xml:id="sag-pam_userdb-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-description")/*)'/>
</section>
- <section id='sag-pam_userdb-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-options"]/*)'/>
+ <section xml:id="sag-pam_userdb-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-options")/*)'/>
</section>
- <section id='sag-pam_userdb-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-types"]/*)'/>
+ <section xml:id="sag-pam_userdb-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-types")/*)'/>
</section>
- <section id='sag-pam_userdb-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-return_values"]/*)'/>
+ <section xml:id="sag-pam_userdb-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-return_values")/*)'/>
</section>
- <section id='sag-pam_userdb-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-examples"]/*)'/>
+ <section xml:id="sag-pam_userdb-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-examples")/*)'/>
</section>
- <section id='sag-pam_userdb-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-author"]/*)'/>
+ <section xml:id="sag-pam_userdb-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_warn.xml b/doc/sag/pam_warn.xml
index e2e7adba..0f1376be 100644
--- a/doc/sag/pam_warn.xml
+++ b/doc/sag/pam_warn.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_warn'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_warn">
<title>pam_warn - logs all PAM items</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_warn-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(id("pam_warn-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_warn-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-description"]/*)'/>
+ <section xml:id="sag-pam_warn-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(id("pam_warn-description")/*)'/>
</section>
- <section id='sag-pam_warn-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-options"]/*)'/>
+ <section xml:id="sag-pam_warn-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(id("pam_warn-options")/*)'/>
</section>
- <section id='sag-pam_warn-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-types"]/*)'/>
+ <section xml:id="sag-pam_warn-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(id("pam_warn-types")/*)'/>
</section>
- <section id='sag-pam_warn-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-return_values"]/*)'/>
+ <section xml:id="sag-pam_warn-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(id("pam_warn-return_values")/*)'/>
</section>
- <section id='sag-pam_warn-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-examples"]/*)'/>
+ <section xml:id="sag-pam_warn-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(id("pam_warn-examples")/*)'/>
</section>
- <section id='sag-pam_warn-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-author"]/*)'/>
+ <section xml:id="sag-pam_warn-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(id("pam_warn-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_wheel.xml b/doc/sag/pam_wheel.xml
index 5ea011e3..76f02042 100644
--- a/doc/sag/pam_wheel.xml
+++ b/doc/sag/pam_wheel.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_wheel'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_wheel">
<title>pam_wheel - only permit root access to members of group wheel</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_wheel-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_wheel-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-description"]/*)'/>
+ <section xml:id="sag-pam_wheel-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-description")/*)'/>
</section>
- <section id='sag-pam_wheel-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-options"]/*)'/>
+ <section xml:id="sag-pam_wheel-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-options")/*)'/>
</section>
- <section id='sag-pam_wheel-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-types"]/*)'/>
+ <section xml:id="sag-pam_wheel-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-types")/*)'/>
</section>
- <section id='sag-pam_wheel-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-return_values"]/*)'/>
+ <section xml:id="sag-pam_wheel-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-return_values")/*)'/>
</section>
- <section id='sag-pam_wheel-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-examples"]/*)'/>
+ <section xml:id="sag-pam_wheel-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-examples")/*)'/>
</section>
- <section id='sag-pam_wheel-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-author"]/*)'/>
+ <section xml:id="sag-pam_wheel-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/sag/pam_xauth.xml b/doc/sag/pam_xauth.xml
index 9aca9ffa..4c9ba35e 100644
--- a/doc/sag/pam_xauth.xml
+++ b/doc/sag/pam_xauth.xml
@@ -1,34 +1,24 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<section id='sag-pam_xauth'>
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sag-pam_xauth">
<title>pam_xauth - forward xauth keys between users</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_xauth-cmdsynopsis"]/*)'/>
+ <cmdsynopsis sepchar=" ">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-cmdsynopsis")/*)'/>
</cmdsynopsis>
- <section id='sag-pam_xauth-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-description"]/*)'/>
+ <section xml:id="sag-pam_xauth-description">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-description")/*)'/>
</section>
- <section id='sag-pam_xauth-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-options"]/*)'/>
+ <section xml:id="sag-pam_xauth-options">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-options")/*)'/>
</section>
- <section id='sag-pam_xauth-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-types"]/*)'/>
+ <section xml:id="sag-pam_xauth-types">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-types")/*)'/>
</section>
- <section id='sag-pam_xauth-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-return_values"]/*)'/>
+ <section xml:id="sag-pam_xauth-return_values">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-return_values")/*)'/>
</section>
- <section id='sag-pam_xauth-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-examples"]/*)'/>
+ <section xml:id="sag-pam_xauth-examples">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-examples")/*)'/>
</section>
- <section id='sag-pam_xauth-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-author"]/*)'/>
+ <section xml:id="sag-pam_xauth-author">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-author")/*)'/>
</section>
-</section>
+</section> \ No newline at end of file
diff --git a/doc/specs/Makefile.in b/doc/specs/Makefile.in
index e3a70283..3213eaa0 100644
--- a/doc/specs/Makefile.in
+++ b/doc/specs/Makefile.in
@@ -266,6 +266,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -278,11 +279,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -314,12 +317,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -342,6 +347,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -352,12 +358,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 722ec686..c4c3c261 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -11,4 +11,4 @@ AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
LDADD = $(top_builddir)/libpam/libpam.la \
$(top_builddir)/libpam_misc/libpam_misc.la
-noinst_PROGRAMS = xsh vpass blank check_user
+noinst_PROGRAMS = xsh vpass blank check_user tty_conv
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 456544f6..25bf4203 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -93,7 +93,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = xsh$(EXEEXT) vpass$(EXEEXT) blank$(EXEEXT) \
- check_user$(EXEEXT)
+ check_user$(EXEEXT) tty_conv$(EXEEXT)
subdir = examples
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
@@ -133,6 +133,11 @@ check_user_OBJECTS = check_user.$(OBJEXT)
check_user_LDADD = $(LDADD)
check_user_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
$(top_builddir)/libpam_misc/libpam_misc.la
+tty_conv_SOURCES = tty_conv.c
+tty_conv_OBJECTS = tty_conv.$(OBJEXT)
+tty_conv_LDADD = $(LDADD)
+tty_conv_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
+ $(top_builddir)/libpam_misc/libpam_misc.la
vpass_SOURCES = vpass.c
vpass_OBJECTS = vpass.$(OBJEXT)
vpass_LDADD = $(LDADD)
@@ -159,7 +164,8 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/blank.Po ./$(DEPDIR)/check_user.Po \
- ./$(DEPDIR)/vpass.Po ./$(DEPDIR)/xsh.Po
+ ./$(DEPDIR)/tty_conv.Po ./$(DEPDIR)/vpass.Po \
+ ./$(DEPDIR)/xsh.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -179,8 +185,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = blank.c check_user.c vpass.c xsh.c
-DIST_SOURCES = blank.c check_user.c vpass.c xsh.c
+SOURCES = blank.c check_user.c tty_conv.c vpass.c xsh.c
+DIST_SOURCES = blank.c check_user.c tty_conv.c vpass.c xsh.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -233,6 +239,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -245,11 +252,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -281,12 +290,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -309,6 +320,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -319,12 +331,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -449,6 +465,10 @@ check_user$(EXEEXT): $(check_user_OBJECTS) $(check_user_DEPENDENCIES) $(EXTRA_ch
@rm -f check_user$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(check_user_OBJECTS) $(check_user_LDADD) $(LIBS)
+tty_conv$(EXEEXT): $(tty_conv_OBJECTS) $(tty_conv_DEPENDENCIES) $(EXTRA_tty_conv_DEPENDENCIES)
+ @rm -f tty_conv$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tty_conv_OBJECTS) $(tty_conv_LDADD) $(LIBS)
+
vpass$(EXEEXT): $(vpass_OBJECTS) $(vpass_DEPENDENCIES) $(EXTRA_vpass_DEPENDENCIES)
@rm -f vpass$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(vpass_OBJECTS) $(vpass_LDADD) $(LIBS)
@@ -465,6 +485,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blank.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_user.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tty_conv.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vpass.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsh.Po@am__quote@ # am--include-marker
@@ -629,6 +650,7 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
distclean: distclean-am
-rm -f ./$(DEPDIR)/blank.Po
-rm -f ./$(DEPDIR)/check_user.Po
+ -rm -f ./$(DEPDIR)/tty_conv.Po
-rm -f ./$(DEPDIR)/vpass.Po
-rm -f ./$(DEPDIR)/xsh.Po
-rm -f Makefile
@@ -678,6 +700,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/blank.Po
-rm -f ./$(DEPDIR)/check_user.Po
+ -rm -f ./$(DEPDIR)/tty_conv.Po
-rm -f ./$(DEPDIR)/vpass.Po
-rm -f ./$(DEPDIR)/xsh.Po
-rm -f Makefile
diff --git a/examples/tty_conv.c b/examples/tty_conv.c
new file mode 100644
index 00000000..23f0684c
--- /dev/null
+++ b/examples/tty_conv.c
@@ -0,0 +1,177 @@
+/* PlanC (hubenchang0515@outlook.com) -- an example application
+ * that implements a custom conversation */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <termio.h>
+#include <security/pam_appl.h>
+
+/***************************************
+ * @brief echo off/on
+ * @param[in] fd file descriptor
+ * @param[in] off 1 - echo off,0 - echo on
+ ***************************************/
+static void echoOff(int fd, int off)
+{
+ struct termio tty;
+ if (ioctl(fd, TCGETA, &tty) < 0)
+ {
+ fprintf(stderr, "TCGETA failed: %s\n", strerror(errno));
+ return;
+ }
+
+ if (off)
+ {
+ tty.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
+ if (ioctl(fd, TCSETAF, &tty) < 0)
+ {
+ fprintf(stderr, "TCSETAF failed: %s\n", strerror(errno));
+ }
+ }
+ else
+ {
+ tty.c_lflag |= (ECHO | ECHOE | ECHOK | ECHONL);
+ if (ioctl(fd, TCSETAW, &tty) < 0)
+ {
+ fprintf(stderr, "TCSETAW failed: %s\n", strerror(errno));
+ }
+ }
+}
+
+/***************************************
+ * @brief echo off stdin
+ ***************************************/
+static void echoOffStdin(void)
+{
+ echoOff(fileno(stdin), 1);
+}
+
+/***************************************
+ * @brief echo on stdin
+ ***************************************/
+static void echoOnStdin(void)
+{
+ echoOff(fileno(stdin), 0);
+}
+
+/***************************************
+ * @brief read a line input
+ * @return the input string
+ ***************************************/
+static char *readline(void)
+{
+ char input[PAM_MAX_RESP_SIZE];
+ int i;
+
+ flockfile(stdin);
+ for (i = 0; i < PAM_MAX_RESP_SIZE; i++)
+ {
+ int ch = getchar_unlocked();
+ if (ch == '\n' || ch == '\r' ||ch == EOF)
+ break;
+ input[i] = ch;
+ }
+ funlockfile(stdin);
+ input[i] = '\0';
+
+ return (strdup(input));
+}
+
+/**************************************************
+ * @brief callback of PAM conversation
+ * @param[in] num_msg the count of message
+ * @param[in] msg PAM message
+ * @param[out] resp our response
+ * @param[in] appdata_ptr custom data passed by struct pam_conv.appdata_ptr
+ * @return state
+ **************************************************/
+static int conversation(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr)
+{
+ (void)(appdata_ptr);
+ int i;
+
+ /* check the count of message */
+ if (num_msg <= 0 || num_msg >= PAM_MAX_MSG_SIZE)
+ {
+ fprintf(stderr, "invalid num_msg(%d)\n", num_msg);
+ return PAM_CONV_ERR;
+ }
+
+ /* alloc memory for response */
+ if ((resp[0] = malloc(num_msg * sizeof(struct pam_response))) == NULL)
+ {
+ fprintf(stderr, "bad alloc\n");
+ return PAM_BUF_ERR;
+ }
+
+ /* response for message */
+ for (i = 0; i < num_msg; i++)
+ {
+ const struct pam_message *m = *msg + i;
+ struct pam_response *r = *resp + i;
+ r->resp_retcode = 0; /* currently un-used, zero expected */
+ switch (m->msg_style)
+ {
+ case PAM_PROMPT_ECHO_OFF: /* get the input with echo off, like the password */
+ printf("%s", m->msg);
+ echoOffStdin();
+ r->resp = readline();
+ echoOnStdin();
+ printf("\n");
+ break;
+
+ case PAM_PROMPT_ECHO_ON: /* get the input with echo on, like the username */
+ printf("%s", m->msg);
+ r->resp = readline();
+ break;
+
+ case PAM_TEXT_INFO: /* normal info */
+ printf("%s\n", m->msg);
+ break;
+
+ case PAM_ERROR_MSG: /* error info */
+ fprintf(stderr, "%s\n", m->msg);
+ break;
+
+ default:
+ fprintf(stderr, "unexpected msg_style: %d\n", m->msg_style);
+ break;
+ }
+ }
+ return PAM_SUCCESS;
+}
+
+int main(void)
+{
+ struct pam_conv pam_conv = {conversation, NULL};
+ pam_handle_t *pamh;
+
+ /* echo on while exist, like Ctrl+C on input password */
+ atexit(echoOnStdin);
+
+ if (PAM_SUCCESS != pam_start("login", NULL, &pam_conv, &pamh))
+ {
+ fprintf(stderr, "pam_start failed\n");
+ return EXIT_FAILURE;
+ }
+
+ if (PAM_SUCCESS != pam_authenticate(pamh, 0))
+ {
+ fprintf(stderr, "pam_authenticate failed\n");
+ pam_end(pamh, 0);
+ return EXIT_FAILURE;
+ }
+
+ if (PAM_SUCCESS != pam_acct_mgmt(pamh, 0))
+ {
+ fprintf(stderr, "pam_acct_mgmt failed\n");
+ pam_end(pamh, 0);
+ return EXIT_FAILURE;
+ }
+
+ pam_end(pamh, 0);
+ return EXIT_SUCCESS;
+}
diff --git a/examples/xsh.c b/examples/xsh.c
index ef4dca0c..5b34fc17 100644
--- a/examples/xsh.c
+++ b/examples/xsh.c
@@ -80,7 +80,7 @@ int main(int argc, char **argv)
tty = ttyname(fileno(stdin));
if (tty) {
retcode = pam_set_item(pamh, PAM_TTY, tty);
- bail_out(pamh,1,retcode,"pam_set_item(PAM_RHOST)");
+ bail_out(pamh,1,retcode,"pam_set_item(PAM_TTY)");
}
}
diff --git a/libpam/Makefile.am b/libpam/Makefile.am
index 55222afc..389d5d02 100644
--- a/libpam/Makefile.am
+++ b/libpam/Makefile.am
@@ -21,7 +21,7 @@ noinst_HEADERS = pam_prelude.h pam_private.h pam_tokens.h \
include/pam_inline.h include/test_assert.h
libpam_la_LDFLAGS = -no-undefined -version-info 85:1:85
-libpam_la_LIBADD = @LIBAUDIT@ $(LIBPRELUDE_LIBS) $(ECONF_LIBS) @LIBDL@
+libpam_la_LIBADD = @LIBAUDIT@ $(LIBPRELUDE_LIBS) $(ECONF_LIBS) @LIBDL@ @LTLIBINTL@
if HAVE_VERSIONING
libpam_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libpam.map
diff --git a/libpam/Makefile.in b/libpam/Makefile.in
index 0c2333c0..597c8dcd 100644
--- a/libpam/Makefile.in
+++ b/libpam/Makefile.in
@@ -286,6 +286,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -298,11 +299,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -334,12 +337,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -362,6 +367,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -372,12 +378,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -461,7 +471,7 @@ noinst_HEADERS = pam_prelude.h pam_private.h pam_tokens.h \
libpam_la_LDFLAGS = -no-undefined -version-info 85:1:85 \
$(am__append_1)
-libpam_la_LIBADD = @LIBAUDIT@ $(LIBPRELUDE_LIBS) $(ECONF_LIBS) @LIBDL@
+libpam_la_LIBADD = @LIBAUDIT@ $(LIBPRELUDE_LIBS) $(ECONF_LIBS) @LIBDL@ @LTLIBINTL@
lib_LTLIBRARIES = libpam.la
libpam_la_SOURCES = pam_account.c pam_auth.c pam_data.c pam_delay.c \
pam_dispatch.c pam_end.c pam_env.c pam_get_authtok.c \
diff --git a/libpam/include/pam_cc_compat.h b/libpam/include/pam_cc_compat.h
index 69190368..0a6e32d5 100644
--- a/libpam/include/pam_cc_compat.h
+++ b/libpam/include/pam_cc_compat.h
@@ -32,6 +32,11 @@
_Pragma("GCC diagnostic ignored \"-Wcast-align\"")
# define DIAG_POP_IGNORE_CAST_ALIGN \
_Pragma("GCC diagnostic pop")
+# define DIAG_PUSH_IGNORE_FORMAT_NONLITERAL \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"")
+# define DIAG_POP_IGNORE_FORMAT_NONLITERAL \
+ _Pragma("GCC diagnostic pop")
#elif PAM_CLANG_PREREQ(2, 6)
# define DIAG_PUSH_IGNORE_CAST_QUAL \
_Pragma("clang diagnostic push"); \
@@ -43,11 +48,18 @@
_Pragma("clang diagnostic ignored \"-Wcast-align\"")
# define DIAG_POP_IGNORE_CAST_ALIGN \
_Pragma("clang diagnostic pop")
+# define DIAG_PUSH_IGNORE_FORMAT_NONLITERAL \
+ _Pragma("clang diagnostic push"); \
+ _Pragma("clang diagnostic ignored \"-Wformat-nonliteral\"")
+# define DIAG_POP_IGNORE_FORMAT_NONLITERAL \
+ _Pragma("clang diagnostic pop")
#else
-# define DIAG_PUSH_IGNORE_CAST_QUAL /* empty */
-# define DIAG_POP_IGNORE_CAST_QUAL /* empty */
-# define DIAG_PUSH_IGNORE_CAST_ALIGN /* empty */
-# define DIAG_POP_IGNORE_CAST_ALIGN /* empty */
+# define DIAG_PUSH_IGNORE_CAST_QUAL /* empty */
+# define DIAG_POP_IGNORE_CAST_QUAL /* empty */
+# define DIAG_PUSH_IGNORE_CAST_ALIGN /* empty */
+# define DIAG_POP_IGNORE_CAST_ALIGN /* empty */
+# define DIAG_PUSH_IGNORE_FORMAT_NONLITERAL /* empty */
+# define DIAG_POP_IGNORE_FORMAT_NONLITERAL /* empty */
#endif
/*
diff --git a/libpam/include/pam_inline.h b/libpam/include/pam_inline.h
index ec2f3bf0..7721c0b7 100644
--- a/libpam/include/pam_inline.h
+++ b/libpam/include/pam_inline.h
@@ -9,6 +9,7 @@
#define PAM_INLINE_H
#include "pam_cc_compat.h"
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
@@ -33,6 +34,12 @@
* 0, otherwise.
*/
#define PAM_MUST_BE_ARRAY(a_) PAM_FAIL_BUILD_ON_ZERO(!PAM_IS_NOT_ARRAY(a_))
+/*
+ * Evaluates to
+ * - a syntax error if the argument is an array,
+ * 0, otherwise.
+ */
+#define PAM_MUST_NOT_BE_ARRAY(a_) PAM_FAIL_BUILD_ON_ZERO(PAM_IS_NOT_ARRAY(a_))
/* Evaluates to the number of elements in the specified array. */
#define PAM_ARRAY_SIZE(a_) (sizeof(a_) / sizeof((a_)[0]) + PAM_MUST_BE_ARRAY(a_))
@@ -66,6 +73,59 @@ pam_str_skip_icase_prefix_len(const char *str, const char *prefix, size_t prefix
#define pam_str_skip_icase_prefix(str_, prefix_) \
pam_str_skip_icase_prefix_len((str_), (prefix_), sizeof(prefix_) - 1 + PAM_MUST_BE_ARRAY(prefix_))
+
+/*
+ * Macros to securely erase memory
+ */
+
+#ifdef HAVE_MEMSET_EXPLICIT
+static inline void pam_overwrite_n(void *ptr, size_t len)
+{
+ if (ptr)
+ memset_explicit(ptr, len);
+}
+#elif defined HAVE_EXPLICIT_BZERO
+static inline void pam_overwrite_n(void *ptr, size_t len)
+{
+ if (ptr)
+ explicit_bzero(ptr, len);
+}
+#else
+static inline void pam_overwrite_n(void *ptr, size_t len)
+{
+ if (ptr) {
+ ptr = memset(ptr, '\0', len);
+ __asm__ __volatile__ ("" : : "r"(ptr) : "memory");
+ }
+}
+#endif
+
+#define pam_overwrite_string(x) \
+do { \
+ char *xx__ = (x) + PAM_MUST_NOT_BE_ARRAY(x); \
+ if (xx__) \
+ pam_overwrite_n(xx__, strlen(xx__)); \
+} while(0)
+
+#define pam_overwrite_array(x) pam_overwrite_n(x, sizeof(x) + PAM_MUST_BE_ARRAY(x))
+
+#define pam_overwrite_object(x) pam_overwrite_n(x, sizeof(*(x)) + PAM_MUST_NOT_BE_ARRAY(x))
+
+static inline void
+pam_drop_response(struct pam_response *reply, int replies)
+{
+ int reply_i;
+
+ for (reply_i = 0; reply_i < replies; ++reply_i) {
+ if (reply[reply_i].resp) {
+ pam_overwrite_string(reply[reply_i].resp);
+ free(reply[reply_i].resp);
+ }
+ }
+ free(reply);
+}
+
+
static inline int
pam_read_passwords(int fd, int npass, char **passwords)
{
@@ -101,7 +161,7 @@ pam_read_passwords(int fd, int npass, char **passwords)
if (npass > 0) {
memcpy(passwords[i], pptr, rbytes);
}
- memset(pptr, '\0', rbytes);
+ pam_overwrite_n(pptr, rbytes);
}
}
offset += rbytes;
@@ -109,7 +169,7 @@ pam_read_passwords(int fd, int npass, char **passwords)
/* clear up */
if (offset > 0 && npass > 0) {
- memset(passwords[i], '\0', offset);
+ pam_overwrite_n(passwords[i], offset);
}
return i;
diff --git a/libpam/include/security/_pam_macros.h b/libpam/include/security/_pam_macros.h
index e891e226..b5129d2a 100644
--- a/libpam/include/security/_pam_macros.h
+++ b/libpam/include/security/_pam_macros.h
@@ -7,6 +7,8 @@
* Organized by Cristian Gafton <gafton@redhat.com>
*/
+#include "_pam_types.h"
+
/* a 'safe' version of strdup */
#include <stdlib.h>
@@ -14,20 +16,22 @@
#define x_strdup(s) ( (s) ? strdup(s):NULL )
-/* Good policy to strike out passwords with some characters not just
- free the memory */
+/*
+ * WARNING: Do NOT use these overwrite macros, as they do not reliable
+ * override the memory.
+ */
-#define _pam_overwrite(x) \
-do { \
- register char *__xx__; \
- if ((__xx__=(x))) \
- while (*__xx__) \
- *__xx__++ = '\0'; \
+#define _pam_overwrite(x) \
+do { \
+ PAM_DEPRECATED register char *__xx__; \
+ if ((__xx__=(x))) \
+ while (*__xx__) \
+ *__xx__++ = '\0'; \
} while (0)
#define _pam_overwrite_n(x,n) \
do { \
- register char *__xx__; \
+ PAM_DEPRECATED register char *__xx__; \
register unsigned int __i__ = 0; \
if ((__xx__=(x))) \
for (;__i__<n; __i__++) \
@@ -46,9 +50,13 @@ do { \
} \
} while (0)
+/*
+ * WARNING: Do NOT use this macro, as it does not reliable override the memory.
+ */
+
#define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \
do { \
- int reply_i; \
+ PAM_DEPRECATED int reply_i; \
\
for (reply_i=0; reply_i<replies; ++reply_i) { \
if (reply[reply_i].resp) { \
diff --git a/libpam/include/security/_pam_types.h b/libpam/include/security/_pam_types.h
index 2abb7ee5..4d6909e8 100644
--- a/libpam/include/security/_pam_types.h
+++ b/libpam/include/security/_pam_types.h
@@ -160,6 +160,12 @@ typedef struct pam_handle pam_handle_t;
# define PAM_FORMAT(params)
#endif
+#if PAM_GNUC_PREREQ(3,1)
+# define PAM_DEPRECATED __attribute__((__deprecated__))
+#else
+# define PAM_DEPRECATED
+#endif
+
#if PAM_GNUC_PREREQ(3,3) && !defined(LIBPAM_COMPILE)
# define PAM_NONNULL(params) __attribute__((__nonnull__ params))
#else
diff --git a/libpam/include/security/pam_modutil.h b/libpam/include/security/pam_modutil.h
index 33f87b90..c2578323 100644
--- a/libpam/include/security/pam_modutil.h
+++ b/libpam/include/security/pam_modutil.h
@@ -147,7 +147,16 @@ pam_modutil_sanitize_helper_fds(pam_handle_t *pamh,
enum pam_modutil_redirect_fd redirect_stdout,
enum pam_modutil_redirect_fd redirect_stderr);
-/* lookup a value for key in login.defs file or similar key value format */
+/**************************************************
+ * @brief Lookup a value for the key in the file (i.e. login.defs or a similar
+ * key-value format file).
+ *
+ * @param[in] pamh The pam handle structure
+ * @param[in] file_name Configuration file name
+ * @param[in] key Lookup key
+ *
+ * @return value, or NULL if key was not found.
+ **************************************************/
extern char * PAM_NONNULL((1,2,3))
pam_modutil_search_key(pam_handle_t *pamh,
const char *file_name,
diff --git a/libpam/pam.pc.in b/libpam/pam.pc.in
index a7cf852d..c3fafe4b 100644
--- a/libpam/pam.pc.in
+++ b/libpam/pam.pc.in
@@ -1,3 +1,5 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
diff --git a/libpam/pam_dynamic.c b/libpam/pam_dynamic.c
index c063083f..81f49b43 100644
--- a/libpam/pam_dynamic.c
+++ b/libpam/pam_dynamic.c
@@ -32,107 +32,25 @@
*/
#include "pam_private.h"
-
-#ifdef PAM_SHL
-# include <dl.h>
-#elif defined(PAM_DYLD)
-# include <mach-o/dyld.h>
-#else /* PAM_SHL */
-# include <dlfcn.h>
-#endif /* PAM_SHL */
-
-#ifndef SHLIB_SYM_PREFIX
-#define SHLIB_SYM_PREFIX "_"
-#endif
+#include <dlfcn.h>
void *_pam_dlopen(const char *mod_path)
{
-#ifdef PAM_SHL
- return shl_load(mod_path, BIND_IMMEDIATE, 0L);
-#elif defined(PAM_DYLD)
- NSObjectFileImage ofile;
- void *ret = NULL;
-
- if (NSCreateObjectFileImageFromFile(mod_path, &ofile) !=
- NSObjectFileImageSuccess )
- return NULL;
-
- ret = NSLinkModule(ofile, mod_path, NSLINKMODULE_OPTION_PRIVATE | NSLINKMODULE_OPTION_BINDNOW);
- NSDestroyObjectFileImage(ofile);
-
- return ret;
-#else
return dlopen(mod_path, RTLD_NOW);
-#endif
}
servicefn _pam_dlsym(void *handle, const char *symbol)
{
-#ifdef PAM_SHL
- char *_symbol = NULL;
- servicefn ret;
-
- if( symbol == NULL )
- return NULL;
-
- if( shl_findsym(&handle, symbol, (short) TYPE_PROCEDURE, &ret ){
- _symbol = malloc( strlen(symbol) + sizeof(SHLIB_SYM_PREFIX) + 1 );
- if( _symbol == NULL )
- return NULL;
- strcpy(_symbol, SHLIB_SYM_PREFIX);
- strcat(_symbol, symbol);
- if( shl_findsym(&handle, _symbol,
- (short) TYPE_PROCEDURE, &ret ){
- free(_symbol);
- return NULL;
- }
- free(_symbol);
- }
-
- return ret;
-
-#elif defined(PAM_DYLD)
- NSSymbol nsSymbol;
- char *_symbol;
-
- if( symbol == NULL )
- return NULL;
- _symbol = malloc( strlen(symbol) + 2 );
- if( _symbol == NULL )
- return NULL;
- strcpy(_symbol, SHLIB_SYM_PREFIX);
- strcat(_symbol, symbol);
-
- nsSymbol = NSLookupSymbolInModule(handle, _symbol);
- if( nsSymbol == NULL )
- return NULL;
- free(_symbol);
-
- return (servicefn)NSAddressOfSymbol(nsSymbol);
-#else
return (servicefn) dlsym(handle, symbol);
-#endif
}
void _pam_dlclose(void *handle)
{
-#ifdef PAM_SHL
- shl_unload(handle);
-#elif defined(PAM_DYLD)
- NSUnLinkModule((NSModule)handle, NSUNLINKMODULE_OPTION_NONE);
-#else
dlclose(handle);
-#endif
-
- return;
}
const char *
_pam_dlerror (void)
{
-#if defined(PAM_SHL) || defined(PAM_DYLD)
- return "unknown";
-#else
return dlerror ();
-#endif
}
diff --git a/libpam/pam_end.c b/libpam/pam_end.c
index 406b1478..9179a915 100644
--- a/libpam/pam_end.c
+++ b/libpam/pam_end.c
@@ -5,6 +5,7 @@
*/
#include "pam_private.h"
+#include "pam_inline.h"
#include <stdlib.h>
@@ -41,34 +42,34 @@ int pam_end(pam_handle_t *pamh, int pam_status)
_pam_drop_env(pamh); /* purge the environment */
- _pam_overwrite(pamh->authtok); /* blank out old token */
+ pam_overwrite_string(pamh->authtok); /* blank out old token */
_pam_drop(pamh->authtok);
- _pam_overwrite(pamh->oldauthtok); /* blank out old token */
+ pam_overwrite_string(pamh->oldauthtok); /* blank out old token */
_pam_drop(pamh->oldauthtok);
- _pam_overwrite(pamh->former.prompt);
+ pam_overwrite_string(pamh->former.prompt);
_pam_drop(pamh->former.prompt); /* drop saved prompt */
- _pam_overwrite(pamh->service_name);
+ pam_overwrite_string(pamh->service_name);
_pam_drop(pamh->service_name);
- _pam_overwrite(pamh->user);
+ pam_overwrite_string(pamh->user);
_pam_drop(pamh->user);
- _pam_overwrite(pamh->confdir);
+ pam_overwrite_string(pamh->confdir);
_pam_drop(pamh->confdir);
- _pam_overwrite(pamh->prompt);
+ pam_overwrite_string(pamh->prompt);
_pam_drop(pamh->prompt); /* prompt for pam_get_user() */
- _pam_overwrite(pamh->tty);
+ pam_overwrite_string(pamh->tty);
_pam_drop(pamh->tty);
- _pam_overwrite(pamh->rhost);
+ pam_overwrite_string(pamh->rhost);
_pam_drop(pamh->rhost);
- _pam_overwrite(pamh->ruser);
+ pam_overwrite_string(pamh->ruser);
_pam_drop(pamh->ruser);
_pam_drop(pamh->pam_conversation);
@@ -76,16 +77,16 @@ int pam_end(pam_handle_t *pamh, int pam_status)
_pam_drop(pamh->former.substates);
- _pam_overwrite(pamh->xdisplay);
+ pam_overwrite_string(pamh->xdisplay);
_pam_drop(pamh->xdisplay);
- _pam_overwrite(pamh->xauth.name);
+ pam_overwrite_string(pamh->xauth.name);
_pam_drop(pamh->xauth.name);
- _pam_overwrite_n(pamh->xauth.data, (unsigned int)pamh->xauth.datalen);
+ pam_overwrite_n(pamh->xauth.data, (unsigned int)pamh->xauth.datalen);
_pam_drop(pamh->xauth.data);
- _pam_overwrite_n((char *)&pamh->xauth, sizeof(pamh->xauth));
+ pam_overwrite_object(&pamh->xauth);
- _pam_overwrite(pamh->authtok_type);
+ pam_overwrite_string(pamh->authtok_type);
_pam_drop(pamh->authtok_type);
/* and finally liberate the memory for the pam_handle structure */
diff --git a/libpam/pam_env.c b/libpam/pam_env.c
index 1c8403d6..bfeb57ab 100644
--- a/libpam/pam_env.c
+++ b/libpam/pam_env.c
@@ -11,6 +11,7 @@
*/
#include "pam_private.h"
+#include "pam_inline.h"
#include <string.h>
#include <stdlib.h>
@@ -100,7 +101,7 @@ void _pam_drop_env(pam_handle_t *pamh)
for (i=pamh->env->requested-1; i-- > 0; ) {
D(("dropping #%3d>%s<", i, pamh->env->list[i]));
- _pam_overwrite(pamh->env->list[i]); /* clean */
+ pam_overwrite_string(pamh->env->list[i]); /* clean */
_pam_drop(pamh->env->list[i]); /* forget */
}
pamh->env->requested = 0;
@@ -227,7 +228,7 @@ int pam_putenv(pam_handle_t *pamh, const char *name_value)
} else { /* replace old */
D(("replacing item: %s\n with: %s"
, pamh->env->list[item], name_value));
- _pam_overwrite(pamh->env->list[item]);
+ pam_overwrite_string(pamh->env->list[item]);
_pam_drop(pamh->env->list[item]);
}
@@ -261,7 +262,7 @@ int pam_putenv(pam_handle_t *pamh, const char *name_value)
*/
D(("deleting: env#%3d:[%s]", item, pamh->env->list[item]));
- _pam_overwrite(pamh->env->list[item]);
+ pam_overwrite_string(pamh->env->list[item]);
_pam_drop(pamh->env->list[item]);
--(pamh->env->requested);
D(("mmove: item[%d]+%d -> item[%d]"
@@ -341,7 +342,7 @@ static char **_copy_env(pam_handle_t *pamh)
/* out of memory */
while (dump[++i]) {
- _pam_overwrite(dump[i]);
+ pam_overwrite_string(dump[i]);
_pam_drop(dump[i]);
}
_pam_drop(dump);
diff --git a/libpam/pam_get_authtok.c b/libpam/pam_get_authtok.c
index 3fa7f7df..3f383339 100644
--- a/libpam/pam_get_authtok.c
+++ b/libpam/pam_get_authtok.c
@@ -33,6 +33,7 @@
#include "config.h"
#include "pam_private.h"
+#include "pam_inline.h"
#include <security/pam_ext.h>
@@ -174,6 +175,10 @@ pam_get_authtok_internal (pam_handle_t *pamh, int item,
(chpass > 1 && resp[1] == NULL))
{
/* We want to abort */
+ pam_overwrite_string (resp[0]);
+ _pam_drop (resp[0]);
+ pam_overwrite_string (resp[1]);
+ _pam_drop (resp[1]);
if (chpass)
pam_error (pamh, _("Password change has been aborted."));
return PAM_AUTHTOK_ERR;
@@ -182,18 +187,18 @@ pam_get_authtok_internal (pam_handle_t *pamh, int item,
if (chpass > 1 && strcmp (resp[0], resp[1]) != 0)
{
pam_error (pamh, MISTYPED_PASS);
- _pam_overwrite (resp[0]);
+ pam_overwrite_string (resp[0]);
_pam_drop (resp[0]);
- _pam_overwrite (resp[1]);
+ pam_overwrite_string (resp[1]);
_pam_drop (resp[1]);
return PAM_TRY_AGAIN;
}
- _pam_overwrite (resp[1]);
+ pam_overwrite_string (resp[1]);
_pam_drop (resp[1]);
retval = pam_set_item (pamh, item, resp[0]);
- _pam_overwrite (resp[0]);
+ pam_overwrite_string (resp[0]);
_pam_drop (resp[0]);
if (retval != PAM_SUCCESS)
return retval;
@@ -263,13 +268,13 @@ pam_get_authtok_verify (pam_handle_t *pamh, const char **authtok,
{
pam_set_item (pamh, PAM_AUTHTOK, NULL);
pam_error (pamh, MISTYPED_PASS);
- _pam_overwrite (resp);
+ pam_overwrite_string (resp);
_pam_drop (resp);
return PAM_TRY_AGAIN;
}
retval = pam_set_item (pamh, PAM_AUTHTOK, resp);
- _pam_overwrite (resp);
+ pam_overwrite_string (resp);
_pam_drop (resp);
if (retval != PAM_SUCCESS)
return retval;
diff --git a/libpam/pam_handlers.c b/libpam/pam_handlers.c
index ffa5e4ae..1f1917b5 100644
--- a/libpam/pam_handlers.c
+++ b/libpam/pam_handlers.c
@@ -281,7 +281,7 @@ _pam_open_config_file(pam_handle_t *pamh
, char **path
, FILE **file)
{
- const char *pamd_dirs[] = { PAM_CONFIG_DF, PAM_CONFIG_DIST_DF
+ const char *const pamd_dirs[] = { PAM_CONFIG_DF, PAM_CONFIG_DIST_DF
#ifdef VENDORDIR
, PAM_CONFIG_DIST2_DF
#endif
@@ -317,10 +317,12 @@ _pam_open_config_file(pam_handle_t *pamh
}
for (i = 0; i < PAM_ARRAY_SIZE(pamd_dirs); i++) {
- if (asprintf (&p, pamd_dirs[i], service) < 0) {
+ DIAG_PUSH_IGNORE_FORMAT_NONLITERAL
+ if (asprintf (&p, pamd_dirs[i], service) < 0) {
pam_syslog(pamh, LOG_CRIT, "asprintf failed");
return PAM_BUF_ERR;
}
+ DIAG_POP_IGNORE_FORMAT_NONLITERAL
D(("opening %s", p));
f = fopen(p, "r");
@@ -889,8 +891,8 @@ int _pam_add_handler(pam_handle_t *pamh
handler_p = &((*handler_p)->next);
}
- if ((*handler_p = malloc(sizeof(struct handler))) == NULL) {
- pam_syslog(pamh, LOG_CRIT, "cannot malloc struct handler #1");
+ if ((*handler_p = calloc(1, sizeof(struct handler))) == NULL) {
+ pam_syslog(pamh, LOG_CRIT, "cannot allocate struct handler #1");
return (PAM_ABORT);
}
@@ -904,8 +906,6 @@ int _pam_add_handler(pam_handle_t *pamh
(*handler_p)->argv = argv; /* not a copy */
if (((*handler_p)->mod_name = extract_modulename(mod_path)) == NULL)
return PAM_ABORT;
- (*handler_p)->grantor = 0;
- (*handler_p)->next = NULL;
/* some of the modules have a second calling function */
if (handler_p2) {
@@ -914,8 +914,8 @@ int _pam_add_handler(pam_handle_t *pamh
handler_p2 = &((*handler_p2)->next);
}
- if ((*handler_p2 = malloc(sizeof(struct handler))) == NULL) {
- pam_syslog(pamh, LOG_CRIT, "cannot malloc struct handler #2");
+ if ((*handler_p2 = calloc(1, sizeof(struct handler))) == NULL) {
+ pam_syslog(pamh, LOG_CRIT, "cannot allocate struct handler #2");
return (PAM_ABORT);
}
@@ -933,13 +933,9 @@ int _pam_add_handler(pam_handle_t *pamh
return (PAM_ABORT);
}
memcpy((*handler_p2)->argv, argv, argvlen);
- } else {
- (*handler_p2)->argv = NULL; /* no arguments */
}
if (((*handler_p2)->mod_name = extract_modulename(mod_path)) == NULL)
return PAM_ABORT;
- (*handler_p2)->grantor = 0;
- (*handler_p2)->next = NULL;
}
D(("_pam_add_handler: returning successfully"));
@@ -1037,7 +1033,7 @@ void _pam_free_handlers_aux(struct handler **hp)
_pam_drop(h->argv); /* This is all allocated in a single chunk */
_pam_drop(h->mod_name);
h = h->next;
- memset(last, 0, sizeof(*last));
+ pam_overwrite_object(last);
free(last);
}
diff --git a/libpam/pam_item.c b/libpam/pam_item.c
index d6af710b..42857da5 100644
--- a/libpam/pam_item.c
+++ b/libpam/pam_item.c
@@ -5,6 +5,7 @@
*/
#include "pam_private.h"
+#include "pam_inline.h"
#include <ctype.h>
#include <stdlib.h>
@@ -79,7 +80,7 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item)
*/
if (__PAM_FROM_MODULE(pamh)) {
if (pamh->authtok != item) {
- _pam_overwrite(pamh->authtok);
+ pam_overwrite_string(pamh->authtok);
TRY_SET(pamh->authtok, item);
}
} else {
@@ -95,7 +96,7 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item)
*/
if (__PAM_FROM_MODULE(pamh)) {
if (pamh->oldauthtok != item) {
- _pam_overwrite(pamh->oldauthtok);
+ pam_overwrite_string(pamh->oldauthtok);
TRY_SET(pamh->oldauthtok, item);
}
} else {
@@ -139,24 +140,23 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item)
if (&pamh->xauth == item)
break;
if (pamh->xauth.namelen) {
- _pam_overwrite(pamh->xauth.name);
+ pam_overwrite_string(pamh->xauth.name);
free(pamh->xauth.name);
}
if (pamh->xauth.datalen) {
- _pam_overwrite_n(pamh->xauth.data,
- (unsigned int) pamh->xauth.datalen);
+ pam_overwrite_n(pamh->xauth.data, (unsigned int) pamh->xauth.datalen);
free(pamh->xauth.data);
}
pamh->xauth = *((const struct pam_xauth_data *) item);
if ((pamh->xauth.name=_pam_strdup(pamh->xauth.name)) == NULL) {
- memset(&pamh->xauth, '\0', sizeof(pamh->xauth));
+ pam_overwrite_object(&pamh->xauth);
return PAM_BUF_ERR;
}
if ((pamh->xauth.data=_pam_memdup(pamh->xauth.data,
pamh->xauth.datalen)) == NULL) {
- _pam_overwrite(pamh->xauth.name);
+ pam_overwrite_string(pamh->xauth.name);
free(pamh->xauth.name);
- memset(&pamh->xauth, '\0', sizeof(pamh->xauth));
+ pam_overwrite_object(&pamh->xauth);
return PAM_BUF_ERR;
}
break;
@@ -330,7 +330,7 @@ int pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt)
/* ok, we can resume where we left off last time */
pamh->former.want_user = PAM_FALSE;
- _pam_overwrite(pamh->former.prompt);
+ pam_overwrite_string(pamh->former.prompt);
_pam_drop(pamh->former.prompt);
}
@@ -388,7 +388,7 @@ int pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt)
* note 'resp' is allocated by the application and is
* correctly free()'d here
*/
- _pam_drop_reply(resp, 1);
+ pam_drop_response(resp, 1);
}
D(("completed"));
diff --git a/libpam/pam_modutil_getlogin.c b/libpam/pam_modutil_getlogin.c
index 04a20fd8..2e7a0116 100644
--- a/libpam/pam_modutil_getlogin.c
+++ b/libpam/pam_modutil_getlogin.c
@@ -10,7 +10,6 @@
#include <stdlib.h>
#include <unistd.h>
-#include <utmp.h>
#define _PAMMODUTIL_GETLOGIN "_pammodutil_getlogin"
@@ -19,62 +18,29 @@ pam_modutil_getlogin(pam_handle_t *pamh)
{
int status;
const void *logname;
- const void *void_curr_tty;
- const char *curr_tty;
char *curr_user;
- struct utmp *ut, line;
status = pam_get_data(pamh, _PAMMODUTIL_GETLOGIN, &logname);
if (status == PAM_SUCCESS) {
return logname;
}
- status = pam_get_item(pamh, PAM_TTY, &void_curr_tty);
- if ((status != PAM_SUCCESS) || (void_curr_tty == NULL))
- curr_tty = ttyname(0);
- else
- curr_tty = (const char*)void_curr_tty;
-
- if (curr_tty == NULL) {
- return NULL;
- }
-
- if (curr_tty[0] == '/') { /* full path */
- const char *t;
- curr_tty++;
- if ((t = strchr(curr_tty, '/')) != NULL) {
- curr_tty = t + 1;
- }
- }
- logname = NULL;
-
- setutent();
- strncpy(line.ut_line, curr_tty, sizeof(line.ut_line));
-
- if ((ut = getutline(&line)) == NULL) {
- goto clean_up_and_go_home;
+ logname = getlogin();
+ if (logname == NULL) {
+ return NULL;
}
- curr_user = calloc(sizeof(line.ut_user)+1, 1);
+ curr_user = strdup(logname);
if (curr_user == NULL) {
- goto clean_up_and_go_home;
+ return NULL;
}
- strncpy(curr_user, ut->ut_user, sizeof(ut->ut_user));
- /* calloc already zeroed the memory */
-
status = pam_set_data(pamh, _PAMMODUTIL_GETLOGIN, curr_user,
pam_modutil_cleanup);
if (status != PAM_SUCCESS) {
- free(curr_user);
- goto clean_up_and_go_home;
+ free(curr_user);
+ return NULL;
}
- logname = curr_user;
-
-clean_up_and_go_home:
-
- endutent();
-
- return logname;
+ return curr_user;
}
diff --git a/libpam/pam_vprompt.c b/libpam/pam_vprompt.c
index c53079b5..8c9d63d5 100644
--- a/libpam/pam_vprompt.c
+++ b/libpam/pam_vprompt.c
@@ -40,10 +40,10 @@
#include <errno.h>
#include <security/pam_modules.h>
-#include <security/_pam_macros.h>
#include <security/pam_ext.h>
#include "pam_private.h"
+#include "pam_inline.h"
int
pam_vprompt (pam_handle_t *pamh, int style, char **response,
@@ -88,10 +88,10 @@ pam_vprompt (pam_handle_t *pamh, int style, char **response,
*response = pam_resp == NULL ? NULL : pam_resp->resp;
else if (pam_resp && pam_resp->resp)
{
- _pam_overwrite (pam_resp->resp);
+ pam_overwrite_string (pam_resp->resp);
_pam_drop (pam_resp->resp);
}
- _pam_overwrite (msgbuf);
+ pam_overwrite_string (msgbuf);
_pam_drop (pam_resp);
free (msgbuf);
if (retval != PAM_SUCCESS)
diff --git a/libpam_misc/Makefile.in b/libpam_misc/Makefile.in
index 9ce0691e..1629e493 100644
--- a/libpam_misc/Makefile.in
+++ b/libpam_misc/Makefile.in
@@ -253,6 +253,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -265,11 +266,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -301,12 +304,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -329,6 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -339,12 +345,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/libpam_misc/help_env.c b/libpam_misc/help_env.c
index 601c5f41..b01c9f71 100644
--- a/libpam_misc/help_env.c
+++ b/libpam_misc/help_env.c
@@ -11,6 +11,7 @@
#include <stdio.h>
#include <string.h>
#include <security/pam_misc.h>
+#include "pam_inline.h"
/*
* This function should be used to carefully dispose of the copied
@@ -25,7 +26,7 @@ char **pam_misc_drop_env(char **dump)
for (i=0; dump[i] != NULL; ++i) {
D(("dump[%d]=`%s'", i, dump[i]));
- _pam_overwrite(dump[i]);
+ pam_overwrite_string(dump[i]);
_pam_drop(dump[i]);
}
_pam_drop(dump);
@@ -77,7 +78,7 @@ int pam_misc_setenv(pam_handle_t *pamh, const char *name
if (asprintf(&tmp, "%s=%s", name, value) >= 0) {
D(("pam_putt()ing: %s", tmp));
retval = pam_putenv(pamh, tmp);
- _pam_overwrite(tmp); /* purge */
+ pam_overwrite_string(tmp); /* purge */
_pam_drop(tmp); /* forget */
} else {
D(("malloc failure"));
diff --git a/libpam_misc/misc_conv.c b/libpam_misc/misc_conv.c
index 908ee890..dbcd6aec 100644
--- a/libpam_misc/misc_conv.c
+++ b/libpam_misc/misc_conv.c
@@ -17,6 +17,7 @@
#include <security/pam_appl.h>
#include <security/pam_misc.h>
+#include "pam_inline.h"
#define INPUTSIZE PAM_MISC_CONV_BUFSIZE /* maximum length of input+1 */
#define CONV_ECHO_ON 1 /* types of echo state */
@@ -185,7 +186,7 @@ static int read_string(int echo, const char *prompt, char **retstr)
int rv;
if ((rv=read(STDIN_FILENO, line+nc, 1)) != 1) {
if (rv < 0) {
- _pam_overwrite_n(line, (unsigned int) nc);
+ pam_overwrite_n(line, (unsigned int) nc);
nc = rv;
}
break;
@@ -213,7 +214,7 @@ static int read_string(int echo, const char *prompt, char **retstr)
line[nc] = '\0';
}
*retstr = strdup(line);
- _pam_overwrite(line);
+ pam_overwrite_array(line);
if (!*retstr) {
D(("no memory for response string"));
nc = -1;
@@ -246,7 +247,7 @@ static int read_string(int echo, const char *prompt, char **retstr)
D(("the timer appears to have expired"));
*retstr = NULL;
- _pam_overwrite_n(line, sizeof(line));
+ pam_overwrite_array(line);
cleanexit:
@@ -376,7 +377,7 @@ failed_conversation:
switch (msgm[count]->msg_style) {
case PAM_PROMPT_ECHO_ON:
case PAM_PROMPT_ECHO_OFF:
- _pam_overwrite(reply[count].resp);
+ pam_overwrite_string(reply[count].resp);
free(reply[count].resp);
break;
case PAM_BINARY_PROMPT:
diff --git a/libpam_misc/pam_misc.pc.in b/libpam_misc/pam_misc.pc.in
index 0c8898cd..c3e03c4f 100644
--- a/libpam_misc/pam_misc.pc.in
+++ b/libpam_misc/pam_misc.pc.in
@@ -1,3 +1,5 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
diff --git a/libpamc/Makefile.in b/libpamc/Makefile.in
index 424c175a..c99f86cd 100644
--- a/libpamc/Makefile.in
+++ b/libpamc/Makefile.in
@@ -294,6 +294,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -306,11 +307,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -342,12 +345,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -370,6 +375,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -380,12 +386,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/libpamc/include/security/pam_client.h b/libpamc/include/security/pam_client.h
index 41f83da6..0fc2cf44 100644
--- a/libpamc/include/security/pam_client.h
+++ b/libpamc/include/security/pam_client.h
@@ -24,7 +24,8 @@ extern "C" {
typedef struct pamc_handle_s *pamc_handle_t;
/* binary prompt structure pointer */
-typedef struct { uint32_t length; uint8_t control; } *pamc_bp_t;
+typedef struct { uint32_t length; uint8_t control; }
+ __attribute__ ((__packed__)) *pamc_bp_t;
/*
* functions provided by libpamc
diff --git a/libpamc/pamc.pc.in b/libpamc/pamc.pc.in
index 25a63854..2d841ebb 100644
--- a/libpamc/pamc.pc.in
+++ b/libpamc/pamc.pc.in
@@ -1,3 +1,5 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
diff --git a/libpamc/pamc_client.c b/libpamc/pamc_client.c
index 175f424d..b7be8219 100644
--- a/libpamc/pamc_client.c
+++ b/libpamc/pamc_client.c
@@ -7,6 +7,7 @@
*/
#include "libpamc.h"
+#include "pam_inline.h"
/*
* liberate path list
@@ -145,7 +146,7 @@ static int __pamc_shutdown_agents(pamc_handle_t pch)
}
pid = this->pid = 0;
- memset(this->id, 0, this->id_length);
+ pam_overwrite_n(this->id, this->id_length);
free(this->id);
this->id = NULL;
this->id_length = 0;
diff --git a/libpamc/pamc_converse.c b/libpamc/pamc_converse.c
index f8f60edf..4da11cf0 100644
--- a/libpamc/pamc_converse.c
+++ b/libpamc/pamc_converse.c
@@ -7,6 +7,7 @@
*/
#include "libpamc.h"
+#include "pam_inline.h"
/*
* select agent
@@ -157,7 +158,7 @@ int pamc_converse(pamc_handle_t pch, pamc_bp_t *prompt_p)
size = PAM_BP_SIZE(raw);
control = PAM_BP_RCONTROL(raw);
- memset(raw, 0, sizeof(raw));
+ pam_overwrite_array(raw);
D(("agent replied with prompt of size %d and control %u",
size, control));
diff --git a/libpamc/pamc_load.c b/libpamc/pamc_load.c
index 24a65dfd..b4fa78b3 100644
--- a/libpamc/pamc_load.c
+++ b/libpamc/pamc_load.c
@@ -7,6 +7,7 @@
*/
#include "libpamc.h"
+#include "pam_inline.h"
static int __pamc_exec_agent(pamc_handle_t pch, pamc_agent_t *agent)
{
@@ -143,7 +144,7 @@ close_the_agent:
close(to_agent[1]);
free_and_return:
- memset(full_path, 0, reset_length);
+ pam_overwrite_n(full_path, reset_length);
free(full_path);
D(("returning %d", return_code));
@@ -301,10 +302,10 @@ int pamc_load(pamc_handle_t pch, const char *agent_id)
fail_free_agent_id:
- memset(agent->id, 0, agent->id_length);
+ pam_overwrite_n(agent->id, agent->id_length);
free(agent->id);
- memset(agent, 0, sizeof(*agent));
+ pam_overwrite_object(agent);
fail_free_agent:
diff --git a/libpamc/test/Makefile.in b/libpamc/test/Makefile.in
index e2f360bd..bedb16b7 100644
--- a/libpamc/test/Makefile.in
+++ b/libpamc/test/Makefile.in
@@ -162,6 +162,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -174,11 +175,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -210,12 +213,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -238,6 +243,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -248,12 +254,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 4e8b0e90..4fa026c1 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1,6 +1,7 @@
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
-# Copyright (C) 1996-2001, 2003-2019 Free Software Foundation, Inc.
+# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
+# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is free software; the Free Software Foundation gives
@@ -31,7 +32,7 @@ m4_define([_LT_COPYING], [dnl
# along with this program. If not, see <http://www.gnu.org/licenses/>.
])
-# serial 58 LT_INIT
+# serial 59 LT_INIT
# LT_PREREQ(VERSION)
@@ -181,6 +182,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_DECL_FILECMD])dnl
m4_require([_LT_CHECK_MAGIC_METHOD])dnl
m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
@@ -778,7 +780,7 @@ _LT_EOF
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" \
+ $SED '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
@@ -1067,17 +1069,12 @@ _LT_EOF
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*) # darwin 5.x on
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- 10.[[012]][[,.]]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
esac
@@ -1126,12 +1123,12 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
output_verbose_link_cmd=func_echo_all
_LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
_LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
m4_if([$1], [CXX],
[ if test yes != "$lt_cv_apple_cc_single_mod"; then
_LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
- _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
fi
],[])
else
@@ -1245,7 +1242,8 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
# _LT_WITH_SYSROOT
# ----------------
AC_DEFUN([_LT_WITH_SYSROOT],
-[AC_MSG_CHECKING([for sysroot])
+[m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([for sysroot])
AC_ARG_WITH([sysroot],
[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
[Search for dependent libraries within DIR (or the compiler's sysroot
@@ -1262,7 +1260,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@@ -1292,7 +1290,7 @@ ia64-*-hpux*)
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@@ -1309,7 +1307,7 @@ ia64-*-hpux*)
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
if test yes = "$lt_cv_prog_gnu_ld"; then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@@ -1321,7 +1319,7 @@ ia64-*-hpux*)
;;
esac
else
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -1343,7 +1341,7 @@ mips64*-*linux*)
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
emul=elf
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@@ -1352,7 +1350,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@@ -1360,7 +1358,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*N32*)
libsuff=n32
emul="${emul}n32"
@@ -1372,6 +1370,7 @@ mips64*-*linux*)
;;
aarch64*-*linux*|x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+loongarch64*-*linux*| \
riscv64*-*linux*|s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out what ABI is being produced by ac_compile, and set linker
# options accordingly. Note that the listed cases only cover the
@@ -1381,7 +1380,7 @@ riscv64*-*linux*|s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# not appear in the list.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
@@ -1392,7 +1391,7 @@ riscv64*-*linux*|s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf32_x86_64"
;;
x86_64-*linux*)
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@@ -1461,7 +1460,7 @@ riscv64*-*linux*|s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@@ -1734,7 +1733,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=8192;
;;
- bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -1777,7 +1776,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@@ -2578,7 +2577,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
m4_if([$1], [],[
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
;;
@@ -2588,7 +2587,7 @@ m4_if([$1], [],[
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
@@ -2614,7 +2613,7 @@ m4_if([$1], [],[
done
IFS=$lt_save_ifs
# Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@@ -2684,7 +2683,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -3483,7 +3482,7 @@ beos*)
bsdi[[45]]*)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_cmd='$FILECMD -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@@ -3517,14 +3516,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@@ -3538,7 +3537,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
case $host_cpu in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
@@ -3585,7 +3584,7 @@ netbsd*)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@@ -3712,13 +3711,13 @@ else
mingw*) lt_bad_file=conftest.nm/nofile ;;
*) lt_bad_file=/dev/null ;;
esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
*$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
*)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@@ -3744,7 +3743,7 @@ else
# Let the user override the test.
else
AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@@ -3984,7 +3983,7 @@ esac
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
# Adjust the below global symbol transforms to fixup imported variables.
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
@@ -4002,20 +4001,20 @@ fi
# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
$lt_cdecl_hook\
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
$lt_c_name_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
# Transform an extracted symbol line into symbol name with lib prefix and
# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
$lt_c_name_lib_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
@@ -4057,9 +4056,9 @@ for ac_symprfx in "" "_"; do
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
" ' prfx=^$ac_symprfx]"
else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
# Check to see that the pipe works correctly.
pipe_works=no
@@ -4346,7 +4345,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
@@ -4429,7 +4428,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -4765,7 +4764,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -5079,7 +5078,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
_LT_TAGVAR(whole_archive_flag_spec, $1)=
fi
supports_anon_versioning=no
- case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+ case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
*GNU\ gold*) supports_anon_versioning=yes ;;
*\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -5206,7 +5205,7 @@ _LT_EOF
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@@ -5249,7 +5248,7 @@ _LT_EOF
_LT_TAGVAR(compiler_needs_object, $1)=yes
;;
esac
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C 5.9
_LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
_LT_TAGVAR(compiler_needs_object, $1)=yes
@@ -5261,7 +5260,7 @@ _LT_EOF
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
if test -r $libname-altlinux.ver; then cp $libname-altlinux.ver $output_objdir/$libname.ver; fi~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
@@ -5278,7 +5277,7 @@ _LT_EOF
_LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
@@ -5687,7 +5686,7 @@ _LT_EOF
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_direct, $1)=yes
@@ -6807,7 +6806,7 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
;;
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -6944,7 +6943,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
irix5* | irix6*)
case $cc_basename in
@@ -7084,7 +7083,7 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
@@ -7092,13 +7091,13 @@ if test yes != "$_lt_caught_CXX_error"; then
*)
if test "x$supports_anon_versioning" = xyes; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
if test -r $libname-altlinux.ver; then cp $libname-altlinux.ver $output_objdir/$libname.ver; fi~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
fi
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@@ -8244,6 +8243,14 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program])
AC_SUBST([DLLTOOL])
])
+# _LT_DECL_FILECMD
+# ----------------
+# Check for a file(cmd) program that can be used to detect file type and magic
+m4_defun([_LT_DECL_FILECMD],
+[AC_CHECK_TOOL([FILECMD], [file], [:])
+_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
+])# _LD_DECL_FILECMD
+
# _LT_DECL_SED
# ------------
# Check for a fully-functional sed program, that truncates
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index c1664256..b0b5e9c2 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -1,7 +1,7 @@
# Helper functions for option handling. -*- Autoconf -*-
#
-# Copyright (C) 2004-2005, 2007-2009, 2011-2019 Free Software
-# Foundation, Inc.
+# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
+# Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
index e652d5a1..902508bd 100644
--- a/m4/ltsugar.m4
+++ b/m4/ltsugar.m4
@@ -1,6 +1,6 @@
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
#
-# Copyright (C) 2004-2005, 2007-2008, 2011-2019 Free Software
+# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software
# Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index 729898e2..7b77de25 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -1,6 +1,7 @@
# ltversion.m4 -- version numbers -*- Autoconf -*-
#
-# Copyright (C) 2004, 2011-2019 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
+# Inc.
# Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
@@ -12,12 +13,12 @@
# serial 4223 ltversion.m4
# This file is part of GNU Libtool
-m4_define([LT_PACKAGE_VERSION], [2.4.6])
-m4_define([LT_PACKAGE_REVISION], [2.4.6])
+m4_define([LT_PACKAGE_VERSION], [2.4.7])
+m4_define([LT_PACKAGE_REVISION], [2.4.7])
AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.6'
-macro_revision='2.4.6'
+[macro_version='2.4.7'
+macro_revision='2.4.7'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
index 6c846b8f..0f7a8759 100644
--- a/m4/lt~obsolete.m4
+++ b/m4/lt~obsolete.m4
@@ -1,7 +1,7 @@
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
-# Copyright (C) 2004-2005, 2007, 2009, 2011-2019 Free Software
-# Foundation, Inc.
+# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
+# Software Foundation, Inc.
# Written by Scott James Remnant, 2004.
#
# This file is free software; the Free Software Foundation gives
diff --git a/m4/warn_lang_flags.m4 b/m4/warn_lang_flags.m4
index 7c4871d6..a4d6022f 100644
--- a/m4/warn_lang_flags.m4
+++ b/m4/warn_lang_flags.m4
@@ -8,17 +8,22 @@ gl_WARN_ADD([-Wcast-align])
gl_WARN_ADD([-Wcast-align=strict])
gl_WARN_ADD([-Wcast-qual])
gl_WARN_ADD([-Wdeprecated])
+gl_WARN_ADD([-Wformat=2])
+gl_WARN_ADD([-Winit-self])
gl_WARN_ADD([-Winline])
gl_WARN_ADD([-Wmain])
gl_WARN_ADD([-Wmissing-declarations])
gl_WARN_ADD([-Wmissing-format-attribute])
gl_WARN_ADD([-Wmissing-prototypes])
+gl_WARN_ADD([-Wnull-dereference])
gl_WARN_ADD([-Wp64])
gl_WARN_ADD([-Wpointer-arith])
gl_WARN_ADD([-Wreturn-type])
gl_WARN_ADD([-Wshadow])
gl_WARN_ADD([-Wstrict-prototypes])
+gl_WARN_ADD([-Wundef])
gl_WARN_ADD([-Wuninitialized])
+gl_WARN_ADD([-Wunused])
gl_WARN_ADD([-Wwrite-strings])
AC_ARG_ENABLE([Werror],
[AS_HELP_STRING([--enable-Werror], [turn on -Werror compiler option])],
diff --git a/modules/Makefile.in b/modules/Makefile.in
index 98436b00..9ac4d669 100644
--- a/modules/Makefile.in
+++ b/modules/Makefile.in
@@ -230,6 +230,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -242,11 +243,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -278,12 +281,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -306,6 +311,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -316,12 +322,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/modules/pam_access/Makefile.am b/modules/pam_access/Makefile.am
index 5723dd59..8af2852a 100644
--- a/modules/pam_access/Makefile.am
+++ b/modules/pam_access/Makefile.am
@@ -15,11 +15,14 @@ dist_check_SCRIPTS = tst-pam_access
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DPAM_ACCESS_CONFIG=\"$(SCONFIGDIR)/access.conf\" \
- -DACCESS_CONF_GLOB=\"$(SCONFIGDIR)/access.d/*.conf\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
diff --git a/modules/pam_access/Makefile.in b/modules/pam_access/Makefile.in
index 6f9abf45..9dadd2d3 100644
--- a/modules/pam_access/Makefile.in
+++ b/modules/pam_access/Makefile.in
@@ -431,6 +431,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -443,11 +444,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -479,12 +482,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -507,6 +512,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -517,12 +523,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -596,10 +606,10 @@ XMLS = README.xml access.conf.5.xml pam_access.8.xml
dist_check_SCRIPTS = tst-pam_access
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DPAM_ACCESS_CONFIG=\"$(SCONFIGDIR)/access.conf\" \
- -DACCESS_CONF_GLOB=\"$(SCONFIGDIR)/access.d/*.conf\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
securelib_LTLIBRARIES = pam_access.la
diff --git a/modules/pam_access/README b/modules/pam_access/README
index 26aad33e..891e7688 100644
--- a/modules/pam_access/README
+++ b/modules/pam_access/README
@@ -18,6 +18,20 @@ of parsing. This means that once a pattern is matched in some file no further
files are parsed. If a config file is explicitly specified with the accessfile
option the files in the above directory are not parsed.
+By default rules for access management are taken from config file /etc/security
+/access.conf or, if that one is not present, the file %vendordir%/security/
+access.conf. These settings can be overruled by setting in a config file
+explicitly specified with the accessfile option. Then individual *.conf files
+from the /etc/security/access.d/ and %vendordir%/security/access.d directories
+are read. If /etc/security/access.d/@filename@.conf exists, then %vendordir%/
+security/access.d/@filename@.conf will not be used. All access.d/*.conf files
+are sorted by their @filename@.conf in lexicographic order regardless of which
+of the directories they reside in. The effect of the individual files is the
+same as if all the files were concatenated together in the order of parsing.
+This means that once a pattern is matched in some file no further files are
+parsed. If a config file is explicitly specified with the accessfile option the
+files in the above directories are not parsed.
+
If Linux PAM is compiled with audit support the module will report when it
denies access based on origin (host, tty, etc.).
diff --git a/modules/pam_access/README.xml b/modules/pam_access/README.xml
index 8c7d078b..408aed00 100644
--- a/modules/pam_access/README.xml
+++ b/modules/pam_access/README.xml
@@ -1,39 +1,23 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_access.8.xml">
--->
-<!--
-<!ENTITY accessconf SYSTEM "access.conf.5.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_access.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_access-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_access.8.xml" xpointer='xpointer(id("pam_access-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_access.8.xml" xpointer='xpointer(id("pam_access-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_access.8.xml" xpointer='xpointer(id("pam_access-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="access.conf.5.xml" xpointer='xpointer(//refsect1[@id = "access.conf-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="access.conf.5.xml" xpointer='xpointer(id("access.conf-examples")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_access/access.conf.5 b/modules/pam_access/access.conf.5
index 3204aedf..b45e914e 100644
--- a/modules/pam_access/access.conf.5
+++ b/modules/pam_access/access.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: access.conf
.\" Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: [FIXME: source]
.\" Language: English
.\"
-.TH "ACCESS\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "ACCESS\&.CONF" "5" "05/07/2023" "[FIXME: source]" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_access/access.conf.5.xml b/modules/pam_access/access.conf.5.xml
index 8fdbc31d..ff1cb223 100644
--- a/modules/pam_access/access.conf.5.xml
+++ b/modules/pam_access/access.conf.5.xml
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-
-<refentry id="access.conf">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="access.conf">
<refmeta>
<refentrytitle>access.conf</refentrytitle>
@@ -16,7 +12,7 @@
</refnamediv>
- <refsect1 id='access.conf-description'>
+ <refsect1 xml:id="access.conf-description">
<title>DESCRIPTION</title>
<para>
The <filename>/etc/security/access.conf</filename> file specifies
@@ -126,7 +122,7 @@
</refsect1>
- <refsect1 id="access.conf-examples">
+ <refsect1 xml:id="access.conf-examples">
<title>EXAMPLES</title>
<para>
These are some example lines which might be specified in
@@ -135,7 +131,7 @@
<para>
User <emphasis>root</emphasis> should be allowed to get access via
- <emphasis>cron</emphasis>, X11 terminal <emphasis remap='I'>:0</emphasis>,
+ <emphasis>cron</emphasis>, X11 terminal <emphasis remap="I">:0</emphasis>,
<emphasis>tty1</emphasis>, ..., <emphasis>tty5</emphasis>,
<emphasis>tty6</emphasis>.
</para>
@@ -216,7 +212,7 @@
</refsect1>
- <refsect1 id="access.conf-notes">
+ <refsect1 xml:id="access.conf-notes">
<title>NOTES</title>
<para>
The default separators of list items in a field are space, ',', and tabulator
@@ -228,7 +224,7 @@
</para>
</refsect1>
- <refsect1 id="access.conf-see_also">
+ <refsect1 xml:id="access.conf-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry><refentrytitle>pam_access</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
@@ -237,7 +233,7 @@
</para>
</refsect1>
- <refsect1 id="access.conf-author">
+ <refsect1 xml:id="access.conf-author">
<title>AUTHORS</title>
<para>
Original <citerefentry><refentrytitle>login.access</refentrytitle><manvolnum>5</manvolnum></citerefentry>
@@ -250,4 +246,4 @@
introduced by Mike Becher &lt;mike.becher@lrz-muenchen.de&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_access/pam_access.8 b/modules/pam_access/pam_access.8
index 92de516d..c9f9d402 100644
--- a/modules/pam_access/pam_access.8
+++ b/modules/pam_access/pam_access.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_access
.\" Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_ACCESS" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_ACCESS" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -51,25 +51,25 @@ option the files in the above directory are not parsed\&.
If Linux PAM is compiled with audit support the module will report when it denies access based on origin (host, tty, etc\&.)\&.
.SH "OPTIONS"
.PP
-\fBaccessfile=\fR\fB\fI/path/to/access\&.conf\fR\fR
+accessfile=/path/to/access\&.conf
.RS 4
Indicate an alternative
access\&.conf
style configuration file to override the default\&. This can be useful when different services need different access lists\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
A lot of debug information is printed with
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBnoaudit\fR
+noaudit
.RS 4
Do not report logins from disallowed hosts and ttys to the audit subsystem\&.
.RE
.PP
-\fBfieldsep=\fR\fB\fIseparators\fR\fR
+fieldsep=separators
.RS 4
This option modifies the field separator character that pam_access will recognize when parsing the access configuration file\&. For example:
\fBfieldsep=|\fR
@@ -78,14 +78,14 @@ will cause the default `:\*(Aq character to be treated as part of a field value
item is likely to be of the form "hostname:0" which includes a `:\*(Aq character in its value\&. But you should not need this\&.
.RE
.PP
-\fBlistsep=\fR\fB\fIseparators\fR\fR
+listsep=separators
.RS 4
This option modifies the list separator character that pam_access will recognize when parsing the access configuration file\&. For example:
\fBlistsep=,\fR
will cause the default ` \*(Aq (space) and `\et\*(Aq (tab) characters to be treated as part of a list element value and `,\*(Aq becomes the only list element separator\&. Doing this may be useful on a system with group information obtained from a Windows domain, where the default built\-in groups "Domain Users", "Domain Admins" contain a space\&.
.RE
.PP
-\fBnodefgroup\fR
+nodefgroup
.RS 4
User tokens which are not enclosed in parentheses will not be matched against the group database\&. The backwards compatible default is to try the group database match even for tokens not enclosed in parentheses\&.
.RE
diff --git a/modules/pam_access/pam_access.8.xml b/modules/pam_access/pam_access.8.xml
index 9a6556cc..010e749e 100644
--- a/modules/pam_access/pam_access.8.xml
+++ b/modules/pam_access/pam_access.8.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_access'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_access">
<refmeta>
<refentrytitle>pam_access</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_access-name'>
+ <refnamediv xml:id="pam_access-name">
<refname>pam_access</refname>
<refpurpose>
PAM module for logdaemon style login access control
@@ -20,31 +17,31 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_access-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_access-cmdsynopsis" sepchar=" ">
<command>pam_access.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
nodefgroup
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
noaudit
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
accessfile=<replaceable>file</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
fieldsep=<replaceable>sep</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
listsep=<replaceable>sep</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_access-description">
+ <refsect1 xml:id="pam_access-description">
<title>DESCRIPTION</title>
<para>
The pam_access PAM module is mainly for access management.
@@ -53,7 +50,7 @@
or on terminal line names, X <varname>$DISPLAY</varname> values,
or PAM service names in case of non-networked logins.
</para>
- <para>
+ <para condition="without_vendordir">
By default rules for access management are taken from config file
<filename>/etc/security/access.conf</filename> if you don't specify
another file.
@@ -66,19 +63,39 @@
If a config file is explicitly specified with the <option>accessfile</option>
option the files in the above directory are not parsed.
</para>
+ <para condition="with_vendordir">
+ By default rules for access management are taken from config file
+ <filename>/etc/security/access.conf</filename> or, if that one is not
+ present, the file <filename>%vendordir%/security/access.conf</filename>.
+ These settings can be overruled by setting in a config file explicitly
+ specified with the <option>accessfile</option> option.
+ Then individual <filename>*.conf</filename> files from the
+ <filename>/etc/security/access.d/</filename> and
+ <filename>%vendordir%/security/access.d</filename> directories are read.
+ If <filename>/etc/security/access.d/@filename@.conf</filename> exists, then
+ <filename>%vendordir%/security/access.d/@filename@.conf</filename> will not be used.
+ All <filename>access.d/*.conf</filename> files are sorted by their
+ <filename>@filename@.conf</filename> in lexicographic order regardless of which
+ of the directories they reside in.
+ The effect of the individual files is the same as if all the files were
+ concatenated together in the order of parsing. This means that once
+ a pattern is matched in some file no further files are parsed.
+ If a config file is explicitly specified with the <option>accessfile</option>
+ option the files in the above directories are not parsed.
+ </para>
<para>
If Linux PAM is compiled with audit support the module will report
when it denies access based on origin (host, tty, etc.).
</para>
</refsect1>
- <refsect1 id="pam_access-options">
+ <refsect1 xml:id="pam_access-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>accessfile=<replaceable>/path/to/access.conf</replaceable></option>
+ accessfile=/path/to/access.conf
</term>
<listitem>
<para>
@@ -91,7 +108,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -103,7 +120,7 @@
<varlistentry>
<term>
- <option>noaudit</option>
+ noaudit
</term>
<listitem>
<para>
@@ -114,19 +131,19 @@
<varlistentry>
<term>
- <option>fieldsep=<replaceable>separators</replaceable></option>
+ fieldsep=separators
</term>
<listitem>
<para>
This option modifies the field separator character that
pam_access will recognize when parsing the access
configuration file. For example:
- <emphasis remap='B'>fieldsep=|</emphasis> will cause the
+ <emphasis remap="B">fieldsep=|</emphasis> will cause the
default `:' character to be treated as part of a field value
and `|' becomes the field separator. Doing this may be
useful in conjunction with a system that wants to use
pam_access with X based applications, since the
- <emphasis remap='B'>PAM_TTY</emphasis> item is likely to be
+ <emphasis remap="B">PAM_TTY</emphasis> item is likely to be
of the form "hostname:0" which includes a `:' character in
its value. But you should not need this.
</para>
@@ -135,14 +152,14 @@
<varlistentry>
<term>
- <option>listsep=<replaceable>separators</replaceable></option>
+ listsep=separators
</term>
<listitem>
<para>
This option modifies the list separator character that
pam_access will recognize when parsing the access
configuration file. For example:
- <emphasis remap='B'>listsep=,</emphasis> will cause the
+ <emphasis remap="B">listsep=,</emphasis> will cause the
default ` ' (space) and `\t' (tab) characters to be treated
as part of a list element value and `,' becomes the only
list element separator. Doing this may be useful on a system
@@ -155,7 +172,7 @@
<varlistentry>
<term>
- <option>nodefgroup</option>
+ nodefgroup
</term>
<listitem>
<para>
@@ -170,7 +187,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_access-types">
+ <refsect1 xml:id="pam_access-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>auth</option>, <option>account</option>,
@@ -178,7 +195,7 @@
</para>
</refsect1>
- <refsect1 id="pam_access-return_values">
+ <refsect1 xml:id="pam_access-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -224,19 +241,26 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_access-files">
+ <refsect1 xml:id="pam_access-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/access.conf</filename></term>
+ <term>/etc/security/access.conf</term>
<listitem>
<para>Default configuration file</para>
</listitem>
</varlistentry>
+ <varlistentry condition="with_vendordir">
+ <term>%vendordir%/security/access.conf</term>
+ <listitem>
+ <para>Default configuration file if
+ <filename>/etc/security/access.conf</filename> does not exist.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
- <refsect1 id="pam_access-see_also">
+ <refsect1 xml:id="pam_access-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -251,7 +275,7 @@
</para>
</refsect1>
- <refsect1 id="pam_access-authors">
+ <refsect1 xml:id="pam_access-authors">
<title>AUTHORS</title>
<para>
The logdaemon style login access control scheme was designed and implemented by
@@ -262,4 +286,4 @@
was developed and provided by Mike Becher &lt;mike.becher@lrz-muenchen.de&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_access/pam_access.c b/modules/pam_access/pam_access.c
index 277192b9..f70b7e49 100644
--- a/modules/pam_access/pam_access.c
+++ b/modules/pam_access/pam_access.c
@@ -56,6 +56,13 @@
#include "pam_cc_compat.h"
#include "pam_inline.h"
+#define PAM_ACCESS_CONFIG (SCONFIGDIR "/access.conf")
+#define ACCESS_CONF_GLOB (SCONFIGDIR "/access.d/*.conf")
+#ifdef VENDOR_SCONFIGDIR
+#define VENDOR_PAM_ACCESS_CONFIG (VENDOR_SCONFIGDIR "/access.conf")
+#define VENDOR_ACCESS_CONF_GLOB (VENDOR_SCONFIGDIR "/access.d/*.conf")
+#endif
+
/* login_access.c from logdaemon-5.6 with several changes by A.Nogin: */
/*
@@ -151,6 +158,95 @@ parse_args(pam_handle_t *pamh, struct login_info *loginfo,
return 1; /* OK */
}
+/* --- evaluting all files in VENDORDIR/security/access.d and /etc/security/access.d --- */
+static const char *base_name(const char *path)
+{
+ const char *base = strrchr(path, '/');
+ return base ? base+1 : path;
+}
+
+static int
+compare_filename(const void *a, const void *b)
+{
+ return strcmp(base_name(* (const char * const *) a),
+ base_name(* (const char * const *) b));
+}
+
+/* Evaluating a list of files which have to be parsed in the right order:
+ *
+ * - If etc/security/access.d/@filename@.conf exists, then
+ * %vendordir%/security/access.d/@filename@.conf should not be used.
+ * - All files in both access.d directories are sorted by their @filename@.conf in
+ * lexicographic order regardless of which of the directories they reside in. */
+static char **read_access_dir(pam_handle_t *pamh)
+{
+ glob_t globbuf;
+ size_t i=0;
+ int glob_rv = glob(ACCESS_CONF_GLOB, GLOB_ERR | GLOB_NOSORT, NULL, &globbuf);
+ char **file_list;
+ size_t file_list_size = glob_rv == 0 ? globbuf.gl_pathc : 0;
+
+#ifdef VENDOR_ACCESS_CONF_GLOB
+ glob_t globbuf_vendor;
+ int glob_rv_vendor = glob(VENDOR_ACCESS_CONF_GLOB, GLOB_ERR | GLOB_NOSORT, NULL, &globbuf_vendor);
+ if (glob_rv_vendor == 0)
+ file_list_size += globbuf_vendor.gl_pathc;
+#endif
+ file_list = malloc((file_list_size + 1) * sizeof(char*));
+ if (file_list == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory for file list: %m");
+#ifdef VENDOR_ACCESS_CONF_GLOB
+ if (glob_rv_vendor == 0)
+ globfree(&globbuf_vendor);
+#endif
+ if (glob_rv == 0)
+ globfree(&globbuf);
+ return NULL;
+ }
+
+ if (glob_rv == 0) {
+ for (i = 0; i < globbuf.gl_pathc; i++) {
+ file_list[i] = strdup(globbuf.gl_pathv[i]);
+ if (file_list[i] == NULL) {
+ pam_syslog(pamh, LOG_ERR, "strdup failed: %m");
+ break;
+ }
+ }
+ }
+#ifdef VENDOR_ACCESS_CONF_GLOB
+ if (glob_rv_vendor == 0) {
+ for (size_t j = 0; j < globbuf_vendor.gl_pathc; j++) {
+ if (glob_rv == 0 && globbuf.gl_pathc > 0) {
+ int double_found = 0;
+ for (size_t k = 0; k < globbuf.gl_pathc; k++) {
+ if (strcmp(base_name(globbuf.gl_pathv[k]),
+ base_name(globbuf_vendor.gl_pathv[j])) == 0) {
+ double_found = 1;
+ break;
+ }
+ }
+ if (double_found)
+ continue;
+ }
+ file_list[i] = strdup(globbuf_vendor.gl_pathv[j]);
+ if (file_list[i] == NULL) {
+ pam_syslog(pamh, LOG_ERR, "strdup failed: %m");
+ break;
+ }
+ i++;
+ }
+ globfree(&globbuf_vendor);
+ }
+#endif
+ file_list[i] = NULL;
+ qsort(file_list, i, sizeof(char *), compare_filename);
+
+ if (glob_rv == 0)
+ globfree(&globbuf);
+
+ return file_list;
+}
+
/* --- static functions for checking whether the user should be let in --- */
typedef int match_func (pam_handle_t *, char *, struct login_info *);
@@ -567,7 +663,7 @@ static int
group_match (pam_handle_t *pamh, const char *tok, const char* usr,
int debug)
{
- char grptok[BUFSIZ];
+ char grptok[BUFSIZ] = {};
if (debug)
pam_syslog (pamh, LOG_DEBUG,
@@ -577,7 +673,6 @@ group_match (pam_handle_t *pamh, const char *tok, const char* usr,
return NO;
/* token is received under the format '(...)' */
- memset(grptok, 0, BUFSIZ);
strncpy(grptok, tok + 1, strlen(tok) - 2);
if (pam_modutil_user_in_group_nam_nam(pamh, usr, grptok))
@@ -637,7 +732,7 @@ remote_match (pam_handle_t *pamh, char *tok, struct login_info *item)
if ((str_len = strlen(string)) > tok_len
&& strcasecmp(tok, string + str_len - tok_len) == 0)
return YES;
- } else if (tok[tok_len - 1] == '.') {
+ } else if (tok[tok_len - 1] == '.') { /* internet network numbers (end with ".") */
struct addrinfo hint;
memset (&hint, '\0', sizeof (hint));
@@ -678,7 +773,7 @@ remote_match (pam_handle_t *pamh, char *tok, struct login_info *item)
return NO;
}
- /* Assume network/netmask with an IP of a host. */
+ /* Assume network/netmask, IP address or hostname. */
return network_netmask_match(pamh, tok, string, item);
}
@@ -696,7 +791,7 @@ string_match (pam_handle_t *pamh, const char *tok, const char *string,
/*
* If the token has the magic value "ALL" the match always succeeds.
* Otherwise, return YES if the token fully matches the string.
- * "NONE" token matches NULL string.
+ * "NONE" token matches NULL string.
*/
if (strcasecmp(tok, "ALL") == 0) { /* all: always matches */
@@ -714,7 +809,8 @@ string_match (pam_handle_t *pamh, const char *tok, const char *string,
/* network_netmask_match - match a string against one token
* where string is a hostname or ip (v4,v6) address and tok
- * represents either a single ip (v4,v6) address or a network/netmask
+ * represents either a hostname, a single ip (v4,v6) address
+ * or a network/netmask
*/
static int
network_netmask_match (pam_handle_t *pamh,
@@ -723,10 +819,12 @@ network_netmask_match (pam_handle_t *pamh,
char *netmask_ptr;
char netmask_string[MAXHOSTNAMELEN + 1];
int addr_type;
+ struct addrinfo *ai = NULL;
if (item->debug)
- pam_syslog (pamh, LOG_DEBUG,
+ pam_syslog (pamh, LOG_DEBUG,
"network_netmask_match: tok=%s, item=%s", tok, string);
+
/* OK, check if tok is of type addr/mask */
if ((netmask_ptr = strchr(tok, '/')) != NULL)
{
@@ -760,54 +858,108 @@ network_netmask_match (pam_handle_t *pamh,
netmask_ptr = number_to_netmask(netmask, addr_type,
netmask_string, MAXHOSTNAMELEN);
}
- }
+
+ /*
+ * Construct an addrinfo list from the IP address.
+ * This should not fail as the input is a correct IP address...
+ */
+ if (getaddrinfo (tok, NULL, NULL, &ai) != 0)
+ {
+ return NO;
+ }
+ }
else
- /* NO, then check if it is only an addr */
- if (isipaddr(tok, NULL, NULL) != YES)
+ {
+ /*
+ * It is either an IP address or a hostname.
+ * Let getaddrinfo sort everything out
+ */
+ if (getaddrinfo (tok, NULL, NULL, &ai) != 0)
{
+ pam_syslog(pamh, LOG_ERR, "cannot resolve hostname \"%s\"", tok);
+
return NO;
}
+ netmask_ptr = NULL;
+ }
if (isipaddr(string, NULL, NULL) != YES)
{
- /* Assume network/netmask with a name of a host. */
struct addrinfo hint;
+ /* Assume network/netmask with a name of a host. */
memset (&hint, '\0', sizeof (hint));
hint.ai_flags = AI_CANONNAME;
hint.ai_family = AF_UNSPEC;
if (item->gai_rv != 0)
+ {
+ freeaddrinfo(ai);
return NO;
+ }
else if (!item->res &&
(item->gai_rv = getaddrinfo (string, NULL, &hint, &item->res)) != 0)
+ {
+ freeaddrinfo(ai);
return NO;
+ }
else
{
struct addrinfo *runp = item->res;
+ struct addrinfo *runp1;
while (runp != NULL)
{
char buf[INET6_ADDRSTRLEN];
- DIAG_PUSH_IGNORE_CAST_ALIGN;
- inet_ntop (runp->ai_family,
- runp->ai_family == AF_INET
- ? (void *) &((struct sockaddr_in *) runp->ai_addr)->sin_addr
- : (void *) &((struct sockaddr_in6 *) runp->ai_addr)->sin6_addr,
- buf, sizeof (buf));
- DIAG_POP_IGNORE_CAST_ALIGN;
+ if (getnameinfo (runp->ai_addr, runp->ai_addrlen, buf, sizeof (buf), NULL, 0, NI_NUMERICHOST) != 0)
+ {
+ freeaddrinfo(ai);
+ return NO;
+ }
- if (are_addresses_equal(buf, tok, netmask_ptr))
+ for (runp1 = ai; runp1 != NULL; runp1 = runp1->ai_next)
{
- return YES;
+ char buf1[INET6_ADDRSTRLEN];
+
+ if (runp->ai_family != runp1->ai_family)
+ continue;
+
+ if (getnameinfo (runp1->ai_addr, runp1->ai_addrlen, buf1, sizeof (buf1), NULL, 0, NI_NUMERICHOST) != 0)
+ {
+ freeaddrinfo(ai);
+ return NO;
+ }
+
+ if (are_addresses_equal (buf, buf1, netmask_ptr))
+ {
+ freeaddrinfo(ai);
+ return YES;
+ }
}
runp = runp->ai_next;
}
}
}
else
- return (are_addresses_equal(string, tok, netmask_ptr));
+ {
+ struct addrinfo *runp1;
+
+ for (runp1 = ai; runp1 != NULL; runp1 = runp1->ai_next)
+ {
+ char buf1[INET6_ADDRSTRLEN];
+
+ (void) getnameinfo (runp1->ai_addr, runp1->ai_addrlen, buf1, sizeof (buf1), NULL, 0, NI_NUMERICHOST);
+
+ if (are_addresses_equal(string, buf1, netmask_ptr))
+ {
+ freeaddrinfo(ai);
+ return YES;
+ }
+ }
+ }
+
+ freeaddrinfo(ai);
return NO;
}
@@ -828,7 +980,6 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
char hostname[MAXHOSTNAMELEN + 1];
int rv;
-
/* set username */
if (pam_get_user(pamh, &user, NULL) != PAM_SUCCESS) {
@@ -853,6 +1004,18 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
return PAM_ABORT;
}
+#ifdef VENDOR_PAM_ACCESS_CONFIG
+ if (loginfo.config_file == default_config) {
+ /* Check whether PAM_ACCESS_CONFIG file is available.
+ * If it does not exist, fall back to VENDOR_PAM_ACCESS_CONFIG file. */
+ struct stat buffer;
+ if (stat(loginfo.config_file, &buffer) != 0 && errno == ENOENT) {
+ default_config = VENDOR_PAM_ACCESS_CONFIG;
+ loginfo.config_file = default_config;
+ }
+ }
+#endif
+
/* remote host name */
if (pam_get_item(pamh, PAM_RHOST, &void_from)
@@ -916,23 +1079,18 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
rv = login_access(pamh, &loginfo);
if (rv == NOMATCH && loginfo.config_file == default_config) {
- glob_t globbuf;
- int i, glob_rv;
-
- /* We do not manipulate locale as setlocale() is not
- * thread safe. We could use uselocale() in future.
- */
- glob_rv = glob(ACCESS_CONF_GLOB, GLOB_ERR, NULL, &globbuf);
- if (!glob_rv) {
- /* Parse the *.conf files. */
- for (i = 0; globbuf.gl_pathv[i] != NULL; i++) {
- loginfo.config_file = globbuf.gl_pathv[i];
- rv = login_access(pamh, &loginfo);
- if (rv != NOMATCH)
- break;
- }
- globfree(&globbuf);
- }
+ char **filename_list = read_access_dir(pamh);
+ if (filename_list != NULL) {
+ for (int i = 0; filename_list[i] != NULL; i++) {
+ loginfo.config_file = filename_list[i];
+ rv = login_access(pamh, &loginfo);
+ if (rv != NOMATCH)
+ break;
+ }
+ for (int i = 0; filename_list[i] != NULL; i++)
+ free(filename_list[i]);
+ free(filename_list);
+ }
}
if (loginfo.gai_rv == 0 && loginfo.res)
diff --git a/modules/pam_debug/Makefile.am b/modules/pam_debug/Makefile.am
index 8aa63056..0333d9ba 100644
--- a/modules/pam_debug/Makefile.am
+++ b/modules/pam_debug/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_debug
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_debug/Makefile.in b/modules/pam_debug/Makefile.in
index ba2cc799..32fa197d 100644
--- a/modules/pam_debug/Makefile.in
+++ b/modules/pam_debug/Makefile.in
@@ -433,6 +433,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -445,11 +446,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -481,12 +484,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -509,6 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -519,12 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -598,7 +608,8 @@ XMLS = README.xml pam_debug.8.xml
dist_check_SCRIPTS = tst-pam_debug
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_debug/README.xml b/modules/pam_debug/README.xml
index ef41911b..cdcec7f4 100644
--- a/modules/pam_debug/README.xml
+++ b/modules/pam_debug/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_debug.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_debug.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_debug-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_debug.8.xml" xpointer='xpointer(id("pam_debug-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_debug.8.xml" xpointer='xpointer(id("pam_debug-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_debug.8.xml" xpointer='xpointer(id("pam_debug-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_debug.8.xml" xpointer='xpointer(id("pam_debug-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_debug.8.xml" xpointer='xpointer(id("pam_debug-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_debug/pam_debug.8 b/modules/pam_debug/pam_debug.8
index b3e68e21..b1a6de78 100644
--- a/modules/pam_debug/pam_debug.8
+++ b/modules/pam_debug/pam_debug.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_debug
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_DEBUG" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_DEBUG" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -37,7 +37,7 @@ pam_debug \- PAM module to debug the PAM stack
The pam_debug PAM module is intended as a debugging aide for determining how the PAM stack is operating\&. This module returns what its module arguments tell it to return\&.
.SH "OPTIONS"
.PP
-\fBauth=\fR\fB\fIvalue\fR\fR
+auth=value
.RS 4
The
\fBpam_sm_authenticate\fR(3)
@@ -45,7 +45,7 @@ function will return
\fIvalue\fR\&.
.RE
.PP
-\fBcred=\fR\fB\fIvalue\fR\fR
+cred=value
.RS 4
The
\fBpam_sm_setcred\fR(3)
@@ -53,7 +53,7 @@ function will return
\fIvalue\fR\&.
.RE
.PP
-\fBacct=\fR\fB\fIvalue\fR\fR
+acct=value
.RS 4
The
\fBpam_sm_acct_mgmt\fR(3)
@@ -61,7 +61,7 @@ function will return
\fIvalue\fR\&.
.RE
.PP
-\fBprechauthtok=\fR\fB\fIvalue\fR\fR
+prechauthtok=value
.RS 4
The
\fBpam_sm_chauthtok\fR(3)
@@ -72,7 +72,7 @@ if the
flag is set\&.
.RE
.PP
-\fBchauthtok=\fR\fB\fIvalue\fR\fR
+chauthtok=value
.RS 4
The
\fBpam_sm_chauthtok\fR(3)
@@ -85,7 +85,7 @@ flag is
set\&.
.RE
.PP
-\fBopen_session=\fR\fB\fIvalue\fR\fR
+open_session=value
.RS 4
The
\fBpam_sm_open_session\fR(3)
@@ -93,7 +93,7 @@ function will return
\fIvalue\fR\&.
.RE
.PP
-\fBclose_session=\fR\fB\fIvalue\fR\fR
+close_session=value
.RS 4
The
\fBpam_sm_close_session\fR(3)
diff --git a/modules/pam_debug/pam_debug.8.xml b/modules/pam_debug/pam_debug.8.xml
index 3d85f4d8..1c98f17e 100644
--- a/modules/pam_debug/pam_debug.8.xml
+++ b/modules/pam_debug/pam_debug.8.xml
@@ -1,51 +1,48 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_debug">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_debug">
<refmeta>
<refentrytitle>pam_debug</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_debug-name">
+ <refnamediv xml:id="pam_debug-name">
<refname>pam_debug</refname>
<refpurpose>PAM module to debug the PAM stack</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_debug-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_debug-cmdsynopsis" sepchar=" ">
<command>pam_debug.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
auth=<replaceable>value</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
cred=<replaceable>value</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
acct=<replaceable>value</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
prechauthtok=<replaceable>value</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
chauthtok=<replaceable>value</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
auth=<replaceable>value</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
open_session=<replaceable>value</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
close_session=<replaceable>value</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_debug-description">
+ <refsect1 xml:id="pam_debug-description">
<title>DESCRIPTION</title>
<para>
The pam_debug PAM module is intended as a debugging aide for
@@ -54,12 +51,12 @@
</para>
</refsect1>
- <refsect1 id="pam_debug-options">
+ <refsect1 xml:id="pam_debug-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>auth=<replaceable>value</replaceable></option>
+ auth=value
</term>
<listitem>
<para>
@@ -73,7 +70,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>cred=<replaceable>value</replaceable></option>
+ cred=value
</term>
<listitem>
<para>
@@ -87,7 +84,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>acct=<replaceable>value</replaceable></option>
+ acct=value
</term>
<listitem>
<para>
@@ -101,7 +98,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>prechauthtok=<replaceable>value</replaceable></option>
+ prechauthtok=value
</term>
<listitem>
<para>
@@ -116,7 +113,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>chauthtok=<replaceable>value</replaceable></option>
+ chauthtok=value
</term>
<listitem>
<para>
@@ -126,13 +123,13 @@
</citerefentry> function will return
<replaceable>value</replaceable> if the
<emphasis>PAM_PRELIM_CHECK</emphasis> flag is
- <emphasis remap='B'>not</emphasis> set.
+ <emphasis remap="B">not</emphasis> set.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- <option>open_session=<replaceable>value</replaceable></option>
+ open_session=value
</term>
<listitem>
<para>
@@ -146,7 +143,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>close_session=<replaceable>value</replaceable></option>
+ close_session=value
</term>
<listitem>
<para>
@@ -171,7 +168,7 @@
</para>
</refsect1>
- <refsect1 id="pam_debug-types">
+ <refsect1 xml:id="pam_debug-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>auth</option>, <option>account</option>,
@@ -179,7 +176,7 @@
</para>
</refsect1>
- <refsect1 id='pam_debug-return_values'>
+ <refsect1 xml:id="pam_debug-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -194,7 +191,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_debug-examples'>
+ <refsect1 xml:id="pam_debug-examples">
<title>EXAMPLES</title>
<programlisting>
auth requisite pam_permit.so
@@ -206,7 +203,7 @@ auth sufficient pam_debug.so auth=success cred=success
</programlisting>
</refsect1>
- <refsect1 id='pam_debug-see_also'>
+ <refsect1 xml:id="pam_debug-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -221,11 +218,11 @@ auth sufficient pam_debug.so auth=success cred=success
</para>
</refsect1>
- <refsect1 id='pam_debug-author'>
+ <refsect1 xml:id="pam_debug-author">
<title>AUTHOR</title>
<para>
pam_debug was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_deny/Makefile.am b/modules/pam_deny/Makefile.am
index fa9b9c8b..952df4d6 100644
--- a/modules/pam_deny/Makefile.am
+++ b/modules/pam_deny/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_deny
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_deny/Makefile.in b/modules/pam_deny/Makefile.in
index 612ee697..98bc5b1c 100644
--- a/modules/pam_deny/Makefile.in
+++ b/modules/pam_deny/Makefile.in
@@ -433,6 +433,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -445,11 +446,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -481,12 +484,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -509,6 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -519,12 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -598,7 +608,8 @@ XMLS = README.xml pam_deny.8.xml
dist_check_SCRIPTS = tst-pam_deny
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_deny/README.xml b/modules/pam_deny/README.xml
index ff2e82b0..d3ba53ce 100644
--- a/modules/pam_deny/README.xml
+++ b/modules/pam_deny/README.xml
@@ -1,36 +1,23 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_deny.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_deny.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_deny-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_deny.8.xml" xpointer='xpointer(id("pam_deny-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_deny.8.xml" xpointer='xpointer(id("pam_deny-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_deny.8.xml" xpointer='xpointer(id("pam_deny-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_deny.8.xml" xpointer='xpointer(id("pam_deny-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_deny/pam_deny.8 b/modules/pam_deny/pam_deny.8
index 7f474330..85146f1e 100644
--- a/modules/pam_deny/pam_deny.8
+++ b/modules/pam_deny/pam_deny.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_deny
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_DENY" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_DENY" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_deny/pam_deny.8.xml b/modules/pam_deny/pam_deny.8.xml
index a9283582..db8fcb63 100644
--- a/modules/pam_deny/pam_deny.8.xml
+++ b/modules/pam_deny/pam_deny.8.xml
@@ -1,27 +1,24 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_deny">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_deny">
<refmeta>
<refentrytitle>pam_deny</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_deny-name">
+ <refnamediv xml:id="pam_deny-name">
<refname>pam_deny</refname>
<refpurpose>The locking-out PAM module</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_deny-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_deny-cmdsynopsis" sepchar=" ">
<command>pam_deny.so</command>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_deny-description">
+ <refsect1 xml:id="pam_deny-description">
<title>DESCRIPTION</title>
@@ -33,12 +30,12 @@
</refsect1>
- <refsect1 id="pam_deny-options">
+ <refsect1 xml:id="pam_deny-options">
<title>OPTIONS</title>
<para>This module does not recognise any options.</para>
</refsect1>
- <refsect1 id="pam_deny-types">
+ <refsect1 xml:id="pam_deny-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>account</option>, <option>auth</option>,
@@ -46,7 +43,7 @@
</para>
</refsect1>
- <refsect1 id='pam_deny-return_values'>
+ <refsect1 xml:id="pam_deny-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -91,7 +88,7 @@
</para>
</refsect1>
- <refsect1 id='pam_deny-examples'>
+ <refsect1 xml:id="pam_deny-examples">
<title>EXAMPLES</title>
<programlisting>
#%PAM-1.0
@@ -110,7 +107,7 @@ other session required pam_deny.so
</programlisting>
</refsect1>
- <refsect1 id='pam_deny-see_also'>
+ <refsect1 xml:id="pam_deny-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -125,11 +122,11 @@ other session required pam_deny.so
</para>
</refsect1>
- <refsect1 id='pam_deny-author'>
+ <refsect1 xml:id="pam_deny-author">
<title>AUTHOR</title>
<para>
pam_deny was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_echo/Makefile.am b/modules/pam_echo/Makefile.am
index b855e622..7d7ae983 100644
--- a/modules/pam_echo/Makefile.am
+++ b/modules/pam_echo/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_echo
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_echo/Makefile.in b/modules/pam_echo/Makefile.in
index 7b591fa3..f1b3f7ef 100644
--- a/modules/pam_echo/Makefile.in
+++ b/modules/pam_echo/Makefile.in
@@ -433,6 +433,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -445,11 +446,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -481,12 +484,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -509,6 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -519,12 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -598,7 +608,8 @@ XMLS = README.xml pam_echo.8.xml
dist_check_SCRIPTS = tst-pam_echo
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_echo/README.xml b/modules/pam_echo/README.xml
index b1556e38..ceecf9ef 100644
--- a/modules/pam_echo/README.xml
+++ b/modules/pam_echo/README.xml
@@ -1,36 +1,23 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_echo.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_echo.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_echo-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_echo.8.xml" xpointer='xpointer(id("pam_echo-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_echo.8.xml" xpointer='xpointer(id("pam_echo-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_echo.8.xml" xpointer='xpointer(id("pam_echo-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_echo.8.xml" xpointer='xpointer(id("pam_echo-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_echo/pam_echo.8 b/modules/pam_echo/pam_echo.8
index ba46e061..c9274889 100644
--- a/modules/pam_echo/pam_echo.8
+++ b/modules/pam_echo/pam_echo.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_echo
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_ECHO" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_ECHO" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -40,32 +40,32 @@ PAM module is for printing text messages to inform user about special things\&.
\fI%\fR
character are interpreted in the following way:
.PP
-\fI%H\fR
+%H
.RS 4
The name of the remote host (PAM_RHOST)\&.
.RE
.PP
-\fI%h\fR
+%h
.RS 4
The name of the local host\&.
.RE
.PP
-\fI%s\fR
+%s
.RS 4
The service name (PAM_SERVICE)\&.
.RE
.PP
-\fI%t\fR
+%t
.RS 4
The name of the controlling terminal (PAM_TTY)\&.
.RE
.PP
-\fI%U\fR
+%U
.RS 4
The remote user name (PAM_RUSER)\&.
.RE
.PP
-\fI%u\fR
+%u
.RS 4
The local user name (PAM_USER)\&.
.RE
@@ -77,7 +77,7 @@ expands to the characters following the
character\&.
.SH "OPTIONS"
.PP
-\fBfile=\fR\fB\fI/path/message\fR\fR
+file=/path/message
.RS 4
The content of the file
/path/message
diff --git a/modules/pam_echo/pam_echo.8.xml b/modules/pam_echo/pam_echo.8.xml
index ef76b022..07b793d9 100644
--- a/modules/pam_echo/pam_echo.8.xml
+++ b/modules/pam_echo/pam_echo.8.xml
@@ -1,15 +1,12 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_echo'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_echo">
<refmeta>
<refentrytitle>pam_echo</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_echo-name'>
+ <refnamediv xml:id="pam_echo-name">
<refname>pam_echo</refname>
<refpurpose>PAM module for printing text messages</refpurpose>
</refnamediv>
@@ -17,15 +14,15 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_echo-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_echo-cmdsynopsis" sepchar=" ">
<command>pam_echo.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
file=<replaceable>/path/message</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_echo-description'>
+ <refsect1 xml:id="pam_echo-description">
<title>DESCRIPTION</title>
<para>
The <emphasis>pam_echo</emphasis> PAM module is for printing
@@ -35,37 +32,37 @@
</para>
<variablelist>
<varlistentry>
- <term><emphasis>%H</emphasis></term>
+ <term>%H</term>
<listitem>
<para>The name of the remote host (PAM_RHOST).</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis>%h</emphasis></term>
+ <term>%h</term>
<listitem>
<para>The name of the local host.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis>%s</emphasis></term>
+ <term>%s</term>
<listitem>
<para>The service name (PAM_SERVICE).</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis>%t</emphasis></term>
+ <term>%t</term>
<listitem>
<para>The name of the controlling terminal (PAM_TTY).</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis>%U</emphasis></term>
+ <term>%U</term>
<listitem>
<para>The remote user name (PAM_RUSER).</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis>%u</emphasis></term>
+ <term>%u</term>
<listitem>
<para>The local user name (PAM_USER).</para>
</listitem>
@@ -79,12 +76,12 @@
</para>
</refsect1>
- <refsect1 id='pam_echo-options'>
+ <refsect1 xml:id="pam_echo-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>file=<replaceable>/path/message</replaceable></option>
+ file=/path/message
</term>
<listitem>
<para>
@@ -96,7 +93,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_echo-types">
+ <refsect1 xml:id="pam_echo-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>auth</option>, <option>account</option>,
@@ -106,7 +103,7 @@
</refsect1>
- <refsect1 id="pam_echo-return_values">
+ <refsect1 xml:id="pam_echo-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -137,7 +134,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_echo-examples'>
+ <refsect1 xml:id="pam_echo-examples">
<title>EXAMPLES</title>
<para>
For an example of the use of this module, we show how it may be
@@ -150,7 +147,7 @@ password required pam_unix.so
</refsect1>
- <refsect1 id='pam_echo-see_also'><title>SEE ALSO</title>
+ <refsect1 xml:id="pam_echo-see_also"><title>SEE ALSO</title>
<para>
<citerefentry>
<refentrytitle>pam.conf</refentrytitle><manvolnum>8</manvolnum>
@@ -163,8 +160,8 @@ password required pam_unix.so
</citerefentry></para>
</refsect1>
- <refsect1 id='pam_echo-author'>
+ <refsect1 xml:id="pam_echo-author">
<title>AUTHOR</title>
<para>Thorsten Kukuk &lt;kukuk@thkukuk.de&gt;</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_env/Makefile.am b/modules/pam_env/Makefile.am
index c66112d6..f988f109 100644
--- a/modules/pam_env/Makefile.am
+++ b/modules/pam_env/Makefile.am
@@ -12,20 +12,27 @@ dist_man_MANS = pam_env.conf.5 pam_env.8 environment.5
endif
XMLS = README.xml pam_env.conf.5.xml pam_env.8.xml
dist_check_SCRIPTS = tst-pam_env
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DDEFAULT_CONF_FILE=\"$(SCONFIGDIR)/pam_env.conf\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS) -DSYSCONFDIR=\"$(sysconfdir)\" $(ECONF_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
endif
securelib_LTLIBRARIES = pam_env.la
-pam_env_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_env_la_LIBADD = $(top_builddir)/libpam/libpam.la $(ECONF_LIBS)
+
+check_PROGRAMS = tst-pam_env-retval
+tst_pam_env_retval_LDADD = $(top_builddir)/libpam/libpam.la
dist_secureconf_DATA = pam_env.conf
dist_sysconf_DATA = environment
diff --git a/modules/pam_env/Makefile.in b/modules/pam_env/Makefile.in
index 255458f5..dd3fd05f 100644
--- a/modules/pam_env/Makefile.in
+++ b/modules/pam_env/Makefile.in
@@ -94,6 +94,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
+check_PROGRAMS = tst-pam_env-retval$(EXEEXT)
subdir = modules/pam_env
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
@@ -151,13 +152,18 @@ am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man5dir)" \
"$(DESTDIR)$(man8dir)" "$(DESTDIR)$(secureconfdir)" \
"$(DESTDIR)$(sysconfdir)"
LTLIBRARIES = $(securelib_LTLIBRARIES)
-pam_env_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+am__DEPENDENCIES_1 =
+pam_env_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
+ $(am__DEPENDENCIES_1)
pam_env_la_SOURCES = pam_env.c
pam_env_la_OBJECTS = pam_env.lo
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+tst_pam_env_retval_SOURCES = tst-pam_env-retval.c
+tst_pam_env_retval_OBJECTS = tst-pam_env-retval.$(OBJEXT)
+tst_pam_env_retval_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -173,7 +179,8 @@ am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/pam_env.Plo
+am__depfiles_remade = ./$(DEPDIR)/pam_env.Plo \
+ ./$(DEPDIR)/tst-pam_env-retval.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -193,8 +200,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = pam_env.c
-DIST_SOURCES = pam_env.c
+SOURCES = pam_env.c tst-pam_env-retval.c
+DIST_SOURCES = pam_env.c tst-pam_env-retval.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -433,6 +440,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -445,11 +453,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -481,12 +491,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -509,6 +521,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -519,12 +532,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -596,15 +613,17 @@ EXTRA_DIST = $(XMLS)
@HAVE_DOC_TRUE@dist_man_MANS = pam_env.conf.5 pam_env.8 environment.5
XMLS = README.xml pam_env.conf.5.xml pam_env.8.xml
dist_check_SCRIPTS = tst-pam_env
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DDEFAULT_CONF_FILE=\"$(SCONFIGDIR)/pam_env.conf\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS) -DSYSCONFDIR=\"$(sysconfdir)\" $(ECONF_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
securelib_LTLIBRARIES = pam_env.la
-pam_env_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_env_la_LIBADD = $(top_builddir)/libpam/libpam.la $(ECONF_LIBS)
+tst_pam_env_retval_LDADD = $(top_builddir)/libpam/libpam.la
dist_secureconf_DATA = pam_env.conf
dist_sysconf_DATA = environment
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
@@ -642,6 +661,15 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \
@@ -680,6 +708,10 @@ clean-securelibLTLIBRARIES:
pam_env.la: $(pam_env_la_OBJECTS) $(pam_env_la_DEPENDENCIES) $(EXTRA_pam_env_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) -rpath $(securelibdir) $(pam_env_la_OBJECTS) $(pam_env_la_LIBADD) $(LIBS)
+tst-pam_env-retval$(EXEEXT): $(tst_pam_env_retval_OBJECTS) $(tst_pam_env_retval_DEPENDENCIES) $(EXTRA_tst_pam_env_retval_DEPENDENCIES)
+ @rm -f tst-pam_env-retval$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tst_pam_env_retval_OBJECTS) $(tst_pam_env_retval_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -687,6 +719,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_env.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_env-retval.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@@ -1021,7 +1054,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
fi; \
$$success || exit 1
-check-TESTS: $(dist_check_SCRIPTS)
+check-TESTS: $(check_PROGRAMS) $(dist_check_SCRIPTS)
@list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@@ -1031,7 +1064,7 @@ check-TESTS: $(dist_check_SCRIPTS)
log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
exit $$?;
-recheck: all $(dist_check_SCRIPTS)
+recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS)
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@set +e; $(am__set_TESTS_bases); \
bases=`for i in $$bases; do echo $$i; done \
@@ -1049,6 +1082,13 @@ tst-pam_env.log: tst-pam_env
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+tst-pam_env-retval.log: tst-pam_env-retval$(EXEEXT)
+ @p='tst-pam_env-retval$(EXEEXT)'; \
+ b='tst-pam_env-retval'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
.test.log:
@p='$<'; \
$(am__set_b); \
@@ -1098,7 +1138,8 @@ distdir-am: $(DISTFILES)
fi; \
done
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+ $(dist_check_SCRIPTS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA)
@@ -1143,11 +1184,12 @@ maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \
- mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-securelibLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/pam_env.Plo
+ -rm -f ./$(DEPDIR)/tst-pam_env-retval.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1195,6 +1237,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/pam_env.Plo
+ -rm -f ./$(DEPDIR)/tst-pam_env-retval.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1219,7 +1262,7 @@ uninstall-man: uninstall-man5 uninstall-man8
.MAKE: check-am install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
- check-am clean clean-generic clean-libtool \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
clean-securelibLTLIBRARIES cscopelist-am ctags ctags-am \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
diff --git a/modules/pam_env/README b/modules/pam_env/README
index a040caf7..f10a02b4 100644
--- a/modules/pam_env/README
+++ b/modules/pam_env/README
@@ -8,10 +8,38 @@ The pam_env PAM module allows the (un)setting of environment variables.
Supported is the use of previously set environment variables as well as
PAM_ITEMs such as PAM_RHOST.
+Rules for (un)setting of variables can be defined in an own config file. The
+path to this file can be specified with the conffile option. If this file does
+not exist, the default rules are taken from the config files /etc/security/
+pam_env.conf and /etc/security/pam_env.conf.d/*.conf. If the file /etc/security
+/pam_env.conf does not exist, the rules are taken from the files %vendordir%/
+security/pam_env.conf, %vendordir%/security/pam_env.conf.d/*.conf and /etc/
+security/pam_env.conf.d/*.conf in that order.
+
+By default rules for (un)setting of variables are taken from the config file /
+etc/security/pam_env.conf. If this file does not exist %vendordir%/security/
+pam_env.conf is used. An alternate file can be specified with the conffile
+option, which overrules all other files.
+
By default rules for (un)setting of variables are taken from the config file /
etc/security/pam_env.conf. An alternate file can be specified with the conffile
option.
+Environment variables can be defined in a file with simple KEY=VAL pairs on
+separate lines. The path to this file can be specified with the envfile option.
+If this file has not been defined, the settings are read from the files /etc/
+security/environment and /etc/security/environment.d/*. If the file /etc/
+environment does not exist, the settings are read from the files %vendordir%/
+environment, %vendordir%/environment.d/* and /etc/environment.d/* in that
+order. And last but not least, with the readenv option this mechanism can be
+completely disabled.
+
+Second a file (/etc/environment by default) with simple KEY=VAL pairs on
+separate lines will be read. If this file does not exist, %vendordir%/etc/
+environment is used. With the envfile option an alternate file can be
+specified, which overrules all other files. And with the readenv option this
+can be completely disabled.
+
Second a file (/etc/environment by default) with simple KEY=VAL pairs on
separate lines will be read. With the envfile option an alternate file can be
specified. And with the readenv option this can be completely disabled.
diff --git a/modules/pam_env/README.xml b/modules/pam_env/README.xml
index 21a9b855..8becf870 100644
--- a/modules/pam_env/README.xml
+++ b/modules/pam_env/README.xml
@@ -1,39 +1,21 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_env.8.xml">
--->
-<!--
-<!ENTITY accessconf SYSTEM "pam_env.conf.5.xml">
--->
-]>
-
-<article>
-
- <articleinfo>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_env.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_env-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_env.8.xml" xpointer='xpointer(id("pam_env-name")/*)'/>
</title>
-
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_env.8.xml" xpointer='xpointer(id("pam_env-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_env.8.xml" xpointer='xpointer(id("pam_env-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_env.conf.5.xml" xpointer='xpointer(//refsect1[@id = "pam_env.conf-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_env.conf.5.xml" xpointer='xpointer(id("pam_env.conf-examples")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_env/environment.5 b/modules/pam_env/environment.5
index aa670e2e..415dfc1c 100644
--- a/modules/pam_env/environment.5
+++ b/modules/pam_env/environment.5
@@ -1 +1 @@
-.so man5/pam_env.conf.5
+.so pam_env.conf.5
diff --git a/modules/pam_env/pam_env.8 b/modules/pam_env/pam_env.8
index 8b0d5199..f4e15f30 100644
--- a/modules/pam_env/pam_env.8
+++ b/modules/pam_env/pam_env.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_env
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_ENV" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_ENV" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -62,20 +62,20 @@ option\&.
Since setting of PAM environment variables can have side effects to other modules, this module should be the last one on the stack\&.
.SH "OPTIONS"
.PP
-\fBconffile=\fR\fB\fI/path/to/pam_env\&.conf\fR\fR
+conffile=/path/to/pam_env\&.conf
.RS 4
Indicate an alternative
pam_env\&.conf
style configuration file to override the default\&. This can be useful when different services need different environments\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
A lot of debug information is printed with
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBenvfile=\fR\fB\fI/path/to/environment\fR\fR
+envfile=/path/to/environment
.RS 4
Indicate an alternative
environment
@@ -86,12 +86,12 @@ pairs on separate lines\&. The
instruction can be specified for bash compatibility, but will be ignored\&. This can be useful when different services need different environments\&.
.RE
.PP
-\fBreadenv=\fR\fB\fI0|1\fR\fR
+readenv=0|1
.RS 4
Turns on or off the reading of the file specified by envfile (0 is off, 1 is on)\&. By default this option is on\&.
.RE
.PP
-\fBuser_envfile=\fR\fB\fIfilename\fR\fR
+user_envfile=filename
.RS 4
Indicate an alternative
\&.pam_environment
@@ -99,7 +99,7 @@ file to override the default\&.The syntax is the same as for
\fI/etc/security/pam_env\&.conf\fR\&. The filename is relative to the user home directory\&. This can be useful when different services need different environments\&.
.RE
.PP
-\fBuser_readenv=\fR\fB\fI0|1\fR\fR
+user_readenv=0|1
.RS 4
Turns on or off the reading of the user specific environment file\&. 0 is off, 1 is on\&. By default this option is off as user supplied environment variables in the PAM environment could affect behavior of subsequent modules in the stack without the consent of the system administrator\&.
.sp
diff --git a/modules/pam_env/pam_env.8.xml b/modules/pam_env/pam_env.8.xml
index 75ff862b..fb172e17 100644
--- a/modules/pam_env/pam_env.8.xml
+++ b/modules/pam_env/pam_env.8.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_env'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_env">
<refmeta>
<refentrytitle>pam_env</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_env-name'>
+ <refnamediv xml:id="pam_env-name">
<refname>pam_env</refname>
<refpurpose>
PAM module to set/unset environment variables
@@ -20,31 +17,31 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_env-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_env-cmdsynopsis" sepchar=" ">
<command>pam_env.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
conffile=<replaceable>conf-file</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
envfile=<replaceable>env-file</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
readenv=<replaceable>0|1</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
user_envfile=<replaceable>env-file</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
user_readenv=<replaceable>0|1</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_env-description">
+ <refsect1 xml:id="pam_env-description">
<title>DESCRIPTION</title>
<para>
The pam_env PAM module allows the (un)setting of environment
@@ -52,13 +49,55 @@
variables as well as <emphasis>PAM_ITEM</emphasis>s such as
<emphasis>PAM_RHOST</emphasis>.
</para>
- <para>
+ <para condition="with_vendordir_and_with_econf">
+ Rules for (un)setting of variables can be defined in an own config
+ file. The path to this file can be specified with the
+ <emphasis>conffile</emphasis> option.
+ If this file does not exist, the default rules are taken from the
+ config files <filename>/etc/security/pam_env.conf</filename> and
+ <filename>/etc/security/pam_env.conf.d/*.conf</filename>.
+ If the file <filename>/etc/security/pam_env.conf</filename> does not
+ exist, the rules are taken from the files
+ <filename>%vendordir%/security/pam_env.conf</filename>,
+ <filename>%vendordir%/security/pam_env.conf.d/*.conf</filename> and
+ <filename>/etc/security/pam_env.conf.d/*.conf</filename> in that order.
+ </para>
+ <para condition="with_vendordir_and_without_econf">
+ By default rules for (un)setting of variables are taken from the
+ config file <filename>/etc/security/pam_env.conf</filename>.
+ If this file does not exist <filename>%vendordir%/security/pam_env.conf</filename> is used.
+ An alternate file can be specified with the <emphasis>conffile</emphasis>
+ option, which overrules all other files.
+ </para>
+ <para condition="without_vendordir">
By default rules for (un)setting of variables are taken from the
config file <filename>/etc/security/pam_env.conf</filename>. An
alternate file can be specified with the <emphasis>conffile</emphasis>
option.
</para>
- <para>
+ <para condition="with_vendordir_and_with_econf">
+ Environment variables can be defined in a file with simple <emphasis>KEY=VAL</emphasis>
+ pairs on separate lines. The path to this file can be specified with the
+ <emphasis>envfile</emphasis> option.
+ If this file has not been defined, the settings are read from the
+ files <filename>/etc/security/environment</filename> and
+ <filename>/etc/security/environment.d/*</filename>.
+ If the file <filename>/etc/environment</filename> does not exist, the
+ settings are read from the files <filename>%vendordir%/environment</filename>,
+ <filename>%vendordir%/environment.d/*</filename> and
+ <filename>/etc/environment.d/*</filename> in that order.
+ And last but not least, with the <emphasis>readenv</emphasis> option this mechanism can
+ be completely disabled.
+ </para>
+ <para condition="with_vendordir_and_without_econf">
+ Second a file (<filename>/etc/environment</filename> by default) with simple
+ <emphasis>KEY=VAL</emphasis> pairs on separate lines will be read.
+ If this file does not exist, <filename>%vendordir%/etc/environment</filename> is used.
+ With the <emphasis>envfile</emphasis> option an alternate file can be specified,
+ which overrules all other files.
+ And with the <emphasis>readenv</emphasis> option this can be completely disabled.
+ </para>
+ <para condition="without_vendordir">
Second a file (<filename>/etc/environment</filename> by default) with simple
<emphasis>KEY=VAL</emphasis> pairs on separate lines will be read.
With the <emphasis>envfile</emphasis> option an alternate file can be specified.
@@ -77,13 +116,13 @@
</para>
</refsect1>
- <refsect1 id="pam_env-options">
+ <refsect1 xml:id="pam_env-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>conffile=<replaceable>/path/to/pam_env.conf</replaceable></option>
+ conffile=/path/to/pam_env.conf
</term>
<listitem>
<para>
@@ -96,7 +135,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -108,7 +147,7 @@
<varlistentry>
<term>
- <option>envfile=<replaceable>/path/to/environment</replaceable></option>
+ envfile=/path/to/environment
</term>
<listitem>
<para>
@@ -124,7 +163,7 @@
<varlistentry>
<term>
- <option>readenv=<replaceable>0|1</replaceable></option>
+ readenv=0|1
</term>
<listitem>
<para>
@@ -137,7 +176,7 @@
<varlistentry>
<term>
- <option>user_envfile=<replaceable>filename</replaceable></option>
+ user_envfile=filename
</term>
<listitem>
<para>
@@ -153,7 +192,7 @@
<varlistentry>
<term>
- <option>user_readenv=<replaceable>0|1</replaceable></option>
+ user_readenv=0|1
</term>
<listitem>
<para>
@@ -174,7 +213,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_env-types">
+ <refsect1 xml:id="pam_env-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option> and <option>session</option> module
@@ -182,7 +221,7 @@
</para>
</refsect1>
- <refsect1 id="pam_env-return_values">
+ <refsect1 xml:id="pam_env-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -220,23 +259,25 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_env-files">
+ <refsect1 xml:id="pam_env-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/pam_env.conf</filename></term>
+ <term condition="with_vendordir">%vendordir%/security/pam_env.conf</term>
+ <term>/etc/security/pam_env.conf</term>
<listitem>
<para>Default configuration file</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><filename>/etc/environment</filename></term>
+ <term condition="with_vendordir">%vendordir%/environment</term>
+ <term>/etc/environment</term>
<listitem>
<para>Default environment file</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><filename>$HOME/.pam_environment</filename></term>
+ <term>$HOME/.pam_environment</term>
<listitem>
<para>User specific environment file</para>
</listitem>
@@ -244,7 +285,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_env-see_also">
+ <refsect1 xml:id="pam_env-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -262,10 +303,10 @@
</para>
</refsect1>
- <refsect1 id="pam_env-authors">
+ <refsect1 xml:id="pam_env-authors">
<title>AUTHOR</title>
<para>
pam_env was written by Dave Kinchlea &lt;kinch@kinch.ark.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_env/pam_env.c b/modules/pam_env/pam_env.c
index f5f8cead..d2b4cb10 100644
--- a/modules/pam_env/pam_env.c
+++ b/modules/pam_env/pam_env.c
@@ -7,6 +7,9 @@
*/
#define DEFAULT_ETC_ENVFILE "/etc/environment"
+#ifdef VENDORDIR
+#define VENDOR_DEFAULT_ETC_ENVFILE (VENDORDIR "/environment")
+#endif
#define DEFAULT_READ_ENVFILE 1
#define DEFAULT_USER_ENVFILE ".pam_environment"
@@ -25,6 +28,9 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
+#ifdef USE_ECONF
+#include <libeconf.h>
+#endif
#include <security/pam_modules.h>
#include <security/pam_modutil.h>
@@ -41,6 +47,11 @@ typedef struct var {
char *override;
} VAR;
+#define DEFAULT_CONF_FILE (SCONFIGDIR "/pam_env.conf")
+#ifdef VENDOR_SCONFIGDIR
+#define VENDOR_DEFAULT_CONF_FILE (VENDOR_SCONFIGDIR "/pam_env.conf")
+#endif
+
#define BUF_SIZE 8192
#define MAX_ENV 8192
@@ -51,18 +62,20 @@ typedef struct var {
#define UNDEFINE_VAR 102
#define ILLEGAL_VAR 103
-static int _assemble_line(FILE *, char *, int);
-static int _parse_line(const pam_handle_t *, const char *, VAR *);
-static int _check_var(pam_handle_t *, VAR *); /* This is the real meat */
-static void _clean_var(VAR *);
-static int _expand_arg(pam_handle_t *, char **);
-static const char * _pam_get_item_byname(pam_handle_t *, const char *);
-static int _define_var(pam_handle_t *, int, VAR *);
-static int _undefine_var(pam_handle_t *, int, VAR *);
-
/* This is a special value used to designate an empty string */
static char quote='\0';
+static void free_string_array(char **array)
+{
+ if (array == NULL)
+ return;
+ for (char **entry = array; *entry != NULL; ++entry) {
+ pam_overwrite_string(*entry);
+ free(*entry);
+ }
+ free(array);
+}
+
/* argument parsing */
#define PAM_DEBUG_ARG 0x01
@@ -75,10 +88,10 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv,
int ctrl=0;
*user_envfile = DEFAULT_USER_ENVFILE;
- *envfile = DEFAULT_ETC_ENVFILE;
+ *envfile = NULL;
*readenv = DEFAULT_READ_ENVFILE;
*user_readenv = DEFAULT_USER_READ_ENVFILE;
- *conffile = DEFAULT_CONF_FILE;
+ *conffile = NULL;
/* step through arguments */
for (; argc-- > 0; ++argv) {
@@ -126,166 +139,155 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv,
return ctrl;
}
-static int
-_parse_config_file(pam_handle_t *pamh, int ctrl, const char *file)
-{
- int retval;
- char buffer[BUF_SIZE];
- FILE *conf;
- VAR Var, *var=&Var;
-
- D(("Called."));
-
- var->name=NULL; var->defval=NULL; var->override=NULL;
-
- D(("Config file name is: %s", file));
-
- /*
- * Lets try to open the config file, parse it and process
- * any variables found.
- */
-
- if ((conf = fopen(file,"r")) == NULL) {
- pam_syslog(pamh, LOG_ERR, "Unable to open config file: %s: %m", file);
- return PAM_IGNORE;
- }
-
- /* _pam_assemble_line will provide a complete line from the config file,
- * with all comments removed and any escaped newlines fixed up
- */
-
- while (( retval = _assemble_line(conf, buffer, BUF_SIZE)) > 0) {
- D(("Read line: %s", buffer));
-
- if ((retval = _parse_line(pamh, buffer, var)) == GOOD_LINE) {
- retval = _check_var(pamh, var);
-
- if (DEFINE_VAR == retval) {
- retval = _define_var(pamh, ctrl, var);
-
- } else if (UNDEFINE_VAR == retval) {
- retval = _undefine_var(pamh, ctrl, var);
- }
- }
- if (PAM_SUCCESS != retval && ILLEGAL_VAR != retval
- && BAD_LINE != retval && PAM_BAD_ITEM != retval) break;
-
- _clean_var(var);
-
- } /* while */
+#ifdef USE_ECONF
- (void) fclose(conf);
+#define ENVIRONMENT "environment"
+#define PAM_ENV "pam_env"
- /* tidy up */
- _clean_var(var); /* We could have got here prematurely,
- * this is safe though */
- D(("Exit."));
- return (retval != 0 ? PAM_ABORT : PAM_SUCCESS);
+static int
+isDirectory(const char *path) {
+ struct stat statbuf;
+ if (stat(path, &statbuf) != 0)
+ return 0;
+ return S_ISDIR(statbuf.st_mode);
}
static int
-_parse_env_file(pam_handle_t *pamh, int ctrl, const char *file)
+econf_read_file(const pam_handle_t *pamh, const char *filename, const char *delim,
+ const char *name, const char *suffix, const char *subpath,
+ char ***lines)
{
- int retval=PAM_SUCCESS, i, t;
- char buffer[BUF_SIZE], *key, *mark;
- FILE *conf;
-
- D(("Env file name is: %s", file));
-
- if ((conf = fopen(file,"r")) == NULL) {
- pam_syslog(pamh, LOG_ERR, "Unable to open env file: %s: %m", file);
- return PAM_IGNORE;
+ econf_file *key_file = NULL;
+ econf_err error;
+ size_t key_number = 0;
+ char **keys = NULL;
+ const char *base_dir = "";
+
+ if (filename != NULL) {
+ if (isDirectory(filename)) {
+ /* Set base directory which can be different from root */
+ D(("filename argument is a directory: %s", filename));
+ base_dir = filename;
+ } else {
+ /* Read only one file */
+ error = econf_readFile (&key_file, filename, delim, "#");
+ D(("File name is: %s", filename));
+ if (error != ECONF_SUCCESS) {
+ pam_syslog(pamh, LOG_ERR, "Unable to open env file: %s: %s", filename,
+ econf_errString(error));
+ if (error == ECONF_NOFILE)
+ return PAM_IGNORE;
+ else
+ return PAM_ABORT;
+ }
+ }
}
+ if (filename == NULL || base_dir[0] != '\0') {
+ /* Read and merge all setting in e.g. /usr/etc and /etc */
+ char *vendor_dir = NULL, *sysconf_dir;
+ if (subpath != NULL && subpath[0] != '\0') {
+#ifdef VENDORDIR
+ if (asprintf(&vendor_dir, "%s%s/%s/", base_dir, VENDORDIR, subpath) < 0) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ return PAM_BUF_ERR;
+ }
+#endif
+ if (asprintf(&sysconf_dir, "%s%s/%s/", base_dir, SYSCONFDIR, subpath) < 0) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ free(vendor_dir);
+ return PAM_BUF_ERR;
+ }
+ } else {
+#ifdef VENDORDIR
+ if (asprintf(&vendor_dir, "%s%s/", base_dir, VENDORDIR) < 0) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ return PAM_BUF_ERR;
+ }
+#endif
+ if (asprintf(&sysconf_dir, "%s%s/", base_dir, SYSCONFDIR) < 0) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ free(vendor_dir);
+ return PAM_BUF_ERR;
+ }
+ }
- while (_assemble_line(conf, buffer, BUF_SIZE) > 0) {
- D(("Read line: %s", buffer));
- key = buffer;
-
- /* skip leading white space */
- key += strspn(key, " \n\t");
-
- /* skip blanks lines and comments */
- if (key[0] == '#')
- continue;
-
- /* skip over "export " if present so we can be compat with
- bash type declarations */
- if (strncmp(key, "export ", (size_t) 7) == 0)
- key += 7;
-
- /* now find the end of value */
- mark = key;
- while(mark[0] != '\n' && mark[0] != '#' && mark[0] != '\0')
- mark++;
- if (mark[0] != '\0')
- mark[0] = '\0';
-
- /*
- * sanity check, the key must be alphanumeric
- */
-
- if (key[0] == '=') {
- pam_syslog(pamh, LOG_ERR,
- "missing key name '%s' in %s', ignoring",
- key, file);
- continue;
+ D(("Read configuration from directory %s and %s", vendor_dir, sysconf_dir));
+ error = econf_readDirs (&key_file, vendor_dir, sysconf_dir, name, suffix,
+ delim, "#");
+ free(vendor_dir);
+ free(sysconf_dir);
+ if (error != ECONF_SUCCESS) {
+ if (error == ECONF_NOFILE) {
+ pam_syslog(pamh, LOG_ERR, "Configuration file not found: %s%s", name, suffix);
+ return PAM_IGNORE;
+ } else {
+ char *error_filename = NULL;
+ uint64_t error_line = 0;
+
+ econf_errLocation(&error_filename, &error_line);
+ pam_syslog(pamh, LOG_ERR, "Unable to read configuration file %s line %ld: %s",
+ error_filename,
+ error_line,
+ econf_errString(error));
+ free(error_filename);
+ return PAM_ABORT;
}
+ }
+ }
- for ( i = 0 ; key[i] != '=' && key[i] != '\0' ; i++ )
- if (!isalnum(key[i]) && key[i] != '_') {
- pam_syslog(pamh, LOG_ERR,
- "non-alphanumeric key '%s' in %s', ignoring",
- key, file);
- break;
- }
- /* non-alphanumeric key, ignore this line */
- if (key[i] != '=' && key[i] != '\0')
- continue;
+ error = econf_getKeys(key_file, NULL, &key_number, &keys);
+ if (error != ECONF_SUCCESS && error != ECONF_NOKEY) {
+ pam_syslog(pamh, LOG_ERR, "Unable to read keys: %s",
+ econf_errString(error));
+ econf_freeFile(key_file);
+ return PAM_ABORT;
+ }
- /* now we try to be smart about quotes around the value,
- but not too smart, we can't get all fancy with escaped
- values like bash */
- if (key[i] == '=' && (key[++i] == '\"' || key[i] == '\'')) {
- for ( t = i+1 ; key[t] != '\0' ; t++)
- if (key[t] != '\"' && key[t] != '\'')
- key[i++] = key[t];
- else if (key[t+1] != '\0')
- key[i++] = key[t];
- key[i] = '\0';
- }
+ *lines = malloc((key_number +1)* sizeof(char**));
+ if (*lines == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ econf_free(keys);
+ econf_freeFile(key_file);
+ return PAM_BUF_ERR;
+ }
- /* if this is a request to delete a variable, check that it's
- actually set first, so we don't get a vague error back from
- pam_putenv() */
- for (i = 0; key[i] != '=' && key[i] != '\0'; i++);
+ (*lines)[key_number] = 0;
- if (key[i] == '\0' && !pam_getenv(pamh,key))
- continue;
+ for (size_t i = 0; i < key_number; i++) {
+ char *val;
- /* set the env var, if it fails, we break out of the loop */
- retval = pam_putenv(pamh, key);
- if (retval != PAM_SUCCESS) {
- D(("error setting env \"%s\"", key));
- break;
- } else if (ctrl & PAM_DEBUG_ARG) {
- pam_syslog(pamh, LOG_DEBUG,
- "pam_putenv(\"%s\")", key);
+ error = econf_getStringValue (key_file, NULL, keys[i], &val);
+ if (error != ECONF_SUCCESS) {
+ pam_syslog(pamh, LOG_ERR, "Unable to get string from key %s: %s",
+ keys[i],
+ econf_errString(error));
+ } else {
+ if (asprintf(&(*lines)[i],"%s%c%s", keys[i], delim[0], val) < 0) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ econf_free(keys);
+ econf_freeFile(key_file);
+ (*lines)[i] = NULL;
+ free_string_array(*lines);
+ free (val);
+ return PAM_BUF_ERR;
}
+ free (val);
+ }
}
- (void) fclose(conf);
-
- /* tidy up */
- D(("Exit."));
- return retval;
+ econf_free(keys);
+ econf_free(key_file);
+ return PAM_SUCCESS;
}
+#else
+
/*
* This is where we read a line of the PAM config file. The line may be
* preceded by lines of comments and also extended with "\\\n"
*/
-
-static int _assemble_line(FILE *f, char *buffer, int buf_len)
+static int
+_assemble_line(FILE *f, char *buffer, int buf_len)
{
char *p = buffer;
char *s, *os;
@@ -373,8 +375,57 @@ static int _assemble_line(FILE *f, char *buffer, int buf_len)
return used;
}
+static int read_file(const pam_handle_t *pamh, const char*filename, char ***lines)
+{
+ FILE *conf;
+ char buffer[BUF_SIZE];
+
+ D(("Parsed file name is: %s", filename));
+
+ if ((conf = fopen(filename,"r")) == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Unable to open env file: %s", filename);
+ return PAM_IGNORE;
+ }
+
+ size_t i = 0;
+ *lines = malloc((i + 1)* sizeof(char**));
+ if (*lines == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ (void) fclose(conf);
+ return PAM_BUF_ERR;
+ }
+ (*lines)[i] = 0;
+ while (_assemble_line(conf, buffer, BUF_SIZE) > 0) {
+ char **tmp = NULL;
+ D(("Read line: %s", buffer));
+ tmp = realloc(*lines, (++i + 1) * sizeof(char**));
+ if (tmp == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ (void) fclose(conf);
+ free_string_array(*lines);
+ pam_overwrite_array(buffer);
+ return PAM_BUF_ERR;
+ }
+ *lines = tmp;
+ (*lines)[i-1] = strdup(buffer);
+ if ((*lines)[i-1] == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory.");
+ (void) fclose(conf);
+ free_string_array(*lines);
+ pam_overwrite_array(buffer);
+ return PAM_BUF_ERR;
+ }
+ (*lines)[i] = 0;
+ }
+
+ (void) fclose(conf);
+ pam_overwrite_array(buffer);
+ return PAM_SUCCESS;
+}
+#endif
+
static int
-_parse_line (const pam_handle_t *pamh, const char *buffer, VAR *var)
+_parse_line(const pam_handle_t *pamh, const char *buffer, VAR *var)
{
/*
* parse buffer into var, legal syntax is
@@ -454,7 +505,8 @@ _parse_line (const pam_handle_t *pamh, const char *buffer, VAR *var)
}
(void)strncpy(*valptr,ptr,length);
(*valptr)[length]='\0';
- } else if (quoteflg--) {
+ } else if (quoteflg) {
+ quoteflg--;
*valptr = &quote; /* a quick hack to handle the empty string */
}
ptr = tmpptr; /* Start the search where we stopped */
@@ -469,75 +521,57 @@ _parse_line (const pam_handle_t *pamh, const char *buffer, VAR *var)
return GOOD_LINE;
}
-static int _check_var(pam_handle_t *pamh, VAR *var)
+static const char *
+_pam_get_item_byname(pam_handle_t *pamh, const char *name)
{
/*
- * Examine the variable and determine what action to take.
- * Returns DEFINE_VAR, UNDEFINE_VAR depending on action to take
- * or a PAM_* error code if passed back from other routines
- *
- * if no DEFAULT provided, the empty string is assumed
- * if no OVERRIDE provided, the empty string is assumed
- * if DEFAULT= and OVERRIDE evaluates to the empty string,
- * this variable should be undefined
- * if DEFAULT="" and OVERRIDE evaluates to the empty string,
- * this variable should be defined with no value
- * if OVERRIDE=value and value turns into the empty string, DEFAULT is used
- *
- * If DEFINE_VAR is to be returned, the correct value to define will
- * be pointed to by var->value
+ * This function just allows me to use names as given in the config
+ * file and translate them into the appropriate PAM_ITEM macro
*/
- int retval;
+ int item;
+ const void *itemval;
D(("Called."));
-
- /*
- * First thing to do is to expand any arguments, but only
- * if they are not the special quote values (cause expand_arg
- * changes memory).
- */
-
- if (var->defval && (&quote != var->defval) &&
- ((retval = _expand_arg(pamh, &(var->defval))) != PAM_SUCCESS)) {
- return retval;
- }
- if (var->override && (&quote != var->override) &&
- ((retval = _expand_arg(pamh, &(var->override))) != PAM_SUCCESS)) {
- return retval;
+ if (strcmp(name, "PAM_USER") == 0 || strcmp(name, "HOME") == 0 || strcmp(name, "SHELL") == 0) {
+ item = PAM_USER;
+ } else if (strcmp(name, "PAM_USER_PROMPT") == 0) {
+ item = PAM_USER_PROMPT;
+ } else if (strcmp(name, "PAM_TTY") == 0) {
+ item = PAM_TTY;
+ } else if (strcmp(name, "PAM_RUSER") == 0) {
+ item = PAM_RUSER;
+ } else if (strcmp(name, "PAM_RHOST") == 0) {
+ item = PAM_RHOST;
+ } else {
+ D(("Unknown PAM_ITEM: <%s>", name));
+ pam_syslog (pamh, LOG_ERR, "Unknown PAM_ITEM: <%s>", name);
+ return NULL;
}
- /* Now its easy */
-
- if (var->override && *(var->override)) {
- /* if there is a non-empty string in var->override, we use it */
- D(("OVERRIDE variable <%s> being used: <%s>", var->name, var->override));
- var->value = var->override;
- retval = DEFINE_VAR;
- } else {
+ if (pam_get_item(pamh, item, &itemval) != PAM_SUCCESS) {
+ D(("pam_get_item failed"));
+ return NULL; /* let pam_get_item() log the error */
+ }
- var->value = var->defval;
- if (&quote == var->defval) {
- /*
- * This means that the empty string was given for defval value
- * which indicates that a variable should be defined with no value
- */
- D(("An empty variable: <%s>", var->name));
- retval = DEFINE_VAR;
- } else if (var->defval) {
- D(("DEFAULT variable <%s> being used: <%s>", var->name, var->defval));
- retval = DEFINE_VAR;
- } else {
- D(("UNDEFINE variable <%s>", var->name));
- retval = UNDEFINE_VAR;
+ if (itemval && (strcmp(name, "HOME") == 0 || strcmp(name, "SHELL") == 0)) {
+ struct passwd *user_entry;
+ user_entry = pam_modutil_getpwnam (pamh, itemval);
+ if (!user_entry) {
+ pam_syslog(pamh, LOG_ERR, "No such user!?");
+ return NULL;
}
+ return (strcmp(name, "SHELL") == 0) ?
+ user_entry->pw_shell :
+ user_entry->pw_dir;
}
D(("Exit."));
- return retval;
+ return itemval;
}
-static int _expand_arg(pam_handle_t *pamh, char **value)
+static int
+_expand_arg(pam_handle_t *pamh, char **value)
{
const char *orig=*value, *tmpptr=NULL;
char *ptr; /*
@@ -550,12 +584,8 @@ static int _expand_arg(pam_handle_t *pamh, char **value)
char type, tmpval[BUF_SIZE];
/* I know this shouldn't be hard-coded but it's so much easier this way */
- char tmp[MAX_ENV];
- size_t idx;
-
- D(("Remember to initialize tmp!"));
- memset(tmp, 0, MAX_ENV);
- idx = 0;
+ char tmp[MAX_ENV] = {};
+ size_t idx = 0;
/*
* (possibly non-existent) environment variables can be used as values
@@ -580,7 +610,7 @@ static int _expand_arg(pam_handle_t *pamh, char **value)
D(("Variable buffer overflow: <%s> + <%s>", tmp, tmpptr));
pam_syslog (pamh, LOG_ERR, "Variable buffer overflow: <%s> + <%s>",
tmp, tmpptr);
- return PAM_BUF_ERR;
+ goto buf_err;
}
continue;
}
@@ -605,7 +635,7 @@ static int _expand_arg(pam_handle_t *pamh, char **value)
D(("Unterminated expandable variable: <%s>", orig-2));
pam_syslog(pamh, LOG_ERR,
"Unterminated expandable variable: <%s>", orig-2);
- return PAM_ABORT;
+ goto abort_err;
}
strncpy(tmpval, orig, sizeof(tmpval));
tmpval[sizeof(tmpval)-1] = '\0';
@@ -631,7 +661,7 @@ static int _expand_arg(pam_handle_t *pamh, char **value)
default:
D(("Impossible error, type == <%c>", type));
pam_syslog(pamh, LOG_CRIT, "Impossible error, type == <%c>", type);
- return PAM_ABORT;
+ goto abort_err;
} /* switch */
if (tmpptr) {
@@ -644,7 +674,7 @@ static int _expand_arg(pam_handle_t *pamh, char **value)
D(("Variable buffer overflow: <%s> + <%s>", tmp, tmpptr));
pam_syslog (pamh, LOG_ERR,
"Variable buffer overflow: <%s> + <%s>", tmp, tmpptr);
- return PAM_BUF_ERR;
+ goto buf_err;
}
}
} /* if ('{' != *orig++) */
@@ -656,7 +686,7 @@ static int _expand_arg(pam_handle_t *pamh, char **value)
D(("Variable buffer overflow: <%s> + <%s>", tmp, tmpptr));
pam_syslog(pamh, LOG_ERR,
"Variable buffer overflow: <%s> + <%s>", tmp, tmpptr);
- return PAM_BUF_ERR;
+ goto buf_err;
}
}
} /* for (;*orig;) */
@@ -667,65 +697,118 @@ static int _expand_arg(pam_handle_t *pamh, char **value)
D(("Couldn't malloc %d bytes for expanded var", idx + 1));
pam_syslog (pamh, LOG_CRIT, "Couldn't malloc %lu bytes for expanded var",
(unsigned long)idx+1);
- return PAM_BUF_ERR;
+ goto buf_err;
}
}
strcpy(*value, tmp);
- memset(tmp, '\0', sizeof(tmp));
+ pam_overwrite_array(tmp);
+ pam_overwrite_array(tmpval);
D(("Exit."));
return PAM_SUCCESS;
+buf_err:
+ pam_overwrite_array(tmp);
+ pam_overwrite_array(tmpval);
+ return PAM_BUF_ERR;
+abort_err:
+ pam_overwrite_array(tmp);
+ pam_overwrite_array(tmpval);
+ return PAM_ABORT;
}
-static const char * _pam_get_item_byname(pam_handle_t *pamh, const char *name)
+static int
+_check_var(pam_handle_t *pamh, VAR *var)
{
/*
- * This function just allows me to use names as given in the config
- * file and translate them into the appropriate PAM_ITEM macro
+ * Examine the variable and determine what action to take.
+ * Returns DEFINE_VAR, UNDEFINE_VAR depending on action to take
+ * or a PAM_* error code if passed back from other routines
+ *
+ * if no DEFAULT provided, the empty string is assumed
+ * if no OVERRIDE provided, the empty string is assumed
+ * if DEFAULT= and OVERRIDE evaluates to the empty string,
+ * this variable should be undefined
+ * if DEFAULT="" and OVERRIDE evaluates to the empty string,
+ * this variable should be defined with no value
+ * if OVERRIDE=value and value turns into the empty string, DEFAULT is used
+ *
+ * If DEFINE_VAR is to be returned, the correct value to define will
+ * be pointed to by var->value
*/
- int item;
- const void *itemval;
+ int retval;
D(("Called."));
- if (strcmp(name, "PAM_USER") == 0 || strcmp(name, "HOME") == 0 || strcmp(name, "SHELL") == 0) {
- item = PAM_USER;
- } else if (strcmp(name, "PAM_USER_PROMPT") == 0) {
- item = PAM_USER_PROMPT;
- } else if (strcmp(name, "PAM_TTY") == 0) {
- item = PAM_TTY;
- } else if (strcmp(name, "PAM_RUSER") == 0) {
- item = PAM_RUSER;
- } else if (strcmp(name, "PAM_RHOST") == 0) {
- item = PAM_RHOST;
- } else {
- D(("Unknown PAM_ITEM: <%s>", name));
- pam_syslog (pamh, LOG_ERR, "Unknown PAM_ITEM: <%s>", name);
- return NULL;
- }
- if (pam_get_item(pamh, item, &itemval) != PAM_SUCCESS) {
- D(("pam_get_item failed"));
- return NULL; /* let pam_get_item() log the error */
+ /*
+ * First thing to do is to expand any arguments, but only
+ * if they are not the special quote values (cause expand_arg
+ * changes memory).
+ */
+
+ if (var->defval && (&quote != var->defval) &&
+ ((retval = _expand_arg(pamh, &(var->defval))) != PAM_SUCCESS)) {
+ return retval;
+ }
+ if (var->override && (&quote != var->override) &&
+ ((retval = _expand_arg(pamh, &(var->override))) != PAM_SUCCESS)) {
+ return retval;
}
- if (itemval && (strcmp(name, "HOME") == 0 || strcmp(name, "SHELL") == 0)) {
- struct passwd *user_entry;
- user_entry = pam_modutil_getpwnam (pamh, itemval);
- if (!user_entry) {
- pam_syslog(pamh, LOG_ERR, "No such user!?");
- return NULL;
+ /* Now its easy */
+
+ if (var->override && *(var->override)) {
+ /* if there is a non-empty string in var->override, we use it */
+ D(("OVERRIDE variable <%s> being used: <%s>", var->name, var->override));
+ var->value = var->override;
+ retval = DEFINE_VAR;
+ } else {
+
+ var->value = var->defval;
+ if (&quote == var->defval) {
+ /*
+ * This means that the empty string was given for defval value
+ * which indicates that a variable should be defined with no value
+ */
+ D(("An empty variable: <%s>", var->name));
+ retval = DEFINE_VAR;
+ } else if (var->defval) {
+ D(("DEFAULT variable <%s> being used: <%s>", var->name, var->defval));
+ retval = DEFINE_VAR;
+ } else {
+ D(("UNDEFINE variable <%s>", var->name));
+ retval = UNDEFINE_VAR;
}
- return (strcmp(name, "SHELL") == 0) ?
- user_entry->pw_shell :
- user_entry->pw_dir;
}
D(("Exit."));
- return itemval;
+ return retval;
+}
+
+static void
+_clean_var(VAR *var)
+{
+ if (var->name) {
+ pam_overwrite_string(var->name);
+ free(var->name);
+ }
+ if (var->defval && (&quote != var->defval)) {
+ pam_overwrite_string(var->defval);
+ free(var->defval);
+ }
+ if (var->override && (&quote != var->override)) {
+ pam_overwrite_string(var->override);
+ free(var->override);
+ }
+ var->name = NULL;
+ var->value = NULL; /* never has memory specific to it */
+ var->defval = NULL;
+ var->override = NULL;
+ return;
}
-static int _define_var(pam_handle_t *pamh, int ctrl, VAR *var)
+static int
+_define_var(pam_handle_t *pamh, int ctrl, VAR *var)
{
/* We have a variable to define, this is a simple function */
@@ -747,7 +830,8 @@ static int _define_var(pam_handle_t *pamh, int ctrl, VAR *var)
return retval;
}
-static int _undefine_var(pam_handle_t *pamh, int ctrl, VAR *var)
+static int
+_undefine_var(pam_handle_t *pamh, int ctrl, VAR *var)
{
/* We have a variable to undefine, this is a simple function */
@@ -758,25 +842,175 @@ static int _undefine_var(pam_handle_t *pamh, int ctrl, VAR *var)
return pam_putenv(pamh, var->name);
}
-static void _clean_var(VAR *var)
+static int
+_parse_config_file(pam_handle_t *pamh, int ctrl, const char *file)
{
- if (var->name) {
- free(var->name);
- }
- if (var->defval && (&quote != var->defval)) {
- free(var->defval);
- }
- if (var->override && (&quote != var->override)) {
- free(var->override);
+ int retval;
+ VAR Var, *var=&Var;
+ char **conf_list = NULL;
+
+ var->name=NULL; var->defval=NULL; var->override=NULL;
+
+ D(("Called."));
+
+#ifdef USE_ECONF
+ /* If "file" is not NULL, only this file will be parsed. */
+ retval = econf_read_file(pamh, file, " \t", PAM_ENV, ".conf", "security", &conf_list);
+#else
+ /* Only one file will be parsed. So, file has to be set. */
+ if (file == NULL) /* No filename has been set via argv. */
+ file = DEFAULT_CONF_FILE;
+#ifdef VENDOR_DEFAULT_CONF_FILE
+ /*
+ * Check whether file is available.
+ * If it does not exist, fall back to VENDOR_DEFAULT_CONF_FILE file.
+ */
+ struct stat stat_buffer;
+ if (stat(file, &stat_buffer) != 0 && errno == ENOENT) {
+ file = VENDOR_DEFAULT_CONF_FILE;
}
- var->name = NULL;
- var->value = NULL; /* never has memory specific to it */
- var->defval = NULL;
- var->override = NULL;
- return;
+#endif
+ retval = read_file(pamh, file, &conf_list);
+#endif
+
+ if (retval != PAM_SUCCESS)
+ return retval;
+
+ for (char **conf = conf_list; *conf != NULL; ++conf) {
+ if ((retval = _parse_line(pamh, *conf, var)) == GOOD_LINE) {
+ retval = _check_var(pamh, var);
+
+ if (DEFINE_VAR == retval) {
+ retval = _define_var(pamh, ctrl, var);
+
+ } else if (UNDEFINE_VAR == retval) {
+ retval = _undefine_var(pamh, ctrl, var);
+ }
+ }
+ if (PAM_SUCCESS != retval && ILLEGAL_VAR != retval
+ && BAD_LINE != retval && PAM_BAD_ITEM != retval) break;
+
+ _clean_var(var);
+
+ } /* for */
+
+ /* tidy up */
+ free_string_array(conf_list);
+ _clean_var(var); /* We could have got here prematurely,
+ * this is safe though */
+ D(("Exit."));
+ return (retval != 0 ? PAM_ABORT : PAM_SUCCESS);
}
+static int
+_parse_env_file(pam_handle_t *pamh, int ctrl, const char *file)
+{
+ int retval=PAM_SUCCESS, i, t;
+ char *key, *mark;
+ char **env_list = NULL;
+
+#ifdef USE_ECONF
+ retval = econf_read_file(pamh, file, "=", ENVIRONMENT, "", "", &env_list);
+#else
+ /* Only one file will be parsed. So, file has to be set. */
+ if (file == NULL) /* No filename has been set via argv. */
+ file = DEFAULT_ETC_ENVFILE;
+#ifdef VENDOR_DEFAULT_ETC_ENVFILE
+ /*
+ * Check whether file is available.
+ * If it does not exist, fall back to VENDOR_DEFAULT_ETC_ENVFILE; file.
+ */
+ struct stat stat_buffer;
+ if (stat(file, &stat_buffer) != 0 && errno == ENOENT) {
+ file = VENDOR_DEFAULT_ETC_ENVFILE;
+ }
+#endif
+ retval = read_file(pamh, file, &env_list);
+#endif
+
+ if (retval != PAM_SUCCESS)
+ return retval == PAM_IGNORE ? PAM_SUCCESS : retval;
+
+ for (char **env = env_list; *env != NULL; ++env) {
+ key = *env;
+
+ /* skip leading white space */
+ key += strspn(key, " \n\t");
+
+ /* skip blanks lines and comments */
+ if (key[0] == '#')
+ continue;
+
+ /* skip over "export " if present so we can be compat with
+ bash type declarations */
+ if (strncmp(key, "export ", (size_t) 7) == 0)
+ key += 7;
+
+ /* now find the end of value */
+ mark = key;
+ while(mark[0] != '\n' && mark[0] != '#' && mark[0] != '\0')
+ mark++;
+ if (mark[0] != '\0')
+ mark[0] = '\0';
+
+ /*
+ * sanity check, the key must be alphanumeric
+ */
+
+ if (key[0] == '=') {
+ pam_syslog(pamh, LOG_ERR,
+ "missing key name '%s' in %s', ignoring",
+ key, file);
+ continue;
+ }
+ for ( i = 0 ; key[i] != '=' && key[i] != '\0' ; i++ )
+ if (!isalnum(key[i]) && key[i] != '_') {
+ pam_syslog(pamh, LOG_ERR,
+ "non-alphanumeric key '%s' in %s', ignoring",
+ key, file);
+ break;
+ }
+ /* non-alphanumeric key, ignore this line */
+ if (key[i] != '=' && key[i] != '\0')
+ continue;
+
+ /* now we try to be smart about quotes around the value,
+ but not too smart, we can't get all fancy with escaped
+ values like bash */
+ if (key[i] == '=' && (key[++i] == '\"' || key[i] == '\'')) {
+ for ( t = i+1 ; key[t] != '\0' ; t++)
+ if (key[t] != '\"' && key[t] != '\'')
+ key[i++] = key[t];
+ else if (key[t+1] != '\0')
+ key[i++] = key[t];
+ key[i] = '\0';
+ }
+
+ /* if this is a request to delete a variable, check that it's
+ actually set first, so we don't get a vague error back from
+ pam_putenv() */
+ for (i = 0; key[i] != '=' && key[i] != '\0'; i++);
+
+ if (key[i] == '\0' && !pam_getenv(pamh,key))
+ continue;
+
+ /* set the env var, if it fails, we break out of the loop */
+ retval = pam_putenv(pamh, key);
+ if (retval != PAM_SUCCESS) {
+ D(("error setting env \"%s\"", key));
+ break;
+ } else if (ctrl & PAM_DEBUG_ARG) {
+ pam_syslog(pamh, LOG_DEBUG,
+ "pam_putenv(\"%s\")", key);
+ }
+ }
+
+ /* tidy up */
+ free_string_array(env_list);
+ D(("Exit."));
+ return retval;
+}
/* --- authentication management functions (only) --- */
diff --git a/modules/pam_env/pam_env.conf.5 b/modules/pam_env/pam_env.conf.5
index 40fd118b..90de5eaf 100644
--- a/modules/pam_env/pam_env.conf.5
+++ b/modules/pam_env/pam_env.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_env.conf
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_ENV\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_ENV\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -36,7 +36,7 @@ The
file specifies the environment variables to be set, unset or modified by
\fBpam_env\fR(8)\&. When someone logs in, this file is read and the environment variables are set according\&.
.PP
-Each line starts with the variable name, there are then two possible options for each variable DEFAULT and OVERRIDE\&. DEFAULT allows an administrator to set the value of the variable to some default value, if none is supplied then the empty string is assumed\&. The OVERRIDE option tells pam_env that it should enter in its value (overriding the default value) if there is one to use\&. OVERRIDE is not used, "" is assumed and no override will be done\&.
+Each line starts with the variable name, there are then two possible options for each variable DEFAULT and OVERRIDE\&. DEFAULT allows an administrator to set the value of the variable to some default value, if none is supplied then the empty string is assumed\&. The OVERRIDE option tells pam_env that it should enter in its value (overriding the default value) if there is one to use\&. When OVERRIDE is not used, "" is assumed and no override will be done\&.
.PP
\fIVARIABLE\fR
[\fIDEFAULT=[value]\fR] [\fIOVERRIDE=[value]\fR]
diff --git a/modules/pam_env/pam_env.conf.5.xml b/modules/pam_env/pam_env.conf.5.xml
index fca046fe..81fc9613 100644
--- a/modules/pam_env/pam_env.conf.5.xml
+++ b/modules/pam_env/pam_env.conf.5.xml
@@ -1,13 +1,10 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_env.conf">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_env.conf">
<refmeta>
<refentrytitle>pam_env.conf</refentrytitle>
<manvolnum>5</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
<refnamediv>
@@ -17,10 +14,18 @@
</refnamediv>
- <refsect1 id='pam_env.conf-description'>
+ <refsect1 xml:id="pam_env.conf-description">
<title>DESCRIPTION</title>
- <para>
+ <para condition="with_vendordir">
+ The <filename>%vendordir%/security/pam_env.conf</filename> and
+ <filename>/etc/security/pam_env.conf</filename> files specify
+ the environment variables to be set, unset or modified by
+ <citerefentry><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+ When someone logs in, these files are read and the environment
+ variables are set according.
+ </para>
+ <para condition="without_vendordir">
The <filename>/etc/security/pam_env.conf</filename> file specifies
the environment variables to be set, unset or modified by
<citerefentry><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
@@ -33,7 +38,7 @@
administrator to set the value of the variable to some default
value, if none is supplied then the empty string is assumed. The
OVERRIDE option tells pam_env that it should enter in its value
- (overriding the default value) if there is one to use. OVERRIDE is
+ (overriding the default value) if there is one to use. When OVERRIDE is
not used, "" is assumed and no override will be done.
</para>
<para>
@@ -61,7 +66,15 @@
at front) can be used to mark this line as a comment line.
</para>
- <para>
+ <para condition="with_vendordir">
+ The <filename>%vendordir%/environment</filename> and <filename>/etc/environment</filename> files specify
+ the environment variables to be set. These files must consist of simple
+ <emphasis>NAME=VALUE</emphasis> pairs on separate lines.
+ The <citerefentry><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ module will read these files after the <filename>pam_env.conf</filename>
+ file.
+ </para>
+ <para condition="without_vendordir">
The <filename>/etc/environment</filename> file specifies
the environment variables to be set. The file must consist of simple
<emphasis>NAME=VALUE</emphasis> pairs on separate lines.
@@ -71,7 +84,7 @@
</para>
</refsect1>
- <refsect1 id="pam_env.conf-examples">
+ <refsect1 xml:id="pam_env.conf-examples">
<title>EXAMPLES</title>
<para>
These are some example lines which might be specified in
@@ -117,7 +130,7 @@
</programlisting>
</refsect1>
- <refsect1 id="pam_env.conf-see_also">
+ <refsect1 xml:id="pam_env.conf-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
@@ -127,7 +140,7 @@
</para>
</refsect1>
- <refsect1 id="pam_env.conf-author">
+ <refsect1 xml:id="pam_env.conf-author">
<title>AUTHOR</title>
<para>
pam_env was written by Dave Kinchlea &lt;kinch@kinch.ark.com&gt;.
diff --git a/modules/pam_env/tst-pam_env-retval.c b/modules/pam_env/tst-pam_env-retval.c
new file mode 100644
index 00000000..23ad10b9
--- /dev/null
+++ b/modules/pam_env/tst-pam_env-retval.c
@@ -0,0 +1,287 @@
+/*
+ * Check pam_env return values.
+ *
+ * Copyright (c) 2020-2022 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2022 Stefan Schubert <schubi@suse.de>
+ */
+
+#include "test_assert.h"
+
+#include <errno.h>
+#include <libgen.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <security/pam_appl.h>
+
+#define MODULE_NAME "pam_env"
+#define TEST_NAME "tst-" MODULE_NAME "-retval"
+#define TEST_NAME_DIR TEST_NAME ".dir"
+
+static const char service_file[] = TEST_NAME ".service";
+static const char missing_file[] = TEST_NAME ".missing";
+static const char my_conf[] = TEST_NAME ".conf";
+static const char my_env[] = TEST_NAME ".env";
+#ifdef VENDORDIR
+static const char dir_usr_etc_security[] = TEST_NAME_DIR VENDOR_SCONFIGDIR;
+static const char usr_env[] = TEST_NAME_DIR VENDORDIR "/environment";
+static const char usr_conf[] = TEST_NAME_DIR VENDOR_SCONFIGDIR "/pam_env.conf";
+#endif
+
+static struct pam_conv conv;
+
+#ifdef VENDORDIR
+static void
+mkdir_p(const char *pathname, mode_t mode)
+{
+ if (mkdir(pathname, mode) == 0 || errno == EEXIST)
+ return;
+ ASSERT_EQ(errno, ENOENT);
+
+ char *buf;
+ ASSERT_NE(NULL, buf = strdup(pathname));
+ mkdir_p(dirname(buf), mode);
+ free(buf);
+
+ ASSERT_EQ(0, mkdir(pathname, mode));
+}
+
+static void
+rmdir_p(const char *pathname)
+{
+ if (rmdir(pathname) != 0)
+ return;
+
+ char *buf;
+ ASSERT_NE(NULL, buf = strdup(pathname));
+ rmdir_p(dirname(buf));
+ free(buf);
+}
+#endif
+
+static void
+setup(void)
+{
+ FILE *fp;
+
+ ASSERT_NE(NULL, fp = fopen(my_conf, "w"));
+ ASSERT_LT(0, fprintf(fp,
+ "EDITOR\tDEFAULT=vim\n"
+ "PAGER\tDEFAULT=more\n"));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_NE(NULL, fp = fopen(my_env, "w"));
+ ASSERT_LT(0, fprintf(fp,
+ "test_value=foo\n"
+ "test2_value=bar\n"));
+ ASSERT_EQ(0, fclose(fp));
+
+#ifdef VENDORDIR
+ mkdir_p(dir_usr_etc_security, 0755);
+
+ ASSERT_NE(NULL, fp = fopen(usr_env, "w"));
+ ASSERT_LT(0, fprintf(fp,
+ "usr_etc_test=foo\n"
+ "usr_etc_test2=bar\n"));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_NE(NULL, fp = fopen(usr_conf, "w"));
+ ASSERT_LT(0, fprintf(fp,
+ "PAGER DEFAULT=emacs\n"
+ "MANPAGER DEFAULT=less\n"));
+ ASSERT_EQ(0, fclose(fp));
+#endif
+}
+
+static void
+cleanup(void)
+{
+ ASSERT_EQ(0, unlink(my_conf));
+ ASSERT_EQ(0, unlink(my_env));
+#ifdef VENDORDIR
+ ASSERT_EQ(0, unlink(usr_env));
+ ASSERT_EQ(0, unlink(usr_conf));
+ rmdir_p(dir_usr_etc_security);
+#endif
+}
+
+static void
+check_array(const char **array1, char **array2)
+{
+ for (const char **a1 = array1; *a1 != NULL; ++a1) {
+ char **a2;
+ for (a2 = array2; *a2 != NULL; ++a2) {
+ if (strcmp(*a1, *a2) == 0)
+ break;
+ }
+ ASSERT_NE(NULL, *a2);
+ }
+}
+
+static void
+check_env(const char **list)
+{
+ pam_handle_t *pamh = NULL;
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+
+ ASSERT_EQ(PAM_SUCCESS, pam_open_session(pamh, 0));
+
+ char **env_list = pam_getenvlist(pamh);
+ ASSERT_NE(NULL, env_list);
+
+ check_array(list, env_list);
+
+ for (char **e = env_list; *e != NULL; ++e)
+ free(*e);
+ free(env_list);
+
+ ASSERT_EQ(PAM_SUCCESS, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+}
+
+int
+main(void)
+{
+ pam_handle_t *pamh = NULL;
+ FILE *fp;
+ char cwd[PATH_MAX];
+
+ ASSERT_NE(NULL, getcwd(cwd, sizeof(cwd)));
+
+ setup();
+
+ /*
+ * When conffile= specifies a missing file, all methods except
+ * pam_sm_acct_mgmt and pam_sm_chauthtok return PAM_IGNORE.
+ * The return code of the stack where every module returns PAM_IGNORE
+ * is PAM_PERM_DENIED.
+ */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so conffile=%s/%s\n"
+ "account required %s/.libs/%s.so conffile=%s/%s\n"
+ "password required %s/.libs/%s.so conffile=%s/%s\n"
+ "session required %s/.libs/%s.so conffile=%s/%s\n",
+ cwd, MODULE_NAME, cwd, missing_file,
+ cwd, MODULE_NAME, cwd, missing_file,
+ cwd, MODULE_NAME, cwd, missing_file,
+ cwd, MODULE_NAME, cwd, missing_file));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_PERM_DENIED, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_SERVICE_ERR, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_SERVICE_ERR, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ /*
+ * When conffile= specifies a missing file, all methods except
+ * pam_sm_acct_mgmt and pam_sm_chauthtok return PAM_IGNORE.
+ * pam_permit is added after pam_env to convert PAM_IGNORE to PAM_SUCCESS.
+ */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so conffile=%s/%s\n"
+ "auth required %s/../pam_permit/.libs/pam_permit.so\n"
+ "account required %s/.libs/%s.so conffile=%s/%s\n"
+ "account required %s/../pam_permit/.libs/pam_permit.so\n"
+ "password required %s/.libs/%s.so conffile=%s/%s\n"
+ "password required %s/../pam_permit/.libs/pam_permit.so\n"
+ "session required %s/.libs/%s.so conffile=%s/%s\n"
+ "session required %s/../pam_permit/.libs/pam_permit.so\n",
+ cwd, MODULE_NAME, cwd, missing_file, cwd,
+ cwd, MODULE_NAME, cwd, missing_file, cwd,
+ cwd, MODULE_NAME, cwd, missing_file, cwd,
+ cwd, MODULE_NAME, cwd, missing_file, cwd));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_SUCCESS, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_SERVICE_ERR, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_SERVICE_ERR, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ /*
+ * conffile= specifies an existing file,
+ * envfile= specifies an empty file.
+ */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "session required %s/.libs/%s.so"
+ " conffile=%s/%s envfile=%s\n",
+ cwd, MODULE_NAME,
+ cwd, my_conf, "/dev/null"));
+ ASSERT_EQ(0, fclose(fp));
+
+ const char *env1[] = { "EDITOR=vim", "PAGER=more", NULL };
+ check_env(env1);
+
+ /*
+ * conffile= specifies an empty file,
+ * envfile= specifies an existing file.
+ */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "session required %s/.libs/%s.so"
+ " conffile=%s envfile=%s/%s\n",
+ cwd, MODULE_NAME,
+ "/dev/null", cwd, my_env));
+ ASSERT_EQ(0, fclose(fp));
+
+ const char *env2[] = { "test_value=foo", "test2_value=bar", NULL };
+ check_env(env2);
+
+#if defined (USE_ECONF) && defined (VENDORDIR)
+
+ /* envfile is a directory. So values will be read from {TEST_NAME_DIR}/usr/etc and {TEST_NAME_DIR}/etc */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "session required %s/.libs/%s.so"
+ " conffile=%s envfile=%s/%s/\n",
+ cwd, MODULE_NAME,
+ "/dev/null",
+ cwd, TEST_NAME_DIR));
+ ASSERT_EQ(0, fclose(fp));
+
+ const char *env3[] = {"usr_etc_test=foo", "usr_etc_test2=bar", NULL};
+ check_env(env3);
+
+ /* conffile is a directory. So values will be read from {TEST_NAME_DIR}/usr/etc and {TEST_NAME_DIR}/etc */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "session required %s/.libs/%s.so"
+ " conffile=%s/%s/ envfile=%s\n",
+ cwd, MODULE_NAME,
+ cwd, TEST_NAME_DIR,
+ "/dev/null"));
+ ASSERT_EQ(0, fclose(fp));
+
+ const char *env4[] = {"PAGER=emacs", "MANPAGER=less", NULL};
+ check_env(env4);
+
+#endif
+
+ /* cleanup */
+ cleanup();
+ ASSERT_EQ(0, unlink(service_file));
+
+ return 0;
+}
diff --git a/modules/pam_exec/Makefile.am b/modules/pam_exec/Makefile.am
index 713de6af..a0582226 100644
--- a/modules/pam_exec/Makefile.am
+++ b/modules/pam_exec/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_exec
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_exec/Makefile.in b/modules/pam_exec/Makefile.in
index a312387a..f738998d 100644
--- a/modules/pam_exec/Makefile.in
+++ b/modules/pam_exec/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_exec.8.xml
dist_check_SCRIPTS = tst-pam_exec
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_exec/README.xml b/modules/pam_exec/README.xml
index 5e76cab3..1928d7f9 100644
--- a/modules/pam_exec/README.xml
+++ b/modules/pam_exec/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_exec.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_exec.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_exec-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_exec.8.xml" xpointer='xpointer(id("pam_exec-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_exec.8.xml" xpointer='xpointer(id("pam_exec-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_exec.8.xml" xpointer='xpointer(id("pam_exec-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_exec.8.xml" xpointer='xpointer(id("pam_exec-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_exec.8.xml" xpointer='xpointer(id("pam_exec-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_exec/pam_exec.8 b/modules/pam_exec/pam_exec.8
index 71087918..4c7023d9 100644
--- a/modules/pam_exec/pam_exec.8
+++ b/modules/pam_exec/pam_exec.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_exec
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_EXEC" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_EXEC" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -57,12 +57,12 @@ Commands called by pam_exec need to be aware of that the user can have control o
.SH "OPTIONS"
.PP
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBexpose_authtok\fR
+expose_authtok
.RS 4
During authentication the calling command can read the password from
\fBstdin\fR(3)\&. Only first
@@ -70,18 +70,18 @@ During authentication the calling command can read the password from
bytes of a password are provided to the command\&.
.RE
.PP
-\fBlog=\fR\fB\fIfile\fR\fR
+log=file
.RS 4
The output of the command is appended to
file
.RE
.PP
-\fBtype=\fR\fB\fItype\fR\fR
+type=type
.RS 4
Only run the command if the module type matches the given type\&.
.RE
.PP
-\fBstdout\fR
+stdout
.RS 4
Per default the output of the executed command is written to
/dev/null\&. With this option, the stdout output of the executed command is redirected to the calling application\&. It\*(Aqs in the responsibility of this application what happens with the output\&. The
@@ -89,17 +89,17 @@ Per default the output of the executed command is written to
option is ignored\&.
.RE
.PP
-\fBquiet\fR
+quiet
.RS 4
Per default pam_exec\&.so will echo the exit status of the external command if it fails\&. Specifying this option will suppress the message\&.
.RE
.PP
-\fBquiet_log\fR
+quiet_log
.RS 4
Per default pam_exec\&.so will log the exit status of the external command if it fails\&. Specifying this option will suppress the log message\&.
.RE
.PP
-\fBseteuid\fR
+seteuid
.RS 4
Per default pam_exec\&.so will execute the external command with the real user ID of the calling process\&. Specifying this option means the command is run with the effective user ID\&.
.RE
diff --git a/modules/pam_exec/pam_exec.8.xml b/modules/pam_exec/pam_exec.8.xml
index 7e89943c..13abe6e6 100644
--- a/modules/pam_exec/pam_exec.8.xml
+++ b/modules/pam_exec/pam_exec.8.xml
@@ -1,57 +1,54 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_exec">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_exec">
<refmeta>
<refentrytitle>pam_exec</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_exec-name">
+ <refnamediv xml:id="pam_exec-name">
<refname>pam_exec</refname>
<refpurpose>PAM module which calls an external command</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_exec-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_exec-cmdsynopsis" sepchar=" ">
<command>pam_exec.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
expose_authtok
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
seteuid
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
quiet
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
quiet_log
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
stdout
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
log=<replaceable>file</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
type=<replaceable>type</replaceable>
</arg>
- <arg choice="plain">
+ <arg choice="plain" rep="norepeat">
<replaceable>command</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
<replaceable>...</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_exec-description">
+ <refsect1 xml:id="pam_exec-description">
<title>DESCRIPTION</title>
@@ -83,7 +80,7 @@
</refsect1>
- <refsect1 id="pam_exec-options">
+ <refsect1 xml:id="pam_exec-options">
<title>OPTIONS</title>
<para>
@@ -91,7 +88,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -102,7 +99,7 @@
<varlistentry>
<term>
- <option>expose_authtok</option>
+ expose_authtok
</term>
<listitem>
<para>
@@ -117,7 +114,7 @@
<varlistentry>
<term>
- <option>log=<replaceable>file</replaceable></option>
+ log=file
</term>
<listitem>
<para>
@@ -129,7 +126,7 @@
<varlistentry>
<term>
- <option>type=<replaceable>type</replaceable></option>
+ type=type
</term>
<listitem>
<para>
@@ -140,7 +137,7 @@
<varlistentry>
<term>
- <option>stdout</option>
+ stdout
</term>
<listitem>
<para>
@@ -151,7 +148,7 @@
<varlistentry>
<term>
- <option>quiet</option>
+ quiet
</term>
<listitem>
<para>
@@ -164,7 +161,7 @@
<varlistentry>
<term>
- <option>quiet_log</option>
+ quiet_log
</term>
<listitem>
<para>
@@ -177,7 +174,7 @@
<varlistentry>
<term>
- <option>seteuid</option>
+ seteuid
</term>
<listitem>
<para>
@@ -194,7 +191,7 @@
</para>
</refsect1>
- <refsect1 id="pam_exec-types">
+ <refsect1 xml:id="pam_exec-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>auth</option>, <option>account</option>,
@@ -202,7 +199,7 @@
</para>
</refsect1>
- <refsect1 id='pam_exec-return_values'>
+ <refsect1 xml:id="pam_exec-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -278,7 +275,7 @@
</para>
</refsect1>
- <refsect1 id='pam_exec-examples'>
+ <refsect1 xml:id="pam_exec-examples">
<title>EXAMPLES</title>
<para>
Add the following line to <filename>/etc/pam.d/passwd</filename> to
@@ -293,7 +290,7 @@
</para>
</refsect1>
- <refsect1 id='pam_exec-see_also'>
+ <refsect1 xml:id="pam_exec-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -308,7 +305,7 @@
</para>
</refsect1>
- <refsect1 id='pam_exec-author'>
+ <refsect1 xml:id="pam_exec-author">
<title>AUTHOR</title>
<para>
pam_exec was written by Thorsten Kukuk &lt;kukuk@thkukuk.de&gt; and
@@ -316,4 +313,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_exec/pam_exec.c b/modules/pam_exec/pam_exec.c
index 05dec167..9d2145dc 100644
--- a/modules/pam_exec/pam_exec.c
+++ b/modules/pam_exec/pam_exec.c
@@ -48,6 +48,7 @@
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <signal.h>
#include <security/pam_modules.h>
#include <security/pam_modutil.h>
@@ -105,6 +106,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
FILE *stdout_file = NULL;
int retval;
const char *name;
+ struct sigaction newsa, oldsa;
if (argc < 1) {
pam_syslog (pamh, LOG_ERR,
@@ -182,6 +184,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
if (retval != PAM_SUCCESS)
{
+ pam_overwrite_string (resp);
_pam_drop (resp);
if (retval == PAM_CONV_AGAIN)
retval = PAM_INCOMPLETE;
@@ -192,6 +195,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
{
pam_set_item (pamh, PAM_AUTHTOK, resp);
strncpy (authtok, resp, sizeof(authtok) - 1);
+ pam_overwrite_string (resp);
_pam_drop (resp);
}
}
@@ -200,6 +204,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
if (pipe(fds) != 0)
{
+ pam_overwrite_array(authtok);
pam_syslog (pamh, LOG_ERR, "Could not create pipe: %m");
return PAM_SYSTEM_ERR;
}
@@ -210,25 +215,38 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
{
if (pipe(stdout_fds) != 0)
{
+ pam_overwrite_array(authtok);
pam_syslog (pamh, LOG_ERR, "Could not create pipe: %m");
return PAM_SYSTEM_ERR;
}
stdout_file = fdopen(stdout_fds[0], "r");
if (!stdout_file)
{
+ pam_overwrite_array(authtok);
pam_syslog (pamh, LOG_ERR, "Could not fdopen pipe: %m");
return PAM_SYSTEM_ERR;
}
}
if (optargc >= argc) {
+ pam_overwrite_array(authtok);
pam_syslog (pamh, LOG_ERR, "No path given as argument");
return PAM_SERVICE_ERR;
}
+ memset(&newsa, '\0', sizeof(newsa));
+ newsa.sa_handler = SIG_DFL;
+ if (sigaction(SIGCHLD, &newsa, &oldsa) == -1) {
+ pam_overwrite_array(authtok);
+ pam_syslog(pamh, LOG_ERR, "failed to reset SIGCHLD handler: %m");
+ return PAM_SYSTEM_ERR;
+ }
+
pid = fork();
- if (pid == -1)
+ if (pid == -1) {
+ pam_overwrite_array(authtok);
return PAM_SYSTEM_ERR;
+ }
if (pid > 0) /* parent */
{
int status = 0;
@@ -246,6 +264,8 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
close(fds[1]);
}
+ pam_overwrite_array(authtok);
+
if (use_stdout)
{
char buf[4096];
@@ -263,6 +283,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
while ((rc = waitpid (pid, &status, 0)) == -1 &&
errno == EINTR);
+ sigaction(SIGCHLD, &oldsa, NULL); /* restore old signal handler */
if (rc == (pid_t)-1)
{
pam_syslog (pamh, LOG_ERR, "waitpid returns with -1: %m");
@@ -305,9 +326,9 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
}
else /* child */
{
- char **arggv;
+ const char **arggv;
int i;
- char **envlist, **tmp;
+ char **envlist;
int envlen, nitems;
char *envstr;
enum pam_modutil_redirect_fd redirect_stdin =
@@ -315,6 +336,8 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
enum pam_modutil_redirect_fd redirect_stdout =
(use_stdout || logfile) ? PAM_MODUTIL_IGNORE_FD : PAM_MODUTIL_NULL_FD;
+ pam_overwrite_array(authtok);
+
/* First, move all the pipes off of stdin, stdout, and stderr, to ensure
* that calls to dup2 won't close them. */
@@ -418,7 +441,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
_exit (ENOMEM);
for (i = 0; i < (argc - optargc); i++)
- arggv[i] = strdup(argv[i+optargc]);
+ arggv[i] = argv[i+optargc];
arggv[i] = NULL;
/*
@@ -430,14 +453,12 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
/* nothing */ ;
nitems = PAM_ARRAY_SIZE(env_items);
/* + 2 because of PAM_TYPE and NULL entry */
- tmp = realloc(envlist, (envlen + nitems + 2) * sizeof(*envlist));
- if (tmp == NULL)
+ envlist = realloc(envlist, (envlen + nitems + 2) * sizeof(*envlist));
+ if (envlist == NULL)
{
- free(envlist);
pam_syslog (pamh, LOG_CRIT, "realloc environment failed: %m");
_exit (ENOMEM);
}
- envlist = tmp;
for (i = 0; i < nitems; ++i)
{
const void *item;
@@ -446,7 +467,6 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
continue;
if (asprintf(&envstr, "%s=%s", env_items[i].name, (const char *)item) < 0)
{
- free(envlist);
pam_syslog (pamh, LOG_CRIT, "prepare environment failed: %m");
_exit (ENOMEM);
}
@@ -456,7 +476,6 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
if (asprintf(&envstr, "PAM_TYPE=%s", pam_type) < 0)
{
- free(envlist);
pam_syslog (pamh, LOG_CRIT, "prepare environment failed: %m");
_exit (ENOMEM);
}
@@ -466,10 +485,11 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
if (debug)
pam_syslog (pamh, LOG_DEBUG, "Calling %s ...", arggv[0]);
- execve (arggv[0], arggv, envlist);
+ DIAG_PUSH_IGNORE_CAST_QUAL;
+ execve (arggv[0], (char **) arggv, envlist);
+ DIAG_POP_IGNORE_CAST_QUAL;
i = errno;
pam_syslog (pamh, LOG_ERR, "execve(%s,...) failed: %m", arggv[0]);
- free(envlist);
_exit (i);
}
return PAM_SYSTEM_ERR; /* will never be reached. */
diff --git a/modules/pam_faildelay/Makefile.am b/modules/pam_faildelay/Makefile.am
index 3a49a117..0ca59c52 100644
--- a/modules/pam_faildelay/Makefile.am
+++ b/modules/pam_faildelay/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_faildelay
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_faildelay/Makefile.in b/modules/pam_faildelay/Makefile.in
index f06712a5..3f526dfb 100644
--- a/modules/pam_faildelay/Makefile.in
+++ b/modules/pam_faildelay/Makefile.in
@@ -434,6 +434,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -446,11 +447,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -482,12 +485,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -510,6 +515,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -520,12 +526,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -599,7 +609,8 @@ XMLS = README.xml pam_faildelay.8.xml
dist_check_SCRIPTS = tst-pam_faildelay
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_faildelay/README.xml b/modules/pam_faildelay/README.xml
index 64d4accc..8530a3d0 100644
--- a/modules/pam_faildelay/README.xml
+++ b/modules/pam_faildelay/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.docbook.org/xml/4.4/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_faildelay.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faildelay.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_faildelay-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faildelay.8.xml" xpointer='xpointer(id("pam_faildelay-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_faildelay/pam_faildelay.8 b/modules/pam_faildelay/pam_faildelay.8
index 5a29b6ea..9d1d4759 100644
--- a/modules/pam_faildelay/pam_faildelay.8
+++ b/modules/pam_faildelay/pam_faildelay.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_faildelay
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_FAILDELAY" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_FAILDELAY" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -42,12 +42,12 @@ is given, pam_faildelay will use the value of FAIL_DELAY from
/etc/login\&.defs\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Turns on debugging messages sent to syslog\&.
.RE
.PP
-\fBdelay=\fR\fB\fIN\fR\fR
+delay=N
.RS 4
Set the delay on failure to N microseconds\&.
.RE
diff --git a/modules/pam_faildelay/pam_faildelay.8.xml b/modules/pam_faildelay/pam_faildelay.8.xml
index 57107203..c31b5076 100644
--- a/modules/pam_faildelay/pam_faildelay.8.xml
+++ b/modules/pam_faildelay/pam_faildelay.8.xml
@@ -1,33 +1,30 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-
-<refentry id="pam_faildelay">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_faildelay">
<refmeta>
<refentrytitle>pam_faildelay</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_faildelay-name">
+ <refnamediv xml:id="pam_faildelay-name">
<refname>pam_faildelay</refname>
<refpurpose>Change the delay on failure per-application</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_faildelay-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_faildelay-cmdsynopsis" sepchar=" ">
<command>pam_faildelay.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
delay=<replaceable>microseconds</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_faildelay-description">
+ <refsect1 xml:id="pam_faildelay-description">
<title>DESCRIPTION</title>
@@ -41,13 +38,13 @@
</para>
</refsect1>
- <refsect1 id="pam_faildelay-options">
+ <refsect1 xml:id="pam_faildelay-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -57,7 +54,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>delay=<replaceable>N</replaceable></option>
+ delay=N
</term>
<listitem>
<para>
@@ -68,14 +65,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_faildelay-types">
+ <refsect1 xml:id="pam_faildelay-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>auth</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_faildelay-return_values'>
+ <refsect1 xml:id="pam_faildelay-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -97,7 +94,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_faildelay-examples'>
+ <refsect1 xml:id="pam_faildelay-examples">
<title>EXAMPLES</title>
<para>
The following example will set the delay on failure to
@@ -108,7 +105,7 @@ auth optional pam_faildelay.so delay=10000000
</para>
</refsect1>
- <refsect1 id='pam_faildelay-see_also'>
+ <refsect1 xml:id="pam_faildelay-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -126,11 +123,11 @@ auth optional pam_faildelay.so delay=10000000
</para>
</refsect1>
- <refsect1 id='pam_faildelay-author'>
+ <refsect1 xml:id="pam_faildelay-author">
<title>AUTHOR</title>
<para>
pam_faildelay was written by Darren Tucker &lt;dtucker@zip.com.au&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_faillock/Makefile.am b/modules/pam_faillock/Makefile.am
index 44a49660..ec61aeb0 100644
--- a/modules/pam_faillock/Makefile.am
+++ b/modules/pam_faillock/Makefile.am
@@ -15,12 +15,16 @@ endif
XMLS = README.xml pam_faillock.8.xml faillock.8.xml faillock.conf.5.xml
dist_check_SCRIPTS = tst-pam_faillock
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
-noinst_HEADERS = faillock.h
+noinst_HEADERS = faillock.h faillock_config.h
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
@@ -33,6 +37,9 @@ if HAVE_VERSIONING
pam_faillock_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
endif
+check_PROGRAMS = tst-pam_faillock-retval
+tst_pam_faillock_retval_LDADD = $(top_builddir)/libpam/libpam.la
+
faillock_LDFLAGS = @EXE_LDFLAGS@
faillock_LDADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT)
@@ -41,8 +48,8 @@ dist_secureconf_DATA = faillock.conf
securelib_LTLIBRARIES = pam_faillock.la
sbin_PROGRAMS = faillock
-pam_faillock_la_SOURCES = pam_faillock.c faillock.c
-faillock_SOURCES = main.c faillock.c
+pam_faillock_la_SOURCES = pam_faillock.c faillock.c faillock_config.c
+faillock_SOURCES = main.c faillock.c faillock_config.c
if ENABLE_REGENERATE_MAN
dist_noinst_DATA = README
diff --git a/modules/pam_faillock/Makefile.in b/modules/pam_faillock/Makefile.in
index 9070f173..e9b62c30 100644
--- a/modules/pam_faillock/Makefile.in
+++ b/modules/pam_faillock/Makefile.in
@@ -98,6 +98,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
+check_PROGRAMS = tst-pam_faillock-retval$(EXEEXT)
sbin_PROGRAMS = faillock$(EXEEXT)
subdir = modules/pam_faillock
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -160,7 +161,8 @@ LTLIBRARIES = $(securelib_LTLIBRARIES)
am__DEPENDENCIES_1 =
pam_faillock_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
$(am__DEPENDENCIES_1)
-am_pam_faillock_la_OBJECTS = pam_faillock.lo faillock.lo
+am_pam_faillock_la_OBJECTS = pam_faillock.lo faillock.lo \
+ faillock_config.lo
pam_faillock_la_OBJECTS = $(am_pam_faillock_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -171,13 +173,17 @@ pam_faillock_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_CFLAGS) $(CFLAGS) $(pam_faillock_la_LDFLAGS) $(LDFLAGS) \
-o $@
am_faillock_OBJECTS = faillock-main.$(OBJEXT) \
- faillock-faillock.$(OBJEXT)
+ faillock-faillock.$(OBJEXT) faillock-faillock_config.$(OBJEXT)
faillock_OBJECTS = $(am_faillock_OBJECTS)
faillock_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
$(am__DEPENDENCIES_1)
faillock_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(faillock_CFLAGS) \
$(CFLAGS) $(faillock_LDFLAGS) $(LDFLAGS) -o $@
+tst_pam_faillock_retval_SOURCES = tst-pam_faillock-retval.c
+tst_pam_faillock_retval_OBJECTS = tst-pam_faillock-retval.$(OBJEXT)
+tst_pam_faillock_retval_DEPENDENCIES = \
+ $(top_builddir)/libpam/libpam.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -194,8 +200,10 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/faillock-faillock.Po \
+ ./$(DEPDIR)/faillock-faillock_config.Po \
./$(DEPDIR)/faillock-main.Po ./$(DEPDIR)/faillock.Plo \
- ./$(DEPDIR)/pam_faillock.Plo
+ ./$(DEPDIR)/faillock_config.Plo ./$(DEPDIR)/pam_faillock.Plo \
+ ./$(DEPDIR)/tst-pam_faillock-retval.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -215,8 +223,10 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(pam_faillock_la_SOURCES) $(faillock_SOURCES)
-DIST_SOURCES = $(pam_faillock_la_SOURCES) $(faillock_SOURCES)
+SOURCES = $(pam_faillock_la_SOURCES) $(faillock_SOURCES) \
+ tst-pam_faillock-retval.c
+DIST_SOURCES = $(pam_faillock_la_SOURCES) $(faillock_SOURCES) \
+ tst-pam_faillock-retval.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -455,6 +465,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -467,11 +478,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -503,12 +516,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -531,6 +546,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -541,12 +557,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -618,10 +638,11 @@ EXTRA_DIST = $(XMLS)
@HAVE_DOC_TRUE@dist_man_MANS = pam_faillock.8 faillock.8 faillock.conf.5
XMLS = README.xml pam_faillock.8.xml faillock.8.xml faillock.conf.5.xml
dist_check_SCRIPTS = tst-pam_faillock
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
-noinst_HEADERS = faillock.h
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
+noinst_HEADERS = faillock.h faillock_config.h
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
@@ -629,12 +650,13 @@ faillock_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@
pam_faillock_la_LDFLAGS = -no-undefined -avoid-version -module \
$(am__append_1)
pam_faillock_la_LIBADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT)
+tst_pam_faillock_retval_LDADD = $(top_builddir)/libpam/libpam.la
faillock_LDFLAGS = @EXE_LDFLAGS@
faillock_LDADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT)
dist_secureconf_DATA = faillock.conf
securelib_LTLIBRARIES = pam_faillock.la
-pam_faillock_la_SOURCES = pam_faillock.c faillock.c
-faillock_SOURCES = main.c faillock.c
+pam_faillock_la_SOURCES = pam_faillock.c faillock.c faillock_config.c
+faillock_SOURCES = main.c faillock.c faillock_config.c
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
@@ -669,6 +691,15 @@ $(top_srcdir)/configure: $(am__configure_deps)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
@@ -761,6 +792,10 @@ faillock$(EXEEXT): $(faillock_OBJECTS) $(faillock_DEPENDENCIES) $(EXTRA_faillock
@rm -f faillock$(EXEEXT)
$(AM_V_CCLD)$(faillock_LINK) $(faillock_OBJECTS) $(faillock_LDADD) $(LIBS)
+tst-pam_faillock-retval$(EXEEXT): $(tst_pam_faillock_retval_OBJECTS) $(tst_pam_faillock_retval_DEPENDENCIES) $(EXTRA_tst_pam_faillock_retval_DEPENDENCIES)
+ @rm -f tst-pam_faillock-retval$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tst_pam_faillock_retval_OBJECTS) $(tst_pam_faillock_retval_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -768,9 +803,12 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/faillock-faillock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/faillock-faillock_config.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/faillock-main.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/faillock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/faillock_config.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_faillock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_faillock-retval.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@@ -827,6 +865,20 @@ faillock-faillock.obj: faillock.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(faillock_CFLAGS) $(CFLAGS) -c -o faillock-faillock.obj `if test -f 'faillock.c'; then $(CYGPATH_W) 'faillock.c'; else $(CYGPATH_W) '$(srcdir)/faillock.c'; fi`
+faillock-faillock_config.o: faillock_config.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(faillock_CFLAGS) $(CFLAGS) -MT faillock-faillock_config.o -MD -MP -MF $(DEPDIR)/faillock-faillock_config.Tpo -c -o faillock-faillock_config.o `test -f 'faillock_config.c' || echo '$(srcdir)/'`faillock_config.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/faillock-faillock_config.Tpo $(DEPDIR)/faillock-faillock_config.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='faillock_config.c' object='faillock-faillock_config.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(faillock_CFLAGS) $(CFLAGS) -c -o faillock-faillock_config.o `test -f 'faillock_config.c' || echo '$(srcdir)/'`faillock_config.c
+
+faillock-faillock_config.obj: faillock_config.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(faillock_CFLAGS) $(CFLAGS) -MT faillock-faillock_config.obj -MD -MP -MF $(DEPDIR)/faillock-faillock_config.Tpo -c -o faillock-faillock_config.obj `if test -f 'faillock_config.c'; then $(CYGPATH_W) 'faillock_config.c'; else $(CYGPATH_W) '$(srcdir)/faillock_config.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/faillock-faillock_config.Tpo $(DEPDIR)/faillock-faillock_config.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='faillock_config.c' object='faillock-faillock_config.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(faillock_CFLAGS) $(CFLAGS) -c -o faillock-faillock_config.obj `if test -f 'faillock_config.c'; then $(CYGPATH_W) 'faillock_config.c'; else $(CYGPATH_W) '$(srcdir)/faillock_config.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -1112,7 +1164,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
fi; \
$$success || exit 1
-check-TESTS: $(dist_check_SCRIPTS)
+check-TESTS: $(check_PROGRAMS) $(dist_check_SCRIPTS)
@list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@@ -1122,7 +1174,7 @@ check-TESTS: $(dist_check_SCRIPTS)
log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
exit $$?;
-recheck: all $(dist_check_SCRIPTS)
+recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS)
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@set +e; $(am__set_TESTS_bases); \
bases=`for i in $$bases; do echo $$i; done \
@@ -1140,6 +1192,13 @@ tst-pam_faillock.log: tst-pam_faillock
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+tst-pam_faillock-retval.log: tst-pam_faillock-retval$(EXEEXT)
+ @p='tst-pam_faillock-retval$(EXEEXT)'; \
+ b='tst-pam_faillock-retval'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
.test.log:
@p='$<'; \
$(am__set_b); \
@@ -1189,7 +1248,8 @@ distdir-am: $(DISTFILES)
fi; \
done
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+ $(dist_check_SCRIPTS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS)
@@ -1234,14 +1294,17 @@ maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \
- clean-securelibLTLIBRARIES mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-sbinPROGRAMS clean-securelibLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/faillock-faillock.Po
+ -rm -f ./$(DEPDIR)/faillock-faillock_config.Po
-rm -f ./$(DEPDIR)/faillock-main.Po
-rm -f ./$(DEPDIR)/faillock.Plo
+ -rm -f ./$(DEPDIR)/faillock_config.Plo
-rm -f ./$(DEPDIR)/pam_faillock.Plo
+ -rm -f ./$(DEPDIR)/tst-pam_faillock-retval.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1289,9 +1352,12 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/faillock-faillock.Po
+ -rm -f ./$(DEPDIR)/faillock-faillock_config.Po
-rm -f ./$(DEPDIR)/faillock-main.Po
-rm -f ./$(DEPDIR)/faillock.Plo
+ -rm -f ./$(DEPDIR)/faillock_config.Plo
-rm -f ./$(DEPDIR)/pam_faillock.Plo
+ -rm -f ./$(DEPDIR)/tst-pam_faillock-retval.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1316,9 +1382,9 @@ uninstall-man: uninstall-man5 uninstall-man8
.MAKE: check-am install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
- check-am clean clean-generic clean-libtool clean-sbinPROGRAMS \
- clean-securelibLTLIBRARIES cscopelist-am ctags ctags-am \
- distclean distclean-compile distclean-generic \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-sbinPROGRAMS clean-securelibLTLIBRARIES cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dist_secureconfDATA install-dvi \
diff --git a/modules/pam_faillock/README b/modules/pam_faillock/README
index 3b63c6bb..574b37bd 100644
--- a/modules/pam_faillock/README
+++ b/modules/pam_faillock/README
@@ -48,6 +48,10 @@ conf=/path/to/config-file
Use another configuration file instead of the default /etc/security/
faillock.conf.
+ Use another configuration file instead of the default which is to use the
+ file /etc/security/faillock.conf or, if that one is not present, the file
+ %vendordir%/security/faillock.conf.
+
The options for configuring the module behavior are described in the
faillock.conf(5) manual page. The options specified on the module command line
override the values from the configuration file.
diff --git a/modules/pam_faillock/README.xml b/modules/pam_faillock/README.xml
index f0654dbe..a62c917a 100644
--- a/modules/pam_faillock/README.xml
+++ b/modules/pam_faillock/README.xml
@@ -1,46 +1,31 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_faillock.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faillock.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_faillock-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-notes"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-notes")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_faillock.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faillock-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faillock.8.xml" xpointer='xpointer(id("pam_faillock-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_faillock/faillock.8 b/modules/pam_faillock/faillock.8
index 55443532..5d9c5db8 100644
--- a/modules/pam_faillock/faillock.8
+++ b/modules/pam_faillock/faillock.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: faillock
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "FAILLOCK" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "FAILLOCK" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -48,18 +48,27 @@ or clear the tally files of all or individual
\fIusernames\fR\&.
.SH "OPTIONS"
.PP
-\fB\-\-dir \fR\fB\fI/path/to/tally\-directory\fR\fR
+\-\-conf /path/to/config\-file
.RS 4
-The directory where the user files with the failure records are kept\&. The default is
-/var/run/faillock\&.
+The file where the configuration is located\&. The default is
+/etc/security/faillock\&.conf\&.
.RE
.PP
-\fB\-\-user \fR\fB\fIusername\fR\fR
+\-\-dir /path/to/tally\-directory
+.RS 4
+The directory where the user files with the failure records are kept\&.
+.sp
+The priority to set this option is to use the value provided from the command line\&. If this isn\*(Aqt provided, then the value from the configuration file is used\&. Finally, if neither of them has been provided, then
+/var/run/faillock
+is used\&.
+.RE
+.PP
+\-\-user username
.RS 4
The user whose failure records should be displayed or cleared\&.
.RE
.PP
-\fB\-\-reset\fR
+\-\-reset
.RS 4
Instead of displaying the user\*(Aqs failure records, clear them\&.
.RE
diff --git a/modules/pam_faillock/faillock.8.xml b/modules/pam_faillock/faillock.8.xml
index 6c20593c..74440fc8 100644
--- a/modules/pam_faillock/faillock.8.xml
+++ b/modules/pam_faillock/faillock.8.xml
@@ -1,36 +1,33 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="faillock">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="faillock">
<refmeta>
<refentrytitle>faillock</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_faillock-name">
+ <refnamediv xml:id="pam_faillock-name">
<refname>faillock</refname>
<refpurpose>Tool for displaying and modifying the authentication failure record files</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="faillock-cmdsynopsis">
+ <cmdsynopsis xml:id="faillock-cmdsynopsis" sepchar=" ">
<command>faillock</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
--dir <replaceable>/path/to/tally-directory</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
--user <replaceable>username</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
--reset
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="faillock-description">
+ <refsect1 xml:id="faillock-description">
<title>DESCRIPTION</title>
@@ -51,24 +48,41 @@
</para>
</refsect1>
- <refsect1 id="faillock-options">
+ <refsect1 xml:id="faillock-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>--dir <replaceable>/path/to/tally-directory</replaceable></option>
+ --conf /path/to/config-file
</term>
<listitem>
<para>
- The directory where the user files with the failure records are kept. The
- default is <filename>/var/run/faillock</filename>.
+ The file where the configuration is located. The default is
+ <filename>/etc/security/faillock.conf</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ --dir /path/to/tally-directory
+ </term>
+ <listitem>
+ <para>
+ The directory where the user files with the failure records are kept.
+ </para>
+ <para>
+ The priority to set this option is to use the value provided
+ from the command line. If this isn't provided, then the value
+ from the configuration file is used. Finally, if neither of
+ them has been provided, then
+ <filename>/var/run/faillock</filename> is used.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- <option>--user <replaceable>username</replaceable></option>
+ --user username
</term>
<listitem>
<para>
@@ -78,7 +92,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>--reset</option>
+ --reset
</term>
<listitem>
<para>
@@ -89,11 +103,11 @@
</variablelist>
</refsect1>
- <refsect1 id="faillock-files">
+ <refsect1 xml:id="faillock-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/var/run/faillock/*</filename></term>
+ <term>/var/run/faillock/*</term>
<listitem>
<para>the files logging the authentication failures for users</para>
</listitem>
@@ -101,7 +115,7 @@
</variablelist>
</refsect1>
- <refsect1 id='faillock-see_also'>
+ <refsect1 xml:id="faillock-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -113,11 +127,11 @@
</para>
</refsect1>
- <refsect1 id='faillock-author'>
+ <refsect1 xml:id="faillock-author">
<title>AUTHOR</title>
<para>
faillock was written by Tomas Mraz.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_faillock/faillock.conf.5 b/modules/pam_faillock/faillock.conf.5
index 7b4ddb55..fd257b08 100644
--- a/modules/pam_faillock/faillock.conf.5
+++ b/modules/pam_faillock/faillock.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: faillock.conf
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "FAILLOCK\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "FAILLOCK\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -47,54 +47,58 @@ character\&. The whitespace at the beginning of line, end of line, and around th
sign is ignored\&.
.SH "OPTIONS"
.PP
-\fBdir=\fR\fB\fI/path/to/tally\-directory\fR\fR
+dir=/path/to/tally\-directory
.RS 4
The directory where the user files with the failure records are kept\&. The default is
/var/run/faillock\&.
+.sp
+Note: These files will disappear after reboot on systems configured with directory
+/var/run/faillock
+mounted on virtual memory\&.
.RE
.PP
-\fBaudit\fR
+audit
.RS 4
Will log the user name into the system log if the user is not found\&.
.RE
.PP
-\fBsilent\fR
+silent
.RS 4
Don\*(Aqt print informative messages to the user\&. Please note that when this option is not used there will be difference in the authentication behavior for users which exist on the system and non\-existing users\&.
.RE
.PP
-\fBno_log_info\fR
+no_log_info
.RS 4
Don\*(Aqt log informative messages via
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBlocal_users_only\fR
+local_users_only
.RS 4
Only track failed user authentications attempts for local users in /etc/passwd and ignore centralized (AD, IdM, LDAP, etc\&.) users\&. The
\fBfaillock\fR(8)
command will also no longer track user failed authentication attempts\&. Enabling this option will prevent a double\-lockout scenario where a user is locked out locally and in the centralized mechanism\&.
.RE
.PP
-\fBnodelay\fR
+nodelay
.RS 4
Don\*(Aqt enforce a delay after authentication failures\&.
.RE
.PP
-\fBdeny=\fR\fB\fIn\fR\fR
+deny=n
.RS 4
Deny access if the number of consecutive authentication failures for this user during the recent interval exceeds
\fIn\fR\&. The default is 3\&.
.RE
.PP
-\fBfail_interval=\fR\fB\fIn\fR\fR
+fail_interval=n
.RS 4
The length of the interval during which the consecutive authentication failures must happen for the user account lock out is
\fIn\fR
seconds\&. The default is 900 (15 minutes)\&.
.RE
.PP
-\fBunlock_time=\fR\fB\fIn\fR\fR
+unlock_time=n
.RS 4
The access will be re\-enabled after
\fIn\fR
@@ -113,12 +117,12 @@ option\&.
Also note that it is usually undesirable to permanently lock out users as they can become easily a target of denial of service attack unless the usernames are random and kept secret to potential attackers\&.
.RE
.PP
-\fBeven_deny_root\fR
+even_deny_root
.RS 4
Root account can become locked as well as regular accounts\&.
.RE
.PP
-\fBroot_unlock_time=\fR\fB\fIn\fR\fR
+root_unlock_time=n
.RS 4
This option implies
\fBeven_deny_root\fR
@@ -129,7 +133,7 @@ seconds to root account after the account is locked\&. In case the option is not
option\&.
.RE
.PP
-\fBadmin_group=\fR\fB\fIname\fR\fR
+admin_group=name
.RS 4
If a group name is specified with this option, members of the group will be handled by this module the same as the root account (the options
\fBeven_deny_root\fR
diff --git a/modules/pam_faillock/faillock.conf.5.xml b/modules/pam_faillock/faillock.conf.5.xml
index 04a84107..cc750fbf 100644
--- a/modules/pam_faillock/faillock.conf.5.xml
+++ b/modules/pam_faillock/faillock.conf.5.xml
@@ -1,25 +1,22 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="faillock.conf">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="faillock.conf">
<refmeta>
<refentrytitle>faillock.conf</refentrytitle>
<manvolnum>5</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="faillock.conf-name">
+ <refnamediv xml:id="faillock.conf-name">
<refname>faillock.conf</refname>
<refpurpose>pam_faillock configuration file</refpurpose>
</refnamediv>
- <refsect1 id="faillock.conf-description">
+ <refsect1 xml:id="faillock.conf-description">
<title>DESCRIPTION</title>
<para>
- <emphasis remap='B'>faillock.conf</emphasis> provides a way to configure the
+ <emphasis remap="B">faillock.conf</emphasis> provides a way to configure the
default settings for locking the user after multiple failed authentication attempts.
This file is read by the <emphasis>pam_faillock</emphasis> module and is the
preferred method over configuring <emphasis>pam_faillock</emphasis> directly.
@@ -31,24 +28,28 @@
</para>
</refsect1>
- <refsect1 id="faillock.conf-options">
+ <refsect1 xml:id="faillock.conf-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>dir=<replaceable>/path/to/tally-directory</replaceable></option>
+ dir=/path/to/tally-directory
</term>
<listitem>
<para>
The directory where the user files with the failure records are kept. The
default is <filename>/var/run/faillock</filename>.
</para>
+ <para>
+ Note: These files will disappear after reboot on systems configured with
+ directory <filename>/var/run/faillock</filename> mounted on virtual memory.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- <option>audit</option>
+ audit
</term>
<listitem>
<para>
@@ -58,7 +59,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>silent</option>
+ silent
</term>
<listitem>
<para>
@@ -70,7 +71,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>no_log_info</option>
+ no_log_info
</term>
<listitem>
<para>
@@ -80,7 +81,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>local_users_only</option>
+ local_users_only
</term>
<listitem>
<para>
@@ -96,7 +97,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>nodelay</option>
+ nodelay
</term>
<listitem>
<para>
@@ -106,7 +107,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>deny=<replaceable>n</replaceable></option>
+ deny=n
</term>
<listitem>
<para>
@@ -118,7 +119,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>fail_interval=<replaceable>n</replaceable></option>
+ fail_interval=n
</term>
<listitem>
<para>
@@ -131,7 +132,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>unlock_time=<replaceable>n</replaceable></option>
+ unlock_time=n
</term>
<listitem>
<para>
@@ -159,7 +160,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>even_deny_root</option>
+ even_deny_root
</term>
<listitem>
<para>
@@ -169,7 +170,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>root_unlock_time=<replaceable>n</replaceable></option>
+ root_unlock_time=n
</term>
<listitem>
<para>
@@ -183,7 +184,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>admin_group=<replaceable>name</replaceable></option>
+ admin_group=name
</term>
<listitem>
<para>
@@ -198,7 +199,7 @@
</variablelist>
</refsect1>
- <refsect1 id='faillock.conf-examples'>
+ <refsect1 xml:id="faillock.conf-examples">
<title>EXAMPLES</title>
<para>
/etc/security/faillock.conf file example:
@@ -210,11 +211,11 @@ silent
</programlisting>
</refsect1>
- <refsect1 id="faillock.conf-files">
+ <refsect1 xml:id="faillock.conf-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/faillock.conf</filename></term>
+ <term>/etc/security/faillock.conf</term>
<listitem>
<para>the config file for custom options</para>
</listitem>
@@ -222,7 +223,7 @@ silent
</variablelist>
</refsect1>
- <refsect1 id='faillock.conf-see_also'>
+ <refsect1 xml:id="faillock.conf-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -243,11 +244,11 @@ silent
</para>
</refsect1>
- <refsect1 id='faillock.conf-author'>
+ <refsect1 xml:id="faillock.conf-author">
<title>AUTHOR</title>
<para>
pam_faillock was written by Tomas Mraz. The support for faillock.conf was written by Brian Ward.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_faillock/faillock.h b/modules/pam_faillock/faillock.h
index b22a9dfb..0ea0ffba 100644
--- a/modules/pam_faillock/faillock.h
+++ b/modules/pam_faillock/faillock.h
@@ -67,7 +67,6 @@ struct tally_data {
};
#define FAILLOCK_DEFAULT_TALLYDIR "/var/run/faillock"
-#define FAILLOCK_DEFAULT_CONF "/etc/security/faillock.conf"
int open_tally(const char *dir, const char *user, uid_t uid, int create);
int read_tally(int fd, struct tally_data *tallies);
diff --git a/modules/pam_faillock/faillock_config.c b/modules/pam_faillock/faillock_config.c
new file mode 100644
index 00000000..0d14aad1
--- /dev/null
+++ b/modules/pam_faillock/faillock_config.c
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2022 Tomas Mraz <tm@t8m.info>
+ * Copyright (c) 2022 Iker Pedrosa <ipedrosa@redhat.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, and the entire permission notice in its entirety,
+ * including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions. (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+
+#include <security/pam_modules.h>
+
+#include "faillock_config.h"
+#include "faillock.h"
+
+#define FAILLOCK_DEFAULT_CONF SCONFIGDIR "/faillock.conf"
+#ifdef VENDOR_SCONFIGDIR
+#define VENDOR_FAILLOCK_DEFAULT_CONF VENDOR_SCONFIGDIR "/faillock.conf"
+#endif
+
+static void PAM_FORMAT((printf, 3, 4)) PAM_NONNULL((3))
+config_log(const pam_handle_t *pamh, int priority, const char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ if (pamh) {
+ pam_vsyslog(pamh, priority, fmt, args);
+ } else {
+ char *buf = NULL;
+
+ if (vasprintf(&buf, fmt, args) < 0) {
+ fprintf(stderr, "vasprintf: %m");
+ va_end(args);
+ return;
+ }
+ fprintf(stderr, "%s\n", buf);
+ free(buf);
+ }
+ va_end(args);
+}
+
+/* parse a single configuration file */
+int
+read_config_file(pam_handle_t *pamh, struct options *opts, const char *cfgfile)
+{
+ char linebuf[FAILLOCK_CONF_MAX_LINELEN+1];
+ const char *fname = (cfgfile != NULL) ? cfgfile : FAILLOCK_DEFAULT_CONF;
+ FILE *f = fopen(fname, "r");
+
+#ifdef VENDOR_FAILLOCK_DEFAULT_CONF
+ if (f == NULL && errno == ENOENT && cfgfile == NULL) {
+ /*
+ * If the default configuration file in /etc does not exist,
+ * try the vendor configuration file as fallback.
+ */
+ f = fopen(VENDOR_FAILLOCK_DEFAULT_CONF, "r");
+ }
+#endif /* VENDOR_FAILLOCK_DEFAULT_CONF */
+
+ if (f == NULL) {
+ /* ignore non-existent default config file */
+ if (errno == ENOENT && cfgfile == NULL)
+ return PAM_SUCCESS;
+ return PAM_SERVICE_ERR;
+ }
+
+ while (fgets(linebuf, sizeof(linebuf), f) != NULL) {
+ size_t len;
+ char *ptr;
+ char *name;
+ int eq;
+
+ len = strlen(linebuf);
+ /* len cannot be 0 unless there is a bug in fgets */
+ if (len && linebuf[len - 1] != '\n' && !feof(f)) {
+ (void) fclose(f);
+ return PAM_SERVICE_ERR;
+ }
+
+ if ((ptr=strchr(linebuf, '#')) != NULL) {
+ *ptr = '\0';
+ } else {
+ ptr = linebuf + len;
+ }
+
+ /* drop terminating whitespace including the \n */
+ while (ptr > linebuf) {
+ if (!isspace(*(ptr-1))) {
+ *ptr = '\0';
+ break;
+ }
+ --ptr;
+ }
+
+ /* skip initial whitespace */
+ for (ptr = linebuf; isspace(*ptr); ptr++);
+ if (*ptr == '\0')
+ continue;
+
+ /* grab the key name */
+ eq = 0;
+ name = ptr;
+ while (*ptr != '\0') {
+ if (isspace(*ptr) || *ptr == '=') {
+ eq = *ptr == '=';
+ *ptr = '\0';
+ ++ptr;
+ break;
+ }
+ ++ptr;
+ }
+
+ /* grab the key value */
+ while (*ptr != '\0') {
+ if (*ptr != '=' || eq) {
+ if (!isspace(*ptr)) {
+ break;
+ }
+ } else {
+ eq = 1;
+ }
+ ++ptr;
+ }
+
+ /* set the key:value pair on opts */
+ set_conf_opt(pamh, opts, name, ptr);
+ }
+
+ (void)fclose(f);
+ return PAM_SUCCESS;
+}
+
+void
+set_conf_opt(pam_handle_t *pamh, struct options *opts, const char *name,
+ const char *value)
+{
+ if (strcmp(name, "dir") == 0) {
+ if (value[0] != '/') {
+ config_log(pamh, LOG_ERR,
+ "Tally directory is not absolute path (%s); keeping value",
+ value);
+ } else {
+ free(opts->dir);
+ opts->dir = strdup(value);
+ if (opts->dir == NULL) {
+ opts->fatal_error = 1;
+ config_log(pamh, LOG_CRIT, "Error allocating memory: %m");
+ }
+ }
+ }
+ else if (strcmp(name, "deny") == 0) {
+ if (sscanf(value, "%hu", &opts->deny) != 1) {
+ config_log(pamh, LOG_ERR,
+ "Bad number supplied for deny argument");
+ }
+ }
+ else if (strcmp(name, "fail_interval") == 0) {
+ unsigned int temp;
+ if (sscanf(value, "%u", &temp) != 1 ||
+ temp > MAX_TIME_INTERVAL) {
+ config_log(pamh, LOG_ERR,
+ "Bad number supplied for fail_interval argument");
+ } else {
+ opts->fail_interval = temp;
+ }
+ }
+ else if (strcmp(name, "unlock_time") == 0) {
+ unsigned int temp;
+
+ if (strcmp(value, "never") == 0) {
+ opts->unlock_time = 0;
+ }
+ else if (sscanf(value, "%u", &temp) != 1 ||
+ temp > MAX_TIME_INTERVAL) {
+ config_log(pamh, LOG_ERR,
+ "Bad number supplied for unlock_time argument");
+ }
+ else {
+ opts->unlock_time = temp;
+ }
+ }
+ else if (strcmp(name, "root_unlock_time") == 0) {
+ unsigned int temp;
+
+ if (strcmp(value, "never") == 0) {
+ opts->root_unlock_time = 0;
+ }
+ else if (sscanf(value, "%u", &temp) != 1 ||
+ temp > MAX_TIME_INTERVAL) {
+ config_log(pamh, LOG_ERR,
+ "Bad number supplied for root_unlock_time argument");
+ } else {
+ opts->root_unlock_time = temp;
+ }
+ }
+ else if (strcmp(name, "admin_group") == 0) {
+ free(opts->admin_group);
+ opts->admin_group = strdup(value);
+ if (opts->admin_group == NULL) {
+ opts->fatal_error = 1;
+ config_log(pamh, LOG_CRIT, "Error allocating memory: %m");
+ }
+ }
+ else if (strcmp(name, "even_deny_root") == 0) {
+ opts->flags |= FAILLOCK_FLAG_DENY_ROOT;
+ }
+ else if (strcmp(name, "audit") == 0) {
+ opts->flags |= FAILLOCK_FLAG_AUDIT;
+ }
+ else if (strcmp(name, "silent") == 0) {
+ opts->flags |= FAILLOCK_FLAG_SILENT;
+ }
+ else if (strcmp(name, "no_log_info") == 0) {
+ opts->flags |= FAILLOCK_FLAG_NO_LOG_INFO;
+ }
+ else if (strcmp(name, "local_users_only") == 0) {
+ opts->flags |= FAILLOCK_FLAG_LOCAL_ONLY;
+ }
+ else if (strcmp(name, "nodelay") == 0) {
+ opts->flags |= FAILLOCK_FLAG_NO_DELAY;
+ }
+ else {
+ config_log(pamh, LOG_ERR, "Unknown option: %s", name);
+ }
+}
+
+const char *get_tally_dir(const struct options *opts)
+{
+ return (opts->dir != NULL) ? opts->dir : FAILLOCK_DEFAULT_TALLYDIR;
+}
diff --git a/modules/pam_faillock/faillock_config.h b/modules/pam_faillock/faillock_config.h
new file mode 100644
index 00000000..04bc699b
--- /dev/null
+++ b/modules/pam_faillock/faillock_config.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2022 Tomas Mraz <tm@t8m.info>
+ * Copyright (c) 2022 Iker Pedrosa <ipedrosa@redhat.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, and the entire permission notice in its entirety,
+ * including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions. (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * faillock_config.h - load configuration options from file
+ *
+ */
+
+#ifndef _FAILLOCK_CONFIG_H
+#define _FAILLOCK_CONFIG_H
+
+#include <limits.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+#include <security/pam_ext.h>
+
+#define FAILLOCK_FLAG_DENY_ROOT 0x1
+#define FAILLOCK_FLAG_AUDIT 0x2
+#define FAILLOCK_FLAG_SILENT 0x4
+#define FAILLOCK_FLAG_NO_LOG_INFO 0x8
+#define FAILLOCK_FLAG_UNLOCKED 0x10
+#define FAILLOCK_FLAG_LOCAL_ONLY 0x20
+#define FAILLOCK_FLAG_NO_DELAY 0x40
+
+#define FAILLOCK_CONF_MAX_LINELEN 1023
+#define MAX_TIME_INTERVAL 604800 /* 7 days */
+
+struct options {
+ unsigned int action;
+ unsigned int flags;
+ unsigned short deny;
+ unsigned int fail_interval;
+ unsigned int unlock_time;
+ unsigned int root_unlock_time;
+ char *dir;
+ const char *user;
+ char *admin_group;
+ int failures;
+ uint64_t latest_time;
+ uid_t uid;
+ int is_admin;
+ uint64_t now;
+ int fatal_error;
+
+ unsigned int reset;
+ const char *progname;
+ int legacy_output; /* show failure info in pam_tally2 style */
+};
+
+int read_config_file(pam_handle_t *pamh, struct options *opts,
+ const char *cfgfile);
+void set_conf_opt(pam_handle_t *pamh, struct options *opts, const char *name,
+ const char *value);
+const char *get_tally_dir(const struct options *opts);
+
+#endif /* _FAILLOCK_CONFIG_H */
diff --git a/modules/pam_faillock/main.c b/modules/pam_faillock/main.c
index f62e1bb2..136be834 100644
--- a/modules/pam_faillock/main.c
+++ b/modules/pam_faillock/main.c
@@ -51,32 +51,40 @@
#define AUDIT_NO_ID ((unsigned int) -1)
#endif
+#include "pam_inline.h"
#include "faillock.h"
-
-struct options {
- unsigned int reset;
- const char *dir;
- const char *user;
- const char *progname;
-};
+#include "faillock_config.h"
static int
args_parse(int argc, char **argv, struct options *opts)
{
int i;
+ int rv;
+ const char *dir = NULL;
+ const char *conf = NULL;
+
memset(opts, 0, sizeof(*opts));
- opts->dir = FAILLOCK_DEFAULT_TALLYDIR;
opts->progname = argv[0];
for (i = 1; i < argc; ++i) {
- if (strcmp(argv[i], "--dir") == 0) {
+ if (strcmp(argv[i], "--conf") == 0) {
+ ++i;
+ if (i >= argc || strlen(argv[i]) == 0) {
+ fprintf(stderr, "%s: No configuration file supplied.\n",
+ argv[0]);
+ return -1;
+ }
+ conf = argv[i];
+ }
+ else if (strcmp(argv[i], "--dir") == 0) {
++i;
if (i >= argc || strlen(argv[i]) == 0) {
- fprintf(stderr, "%s: No directory supplied.\n", argv[0]);
+ fprintf(stderr, "%s: No records directory supplied.\n",
+ argv[0]);
return -1;
}
- opts->dir = argv[i];
+ dir = argv[i];
}
else if (strcmp(argv[i], "--user") == 0) {
++i;
@@ -89,19 +97,113 @@ args_parse(int argc, char **argv, struct options *opts)
else if (strcmp(argv[i], "--reset") == 0) {
opts->reset = 1;
}
+ else if (!strcmp(argv[i], "--legacy-output")) {
+ opts->legacy_output = 1;
+ }
else {
fprintf(stderr, "%s: Unknown option: %s\n", argv[0], argv[i]);
return -1;
}
}
+
+ if ((rv = read_config_file(NULL, opts, conf)) != PAM_SUCCESS) {
+ fprintf(stderr, "Configuration file missing or broken");
+ return rv;
+ }
+
+ if (dir != NULL) {
+ free(opts->dir);
+ opts->dir = strdup(dir);
+ if (opts->dir == NULL) {
+ fprintf(stderr, "Error allocating memory: %m");
+ return -1;
+ }
+ }
+
return 0;
}
static void
usage(const char *progname)
{
- fprintf(stderr, _("Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"),
- progname);
+ fprintf(stderr,
+ _("Usage: %s [--dir /path/to/tally-directory]"
+ " [--user username] [--reset] [--legacy-output]\n"), progname);
+
+}
+
+static int
+get_local_time(time_t when, char *timebuf, size_t timebuf_size)
+{
+ struct tm *tm;
+
+ tm = localtime(&when);
+ if (tm == NULL) {
+ return -1;
+ }
+ strftime(timebuf, timebuf_size, "%Y-%m-%d %H:%M:%S", tm);
+ return 0;
+}
+
+static void
+print_in_new_format(struct options *opts, const struct tally_data *tallies, const char *user)
+{
+ uint32_t i;
+
+ printf("%s:\n", user);
+ printf("%-19s %-5s %-48s %-5s\n", "When", "Type", "Source", "Valid");
+
+ for (i = 0; i < tallies->count; i++) {
+ uint16_t status;
+ char timebuf[80];
+
+ if (get_local_time(tallies->records[i].time, timebuf, sizeof(timebuf)) != 0) {
+ fprintf(stderr, "%s: Invalid timestamp in the tally record\n",
+ opts->progname);
+ continue;
+ }
+
+ status = tallies->records[i].status;
+
+ printf("%-19s %-5s %-52.52s %s\n", timebuf,
+ status & TALLY_STATUS_RHOST ? "RHOST" : (status & TALLY_STATUS_TTY ? "TTY" : "SVC"),
+ tallies->records[i].source, status & TALLY_STATUS_VALID ? "V":"I");
+ }
+}
+
+static void
+print_in_legacy_format(struct options *opts, const struct tally_data *tallies, const char *user)
+{
+ uint32_t tally_count;
+ static uint32_t pr_once;
+
+ if (pr_once == 0) {
+ printf(_("Login Failures Latest failure From\n"));
+ pr_once = 1;
+ }
+
+ printf("%-15.15s ", user);
+
+ tally_count = tallies->count;
+
+ if (tally_count > 0) {
+ uint32_t i;
+ char timebuf[80];
+
+ i = tally_count - 1;
+
+ if (get_local_time(tallies->records[i].time, timebuf, sizeof(timebuf)) != 0) {
+ fprintf(stderr, "%s: Invalid timestamp in the tally record\n",
+ opts->progname);
+ return;
+ }
+
+ printf("%5u %25s %s\n",
+ tally_count, timebuf, tallies->records[i].source);
+ }
+ else {
+ printf("%5u\n", tally_count);
+ }
}
static int
@@ -111,10 +213,15 @@ do_user(struct options *opts, const char *user)
int rv;
struct tally_data tallies;
struct passwd *pwd;
+ const char *dir = get_tally_dir(opts);
pwd = getpwnam(user);
+ if (pwd == NULL) {
+ fprintf(stderr, "%s: Error no such user: %s\n", opts->progname, user);
+ return 1;
+ }
- fd = open_tally(opts->dir, user, pwd != NULL ? pwd->pw_uid : 0, 0);
+ fd = open_tally(dir, user, pwd->pw_uid, 1);
if (fd == -1) {
if (errno == ENOENT) {
@@ -153,8 +260,6 @@ do_user(struct options *opts, const char *user)
}
}
else {
- unsigned int i;
-
memset(&tallies, 0, sizeof(tallies));
if (read_tally(fd, &tallies) == -1) {
fprintf(stderr, "%s: Error reading the tally file for %s:",
@@ -164,21 +269,13 @@ do_user(struct options *opts, const char *user)
return 5;
}
- printf("%s:\n", user);
- printf("%-19s %-5s %-48s %-5s\n", "When", "Type", "Source", "Valid");
-
- for (i = 0; i < tallies.count; i++) {
- struct tm *tm;
- char timebuf[80];
- uint16_t status = tallies.records[i].status;
- time_t when = tallies.records[i].time;
-
- tm = localtime(&when);
- strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", tm);
- printf("%-19s %-5s %-52.52s %s\n", timebuf,
- status & TALLY_STATUS_RHOST ? "RHOST" : (status & TALLY_STATUS_TTY ? "TTY" : "SVC"),
- tallies.records[i].source, status & TALLY_STATUS_VALID ? "V":"I");
+ if (opts->legacy_output == 0) {
+ print_in_new_format(opts, &tallies, user);
}
+ else {
+ print_in_legacy_format(opts, &tallies, user);
+ }
+
free(tallies.records);
}
close(fd);
@@ -190,8 +287,9 @@ do_allusers(struct options *opts)
{
struct dirent **userlist;
int rv, i;
+ const char *dir = get_tally_dir(opts);
- rv = scandir(opts->dir, &userlist, NULL, alphasort);
+ rv = scandir(dir, &userlist, NULL, alphasort);
if (rv < 0) {
fprintf(stderr, "%s: Error reading tally directory: %m\n", opts->progname);
return 2;
diff --git a/modules/pam_faillock/pam_faillock.8 b/modules/pam_faillock/pam_faillock.8
index cec02ea2..b4854ff5 100644
--- a/modules/pam_faillock/pam_faillock.8
+++ b/modules/pam_faillock/pam_faillock.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_faillock
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: [FIXME: source]
.\" Language: English
.\"
-.TH "PAM_FAILLOCK" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_FAILLOCK" "8" "05/07/2023" "[FIXME: source]" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -49,7 +49,7 @@ cause the root account to become blocked, to prevent denial\-of\-service: if you
or at the machine console (not telnet/rsh, etc), this is safe\&.
.SH "OPTIONS"
.PP
-\fB{preauth|authfail|authsucc}\fR
+{preauth|authfail|authsucc}
.RS 4
This argument must be set accordingly to the position of this module instance in the PAM stack\&.
.sp
@@ -74,7 +74,7 @@ as an account module\&. In such configuration the module must be also called in
stage\&.
.RE
.PP
-\fBconf=/path/to/config\-file\fR
+conf=/path/to/config\-file
.RS 4
Use another configuration file instead of the default
/etc/security/faillock\&.conf\&.
@@ -244,6 +244,13 @@ session required pam_selinux\&.so open
/var/run/faillock/*
.RS 4
the files logging the authentication failures for users
+.sp
+Note: These files will disappear after reboot on systems configured with directory
+/var/run/faillock
+mounted on virtual memory\&. For persistent storage use the option
+\fIdir=\fR
+in file
+/etc/security/faillock\&.conf\&.
.RE
.PP
/etc/security/faillock\&.conf
diff --git a/modules/pam_faillock/pam_faillock.8.xml b/modules/pam_faillock/pam_faillock.8.xml
index 58c16442..ce0ae050 100644
--- a/modules/pam_faillock/pam_faillock.8.xml
+++ b/modules/pam_faillock/pam_faillock.8.xml
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_faillock">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_faillock">
<refmeta>
<refentrytitle>pam_faillock</refentrytitle>
@@ -10,63 +6,63 @@
<refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_faillock-name">
+ <refnamediv xml:id="pam_faillock-name">
<refname>pam_faillock</refname>
<refpurpose>Module counting authentication failures during a specified interval</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_faillock-cmdsynopsisauth">
+ <cmdsynopsis xml:id="pam_faillock-cmdsynopsisauth" sepchar=" ">
<command>auth ... pam_faillock.so</command>
- <arg choice="req">
+ <arg choice="req" rep="norepeat">
preauth|authfail|authsucc
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
conf=<replaceable>/path/to/config-file</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
dir=<replaceable>/path/to/tally-directory</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
even_deny_root
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
deny=<replaceable>n</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
fail_interval=<replaceable>n</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
unlock_time=<replaceable>n</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
root_unlock_time=<replaceable>n</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
admin_group=<replaceable>name</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
audit
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
silent
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
no_log_info
</arg>
</cmdsynopsis>
- <cmdsynopsis id="pam_faillock-cmdsynopsisacct">
+ <cmdsynopsis xml:id="pam_faillock-cmdsynopsisacct" sepchar=" ">
<command>account ... pam_faillock.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
dir=<replaceable>/path/to/tally-directory</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
no_log_info
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_faillock-description">
+ <refsect1 xml:id="pam_faillock-description">
<title>DESCRIPTION</title>
@@ -78,20 +74,20 @@
</para>
<para>
Normally, failed attempts to authenticate <emphasis>root</emphasis> will
- <emphasis remap='B'>not</emphasis> cause the root account to become
+ <emphasis remap="B">not</emphasis> cause the root account to become
blocked, to prevent denial-of-service: if your users aren't given
shell accounts and root may only login via <command>su</command> or
at the machine console (not telnet/rsh, etc), this is safe.
</para>
</refsect1>
- <refsect1 id="pam_faillock-options">
+ <refsect1 xml:id="pam_faillock-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>{preauth|authfail|authsucc}</option>
+ {preauth|authfail|authsucc}
</term>
<listitem>
<para>
@@ -131,13 +127,20 @@
</varlistentry>
<varlistentry>
<term>
- <option>conf=/path/to/config-file</option>
+ conf=/path/to/config-file
</term>
<listitem>
- <para>
+ <para condition="without_vendordir">
Use another configuration file instead of the default
<filename>/etc/security/faillock.conf</filename>.
</para>
+ <para condition="with_vendordir">
+ Use another configuration file instead of the default
+ which is to use the file
+ <filename>/etc/security/faillock.conf</filename> or,
+ if that one is not present, the file
+ <filename>%vendordir%/security/faillock.conf</filename>.
+ </para>
</listitem>
</varlistentry>
</variablelist>
@@ -149,7 +152,7 @@
</para>
</refsect1>
- <refsect1 id="pam_faillock-types">
+ <refsect1 xml:id="pam_faillock-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option> and <option>account</option> module types are
@@ -157,7 +160,7 @@
</para>
</refsect1>
- <refsect1 id='pam_faillock-return_values'>
+ <refsect1 xml:id="pam_faillock-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -215,7 +218,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_faillock-notes'>
+ <refsect1 xml:id="pam_faillock-notes">
<title>NOTES</title>
<para>
Configuring options on the module command line is not recommend. The
@@ -227,7 +230,7 @@
</para>
<para>
Individual files with the failure records are created as owned by
- the user. This allows <emphasis remap='B'>pam_faillock.so</emphasis> module
+ the user. This allows <emphasis remap="B">pam_faillock.so</emphasis> module
to work correctly when it is called from a screensaver.
</para>
<para>
@@ -242,7 +245,7 @@
</para>
</refsect1>
- <refsect1 id='pam_faillock-examples'>
+ <refsect1 xml:id="pam_faillock-examples">
<title>EXAMPLES</title>
<para>
Here are two possible configuration examples for <filename>/etc/pam.d/login</filename>.
@@ -313,25 +316,40 @@ session required pam_selinux.so open
</programlisting>
</refsect1>
- <refsect1 id="pam_faillock-files">
+ <refsect1 xml:id="pam_faillock-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/var/run/faillock/*</filename></term>
+ <term>/var/run/faillock/*</term>
<listitem>
<para>the files logging the authentication failures for users</para>
+ <para>
+ Note: These files will disappear after reboot on systems configured with
+ directory <filename>/var/run/faillock</filename> mounted on virtual memory.
+ For persistent storage use the option <emphasis>dir=</emphasis> in
+ file <filename>/etc/security/faillock.conf</filename>.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
- <term><filename>/etc/security/faillock.conf</filename></term>
+ <term>/etc/security/faillock.conf</term>
<listitem>
<para>the config file for pam_faillock options</para>
</listitem>
</varlistentry>
+ <varlistentry condition="with_vendordir">
+ <term>%vendordir%/security/faillock.conf</term>
+ <listitem>
+ <para>
+ the config file for pam_faillock options. It will be used if
+ <filename>/etc/security/faillock.conf</filename> does not exist.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
- <refsect1 id='pam_faillock-see_also'>
+ <refsect1 xml:id="pam_faillock-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -352,11 +370,11 @@ session required pam_selinux.so open
</para>
</refsect1>
- <refsect1 id='pam_faillock-author'>
+ <refsect1 xml:id="pam_faillock-author">
<title>AUTHOR</title>
<para>
pam_faillock was written by Tomas Mraz.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_faillock/pam_faillock.c b/modules/pam_faillock/pam_faillock.c
index 8328fbae..ca1c7035 100644
--- a/modules/pam_faillock/pam_faillock.c
+++ b/modules/pam_faillock/pam_faillock.c
@@ -38,7 +38,6 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <stdint.h>
#include <stdlib.h>
#include <errno.h>
#include <time.h>
@@ -56,55 +55,12 @@
#include "pam_inline.h"
#include "faillock.h"
+#include "faillock_config.h"
#define FAILLOCK_ACTION_PREAUTH 0
#define FAILLOCK_ACTION_AUTHSUCC 1
#define FAILLOCK_ACTION_AUTHFAIL 2
-#define FAILLOCK_FLAG_DENY_ROOT 0x1
-#define FAILLOCK_FLAG_AUDIT 0x2
-#define FAILLOCK_FLAG_SILENT 0x4
-#define FAILLOCK_FLAG_NO_LOG_INFO 0x8
-#define FAILLOCK_FLAG_UNLOCKED 0x10
-#define FAILLOCK_FLAG_LOCAL_ONLY 0x20
-#define FAILLOCK_FLAG_NO_DELAY 0x40
-
-#define MAX_TIME_INTERVAL 604800 /* 7 days */
-#define FAILLOCK_CONF_MAX_LINELEN 1023
-
-static const char default_faillock_conf[] = FAILLOCK_DEFAULT_CONF;
-
-struct options {
- unsigned int action;
- unsigned int flags;
- unsigned short deny;
- unsigned int fail_interval;
- unsigned int unlock_time;
- unsigned int root_unlock_time;
- char *dir;
- const char *user;
- char *admin_group;
- int failures;
- uint64_t latest_time;
- uid_t uid;
- int is_admin;
- uint64_t now;
- int fatal_error;
-};
-
-static int read_config_file(
- pam_handle_t *pamh,
- struct options *opts,
- const char *cfgfile
-);
-
-static void set_conf_opt(
- pam_handle_t *pamh,
- struct options *opts,
- const char *name,
- const char *value
-);
-
static int
args_parse(pam_handle_t *pamh, int argc, const char **argv,
int flags, struct options *opts)
@@ -112,11 +68,10 @@ args_parse(pam_handle_t *pamh, int argc, const char **argv,
int i;
int config_arg_index = -1;
int rv;
- const char *conf = default_faillock_conf;
+ const char *conf = NULL;
memset(opts, 0, sizeof(*opts));
- opts->dir = strdup(FAILLOCK_DEFAULT_TALLYDIR);
opts->deny = 3;
opts->fail_interval = 900;
opts->unlock_time = 600;
@@ -174,185 +129,11 @@ args_parse(pam_handle_t *pamh, int argc, const char **argv,
if (flags & PAM_SILENT)
opts->flags |= FAILLOCK_FLAG_SILENT;
- if (opts->dir == NULL) {
- pam_syslog(pamh, LOG_CRIT, "Error allocating memory: %m");
- opts->fatal_error = 1;
- }
-
if (opts->fatal_error)
return PAM_BUF_ERR;
return PAM_SUCCESS;
}
-/* parse a single configuration file */
-static int
-read_config_file(pam_handle_t *pamh, struct options *opts, const char *cfgfile)
-{
- FILE *f;
- char linebuf[FAILLOCK_CONF_MAX_LINELEN+1];
-
- f = fopen(cfgfile, "r");
- if (f == NULL) {
- /* ignore non-existent default config file */
- if (errno == ENOENT && cfgfile == default_faillock_conf)
- return PAM_SUCCESS;
- return PAM_SERVICE_ERR;
- }
-
- while (fgets(linebuf, sizeof(linebuf), f) != NULL) {
- size_t len;
- char *ptr;
- char *name;
- int eq;
-
- len = strlen(linebuf);
- /* len cannot be 0 unless there is a bug in fgets */
- if (len && linebuf[len - 1] != '\n' && !feof(f)) {
- (void) fclose(f);
- return PAM_SERVICE_ERR;
- }
-
- if ((ptr=strchr(linebuf, '#')) != NULL) {
- *ptr = '\0';
- } else {
- ptr = linebuf + len;
- }
-
- /* drop terminating whitespace including the \n */
- while (ptr > linebuf) {
- if (!isspace(*(ptr-1))) {
- *ptr = '\0';
- break;
- }
- --ptr;
- }
-
- /* skip initial whitespace */
- for (ptr = linebuf; isspace(*ptr); ptr++);
- if (*ptr == '\0')
- continue;
-
- /* grab the key name */
- eq = 0;
- name = ptr;
- while (*ptr != '\0') {
- if (isspace(*ptr) || *ptr == '=') {
- eq = *ptr == '=';
- *ptr = '\0';
- ++ptr;
- break;
- }
- ++ptr;
- }
-
- /* grab the key value */
- while (*ptr != '\0') {
- if (*ptr != '=' || eq) {
- if (!isspace(*ptr)) {
- break;
- }
- } else {
- eq = 1;
- }
- ++ptr;
- }
-
- /* set the key:value pair on opts */
- set_conf_opt(pamh, opts, name, ptr);
- }
-
- (void)fclose(f);
- return PAM_SUCCESS;
-}
-
-static void
-set_conf_opt(pam_handle_t *pamh, struct options *opts, const char *name, const char *value)
-{
- if (strcmp(name, "dir") == 0) {
- if (value[0] != '/') {
- pam_syslog(pamh, LOG_ERR,
- "Tally directory is not absolute path (%s); keeping default", value);
- } else {
- free(opts->dir);
- opts->dir = strdup(value);
- }
- }
- else if (strcmp(name, "deny") == 0) {
- if (sscanf(value, "%hu", &opts->deny) != 1) {
- pam_syslog(pamh, LOG_ERR,
- "Bad number supplied for deny argument");
- }
- }
- else if (strcmp(name, "fail_interval") == 0) {
- unsigned int temp;
- if (sscanf(value, "%u", &temp) != 1 ||
- temp > MAX_TIME_INTERVAL) {
- pam_syslog(pamh, LOG_ERR,
- "Bad number supplied for fail_interval argument");
- } else {
- opts->fail_interval = temp;
- }
- }
- else if (strcmp(name, "unlock_time") == 0) {
- unsigned int temp;
-
- if (strcmp(value, "never") == 0) {
- opts->unlock_time = 0;
- }
- else if (sscanf(value, "%u", &temp) != 1 ||
- temp > MAX_TIME_INTERVAL) {
- pam_syslog(pamh, LOG_ERR,
- "Bad number supplied for unlock_time argument");
- }
- else {
- opts->unlock_time = temp;
- }
- }
- else if (strcmp(name, "root_unlock_time") == 0) {
- unsigned int temp;
-
- if (strcmp(value, "never") == 0) {
- opts->root_unlock_time = 0;
- }
- else if (sscanf(value, "%u", &temp) != 1 ||
- temp > MAX_TIME_INTERVAL) {
- pam_syslog(pamh, LOG_ERR,
- "Bad number supplied for root_unlock_time argument");
- } else {
- opts->root_unlock_time = temp;
- }
- }
- else if (strcmp(name, "admin_group") == 0) {
- free(opts->admin_group);
- opts->admin_group = strdup(value);
- if (opts->admin_group == NULL) {
- opts->fatal_error = 1;
- pam_syslog(pamh, LOG_CRIT, "Error allocating memory: %m");
- }
- }
- else if (strcmp(name, "even_deny_root") == 0) {
- opts->flags |= FAILLOCK_FLAG_DENY_ROOT;
- }
- else if (strcmp(name, "audit") == 0) {
- opts->flags |= FAILLOCK_FLAG_AUDIT;
- }
- else if (strcmp(name, "silent") == 0) {
- opts->flags |= FAILLOCK_FLAG_SILENT;
- }
- else if (strcmp(name, "no_log_info") == 0) {
- opts->flags |= FAILLOCK_FLAG_NO_LOG_INFO;
- }
- else if (strcmp(name, "local_users_only") == 0) {
- opts->flags |= FAILLOCK_FLAG_LOCAL_ONLY;
- }
- else if (strcmp(name, "nodelay") == 0) {
- opts->flags |= FAILLOCK_FLAG_NO_DELAY;
- }
- else {
- pam_syslog(pamh, LOG_ERR, "Unknown option: %s", name);
- }
-}
-
static int
check_local_user (pam_handle_t *pamh, const char *user)
{
@@ -406,10 +187,11 @@ check_tally(pam_handle_t *pamh, struct options *opts, struct tally_data *tallies
unsigned int i;
uint64_t latest_time;
int failures;
+ const char *dir = get_tally_dir(opts);
opts->now = time(NULL);
- tfd = open_tally(opts->dir, opts->user, opts->uid, 0);
+ tfd = open_tally(dir, opts->user, opts->uid, 0);
*fd = tfd;
@@ -483,9 +265,10 @@ static void
reset_tally(pam_handle_t *pamh, struct options *opts, int *fd)
{
int rv;
+ const char *dir = get_tally_dir(opts);
if (*fd == -1) {
- *fd = open_tally(opts->dir, opts->user, opts->uid, 1);
+ *fd = open_tally(dir, opts->user, opts->uid, 1);
}
else {
while ((rv=ftruncate(*fd, 0)) == -1 && errno == EINTR);
@@ -504,9 +287,10 @@ write_tally(pam_handle_t *pamh, struct options *opts, struct tally_data *tallies
unsigned int oldest;
uint64_t oldtime;
const void *source = NULL;
+ const char *dir = get_tally_dir(opts);
if (*fd == -1) {
- *fd = open_tally(opts->dir, opts->user, opts->uid, 1);
+ *fd = open_tally(dir, opts->user, opts->uid, 1);
}
if (*fd == -1) {
if (errno == EACCES) {
@@ -590,9 +374,11 @@ write_tally(pam_handle_t *pamh, struct options *opts, struct tally_data *tallies
}
close(audit_fd);
#endif
- if (!(opts->flags & FAILLOCK_FLAG_NO_LOG_INFO)) {
- pam_syslog(pamh, LOG_INFO, "Consecutive login failures for user %s account temporarily locked",
- opts->user);
+ if (!(opts->flags & FAILLOCK_FLAG_NO_LOG_INFO) &&
+ ((opts->flags & FAILLOCK_FLAG_DENY_ROOT) || (opts->uid != 0))) {
+ pam_syslog(pamh, LOG_INFO,
+ "Consecutive login failures for user %s account temporarily locked",
+ opts->user);
}
}
diff --git a/modules/pam_faillock/tst-pam_faillock-retval.c b/modules/pam_faillock/tst-pam_faillock-retval.c
new file mode 100644
index 00000000..133026cb
--- /dev/null
+++ b/modules/pam_faillock/tst-pam_faillock-retval.c
@@ -0,0 +1,119 @@
+/*
+ * Check pam_faillock return values.
+ */
+
+#include "test_assert.h"
+
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <security/pam_appl.h>
+
+#define MODULE_NAME "pam_faillock"
+#define TEST_NAME "tst-" MODULE_NAME "-retval"
+
+static const char service_file[] = TEST_NAME ".service";
+static const char config_filename[] = TEST_NAME ".conf";
+static const char user_name[] = "root";
+static struct pam_conv conv;
+
+int
+main(void)
+{
+ pam_handle_t *pamh = NULL;
+ FILE *fp;
+ char cwd[PATH_MAX];
+
+ ASSERT_NE(NULL, getcwd(cwd, sizeof(cwd)));
+
+ ASSERT_NE(NULL, fp = fopen(config_filename, "w"));
+ ASSERT_LT(0, fprintf(fp,
+ "deny = 2\n"
+ "unlock_time = 5\n"
+ "root_unlock_time = 5\n"));
+ ASSERT_EQ(0, fclose(fp));
+
+ /* root has access */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/../pam_permit/.libs/pam_permit.so\n"
+ "auth required %s/.libs/%s.so authsucc even_deny_root dir=%s conf=%s\n"
+ "account required %s/.libs/%s.so dir=%s\n"
+ "password required %s/.libs/%s.so dir=%s\n"
+ "session required %s/.libs/%s.so dir=%s\n",
+ cwd,
+ cwd, MODULE_NAME, cwd, config_filename,
+ cwd, MODULE_NAME, cwd,
+ cwd, MODULE_NAME, cwd,
+ cwd, MODULE_NAME, cwd));
+
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, user_name, &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_SUCCESS, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ ASSERT_EQ(0, unlink(service_file));
+ pamh = NULL;
+
+ /* root tries to login 2 times without success*/
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "auth requisite %s/.libs/%s.so dir=%s preauth even_deny_root conf=%s\n"
+ "auth [success=1 default=bad] %s/../pam_debug/.libs/pam_debug.so auth=perm_denied cred=success\n"
+ "auth [default=die] %s/.libs/%s.so dir=%s authfail even_deny_root conf=%s\n"
+ "auth sufficient %s/.libs/%s.so dir=%s authsucc even_deny_root conf=%s\n",
+ cwd, MODULE_NAME, cwd, config_filename,
+ cwd,
+ cwd, MODULE_NAME, cwd, config_filename,
+ cwd, MODULE_NAME, cwd, config_filename));
+
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, user_name, &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_PERM_DENIED, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_authenticate(pamh, 0));
+ pamh = NULL;
+ ASSERT_EQ(0, unlink(service_file));
+
+ /* root is locked for 5 sec*/
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n"
+ "auth requisite %s/.libs/%s.so dir=%s preauth even_deny_root conf=%s\n"
+ "auth [success=1 default=bad] %s/../pam_debug/.libs/pam_debug.so auth=success cred=success\n"
+ "auth [default=die] %s/.libs/%s.so dir=%s authfail even_deny_root conf=%s\n"
+ "auth sufficient %s/.libs/%s.so dir=%s authsucc even_deny_root conf=%s\n",
+ cwd, MODULE_NAME, cwd, config_filename,
+ cwd,
+ cwd, MODULE_NAME, cwd, config_filename,
+ cwd, MODULE_NAME, cwd, config_filename));
+
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, user_name, &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_AUTH_ERR, pam_authenticate(pamh, 0));
+
+ /* waiting at least 5 sec --> login is working again*/
+ sleep(6);
+ ASSERT_EQ(PAM_SUCCESS, pam_authenticate(pamh, 0));
+
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ ASSERT_EQ(0, unlink(service_file));
+ pamh = NULL;
+
+ ASSERT_EQ(0,unlink(user_name));
+ ASSERT_EQ(0,unlink(config_filename));
+
+ return 0;
+}
diff --git a/modules/pam_filter/Makefile.am b/modules/pam_filter/Makefile.am
index 4d75e843..d43177c8 100644
--- a/modules/pam_filter/Makefile.am
+++ b/modules/pam_filter/Makefile.am
@@ -17,7 +17,11 @@ dist_check_SCRIPTS = tst-pam_filter
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_filter/Makefile.in b/modules/pam_filter/Makefile.in
index 76b17653..33a3de48 100644
--- a/modules/pam_filter/Makefile.in
+++ b/modules/pam_filter/Makefile.in
@@ -473,6 +473,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -485,11 +486,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -521,12 +524,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -549,6 +554,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -559,12 +565,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -639,7 +649,8 @@ XMLS = README.xml pam_filter.8.xml
dist_check_SCRIPTS = tst-pam_filter
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_filter/README.xml b/modules/pam_filter/README.xml
index b76cb743..ab053174 100644
--- a/modules/pam_filter/README.xml
+++ b/modules/pam_filter/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_filter.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_filter.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_filter-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_filter.8.xml" xpointer='xpointer(id("pam_filter-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_filter.8.xml" xpointer='xpointer(id("pam_filter-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_filter.8.xml" xpointer='xpointer(id("pam_filter-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_filter.8.xml" xpointer='xpointer(id("pam_filter-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_filter.8.xml" xpointer='xpointer(id("pam_filter-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_filter/pam_filter.8 b/modules/pam_filter/pam_filter.8
index d804faf9..7a0735b0 100644
--- a/modules/pam_filter/pam_filter.8
+++ b/modules/pam_filter/pam_filter.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_filter
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_FILTER" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_FILTER" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -48,12 +48,12 @@ that of the user\&. For this reason it cannot usually be killed by the user with
.SH "OPTIONS"
.PP
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBnew_term\fR
+new_term
.RS 4
The default action of the filter is to set the
\fIPAM_TTY\fR
@@ -62,14 +62,14 @@ item to indicate the terminal that the user is using to connect to the applicati
to the filtered pseudo\-terminal\&.
.RE
.PP
-\fBnon_term\fR
+non_term
.RS 4
don\*(Aqt try to set the
\fIPAM_TTY\fR
item\&.
.RE
.PP
-\fBrunX\fR
+runX
.RS 4
In order that the module can invoke a filter it should know when to invoke it\&. This argument is required to tell the filter when to do this\&.
.sp
@@ -122,7 +122,7 @@ is used to indicate that the filter is run on the second occasion (the
phase)\&.
.RE
.PP
-\fBfilter\fR
+filter
.RS 4
The full pathname of the filter to be run and any command line arguments that the filter might expect\&.
.RE
diff --git a/modules/pam_filter/pam_filter.8.xml b/modules/pam_filter/pam_filter.8.xml
index 7309c352..8015f41e 100644
--- a/modules/pam_filter/pam_filter.8.xml
+++ b/modules/pam_filter/pam_filter.8.xml
@@ -1,45 +1,42 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_filter">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_filter">
<refmeta>
<refentrytitle>pam_filter</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_filter-name">
+ <refnamediv xml:id="pam_filter-name">
<refname>pam_filter</refname>
<refpurpose>PAM filter module</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_filter-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_filter-cmdsynopsis" sepchar=" ">
<command>pam_filter.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
new_term
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
non_term
</arg>
- <arg choice="plain">
+ <arg choice="plain" rep="norepeat">
run1|run2
</arg>
- <arg choice="plain">
+ <arg choice="plain" rep="norepeat">
<replaceable>filter</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
<replaceable>...</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_filter-description">
+ <refsect1 xml:id="pam_filter-description">
<title>DESCRIPTION</title>
@@ -66,7 +63,7 @@
</para>
</refsect1>
- <refsect1 id="pam_filter-options">
+ <refsect1 xml:id="pam_filter-options">
<title>OPTIONS</title>
<para>
@@ -74,7 +71,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -85,7 +82,7 @@
<varlistentry>
<term>
- <option>new_term</option>
+ new_term
</term>
<listitem>
<para>
@@ -101,7 +98,7 @@
<varlistentry>
<term>
- <option>non_term</option>
+ non_term
</term>
<listitem>
<para>
@@ -112,7 +109,7 @@
<varlistentry>
<term>
- <option>runX</option>
+ runX
</term>
<listitem>
<para>
@@ -174,7 +171,7 @@
<varlistentry>
<term>
- <option>filter</option>
+ filter
</term>
<listitem>
<para>
@@ -188,7 +185,7 @@
</para>
</refsect1>
- <refsect1 id="pam_filter-types">
+ <refsect1 xml:id="pam_filter-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>auth</option>, <option>account</option>,
@@ -196,7 +193,7 @@
</para>
</refsect1>
- <refsect1 id='pam_filter-return_values'>
+ <refsect1 xml:id="pam_filter-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -223,7 +220,7 @@
</para>
</refsect1>
- <refsect1 id='pam_filter-examples'>
+ <refsect1 xml:id="pam_filter-examples">
<title>EXAMPLES</title>
<para>
Add the following line to <filename>/etc/pam.d/login</filename> to
@@ -236,7 +233,7 @@
</para>
</refsect1>
- <refsect1 id='pam_filter-see_also'>
+ <refsect1 xml:id="pam_filter-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -251,11 +248,11 @@
</para>
</refsect1>
- <refsect1 id='pam_filter-author'>
+ <refsect1 xml:id="pam_filter-author">
<title>AUTHOR</title>
<para>
pam_filter was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_filter/upperLOWER/Makefile.in b/modules/pam_filter/upperLOWER/Makefile.in
index 3046fe82..c25f53e2 100644
--- a/modules/pam_filter/upperLOWER/Makefile.in
+++ b/modules/pam_filter/upperLOWER/Makefile.in
@@ -216,6 +216,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -228,11 +229,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -264,12 +267,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -292,6 +297,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -302,12 +308,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/modules/pam_ftp/Makefile.am b/modules/pam_ftp/Makefile.am
index abfa98a8..18bb52c4 100644
--- a/modules/pam_ftp/Makefile.am
+++ b/modules/pam_ftp/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_ftp
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_ftp/Makefile.in b/modules/pam_ftp/Makefile.in
index 7788d6e3..442fb494 100644
--- a/modules/pam_ftp/Makefile.in
+++ b/modules/pam_ftp/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_ftp.8.xml
dist_check_SCRIPTS = tst-pam_ftp
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_ftp/README.xml b/modules/pam_ftp/README.xml
index 65de28e3..f4606bee 100644
--- a/modules/pam_ftp/README.xml
+++ b/modules/pam_ftp/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_ftp.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_ftp.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_ftp-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_ftp.8.xml" xpointer='xpointer(id("pam_ftp-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_ftp/pam_ftp.8 b/modules/pam_ftp/pam_ftp.8
index 28e1af89..e15dda7f 100644
--- a/modules/pam_ftp/pam_ftp.8
+++ b/modules/pam_ftp/pam_ftp.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_ftp
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_FTP" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_FTP" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -54,17 +54,17 @@ This module is not safe and easily spoofable\&.
.SH "OPTIONS"
.PP
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBignore\fR
+ignore
.RS 4
Pay no attention to the email address of the user (if supplied)\&.
.RE
.PP
-\fBftp=\fR\fB\fIXXX,YYY,\&.\&.\&.\fR\fR
+ftp=XXX,YYY,\&.\&.\&.
.RS 4
Instead of
\fIftp\fR
diff --git a/modules/pam_ftp/pam_ftp.8.xml b/modules/pam_ftp/pam_ftp.8.xml
index 6f11f570..03f36781 100644
--- a/modules/pam_ftp/pam_ftp.8.xml
+++ b/modules/pam_ftp/pam_ftp.8.xml
@@ -1,36 +1,33 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_ftp">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_ftp">
<refmeta>
<refentrytitle>pam_ftp</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_ftp-name">
+ <refnamediv xml:id="pam_ftp-name">
<refname>pam_ftp</refname>
<refpurpose>PAM module for anonymous access module</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_ftp-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_ftp-cmdsynopsis" sepchar=" ">
<command>pam_ftp.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
ignore
</arg>
- <arg choice="opt" rep='repeat'>
+ <arg choice="opt" rep="repeat">
users=<replaceable>XXX,YYY,</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_ftp-description">
+ <refsect1 xml:id="pam_ftp-description">
<title>DESCRIPTION</title>
@@ -54,7 +51,7 @@
</para>
</refsect1>
- <refsect1 id="pam_ftp-options">
+ <refsect1 xml:id="pam_ftp-options">
<title>OPTIONS</title>
<para>
@@ -62,7 +59,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -73,7 +70,7 @@
<varlistentry>
<term>
- <option>ignore</option>
+ ignore
</term>
<listitem>
<para>
@@ -85,7 +82,7 @@
<varlistentry>
<term>
- <option>ftp=<replaceable>XXX,YYY,...</replaceable></option>
+ ftp=XXX,YYY,...
</term>
<listitem>
<para>
@@ -105,14 +102,14 @@
</para>
</refsect1>
- <refsect1 id="pam_ftp-types">
+ <refsect1 xml:id="pam_ftp-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>auth</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_ftp-return_values'>
+ <refsect1 xml:id="pam_ftp-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -139,7 +136,7 @@
</para>
</refsect1>
- <refsect1 id='pam_ftp-examples'>
+ <refsect1 xml:id="pam_ftp-examples">
<title>EXAMPLES</title>
<para>
Add the following line to <filename>/etc/pam.d/ftpd</filename> to
@@ -158,7 +155,7 @@ auth required pam_listfile.so \
</para>
</refsect1>
- <refsect1 id='pam_ftp-see_also'>
+ <refsect1 xml:id="pam_ftp-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -173,11 +170,11 @@ auth required pam_listfile.so \
</para>
</refsect1>
- <refsect1 id='pam_ftp-author'>
+ <refsect1 xml:id="pam_ftp-author">
<title>AUTHOR</title>
<para>
pam_ftp was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_ftp/pam_ftp.c b/modules/pam_ftp/pam_ftp.c
index 441f2bba..41fb9f48 100644
--- a/modules/pam_ftp/pam_ftp.c
+++ b/modules/pam_ftp/pam_ftp.c
@@ -157,7 +157,7 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
GUEST_LOGIN_PROMPT);
if (retval != PAM_SUCCESS) {
- _pam_overwrite (resp);
+ pam_overwrite_string (resp);
_pam_drop (resp);
return ((retval == PAM_CONV_AGAIN)
? PAM_INCOMPLETE:PAM_AUTHINFO_UNAVAIL);
@@ -196,7 +196,7 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
}
/* clean up */
- _pam_overwrite(resp);
+ pam_overwrite_string(resp);
_pam_drop(resp);
/* success or failure */
diff --git a/modules/pam_group/Makefile.am b/modules/pam_group/Makefile.am
index a9a0a1ef..af8df4eb 100644
--- a/modules/pam_group/Makefile.am
+++ b/modules/pam_group/Makefile.am
@@ -15,10 +15,14 @@ dist_check_SCRIPTS = tst-pam_group
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DPAM_GROUP_CONF=\"$(SCONFIGDIR)/group.conf\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
diff --git a/modules/pam_group/Makefile.in b/modules/pam_group/Makefile.in
index 6d916f1a..66e4ed95 100644
--- a/modules/pam_group/Makefile.in
+++ b/modules/pam_group/Makefile.in
@@ -431,6 +431,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -443,11 +444,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -479,12 +482,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -507,6 +512,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -517,12 +523,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -596,9 +606,10 @@ XMLS = README.xml group.conf.5.xml pam_group.8.xml
dist_check_SCRIPTS = tst-pam_group
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DPAM_GROUP_CONF=\"$(SCONFIGDIR)/group.conf\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
securelib_LTLIBRARIES = pam_group.la
diff --git a/modules/pam_group/README b/modules/pam_group/README
index 9d6d0970..5e2d01e0 100644
--- a/modules/pam_group/README
+++ b/modules/pam_group/README
@@ -12,6 +12,9 @@ applying for.
By default rules for group memberships are taken from config file /etc/security
/group.conf.
+If /etc/security/group.conf does not exist, %vendordir%/security/group.conf is
+used.
+
This module's usefulness relies on the file-systems accessible to the user. The
point being that once granted the membership of a group, the user may attempt
to create a setgid binary with a restricted group ownership. Later, when the
diff --git a/modules/pam_group/README.xml b/modules/pam_group/README.xml
index 387d6987..8ccd55d0 100644
--- a/modules/pam_group/README.xml
+++ b/modules/pam_group/README.xml
@@ -1,34 +1,19 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamgroup SYSTEM "pam_group.8.xml">
--->
-<!--
-<!ENTITY groupconf SYSTEM "group.conf.5.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_group.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_group-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_group.8.xml" xpointer='xpointer(id("pam_group-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_group.8.xml" xpointer='xpointer(//refsect1[@id = "pam_group-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_group.8.xml" xpointer='xpointer(id("pam_group-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="group.conf.5.xml" xpointer='xpointer(//refsect1[@id = "group.conf-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="group.conf.5.xml" xpointer='xpointer(id("group.conf-examples")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_group/group.conf.5 b/modules/pam_group/group.conf.5
index bbbe307a..96009fef 100644
--- a/modules/pam_group/group.conf.5
+++ b/modules/pam_group/group.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: group.conf
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "GROUP\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "GROUP\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_group/group.conf.5.xml b/modules/pam_group/group.conf.5.xml
index 2b7fb345..a8875b30 100644
--- a/modules/pam_group/group.conf.5.xml
+++ b/modules/pam_group/group.conf.5.xml
@@ -1,13 +1,10 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="group.conf">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="group.conf">
<refmeta>
<refentrytitle>group.conf</refentrytitle>
<manvolnum>5</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
<refnamediv>
@@ -15,7 +12,7 @@
<refpurpose>configuration file for the pam_group module</refpurpose>
</refnamediv>
- <refsect1 id='group.conf-description'>
+ <refsect1 xml:id="group.conf-description">
<title>DESCRIPTION</title>
<para>
@@ -98,7 +95,7 @@
</para>
</refsect1>
- <refsect1 id="group.conf-examples">
+ <refsect1 xml:id="group.conf-examples">
<title>EXAMPLES</title>
<para>
These are some example lines which might be specified in
@@ -129,7 +126,7 @@ xsh; tty* ;%admin;Al0000-2400;plugdev
</refsect1>
- <refsect1 id="group.conf-see_also">
+ <refsect1 xml:id="group.conf-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry><refentrytitle>pam_group</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
@@ -138,10 +135,10 @@ xsh; tty* ;%admin;Al0000-2400;plugdev
</para>
</refsect1>
- <refsect1 id="group.conf-author">
+ <refsect1 xml:id="group.conf-author">
<title>AUTHOR</title>
<para>
pam_group was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_group/pam_group.8 b/modules/pam_group/pam_group.8
index 77c73419..959c7491 100644
--- a/modules/pam_group/pam_group.8
+++ b/modules/pam_group/pam_group.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_group
.\" Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_GROUP" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_GROUP" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_group/pam_group.8.xml b/modules/pam_group/pam_group.8.xml
index 2c1c9058..695a7baf 100644
--- a/modules/pam_group/pam_group.8.xml
+++ b/modules/pam_group/pam_group.8.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_group'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_group">
<refmeta>
<refentrytitle>pam_group</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_group-name'>
+ <refnamediv xml:id="pam_group-name">
<refname>pam_group</refname>
<refpurpose>
PAM module for group access
@@ -20,13 +17,13 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_group-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_group-cmdsynopsis" sepchar=" ">
<command>pam_group.so</command>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_group-description">
+ <refsect1 xml:id="pam_group-description">
<title>DESCRIPTION</title>
<para>
The pam_group PAM module does not authenticate the user, but instead
@@ -38,6 +35,10 @@
By default rules for group memberships are taken from config file
<filename>/etc/security/group.conf</filename>.
</para>
+ <para condition="with_vendordir">
+ If <filename>/etc/security/group.conf</filename> does not exist,
+ <filename>%vendordir%/security/group.conf</filename> is used.
+ </para>
<para>
This module's usefulness relies on the file-systems
accessible to the user. The point being that once granted the
@@ -60,19 +61,19 @@
</para>
</refsect1>
- <refsect1 id="pam_group-options">
+ <refsect1 xml:id="pam_group-options">
<title>OPTIONS</title>
<para>This module does not recognise any options.</para>
</refsect1>
- <refsect1 id="pam_group-types">
+ <refsect1 xml:id="pam_group-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>auth</option> module type is provided.
</para>
</refsect1>
- <refsect1 id="pam_group-return_values">
+ <refsect1 xml:id="pam_group-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -126,11 +127,11 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_group-files">
+ <refsect1 xml:id="pam_group-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/group.conf</filename></term>
+ <term>/etc/security/group.conf</term>
<listitem>
<para>Default configuration file</para>
</listitem>
@@ -138,7 +139,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_group-see_also">
+ <refsect1 xml:id="pam_group-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -153,10 +154,10 @@
</para>
</refsect1>
- <refsect1 id="pam_group-authors">
+ <refsect1 xml:id="pam_group-authors">
<title>AUTHORS</title>
<para>
pam_group was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_group/pam_group.c b/modules/pam_group/pam_group.c
index d9a35ea6..6877849e 100644
--- a/modules/pam_group/pam_group.c
+++ b/modules/pam_group/pam_group.c
@@ -16,6 +16,7 @@
#include <time.h>
#include <syslog.h>
#include <string.h>
+#include <errno.h>
#include <grp.h>
#include <sys/types.h>
@@ -23,6 +24,10 @@
#include <fcntl.h>
#include <netdb.h>
+#define PAM_GROUP_CONF SCONFIGDIR "/group.conf"
+#ifdef VENDOR_SCONFIGDIR
+# define VENDOR_PAM_GROUP_CONF VENDOR_SCONFIGDIR "/group.conf"
+#endif
#define PAM_GROUP_BUFLEN 1000
#define FIELD_SEPARATOR ';' /* this is new as of .02 */
@@ -39,6 +44,7 @@ typedef enum { AND, OR } operator;
#include <security/_pam_macros.h>
#include <security/pam_modutil.h>
#include <security/pam_ext.h>
+#include "pam_inline.h"
/* --- static functions for checking whether the user should be let in --- */
@@ -48,7 +54,7 @@ shift_buf(char *mem, int from)
char *start = mem;
while ((*mem = mem[from]) != '\0')
++mem;
- memset(mem, '\0', PAM_GROUP_BUFLEN - (mem - start));
+ pam_overwrite_n(mem, PAM_GROUP_BUFLEN - (mem - start));
return mem;
}
@@ -70,7 +76,8 @@ trim_spaces(char *buf, char *from)
#define STATE_EOF 3 /* end of file or error */
static int
-read_field(const pam_handle_t *pamh, int fd, char **buf, int *from, int *state)
+read_field(const pam_handle_t *pamh, int fd, char **buf, int *from, int *state,
+ const char *conf_filename)
{
char *to;
char *src;
@@ -89,9 +96,9 @@ read_field(const pam_handle_t *pamh, int fd, char **buf, int *from, int *state)
}
*from = 0;
*state = STATE_NL;
- fd = open(PAM_GROUP_CONF, O_RDONLY);
+ fd = open(conf_filename, O_RDONLY);
if (fd < 0) {
- pam_syslog(pamh, LOG_ERR, "error opening %s: %m", PAM_GROUP_CONF);
+ pam_syslog(pamh, LOG_ERR, "error opening %s: %m", conf_filename);
_pam_drop(*buf);
*state = STATE_EOF;
return -1;
@@ -106,9 +113,9 @@ read_field(const pam_handle_t *pamh, int fd, char **buf, int *from, int *state)
while (fd != -1 && to - *buf < PAM_GROUP_BUFLEN) {
i = pam_modutil_read(fd, to, PAM_GROUP_BUFLEN - (to - *buf));
if (i < 0) {
- pam_syslog(pamh, LOG_ERR, "error reading %s: %m", PAM_GROUP_CONF);
+ pam_syslog(pamh, LOG_ERR, "error reading %s: %m", conf_filename);
close(fd);
- memset(*buf, 0, PAM_GROUP_BUFLEN);
+ pam_overwrite_n(*buf, PAM_GROUP_BUFLEN);
_pam_drop(*buf);
*state = STATE_EOF;
return -1;
@@ -127,7 +134,7 @@ read_field(const pam_handle_t *pamh, int fd, char **buf, int *from, int *state)
return -1;
}
- memset(to, '\0', PAM_GROUP_BUFLEN - (to - *buf));
+ pam_overwrite_n(to, PAM_GROUP_BUFLEN - (to - *buf));
to = *buf;
onspace = 1; /* delete any leading spaces */
@@ -573,6 +580,18 @@ static int check_account(pam_handle_t *pamh, const char *service,
int retval=PAM_SUCCESS;
gid_t *grps;
int no_grps;
+ const char *conf_filename = PAM_GROUP_CONF;
+
+#ifdef VENDOR_PAM_GROUP_CONF
+ /*
+ * Check whether PAM_GROUP_CONF file is available.
+ * If it does not exist, fall back to VENDOR_PAM_GROUP_CONF file.
+ */
+ struct stat stat_buffer;
+ if (stat(conf_filename, &stat_buffer) != 0 && errno == ENOENT) {
+ conf_filename = VENDOR_PAM_GROUP_CONF;
+ }
+#endif
/*
* first we get the current list of groups - the application
@@ -611,7 +630,7 @@ static int check_account(pam_handle_t *pamh, const char *service,
/* here we get the service name field */
- fd = read_field(pamh, fd, &buffer, &from, &state);
+ fd = read_field(pamh, fd, &buffer, &from, &state, conf_filename);
if (!buffer || !buffer[0]) {
/* empty line .. ? */
continue;
@@ -621,7 +640,7 @@ static int check_account(pam_handle_t *pamh, const char *service,
if (state != STATE_FIELD) {
pam_syslog(pamh, LOG_ERR,
- "%s: malformed rule #%d", PAM_GROUP_CONF, count);
+ "%s: malformed rule #%d", conf_filename, count);
continue;
}
@@ -630,10 +649,10 @@ static int check_account(pam_handle_t *pamh, const char *service,
/* here we get the terminal name field */
- fd = read_field(pamh, fd, &buffer, &from, &state);
+ fd = read_field(pamh, fd, &buffer, &from, &state, conf_filename);
if (state != STATE_FIELD) {
pam_syslog(pamh, LOG_ERR,
- "%s: malformed rule #%d", PAM_GROUP_CONF, count);
+ "%s: malformed rule #%d", conf_filename, count);
continue;
}
good &= logic_field(pamh,tty, buffer, count, is_same);
@@ -641,10 +660,10 @@ static int check_account(pam_handle_t *pamh, const char *service,
/* here we get the username field */
- fd = read_field(pamh, fd, &buffer, &from, &state);
+ fd = read_field(pamh, fd, &buffer, &from, &state, conf_filename);
if (state != STATE_FIELD) {
pam_syslog(pamh, LOG_ERR,
- "%s: malformed rule #%d", PAM_GROUP_CONF, count);
+ "%s: malformed rule #%d", conf_filename, count);
continue;
}
/* If buffer starts with @, we are using netgroups */
@@ -663,20 +682,20 @@ static int check_account(pam_handle_t *pamh, const char *service,
/* here we get the time field */
- fd = read_field(pamh, fd, &buffer, &from, &state);
+ fd = read_field(pamh, fd, &buffer, &from, &state, conf_filename);
if (state != STATE_FIELD) {
pam_syslog(pamh, LOG_ERR,
- "%s: malformed rule #%d", PAM_GROUP_CONF, count);
+ "%s: malformed rule #%d", conf_filename, count);
continue;
}
good &= logic_field(pamh,&here_and_now, buffer, count, check_time);
D(("with time: %s", good ? "passes":"fails" ));
- fd = read_field(pamh, fd, &buffer, &from, &state);
+ fd = read_field(pamh, fd, &buffer, &from, &state, conf_filename);
if (state == STATE_FIELD) {
pam_syslog(pamh, LOG_ERR,
- "%s: poorly terminated rule #%d", PAM_GROUP_CONF, count);
+ "%s: poorly terminated rule #%d", conf_filename, count);
continue;
}
@@ -726,7 +745,7 @@ static int check_account(pam_handle_t *pamh, const char *service,
}
if (grps) { /* tidy up */
- memset(grps, 0, sizeof(gid_t) * blk_size(no_grps));
+ pam_overwrite_n(grps, sizeof(gid_t) * blk_size(no_grps));
_pam_drop(grps);
no_grps = 0;
}
diff --git a/modules/pam_issue/Makefile.am b/modules/pam_issue/Makefile.am
index 1b26c31e..1ab2b2ce 100644
--- a/modules/pam_issue/Makefile.am
+++ b/modules/pam_issue/Makefile.am
@@ -15,17 +15,21 @@ dist_check_SCRIPTS = tst-pam_issue
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
+ $(LOGIND_CFLAGS) $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
endif
securelib_LTLIBRARIES = pam_issue.la
-pam_issue_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_issue_la_LIBADD = $(top_builddir)/libpam/libpam.la $(SYSTEMD_LIBS)
if ENABLE_REGENERATE_MAN
dist_noinst_DATA = README
diff --git a/modules/pam_issue/Makefile.in b/modules/pam_issue/Makefile.in
index 91627c5c..02a3cc16 100644
--- a/modules/pam_issue/Makefile.in
+++ b/modules/pam_issue/Makefile.in
@@ -148,7 +148,9 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)"
LTLIBRARIES = $(securelib_LTLIBRARIES)
-pam_issue_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+am__DEPENDENCIES_1 =
+pam_issue_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
+ $(am__DEPENDENCIES_1)
pam_issue_la_SOURCES = pam_issue.c
pam_issue_la_OBJECTS = pam_issue.lo
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -428,6 +430,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +443,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +481,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +511,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +522,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,13 +605,14 @@ XMLS = README.xml pam_issue.8.xml
dist_check_SCRIPTS = tst-pam_issue
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
+ $(LOGIND_CFLAGS) $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
securelib_LTLIBRARIES = pam_issue.la
-pam_issue_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_issue_la_LIBADD = $(top_builddir)/libpam/libpam.la $(SYSTEMD_LIBS)
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
diff --git a/modules/pam_issue/README.xml b/modules/pam_issue/README.xml
index b5b61c3a..36742c77 100644
--- a/modules/pam_issue/README.xml
+++ b/modules/pam_issue/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_issue.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_issue.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_issue-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_issue.8.xml" xpointer='xpointer(id("pam_issue-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_issue.8.xml" xpointer='xpointer(id("pam_issue-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_issue.8.xml" xpointer='xpointer(id("pam_issue-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_issue.8.xml" xpointer='xpointer(id("pam_issue-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_issue.8.xml" xpointer='xpointer(id("pam_issue-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_issue/pam_issue.8 b/modules/pam_issue/pam_issue.8
index 810406ed..fdeed526 100644
--- a/modules/pam_issue/pam_issue.8
+++ b/modules/pam_issue/pam_issue.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_issue
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_ISSUE" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_ISSUE" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -38,69 +38,69 @@ pam_issue is a PAM module to prepend an issue file to the username prompt\&. It
.PP
Recognized escapes:
.PP
-\fB\ed\fR
+\ed
.RS 4
current day
.RE
.PP
-\fB\el\fR
+\el
.RS 4
name of this tty
.RE
.PP
-\fB\em\fR
+\em
.RS 4
machine architecture (uname \-m)
.RE
.PP
-\fB\en\fR
+\en
.RS 4
machine\*(Aqs network node hostname (uname \-n)
.RE
.PP
-\fB\eo\fR
+\eo
.RS 4
domain name of this system
.RE
.PP
-\fB\er\fR
+\er
.RS 4
release number of operating system (uname \-r)
.RE
.PP
-\fB\et\fR
+\et
.RS 4
current time
.RE
.PP
-\fB\es\fR
+\es
.RS 4
operating system name (uname \-s)
.RE
.PP
-\fB\eu\fR
+\eu
.RS 4
number of users currently logged in
.RE
.PP
-\fB\eU\fR
+\eU
.RS 4
same as \eu except it is suffixed with "user" or "users" (eg\&. "1 user" or "10 users")
.RE
.PP
-\fB\ev\fR
+\ev
.RS 4
operating system version and build date (uname \-v)
.RE
.SH "OPTIONS"
.PP
.PP
-\fBnoesc\fR
+noesc
.RS 4
Turns off escape code parsing\&.
.RE
.PP
-\fBissue=\fR\fB\fIissue\-file\-name\fR\fR
+issue=issue\-file\-name
.RS 4
The file to output if not using the default\&.
.RE
diff --git a/modules/pam_issue/pam_issue.8.xml b/modules/pam_issue/pam_issue.8.xml
index fb9b7377..20d32451 100644
--- a/modules/pam_issue/pam_issue.8.xml
+++ b/modules/pam_issue/pam_issue.8.xml
@@ -1,110 +1,107 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_issue">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_issue">
<refmeta>
<refentrytitle>pam_issue</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_issue-name">
+ <refnamediv xml:id="pam_issue-name">
<refname>pam_issue</refname>
<refpurpose>PAM module to add issue file to user prompt</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_issue-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_issue-cmdsynopsis" sepchar=" ">
<command>pam_issue.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
noesc
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
issue=<replaceable>issue-file-name</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_issue-description">
+ <refsect1 xml:id="pam_issue-description">
<title>DESCRIPTION</title>
<para>
pam_issue is a PAM module to prepend an issue file to the username
prompt. It also by default parses escape codes in the issue file
- similar to some common getty's (using &bsol;x format).
+ similar to some common getty's (using \x format).
</para>
<para>
Recognized escapes:
</para>
<variablelist>
<varlistentry>
- <term><emphasis remap='B'>&bsol;d</emphasis></term>
+ <term>\d</term>
<listitem>
<para>current day</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;l</emphasis></term>
+ <term>\l</term>
<listitem>
<para>name of this tty</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;m</emphasis></term>
+ <term>\m</term>
<listitem>
<para>machine architecture (uname -m)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;n</emphasis></term>
+ <term>\n</term>
<listitem>
<para>machine's network node hostname (uname -n)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;o</emphasis></term>
+ <term>\o</term>
<listitem>
<para>domain name of this system</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;r</emphasis></term>
+ <term>\r</term>
<listitem>
<para>release number of operating system (uname -r)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;t</emphasis></term>
+ <term>\t</term>
<listitem>
<para>current time</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;s</emphasis></term>
+ <term>\s</term>
<listitem>
<para>operating system name (uname -s)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;u</emphasis></term>
+ <term>\u</term>
<listitem>
<para>number of users currently logged in</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;U</emphasis></term>
+ <term>\U</term>
<listitem>
<para>
- same as &bsol;u except it is suffixed with "user" or
+ same as \u except it is suffixed with "user" or
"users" (eg. "1 user" or "10 users")
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><emphasis remap='B'>&bsol;v</emphasis></term>
+ <term>\v</term>
<listitem>
<para>operating system version and build date (uname -v)</para>
</listitem>
@@ -113,7 +110,7 @@
</refsect1>
- <refsect1 id="pam_issue-options">
+ <refsect1 xml:id="pam_issue-options">
<title>OPTIONS</title>
<para>
@@ -121,7 +118,7 @@
<varlistentry>
<term>
- <option>noesc</option>
+ noesc
</term>
<listitem>
<para>
@@ -132,7 +129,7 @@
<varlistentry>
<term>
- <option>issue=<replaceable>issue-file-name</replaceable></option>
+ issue=issue-file-name
</term>
<listitem>
<para>
@@ -146,14 +143,14 @@
</para>
</refsect1>
- <refsect1 id="pam_issue-types">
+ <refsect1 xml:id="pam_issue-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>auth</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_issue-return_values'>
+ <refsect1 xml:id="pam_issue-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -198,7 +195,7 @@
</para>
</refsect1>
- <refsect1 id='pam_issue-examples'>
+ <refsect1 xml:id="pam_issue-examples">
<title>EXAMPLES</title>
<para>
Add the following line to <filename>/etc/pam.d/login</filename> to
@@ -209,7 +206,7 @@
</para>
</refsect1>
- <refsect1 id='pam_issue-see_also'>
+ <refsect1 xml:id="pam_issue-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -224,11 +221,11 @@
</para>
</refsect1>
- <refsect1 id='pam_issue-author'>
+ <refsect1 xml:id="pam_issue-author">
<title>AUTHOR</title>
<para>
pam_issue was written by Ben Collins &lt;bcollins@debian.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_issue/pam_issue.c b/modules/pam_issue/pam_issue.c
index 5b6a4669..c08f90c3 100644
--- a/modules/pam_issue/pam_issue.c
+++ b/modules/pam_issue/pam_issue.c
@@ -25,10 +25,15 @@
#include <fcntl.h>
#include <unistd.h>
#include <sys/utsname.h>
-#include <utmp.h>
#include <time.h>
#include <syslog.h>
+#ifdef USE_LOGIND
+#include <systemd/sd-login.h>
+#else
+#include <utmp.h>
+#endif
+
#include <security/_pam_macros.h>
#include <security/pam_modules.h>
#include <security/pam_ext.h>
@@ -36,98 +41,6 @@
static int _user_prompt_set = 0;
-static int read_issue_raw(pam_handle_t *pamh, FILE *fp, char **prompt);
-static int read_issue_quoted(pam_handle_t *pamh, FILE *fp, char **prompt);
-
-/* --- authentication management functions (only) --- */
-
-int
-pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
- int argc, const char **argv)
-{
- int retval = PAM_SERVICE_ERR;
- FILE *fp;
- const char *issue_file = NULL;
- int parse_esc = 1;
- const void *item = NULL;
- const char *cur_prompt;
- char *issue_prompt = NULL;
-
- /* If we've already set the prompt, don't set it again */
- if(_user_prompt_set)
- return PAM_IGNORE;
-
- /* We set this here so if we fail below, we won't get further
- than this next time around (only one real failure) */
- _user_prompt_set = 1;
-
- for ( ; argc-- > 0 ; ++argv ) {
- const char *str;
-
- if ((str = pam_str_skip_prefix(*argv, "issue=")) != NULL) {
- issue_file = str;
- D(("set issue_file to: %s", issue_file));
- } else if (!strcmp(*argv,"noesc")) {
- parse_esc = 0;
- D(("turning off escape parsing by request"));
- } else
- D(("unknown option passed: %s", *argv));
- }
-
- if (issue_file == NULL)
- issue_file = "/etc/issue";
-
- if ((fp = fopen(issue_file, "r")) == NULL) {
- pam_syslog(pamh, LOG_ERR, "error opening %s: %m", issue_file);
- return PAM_SERVICE_ERR;
- }
-
- if ((retval = pam_get_item(pamh, PAM_USER_PROMPT, &item)) != PAM_SUCCESS) {
- fclose(fp);
- return retval;
- }
-
- cur_prompt = item;
- if (cur_prompt == NULL)
- cur_prompt = "";
-
- if (parse_esc)
- retval = read_issue_quoted(pamh, fp, &issue_prompt);
- else
- retval = read_issue_raw(pamh, fp, &issue_prompt);
-
- fclose(fp);
-
- if (retval != PAM_SUCCESS)
- goto out;
-
- {
- size_t size = strlen(issue_prompt) + strlen(cur_prompt) + 1;
- char *new_prompt = realloc(issue_prompt, size);
-
- if (new_prompt == NULL) {
- pam_syslog(pamh, LOG_CRIT, "out of memory");
- retval = PAM_BUF_ERR;
- goto out;
- }
- issue_prompt = new_prompt;
- }
-
- strcat(issue_prompt, cur_prompt);
- retval = pam_set_item(pamh, PAM_USER_PROMPT,
- (const void *) issue_prompt);
- out:
- _pam_drop(issue_prompt);
- return (retval == PAM_SUCCESS) ? PAM_IGNORE : retval;
-}
-
-int
-pam_sm_setcred (pam_handle_t *pamh UNUSED, int flags UNUSED,
- int argc UNUSED, const char **argv UNUSED)
-{
- return PAM_IGNORE;
-}
-
static int
read_issue_raw(pam_handle_t *pamh, FILE *fp, char **prompt)
{
@@ -251,6 +164,18 @@ read_issue_quoted(pam_handle_t *pamh, FILE *fp, char **prompt)
case 'U':
{
unsigned int users = 0;
+#ifdef USE_LOGIND
+ int sessions = sd_get_sessions(NULL);
+
+ if (sessions < 0) {
+ pam_syslog(pamh, LOG_ERR, "logind error: %s",
+ strerror(-sessions));
+ _pam_drop(issue);
+ return PAM_SERVICE_ERR;
+ } else {
+ users = sessions;
+ }
+#else
struct utmp *ut;
setutent();
while ((ut = getutent())) {
@@ -258,6 +183,7 @@ read_issue_quoted(pam_handle_t *pamh, FILE *fp, char **prompt)
++users;
}
endutent();
+#endif
if (c == 'U')
snprintf (buf, sizeof buf, "%u %s", users,
(users == 1) ? "user" : "users");
@@ -303,4 +229,91 @@ read_issue_quoted(pam_handle_t *pamh, FILE *fp, char **prompt)
return PAM_SUCCESS;
}
-/* end of module definition */
+/* --- authentication management functions (only) --- */
+
+int
+pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED,
+ int argc, const char **argv)
+{
+ int retval = PAM_SERVICE_ERR;
+ FILE *fp;
+ const char *issue_file = NULL;
+ int parse_esc = 1;
+ const void *item = NULL;
+ const char *cur_prompt;
+ char *issue_prompt = NULL;
+
+ /* If we've already set the prompt, don't set it again */
+ if(_user_prompt_set)
+ return PAM_IGNORE;
+
+ /* We set this here so if we fail below, we won't get further
+ than this next time around (only one real failure) */
+ _user_prompt_set = 1;
+
+ for ( ; argc-- > 0 ; ++argv ) {
+ const char *str;
+
+ if ((str = pam_str_skip_prefix(*argv, "issue=")) != NULL) {
+ issue_file = str;
+ D(("set issue_file to: %s", issue_file));
+ } else if (!strcmp(*argv,"noesc")) {
+ parse_esc = 0;
+ D(("turning off escape parsing by request"));
+ } else
+ D(("unknown option passed: %s", *argv));
+ }
+
+ if (issue_file == NULL)
+ issue_file = "/etc/issue";
+
+ if ((fp = fopen(issue_file, "r")) == NULL) {
+ pam_syslog(pamh, LOG_ERR, "error opening %s: %m", issue_file);
+ return PAM_SERVICE_ERR;
+ }
+
+ if ((retval = pam_get_item(pamh, PAM_USER_PROMPT, &item)) != PAM_SUCCESS) {
+ fclose(fp);
+ return retval;
+ }
+
+ cur_prompt = item;
+ if (cur_prompt == NULL)
+ cur_prompt = "";
+
+ if (parse_esc)
+ retval = read_issue_quoted(pamh, fp, &issue_prompt);
+ else
+ retval = read_issue_raw(pamh, fp, &issue_prompt);
+
+ fclose(fp);
+
+ if (retval != PAM_SUCCESS)
+ goto out;
+
+ {
+ size_t size = strlen(issue_prompt) + strlen(cur_prompt) + 1;
+ char *new_prompt = realloc(issue_prompt, size);
+
+ if (new_prompt == NULL) {
+ pam_syslog(pamh, LOG_CRIT, "out of memory");
+ retval = PAM_BUF_ERR;
+ goto out;
+ }
+ issue_prompt = new_prompt;
+ }
+
+ strcat(issue_prompt, cur_prompt);
+ retval = pam_set_item(pamh, PAM_USER_PROMPT,
+ (const void *) issue_prompt);
+ out:
+ _pam_drop(issue_prompt);
+ return (retval == PAM_SUCCESS) ? PAM_IGNORE : retval;
+}
+
+int
+pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED,
+ int argc UNUSED, const char **argv UNUSED)
+{
+ return PAM_IGNORE;
+}
diff --git a/modules/pam_keyinit/Makefile.am b/modules/pam_keyinit/Makefile.am
index e1953312..e1806a41 100644
--- a/modules/pam_keyinit/Makefile.am
+++ b/modules/pam_keyinit/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_keyinit
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_keyinit/Makefile.in b/modules/pam_keyinit/Makefile.in
index 600c19cb..7da83525 100644
--- a/modules/pam_keyinit/Makefile.in
+++ b/modules/pam_keyinit/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_keyinit.8.xml
dist_check_SCRIPTS = tst-pam_keyinit
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_keyinit/README.xml b/modules/pam_keyinit/README.xml
index 47659e89..33059c7e 100644
--- a/modules/pam_keyinit/README.xml
+++ b/modules/pam_keyinit/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_keyinit.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_keyinit.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_keyinit-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_keyinit.8.xml" xpointer='xpointer(id("pam_keyinit-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_keyinit/pam_keyinit.8 b/modules/pam_keyinit/pam_keyinit.8
index 01bfa529..5d7b3e47 100644
--- a/modules/pam_keyinit/pam_keyinit.8
+++ b/modules/pam_keyinit/pam_keyinit.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_keyinit
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_KEYINIT" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_KEYINIT" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -61,18 +61,18 @@ The keyutils package is used to manipulate keys more directly\&. This can be obt
\m[blue]\fBKeyutils\fR\m[]\&\s-2\u[1]\d\s+2
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Log debug information with
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBforce\fR
+force
.RS 4
Causes the session keyring of the invoking process to be replaced unconditionally\&.
.RE
.PP
-\fBrevoke\fR
+revoke
.RS 4
Causes the session keyring of the invoking process to be revoked when the invoking process exits if the session keyring was created for this process in the first place\&.
.RE
diff --git a/modules/pam_keyinit/pam_keyinit.8.xml b/modules/pam_keyinit/pam_keyinit.8.xml
index ff1e7d00..7b0a73be 100644
--- a/modules/pam_keyinit/pam_keyinit.8.xml
+++ b/modules/pam_keyinit/pam_keyinit.8.xml
@@ -1,36 +1,33 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_keyinit">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_keyinit">
<refmeta>
<refentrytitle>pam_keyinit</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_keyinit-name">
+ <refnamediv xml:id="pam_keyinit-name">
<refname>pam_keyinit</refname>
<refpurpose>Kernel session keyring initialiser module</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_keyinit-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_keyinit-cmdsynopsis" sepchar=" ">
<command>pam_keyinit.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
force
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
revoke
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_keyinit-description">
+ <refsect1 xml:id="pam_keyinit-description">
<title>DESCRIPTION</title>
<para>
The pam_keyinit PAM module ensures that the invoking process has a
@@ -71,7 +68,7 @@
</para>
<para>
This module should not, generally, be invoked by programs like
- <emphasis remap='B'>su</emphasis>, since it is usually desirable for the
+ <emphasis remap="B">su</emphasis>, since it is usually desirable for the
key set to percolate through to the alternate context. The keys have
their own permissions system to manage this.
</para>
@@ -80,18 +77,18 @@
can be obtained from:
</para>
<para>
- <ulink url="http://people.redhat.com/~dhowells/keyutils/">
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://people.redhat.com/~dhowells/keyutils/">
Keyutils
- </ulink>
+ </link>
</para>
</refsect1>
- <refsect1 id="pam_keyinit-options">
+ <refsect1 xml:id="pam_keyinit-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -104,7 +101,7 @@
<varlistentry>
<term>
- <option>force</option>
+ force
</term>
<listitem>
<para>
@@ -116,7 +113,7 @@
<varlistentry>
<term>
- <option>revoke</option>
+ revoke
</term>
<listitem>
<para>
@@ -130,14 +127,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_keyinit-types">
+ <refsect1 xml:id="pam_keyinit-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_keyinit-return_values'>
+ <refsect1 xml:id="pam_keyinit-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -207,7 +204,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_keyinit-examples'>
+ <refsect1 xml:id="pam_keyinit-examples">
<title>EXAMPLES</title>
<para>
Add this line to your login entries to start each login session with its
@@ -222,7 +219,7 @@ session required pam_keyinit.so
</para>
</refsect1>
- <refsect1 id='pam_keyinit-see_also'>
+ <refsect1 xml:id="pam_keyinit-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -240,11 +237,11 @@ session required pam_keyinit.so
</para>
</refsect1>
- <refsect1 id='pam_keyinit-author'>
+ <refsect1 xml:id="pam_keyinit-author">
<title>AUTHOR</title>
<para>
pam_keyinit was written by David Howells, &lt;dhowells@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_keyinit/pam_keyinit.c b/modules/pam_keyinit/pam_keyinit.c
index 92e4953b..df9804b9 100644
--- a/modules/pam_keyinit/pam_keyinit.c
+++ b/modules/pam_keyinit/pam_keyinit.c
@@ -21,6 +21,7 @@
#include <security/pam_modutil.h>
#include <security/pam_ext.h>
#include <sys/syscall.h>
+#include <stdatomic.h>
#define KEY_SPEC_SESSION_KEYRING -3 /* ID for session keyring */
#define KEY_SPEC_USER_KEYRING -4 /* ID for UID-specific keyring */
@@ -31,12 +32,12 @@
#define KEYCTL_REVOKE 3 /* revoke a key */
#define KEYCTL_LINK 8 /* link a key into a keyring */
-static int my_session_keyring = 0;
-static int session_counter = 0;
-static int do_revoke = 0;
-static uid_t revoke_as_uid;
-static gid_t revoke_as_gid;
-static int xdebug = 0;
+static _Thread_local int my_session_keyring = 0;
+static _Atomic int session_counter = 0;
+static _Thread_local int do_revoke = 0;
+static _Thread_local uid_t revoke_as_uid;
+static _Thread_local gid_t revoke_as_gid;
+static _Thread_local int xdebug = 0;
static void debug(pam_handle_t *pamh, const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
@@ -64,6 +65,33 @@ static void error(pam_handle_t *pamh, const char *fmt, ...)
va_end(va);
}
+static int pam_setreuid(uid_t ruid, uid_t euid)
+{
+#if defined(SYS_setreuid32)
+ return syscall(SYS_setreuid32, ruid, euid);
+#else
+ return syscall(SYS_setreuid, ruid, euid);
+#endif
+}
+
+static int pam_setregid(gid_t rgid, gid_t egid)
+{
+#if defined(SYS_setregid32)
+ return syscall(SYS_setregid32, rgid, egid);
+#else
+ return syscall(SYS_setregid, rgid, egid);
+#endif
+}
+
+static int pam_setresuid(uid_t ruid, uid_t euid, uid_t suid)
+{
+#if defined(SYS_setresuid32)
+ return syscall(SYS_setresuid32, ruid, euid, suid);
+#else
+ return syscall(SYS_setresuid, ruid, euid, suid);
+#endif
+}
+
/*
* initialise the session keyring for this process
*/
@@ -140,14 +168,14 @@ static int kill_keyrings(pam_handle_t *pamh, int error_ret)
/* switch to the real UID and GID so that we have permission to
* revoke the key */
- if (revoke_as_gid != old_gid && setregid(-1, revoke_as_gid) < 0) {
+ if (revoke_as_gid != old_gid && pam_setregid(-1, revoke_as_gid) < 0) {
error(pamh, "Unable to change GID to %d temporarily\n", revoke_as_gid);
return error_ret;
}
- if (revoke_as_uid != old_uid && setresuid(-1, revoke_as_uid, old_uid) < 0) {
+ if (revoke_as_uid != old_uid && pam_setresuid(-1, revoke_as_uid, old_uid) < 0) {
error(pamh, "Unable to change UID to %d temporarily\n", revoke_as_uid);
- if (getegid() != old_gid && setregid(-1, old_gid) < 0)
+ if (getegid() != old_gid && pam_setregid(-1, old_gid) < 0)
error(pamh, "Unable to change GID back to %d\n", old_gid);
return error_ret;
}
@@ -157,12 +185,12 @@ static int kill_keyrings(pam_handle_t *pamh, int error_ret)
}
/* return to the original UID and GID (probably root) */
- if (revoke_as_uid != old_uid && setreuid(-1, old_uid) < 0) {
+ if (revoke_as_uid != old_uid && pam_setreuid(-1, old_uid) < 0) {
error(pamh, "Unable to change UID back to %d\n", old_uid);
ret = error_ret;
}
- if (revoke_as_gid != old_gid && setregid(-1, old_gid) < 0) {
+ if (revoke_as_gid != old_gid && pam_setregid(-1, old_gid) < 0) {
error(pamh, "Unable to change GID back to %d\n", old_gid);
ret = error_ret;
}
@@ -215,14 +243,14 @@ static int do_keyinit(pam_handle_t *pamh, int argc, const char **argv, int error
/* switch to the real UID and GID so that the keyring ends up owned by
* the right user */
- if (gid != old_gid && setregid(gid, -1) < 0) {
+ if (gid != old_gid && pam_setregid(gid, -1) < 0) {
error(pamh, "Unable to change GID to %d temporarily\n", gid);
return error_ret;
}
- if (uid != old_uid && setreuid(uid, -1) < 0) {
+ if (uid != old_uid && pam_setreuid(uid, -1) < 0) {
error(pamh, "Unable to change UID to %d temporarily\n", uid);
- if (setregid(old_gid, -1) < 0)
+ if (pam_setregid(old_gid, -1) < 0)
error(pamh, "Unable to change GID back to %d\n", old_gid);
return error_ret;
}
@@ -230,12 +258,12 @@ static int do_keyinit(pam_handle_t *pamh, int argc, const char **argv, int error
ret = init_keyrings(pamh, force, error_ret);
/* return to the original UID and GID (probably root) */
- if (uid != old_uid && setreuid(old_uid, -1) < 0) {
+ if (uid != old_uid && pam_setreuid(old_uid, -1) < 0) {
error(pamh, "Unable to change UID back to %d\n", old_uid);
ret = error_ret;
}
- if (gid != old_gid && setregid(old_gid, -1) < 0) {
+ if (gid != old_gid && pam_setregid(old_gid, -1) < 0) {
error(pamh, "Unable to change GID back to %d\n", old_gid);
ret = error_ret;
}
diff --git a/modules/pam_lastlog/Makefile.am b/modules/pam_lastlog/Makefile.am
index dc0c7c4c..e48038d8 100644
--- a/modules/pam_lastlog/Makefile.am
+++ b/modules/pam_lastlog/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_lastlog
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_lastlog/Makefile.in b/modules/pam_lastlog/Makefile.in
index 16baea83..0811a233 100644
--- a/modules/pam_lastlog/Makefile.in
+++ b/modules/pam_lastlog/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_lastlog.8.xml
dist_check_SCRIPTS = tst-pam_lastlog
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_lastlog/README.xml b/modules/pam_lastlog/README.xml
index 7fe70339..6b312435 100644
--- a/modules/pam_lastlog/README.xml
+++ b/modules/pam_lastlog/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_lastlog.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_lastlog.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_lastlog-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_lastlog.8.xml" xpointer='xpointer(id("pam_lastlog-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_lastlog/pam_lastlog.8 b/modules/pam_lastlog/pam_lastlog.8
index 325456e8..3a85ede2 100644
--- a/modules/pam_lastlog/pam_lastlog.8
+++ b/modules/pam_lastlog/pam_lastlog.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_lastlog
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_LASTLOG" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_LASTLOG" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -51,63 +51,63 @@ If the module is called in the auth or account phase, the accounts that were not
value\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBsilent\fR
+silent
.RS 4
Don\*(Aqt inform the user about any previous login, just update the
/var/log/lastlog
file\&. This option does not affect display of bad login attempts\&.
.RE
.PP
-\fBnever\fR
+never
.RS 4
If the
/var/log/lastlog
file does not contain any old entries for the user, indicate that the user has never previously logged in with a welcome message\&.
.RE
.PP
-\fBnodate\fR
+nodate
.RS 4
Don\*(Aqt display the date of the last login\&.
.RE
.PP
-\fBnoterm\fR
+noterm
.RS 4
Don\*(Aqt display the terminal name on which the last login was attempted\&.
.RE
.PP
-\fBnohost\fR
+nohost
.RS 4
Don\*(Aqt indicate from which host the last login was attempted\&.
.RE
.PP
-\fBnowtmp\fR
+nowtmp
.RS 4
Don\*(Aqt update the wtmp entry\&.
.RE
.PP
-\fBnoupdate\fR
+noupdate
.RS 4
Don\*(Aqt update any file\&.
.RE
.PP
-\fBshowfailed\fR
+showfailed
.RS 4
Display number of failed login attempts and the date of the last failed attempt from btmp\&. The date is not displayed when
\fBnodate\fR
is specified\&.
.RE
.PP
-\fBinactive=<days>\fR
+inactive=<days>
.RS 4
This option is specific for the auth or account phase\&. It specifies the number of days after the last login of the user when the user will be locked out by the module\&. The default value is 90\&.
.RE
.PP
-\fBunlimited\fR
+unlimited
.RS 4
If the
\fIfsize\fR
diff --git a/modules/pam_lastlog/pam_lastlog.8.xml b/modules/pam_lastlog/pam_lastlog.8.xml
index bada2ea0..1fd9d9dd 100644
--- a/modules/pam_lastlog/pam_lastlog.8.xml
+++ b/modules/pam_lastlog/pam_lastlog.8.xml
@@ -1,60 +1,57 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_lastlog">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_lastlog">
<refmeta>
<refentrytitle>pam_lastlog</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_lastlog-name">
+ <refnamediv xml:id="pam_lastlog-name">
<refname>pam_lastlog</refname>
<refpurpose>PAM module to display date of last login and perform inactive account lock out</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_lastlog-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_lastlog-cmdsynopsis" sepchar=" ">
<command>pam_lastlog.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
silent
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
never
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
nodate
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
nohost
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
noterm
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
nowtmp
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
noupdate
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
showfailed
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
inactive=&lt;days&gt;
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
unlimited
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_lastlog-description">
+ <refsect1 xml:id="pam_lastlog-description">
<title>DESCRIPTION</title>
@@ -83,13 +80,13 @@
</para>
</refsect1>
- <refsect1 id="pam_lastlog-options">
+ <refsect1 xml:id="pam_lastlog-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -99,7 +96,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>silent</option>
+ silent
</term>
<listitem>
<para>
@@ -111,7 +108,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>never</option>
+ never
</term>
<listitem>
<para>
@@ -124,7 +121,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>nodate</option>
+ nodate
</term>
<listitem>
<para>
@@ -134,7 +131,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>noterm</option>
+ noterm
</term>
<listitem>
<para>
@@ -145,7 +142,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>nohost</option>
+ nohost
</term>
<listitem>
<para>
@@ -156,7 +153,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>nowtmp</option>
+ nowtmp
</term>
<listitem>
<para>
@@ -166,7 +163,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>noupdate</option>
+ noupdate
</term>
<listitem>
<para>
@@ -176,7 +173,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>showfailed</option>
+ showfailed
</term>
<listitem>
<para>
@@ -188,7 +185,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>inactive=&lt;days&gt;</option>
+ inactive=&lt;days&gt;
</term>
<listitem>
<para>
@@ -201,7 +198,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>unlimited</option>
+ unlimited
</term>
<listitem>
<para>
@@ -214,7 +211,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_lastlog-types">
+ <refsect1 xml:id="pam_lastlog-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option> and <option>account</option> module type
@@ -225,7 +222,7 @@
</para>
</refsect1>
- <refsect1 id='pam_lastlog-return_values'>
+ <refsect1 xml:id="pam_lastlog-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -282,7 +279,7 @@
</para>
</refsect1>
- <refsect1 id='pam_lastlog-examples'>
+ <refsect1 xml:id="pam_lastlog-examples">
<title>EXAMPLES</title>
<para>
Add the following line to <filename>/etc/pam.d/login</filename> to
@@ -300,11 +297,11 @@
</programlisting>
</refsect1>
- <refsect1 id="pam_lastlog-files">
+ <refsect1 xml:id="pam_lastlog-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/var/log/lastlog</filename></term>
+ <term>/var/log/lastlog</term>
<listitem>
<para>Lastlog logging file</para>
</listitem>
@@ -312,7 +309,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_lastlog-see_also'>
+ <refsect1 xml:id="pam_lastlog-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -330,7 +327,7 @@
</para>
</refsect1>
- <refsect1 id='pam_lastlog-author'>
+ <refsect1 xml:id="pam_lastlog-author">
<title>AUTHOR</title>
<para>
pam_lastlog was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
@@ -340,4 +337,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_lastlog/pam_lastlog.c b/modules/pam_lastlog/pam_lastlog.c
index abd048df..ec515f56 100644
--- a/modules/pam_lastlog/pam_lastlog.c
+++ b/modules/pam_lastlog/pam_lastlog.c
@@ -57,14 +57,13 @@ struct lastlog {
# define PATH_LOGIN_DEFS "/etc/login.defs"
#endif
-/* XXX - time before ignoring lock. Is 1 sec enough? */
-#define LASTLOG_IGNORE_LOCK_TIME 1
-
#define DEFAULT_HOST "" /* "[no.where]" */
#define DEFAULT_TERM "" /* "tt???" */
#define DEFAULT_INACTIVE_DAYS 90
#define MAX_INACTIVE_DAYS 100000
+#define LOCK_RETRIES 3 /* number of file lock retries */
+#define LOCK_RETRY_DELAY 1 /* seconds to wait between lock attempts */
#include <security/pam_modules.h>
#include <security/_pam_macros.h>
@@ -266,6 +265,7 @@ last_login_read(pam_handle_t *pamh, int announce, int last_fd, uid_t uid, time_t
{
struct flock last_lock;
struct lastlog last_login;
+ int lock_retries = LOCK_RETRIES;
int retval = PAM_SUCCESS;
char the_time[256];
char *date = NULL;
@@ -278,11 +278,19 @@ last_login_read(pam_handle_t *pamh, int announce, int last_fd, uid_t uid, time_t
last_lock.l_start = sizeof(last_login) * (off_t) uid;
last_lock.l_len = sizeof(last_login);
- if (fcntl(last_fd, F_SETLK, &last_lock) < 0) {
+ while (fcntl(last_fd, F_SETLK, &last_lock) < 0) {
+ if (0 == --lock_retries) {
+ /* read lock failed, proceed anyway to avoid possible DoS */
+ D(("locking %s failed", _PATH_LASTLOG));
+ pam_syslog(pamh, LOG_INFO,
+ "file %s is locked/read, proceeding anyway",
+ _PATH_LASTLOG);
+ break;
+ }
D(("locking %s failed..(waiting a little)", _PATH_LASTLOG));
- pam_syslog(pamh, LOG_WARNING,
- "file %s is locked/read", _PATH_LASTLOG);
- sleep(LASTLOG_IGNORE_LOCK_TIME);
+ pam_syslog(pamh, LOG_INFO,
+ "file %s is locked/read, retrying", _PATH_LASTLOG);
+ sleep(LOCK_RETRY_DELAY);
}
if (pam_modutil_read(last_fd, (char *) &last_login,
@@ -358,11 +366,11 @@ last_login_read(pam_handle_t *pamh, int announce, int last_fd, uid_t uid, time_t
/* cleanup */
cleanup:
- memset(&last_login, 0, sizeof(last_login));
- _pam_overwrite(date);
- _pam_overwrite(host);
+ pam_overwrite_object(&last_login);
+ pam_overwrite_string(date);
+ pam_overwrite_string(host);
_pam_drop(host);
- _pam_overwrite(line);
+ pam_overwrite_string(line);
_pam_drop(line);
return retval;
@@ -380,6 +388,7 @@ last_login_write(pam_handle_t *pamh, int announce, int last_fd,
int setrlimit_res;
struct flock last_lock;
struct lastlog last_login;
+ int lock_retries = LOCK_RETRIES;
time_t ll_time;
const void *void_remote_host = NULL;
const char *remote_host;
@@ -426,10 +435,17 @@ last_login_write(pam_handle_t *pamh, int announce, int last_fd,
last_lock.l_start = sizeof(last_login) * (off_t) uid;
last_lock.l_len = sizeof(last_login);
- if (fcntl(last_fd, F_SETLK, &last_lock) < 0) {
+ while (fcntl(last_fd, F_SETLK, &last_lock) < 0) {
+ if (0 == --lock_retries) {
+ D(("locking %s failed", _PATH_LASTLOG));
+ pam_syslog(pamh, LOG_ERR,
+ "file %s is locked/write", _PATH_LASTLOG);
+ return PAM_SERVICE_ERR;
+ }
D(("locking %s failed..(waiting a little)", _PATH_LASTLOG));
- pam_syslog(pamh, LOG_WARNING, "file %s is locked/write", _PATH_LASTLOG);
- sleep(LASTLOG_IGNORE_LOCK_TIME);
+ pam_syslog(pamh, LOG_INFO,
+ "file %s is locked/write, retrying", _PATH_LASTLOG);
+ sleep(LOCK_RETRY_DELAY);
}
/*
@@ -486,7 +502,7 @@ last_login_write(pam_handle_t *pamh, int announce, int last_fd,
}
/* cleanup */
- memset(&last_login, 0, sizeof(last_login));
+ pam_overwrite_object(&last_login);
return retval;
}
@@ -573,12 +589,12 @@ last_login_failed(pam_handle_t *pamh, int announce, const char *user, time_t llt
time_t lf_time;
lf_time = utuser.ut_tv.tv_sec;
- tm = localtime_r (&lf_time, &tm_buf);
- strftime (the_time, sizeof (the_time),
- /* TRANSLATORS: "strftime options for date of last login" */
- _(" %a %b %e %H:%M:%S %Z %Y"), tm);
-
- date = the_time;
+ if ((tm = localtime_r (&lf_time, &tm_buf)) != NULL) {
+ strftime (the_time, sizeof (the_time),
+ /* TRANSLATORS: "strftime options for date of last login" */
+ _(" %a %b %e %H:%M:%S %Z %Y"), tm);
+ date = the_time;
+ }
}
/* we want & have the host? */
diff --git a/modules/pam_limits/Makefile.am b/modules/pam_limits/Makefile.am
index 911b07b3..3a3b5e01 100644
--- a/modules/pam_limits/Makefile.am
+++ b/modules/pam_limits/Makefile.am
@@ -15,12 +15,16 @@ dist_check_SCRIPTS = tst-pam_limits
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
limits_conf_dir = $(SCONFIGDIR)/limits.d
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DLIMITS_FILE_DIR=\"$(limits_conf_dir)/*.conf\" \
- -DLIMITS_FILE=\"$(SCONFIGDIR)/limits.conf\" $(WARN_CFLAGS)
+ -DLIMITS_FILE_DIR=\"$(limits_conf_dir)\" \
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
diff --git a/modules/pam_limits/Makefile.in b/modules/pam_limits/Makefile.in
index ac265081..7b515b83 100644
--- a/modules/pam_limits/Makefile.in
+++ b/modules/pam_limits/Makefile.in
@@ -431,6 +431,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -443,11 +444,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -479,12 +482,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -507,6 +512,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -517,12 +523,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -596,11 +606,12 @@ XMLS = README.xml limits.conf.5.xml pam_limits.8.xml
dist_check_SCRIPTS = tst-pam_limits
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
limits_conf_dir = $(SCONFIGDIR)/limits.d
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DLIMITS_FILE_DIR=\"$(limits_conf_dir)/*.conf\" \
- -DLIMITS_FILE=\"$(SCONFIGDIR)/limits.conf\" $(WARN_CFLAGS)
+ -DLIMITS_FILE_DIR=\"$(limits_conf_dir)\" \
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
securelib_LTLIBRARIES = pam_limits.la
diff --git a/modules/pam_limits/README b/modules/pam_limits/README
index ed104d62..98264b95 100644
--- a/modules/pam_limits/README
+++ b/modules/pam_limits/README
@@ -15,6 +15,18 @@ concatenated together in the order of parsing. If a config file is explicitly
specified with a module option then the files in the above directory are not
parsed.
+By default limits are taken from the /etc/security/limits.conf config file or,
+if that one is not present, the file %vendordir%/security/limits.conf. Then
+individual *.conf files from the /etc/security/limits.d/ and %vendordir%/
+security/limits.d directories are read. If /etc/security/limits.d/
+@filename@.conf exists, then %vendordir%/security/limits.d/@filename@.conf will
+not be used. All limits.d/*.conf files are sorted by their @filename@.conf in
+lexicographic order regardless of which of the directories they reside in. The
+effect of the individual files is the same as if all the files were
+concatenated together in the order of parsing. If a config file is explicitly
+specified with the config option the files in the above directories are not
+parsed.
+
The module must not be called by a multithreaded application.
If Linux PAM is compiled with audit support the module will report when it
diff --git a/modules/pam_limits/README.xml b/modules/pam_limits/README.xml
index 964a5a21..25a463cc 100644
--- a/modules/pam_limits/README.xml
+++ b/modules/pam_limits/README.xml
@@ -1,39 +1,23 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamlimits SYSTEM "pam_limits.8.xml">
--->
-<!--
-<!ENTITY limitsconf SYSTEM "limits.conf.5.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_limits.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_limits-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_limits.8.xml" xpointer='xpointer(id("pam_limits-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_limits.8.xml" xpointer='xpointer(id("pam_limits-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_limits.8.xml" xpointer='xpointer(id("pam_limits-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="limits.conf.5.xml" xpointer='xpointer(//refsect1[@id = "limits.conf-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="limits.conf.5.xml" xpointer='xpointer(id("limits.conf-examples")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_limits/limits.conf.5 b/modules/pam_limits/limits.conf.5
index a4a0ed31..25f44597 100644
--- a/modules/pam_limits/limits.conf.5
+++ b/modules/pam_limits/limits.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: limits.conf
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "LIMITS\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "LIMITS\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -50,7 +50,7 @@ The syntax of the lines is as follows:
.PP
The fields listed above should be filled as follows:
.PP
-\fB<domain>\fR
+<domain>
.RS 4
.sp
.RS 4
@@ -147,17 +147,17 @@ applicable to maxlogins limit only\&. It limits the total number of logins of al
.RE
.RE
.PP
-\fB<type>\fR
+<type>
.RS 4
.PP
-\fBhard\fR
+hard
.RS 4
for enforcing
\fBhard\fR
resource limits\&. These limits are set by the superuser and enforced by the Kernel\&. The user cannot raise his requirement of system resources above such values\&.
.RE
.PP
-\fBsoft\fR
+soft
.RS 4
for enforcing
\fBsoft\fR
@@ -168,7 +168,7 @@ limits\&. The values specified with this token can be thought of as
values, for normal system usage\&.
.RE
.PP
-\fB\-\fR
+\-
.RS 4
for enforcing both
\fBsoft\fR
@@ -180,102 +180,102 @@ Note, if you specify a type of \*(Aq\-\*(Aq but neglect to supply the item and v
.RE
.RE
.PP
-\fB<item>\fR
+<item>
.RS 4
.PP
-\fBcore\fR
+core
.RS 4
limits the core file size (KB)
.RE
.PP
-\fBdata\fR
+data
.RS 4
maximum data size (KB)
.RE
.PP
-\fBfsize\fR
+fsize
.RS 4
maximum filesize (KB)
.RE
.PP
-\fBmemlock\fR
+memlock
.RS 4
maximum locked\-in\-memory address space (KB)
.RE
.PP
-\fBnofile\fR
+nofile
.RS 4
maximum number of open file descriptors
.RE
.PP
-\fBrss\fR
+rss
.RS 4
maximum resident set size (KB) (Ignored in Linux 2\&.4\&.30 and higher)
.RE
.PP
-\fBstack\fR
+stack
.RS 4
maximum stack size (KB)
.RE
.PP
-\fBcpu\fR
+cpu
.RS 4
maximum CPU time (minutes)
.RE
.PP
-\fBnproc\fR
+nproc
.RS 4
maximum number of processes
.RE
.PP
-\fBas\fR
+as
.RS 4
address space limit (KB)
.RE
.PP
-\fBmaxlogins\fR
+maxlogins
.RS 4
maximum number of logins for this user (this limit does not apply to user with
\fIuid=0\fR)
.RE
.PP
-\fBmaxsyslogins\fR
+maxsyslogins
.RS 4
maximum number of all logins on system; user is not allowed to log\-in if total number of all user logins is greater than specified number (this limit does not apply to user with
\fIuid=0\fR)
.RE
.PP
-\fBnonewprivs\fR
+nonewprivs
.RS 4
value of 0 or 1; if set to 1 disables acquiring new privileges by invoking prctl(PR_SET_NO_NEW_PRIVS)
.RE
.PP
-\fBpriority\fR
+priority
.RS 4
the priority to run user process with (negative values boost process priority)
.RE
.PP
-\fBlocks\fR
+locks
.RS 4
maximum locked files (Linux 2\&.4 and higher)
.RE
.PP
-\fBsigpending\fR
+sigpending
.RS 4
maximum number of pending signals (Linux 2\&.6 and higher)
.RE
.PP
-\fBmsgqueue\fR
+msgqueue
.RS 4
maximum memory used by POSIX message queues (bytes) (Linux 2\&.6 and higher)
.RE
.PP
-\fBnice\fR
+nice
.RS 4
maximum nice priority allowed to raise to (Linux 2\&.6\&.12 and higher) values: [\-20,19]
.RE
.PP
-\fBrtprio\fR
+rtprio
.RS 4
maximum realtime priority allowed for non\-privileged processes (Linux 2\&.6\&.12 and higher)
.RE
diff --git a/modules/pam_limits/limits.conf.5.xml b/modules/pam_limits/limits.conf.5.xml
index c5bd6768..2177da1f 100644
--- a/modules/pam_limits/limits.conf.5.xml
+++ b/modules/pam_limits/limits.conf.5.xml
@@ -1,13 +1,10 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="limits.conf">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="limits.conf">
<refmeta>
<refentrytitle>limits.conf</refentrytitle>
<manvolnum>5</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
<refnamediv>
@@ -15,7 +12,7 @@
<refpurpose>configuration file for the pam_limits module</refpurpose>
</refnamediv>
- <refsect1 id='limits.conf-description'>
+ <refsect1 xml:id="limits.conf-description">
<title>DESCRIPTION</title>
<para>
The <emphasis>pam_limits.so</emphasis> module applies ulimit limits,
@@ -38,7 +35,7 @@
<variablelist>
<varlistentry>
<term>
- <option>&lt;domain&gt;</option>
+ &lt;domain&gt;
</term>
<listitem>
<itemizedlist>
@@ -49,38 +46,35 @@
</listitem>
<listitem>
<para>
- a groupname, with <emphasis remap='B'>@group</emphasis> syntax.
+ a groupname, with <emphasis remap="B">@group</emphasis> syntax.
This should not be confused with netgroups.
</para>
</listitem>
<listitem>
<para>
- the wildcard <emphasis remap='B'>*</emphasis>, for default entry.
+ the wildcard <emphasis remap="B">*</emphasis>, for default entry.
</para>
</listitem>
<listitem>
<para>
- the wildcard <emphasis remap='B'>%</emphasis>, for maxlogins limit only,
- can also be used with <emphasis remap='B'>%group</emphasis> syntax. If the
- <emphasis remap='B'>%</emphasis> wildcard is used alone it is identical
- to using <emphasis remap='B'>*</emphasis> with maxsyslogins limit. With
- a group specified after <emphasis remap='B'>%</emphasis> it limits the total
+ the wildcard <emphasis remap="B">%</emphasis>, for maxlogins limit only,
+ can also be used with <emphasis remap="B">%group</emphasis> syntax. If the
+ <emphasis remap="B">%</emphasis> wildcard is used alone it is identical
+ to using <emphasis remap="B">*</emphasis> with maxsyslogins limit. With
+ a group specified after <emphasis remap="B">%</emphasis> it limits the total
number of logins of all users that are member of the group.
</para>
</listitem>
<listitem>
<para>
- an uid range specified as <replaceable>&lt;min_uid&gt;</replaceable><emphasis
- remap='B'>:</emphasis><replaceable>&lt;max_uid&gt;</replaceable>. If min_uid
+ an uid range specified as <replaceable>&lt;min_uid&gt;</replaceable><emphasis remap="B">:</emphasis><replaceable>&lt;max_uid&gt;</replaceable>. If min_uid
is omitted, the match is exact for the max_uid. If max_uid is omitted, all
uids greater than or equal min_uid match.
</para>
</listitem>
<listitem>
<para>
- a gid range specified as <emphasis
- remap='B'>@</emphasis><replaceable>&lt;min_gid&gt;</replaceable><emphasis
- remap='B'>:</emphasis><replaceable>&lt;max_gid&gt;</replaceable>. If min_gid
+ a gid range specified as <emphasis remap="B">@</emphasis><replaceable>&lt;min_gid&gt;</replaceable><emphasis remap="B">:</emphasis><replaceable>&lt;max_gid&gt;</replaceable>. If min_gid
is omitted, the match is exact for the max_gid. If max_gid is omitted, all
gids greater than or equal min_gid match. For the exact match all groups including
the user's supplementary groups are examined. For the range matches only
@@ -89,8 +83,7 @@
</listitem>
<listitem>
<para>
- a gid specified as <emphasis
- remap='B'>%:</emphasis><replaceable>&lt;gid&gt;</replaceable> applicable
+ a gid specified as <emphasis remap="B">%:</emphasis><replaceable>&lt;gid&gt;</replaceable> applicable
to maxlogins limit only. It limits the total number of logins of all users
that are member of the group with the specified gid.
</para>
@@ -101,38 +94,38 @@
<varlistentry>
<term>
- <option>&lt;type&gt;</option>
+ &lt;type&gt;
</term>
<listitem>
<variablelist>
<varlistentry>
- <term><option>hard</option></term>
+ <term>hard</term>
<listitem>
<para>
- for enforcing <emphasis remap='B'>hard</emphasis> resource limits.
+ for enforcing <emphasis remap="B">hard</emphasis> resource limits.
These limits are set by the superuser and enforced by the Kernel.
The user cannot raise his requirement of system resources above such values.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>soft</option></term>
+ <term>soft</term>
<listitem>
<para>
- for enforcing <emphasis remap='B'>soft</emphasis> resource limits.
+ for enforcing <emphasis remap="B">soft</emphasis> resource limits.
These limits are ones that the user can move up or down within the
- permitted range by any pre-existing <emphasis remap='B'>hard</emphasis>
+ permitted range by any pre-existing <emphasis remap="B">hard</emphasis>
limits. The values specified with this token can be thought of as
<emphasis>default</emphasis> values, for normal system usage.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>-</option></term>
+ <term>-</term>
<listitem>
<para>
- for enforcing both <emphasis remap='B'>soft</emphasis> and
- <emphasis remap='B'>hard</emphasis> resource limits together.
+ for enforcing both <emphasis remap="B">soft</emphasis> and
+ <emphasis remap="B">hard</emphasis> resource limits together.
</para>
<para>
Note, if you specify a type of '-' but neglect to supply the
@@ -147,79 +140,79 @@
<varlistentry>
<term>
- <option>&lt;item&gt;</option>
+ &lt;item&gt;
</term>
<listitem>
<variablelist>
<varlistentry>
- <term><option>core</option></term>
+ <term>core</term>
<listitem>
<para>limits the core file size (KB)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>data</option></term>
+ <term>data</term>
<listitem>
<para>maximum data size (KB)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>fsize</option></term>
+ <term>fsize</term>
<listitem>
<para>maximum filesize (KB)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>memlock</option></term>
+ <term>memlock</term>
<listitem>
<para>maximum locked-in-memory address space (KB)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>nofile</option></term>
+ <term>nofile</term>
<listitem>
<para>maximum number of open file descriptors</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>rss</option></term>
+ <term>rss</term>
<listitem>
<para>maximum resident set size (KB) (Ignored in Linux 2.4.30 and higher)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>stack</option></term>
+ <term>stack</term>
<listitem>
<para>maximum stack size (KB)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>cpu</option></term>
+ <term>cpu</term>
<listitem>
<para>maximum CPU time (minutes)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>nproc</option></term>
+ <term>nproc</term>
<listitem>
<para>maximum number of processes</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>as</option></term>
+ <term>as</term>
<listitem>
<para>address space limit (KB)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>maxlogins</option></term>
+ <term>maxlogins</term>
<listitem>
<para>maximum number of logins for this user (this limit does
not apply to user with <emphasis>uid=0</emphasis>)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>maxsyslogins</option></term>
+ <term>maxsyslogins</term>
<listitem>
<para>maximum number of all logins on system; user is not
allowed to log-in if total number of all user logins is
@@ -228,46 +221,46 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>nonewprivs</option></term>
+ <term>nonewprivs</term>
<listitem>
<para>value of 0 or 1; if set to 1 disables acquiring new
privileges by invoking prctl(PR_SET_NO_NEW_PRIVS)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>priority</option></term>
+ <term>priority</term>
<listitem>
<para>the priority to run user process with (negative
values boost process priority)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>locks</option></term>
+ <term>locks</term>
<listitem>
<para>maximum locked files (Linux 2.4 and higher)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>sigpending</option></term>
+ <term>sigpending</term>
<listitem>
<para>maximum number of pending signals (Linux 2.6 and higher)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>msgqueue</option></term>
+ <term>msgqueue</term>
<listitem>
<para>maximum memory used by POSIX message queues (bytes)
(Linux 2.6 and higher)</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>nice</option></term>
+ <term>nice</term>
<listitem>
<para>maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19]</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>rtprio</option></term>
+ <term>rtprio</term>
<listitem>
<para>maximum realtime priority allowed for non-privileged processes
(Linux 2.6.12 and higher)</para>
@@ -281,9 +274,9 @@
<para>
All items support the values <emphasis>-1</emphasis>,
<emphasis>unlimited</emphasis> or <emphasis>infinity</emphasis> indicating no limit,
- except for <emphasis remap='B'>priority</emphasis>, <emphasis remap='B'>nice</emphasis>,
- and <emphasis remap='B'>nonewprivs</emphasis>.
- If <emphasis remap='B'>nofile</emphasis> is to be set to one of these values,
+ except for <emphasis remap="B">priority</emphasis>, <emphasis remap="B">nice</emphasis>,
+ and <emphasis remap="B">nonewprivs</emphasis>.
+ If <emphasis remap="B">nofile</emphasis> is to be set to one of these values,
it will be set to the contents of /proc/sys/fs/nr_open instead (see setrlimit(3)).
</para>
<para>
@@ -309,7 +302,7 @@
</para>
<para>
In the <emphasis>limits</emphasis> configuration file, the
- '<emphasis remap='B'>#</emphasis>' character introduces a comment
+ '<emphasis remap="B">#</emphasis>' character introduces a comment
- after which the rest of the line is ignored.
</para>
<para>
@@ -319,7 +312,7 @@
</para>
</refsect1>
- <refsect1 id="limits.conf-examples">
+ <refsect1 xml:id="limits.conf-examples">
<title>EXAMPLES</title>
<para>
These are some example lines which might be specified in
@@ -340,7 +333,7 @@ ftp hard nproc 0
</programlisting>
</refsect1>
- <refsect1 id="limits.conf-see_also">
+ <refsect1 xml:id="limits.conf-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry><refentrytitle>pam_limits</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
@@ -351,10 +344,10 @@ ftp hard nproc 0
</para>
</refsect1>
- <refsect1 id="limits.conf-author">
+ <refsect1 xml:id="limits.conf-author">
<title>AUTHOR</title>
<para>
pam_limits was initially written by Cristian Gafton &lt;gafton@redhat.com&gt;
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_limits/pam_limits.8 b/modules/pam_limits/pam_limits.8
index 50e9a100..a3d15f26 100644
--- a/modules/pam_limits/pam_limits.8
+++ b/modules/pam_limits/pam_limits.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_limits
.\" Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_LIMITS" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_LIMITS" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -49,27 +49,27 @@ The module must not be called by a multithreaded application\&.
If Linux PAM is compiled with audit support the module will report when it denies access based on limit of maximum number of concurrent login sessions\&.
.SH "OPTIONS"
.PP
-\fBconf=\fR\fB\fI/path/to/limits\&.conf\fR\fR
+conf=/path/to/limits\&.conf
.RS 4
Indicate an alternative limits\&.conf style configuration file to override the default\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBset_all\fR
+set_all
.RS 4
Set the limits for which no value is specified in the configuration file to the one from the process with the PID 1\&. Please note that if the init process is systemd these limits will not be the kernel default limits and this option should not be used\&.
.RE
.PP
-\fButmp_early\fR
+utmp_early
.RS 4
Some broken applications actually allocate a utmp entry for the user before the user is admitted to the system\&. If some of the services you are configuring PAM for do this, you can selectively use this module argument to compensate for this behavior and at the same time maintain system\-wide consistency with a single limits\&.conf file\&.
.RE
.PP
-\fBnoaudit\fR
+noaudit
.RS 4
Do not report exceeded maximum logins count to the audit subsystem\&.
.RE
diff --git a/modules/pam_limits/pam_limits.8.xml b/modules/pam_limits/pam_limits.8.xml
index bc46cbf4..cca046cc 100644
--- a/modules/pam_limits/pam_limits.8.xml
+++ b/modules/pam_limits/pam_limits.8.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_limits'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_limits">
<refmeta>
<refentrytitle>pam_limits</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_limits-name'>
+ <refnamediv xml:id="pam_limits-name">
<refname>pam_limits</refname>
<refpurpose>
PAM module to limit resources
@@ -20,35 +17,35 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_limits-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_limits-cmdsynopsis" sepchar=" ">
<command>pam_limits.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
conf=<replaceable>/path/to/limits.conf</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
set_all
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
utmp_early
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
noaudit
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_limits-description">
+ <refsect1 xml:id="pam_limits-description">
<title>DESCRIPTION</title>
<para>
The pam_limits PAM module sets limits on the system resources that can be
obtained in a user-session. Users of <emphasis>uid=0</emphasis> are affected
by this limits, too.
</para>
- <para>
+ <para condition="without_vendordir">
By default limits are taken from the <filename>/etc/security/limits.conf</filename>
config file. Then individual *.conf files from the <filename>/etc/security/limits.d/</filename>
directory are read. The files are parsed one after another in the order of "C" locale.
@@ -57,6 +54,23 @@
If a config file is explicitly specified with a module option then the
files in the above directory are not parsed.
</para>
+ <para condition="with_vendordir">
+ By default limits are taken from the <filename>/etc/security/limits.conf</filename>
+ config file or, if that one is not present, the file
+ <filename>%vendordir%/security/limits.conf</filename>.
+ Then individual <filename>*.conf</filename> files from the
+ <filename>/etc/security/limits.d/</filename> and
+ <filename>%vendordir%/security/limits.d</filename> directories are read.
+ If <filename>/etc/security/limits.d/@filename@.conf</filename> exists, then
+ <filename>%vendordir%/security/limits.d/@filename@.conf</filename> will not be used.
+ All <filename>limits.d/*.conf</filename> files are sorted by their
+ <filename>@filename@.conf</filename> in lexicographic order regardless of which
+ of the directories they reside in.
+ The effect of the individual files is the same as if all the files were
+ concatenated together in the order of parsing.
+ If a config file is explicitly specified with the <option>config</option>
+ option the files in the above directories are not parsed.
+ </para>
<para>
The module must not be called by a multithreaded application.
</para>
@@ -67,12 +81,12 @@
</para>
</refsect1>
- <refsect1 id="pam_limits-options">
+ <refsect1 xml:id="pam_limits-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>conf=<replaceable>/path/to/limits.conf</replaceable></option>
+ conf=/path/to/limits.conf
</term>
<listitem>
<para>
@@ -83,7 +97,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -93,7 +107,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>set_all</option>
+ set_all
</term>
<listitem>
<para>
@@ -107,7 +121,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>utmp_early</option>
+ utmp_early
</term>
<listitem>
<para>
@@ -122,7 +136,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>noaudit</option>
+ noaudit
</term>
<listitem>
<para>
@@ -133,14 +147,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_limits-types">
+ <refsect1 xml:id="pam_limits-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> module type is provided.
</para>
</refsect1>
- <refsect1 id="pam_limits-return_values">
+ <refsect1 xml:id="pam_limits-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -202,19 +216,26 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_limits-files">
+ <refsect1 xml:id="pam_limits-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/limits.conf</filename></term>
+ <term>/etc/security/limits.conf</term>
<listitem>
<para>Default configuration file</para>
</listitem>
</varlistentry>
+ <varlistentry condition="with_vendordir">
+ <term>%vendordir%/security/limits.conf</term>
+ <listitem>
+ <para>Default configuration file if
+ <filename>/etc/security/limits.conf</filename> does not exist.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
- <refsect1 id='pam_limits-examples'>
+ <refsect1 xml:id="pam_limits-examples">
<title>EXAMPLES</title>
<para>
For the services you need resources limits (login for example) put a
@@ -233,7 +254,7 @@ session required pam_limits.so
</para>
</refsect1>
- <refsect1 id="pam_limits-see_also">
+ <refsect1 xml:id="pam_limits-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -248,10 +269,10 @@ session required pam_limits.so
</para>
</refsect1>
- <refsect1 id="pam_limits-authors">
+ <refsect1 xml:id="pam_limits-authors">
<title>AUTHORS</title>
<para>
pam_limits was initially written by Cristian Gafton &lt;gafton@redhat.com&gt;
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_limits/pam_limits.c b/modules/pam_limits/pam_limits.c
index 7cc45d77..87bb4b70 100644
--- a/modules/pam_limits/pam_limits.c
+++ b/modules/pam_limits/pam_limits.c
@@ -13,7 +13,7 @@
* See end for Copyright information
*/
-#if !defined(linux) && !defined(__linux)
+#ifndef __linux__
#warning THIS CODE IS KNOWN TO WORK ONLY ON LINUX !!!
#endif
@@ -47,6 +47,10 @@
#include <libaudit.h>
#endif
+#ifndef PR_SET_NO_NEW_PRIVS
+# define PR_SET_NO_NEW_PRIVS 38 /* from <linux/prctl.h> */
+#endif
+
/* Module defines */
#define LINE_LENGTH 1024
@@ -119,9 +123,14 @@ struct pam_limit_s {
#define PAM_SET_ALL 0x0010
/* Limits from globbed files. */
-#define LIMITS_CONF_GLOB LIMITS_FILE_DIR
+#define LIMITS_CONF_GLOB (LIMITS_FILE_DIR "/*.conf")
+
+#define LIMITS_FILE (SCONFIGDIR "/limits.conf")
-#define CONF_FILE (pl->conf_file != NULL)?pl->conf_file:LIMITS_FILE
+#ifdef VENDOR_SCONFIGDIR
+#define VENDOR_LIMITS_FILE (VENDOR_SCONFIGDIR "/limits.conf")
+#define VENDOR_LIMITS_CONF_GLOB (VENDOR_SCONFIGDIR "/limits.d/*.conf")
+#endif
static int
_pam_parse (const pam_handle_t *pamh, int argc, const char **argv,
@@ -274,8 +283,8 @@ check_logins (pam_handle_t *pamh, const char *name, int limit, int ctrl,
}
if (!pl->flag_numsyslogins) {
char user[sizeof(ut->UT_USER) + 1];
- user[0] = '\0';
- strncat(user, ut->UT_USER, sizeof(ut->UT_USER));
+ memcpy(user, ut->UT_USER, sizeof(ut->UT_USER));
+ user[sizeof(ut->UT_USER)] = '\0';
if (((pl->login_limit_def == LIMITS_DEF_USER)
|| (pl->login_limit_def == LIMITS_DEF_GROUP)
@@ -806,18 +815,22 @@ parse_uid_range(pam_handle_t *pamh, const char *domain,
static int
parse_config_file(pam_handle_t *pamh, const char *uname, uid_t uid, gid_t gid,
- int ctrl, struct pam_limit_s *pl)
+ int ctrl, struct pam_limit_s *pl, const int conf_file_set_by_user)
{
FILE *fil;
char buf[LINE_LENGTH];
- /* check for the LIMITS_FILE */
+ /* check for the conf_file */
if (ctrl & PAM_DEBUG_ARG)
- pam_syslog(pamh, LOG_DEBUG, "reading settings from '%s'", CONF_FILE);
- fil = fopen(CONF_FILE, "r");
+ pam_syslog(pamh, LOG_DEBUG, "reading settings from '%s'", pl->conf_file);
+ fil = fopen(pl->conf_file, "r");
if (fil == NULL) {
- pam_syslog (pamh, LOG_WARNING,
- "cannot read settings from %s: %m", CONF_FILE);
+ if (errno == ENOENT && !conf_file_set_by_user)
+ return PAM_SUCCESS; /* file is not there and it has not been set by the conf= argument */
+
+ pam_syslog(pamh, LOG_WARNING,
+ "cannot read settings from %s: %s", pl->conf_file,
+ strerror(errno));
return PAM_SERVICE_ERR;
}
@@ -1074,33 +1087,132 @@ static int setup_limits(pam_handle_t *pamh,
return retval;
}
+/* --- evaluting all files in VENDORDIR/security/limits.d and /etc/security/limits.d --- */
+static const char *
+base_name(const char *path)
+{
+ const char *base = strrchr(path, '/');
+ return base ? base+1 : path;
+}
+
+static int
+compare_filename(const void *a, const void *b)
+{
+ return strcmp(base_name(* (const char * const *) a),
+ base_name(* (const char * const *) b));
+}
+
+/* Evaluating a list of files which have to be parsed in the right order:
+ *
+ * - If etc/security/limits.d/@filename@.conf exists, then
+ * %vendordir%/security/limits.d/@filename@.conf should not be used.
+ * - All files in both limits.d directories are sorted by their @filename@.conf in
+ * lexicographic order regardless of which of the directories they reside in. */
+static char **
+read_limits_dir(pam_handle_t *pamh)
+{
+ glob_t globbuf;
+ size_t i=0;
+ int glob_rv = glob(LIMITS_CONF_GLOB, GLOB_ERR | GLOB_NOSORT, NULL, &globbuf);
+ char **file_list;
+ size_t file_list_size = glob_rv == 0 ? globbuf.gl_pathc : 0;
+
+#ifdef VENDOR_LIMITS_CONF_GLOB
+ glob_t globbuf_vendor;
+ int glob_rv_vendor = glob(VENDOR_LIMITS_CONF_GLOB, GLOB_ERR | GLOB_NOSORT, NULL, &globbuf_vendor);
+ if (glob_rv_vendor == 0)
+ file_list_size += globbuf_vendor.gl_pathc;
+#endif
+ file_list = malloc((file_list_size + 1) * sizeof(char*));
+ if (file_list == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Cannot allocate memory for file list: %m");
+#ifdef VENDOR_ACCESS_CONF_GLOB
+ if (glob_rv_vendor == 0)
+ globfree(&globbuf_vendor);
+#endif
+ if (glob_rv == 0)
+ globfree(&globbuf);
+ return NULL;
+ }
+
+ if (glob_rv == 0) {
+ for (i = 0; i < globbuf.gl_pathc; i++) {
+ file_list[i] = strdup(globbuf.gl_pathv[i]);
+ if (file_list[i] == NULL) {
+ pam_syslog(pamh, LOG_ERR, "strdup failed: %m");
+ break;
+ }
+ }
+ }
+#ifdef VENDOR_LIMITS_CONF_GLOB
+ if (glob_rv_vendor == 0) {
+ for (size_t j = 0; j < globbuf_vendor.gl_pathc; j++) {
+ if (glob_rv == 0 && globbuf.gl_pathc > 0) {
+ int double_found = 0;
+ for (size_t k = 0; k < globbuf.gl_pathc; k++) {
+ if (strcmp(base_name(globbuf.gl_pathv[k]),
+ base_name(globbuf_vendor.gl_pathv[j])) == 0) {
+ double_found = 1;
+ break;
+ }
+ }
+ if (double_found)
+ continue;
+ }
+ file_list[i] = strdup(globbuf_vendor.gl_pathv[j]);
+ if (file_list[i] == NULL) {
+ pam_syslog(pamh, LOG_ERR, "strdup failed: %m");
+ break;
+ }
+ i++;
+ }
+ globfree(&globbuf_vendor);
+ }
+#endif
+ file_list[i] = NULL;
+ qsort(file_list, i, sizeof(char *), compare_filename);
+ if (glob_rv == 0)
+ globfree(&globbuf);
+
+ return file_list;
+}
+
/* now the session stuff */
int
pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED,
int argc, const char **argv)
{
- int retval;
- int i;
- int glob_rc;
+ int retval, i;
char *user_name;
struct passwd *pwd;
int ctrl;
struct pam_limit_s plstruct;
struct pam_limit_s *pl = &plstruct;
- glob_t globbuf;
- const char *oldlocale;
D(("called."));
memset(pl, 0, sizeof(*pl));
- memset(&globbuf, 0, sizeof(globbuf));
ctrl = _pam_parse(pamh, argc, argv, pl);
retval = pam_get_item( pamh, PAM_USER, (void*) &user_name );
if ( user_name == NULL || retval != PAM_SUCCESS ) {
pam_syslog(pamh, LOG_ERR, "open_session - error recovering username");
return PAM_SESSION_ERR;
- }
+ }
+
+ int conf_file_set_by_user = (pl->conf_file != NULL);
+ if (pl->conf_file == NULL) {
+ pl->conf_file = LIMITS_FILE;
+#ifdef VENDOR_LIMITS_FILE
+ /*
+ * Check whether LIMITS_FILE file is available.
+ * If it does not exist, fall back to VENDOR_LIMITS_FILE file.
+ */
+ struct stat buffer;
+ if (stat(pl->conf_file, &buffer) != 0 && errno == ENOENT)
+ pl->conf_file = VENDOR_LIMITS_FILE;
+#endif
+ }
pwd = pam_modutil_getpwnam(pamh, user_name);
if (!pwd) {
@@ -1116,46 +1228,39 @@ pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED,
return PAM_ABORT;
}
- retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid, ctrl, pl);
+ retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid,
+ ctrl, pl, conf_file_set_by_user);
if (retval == PAM_IGNORE) {
- D(("the configuration file ('%s') has an applicable '<domain> -' entry", CONF_FILE));
+ D(("the configuration file ('%s') has an applicable '<domain> -' entry", pl->conf_file));
return PAM_SUCCESS;
}
- if (retval != PAM_SUCCESS || pl->conf_file != NULL)
+ if (retval != PAM_SUCCESS || conf_file_set_by_user)
/* skip reading limits.d if config file explicitly specified */
goto out;
/* Read subsequent *.conf files, if they exist. */
-
- /* set the LC_COLLATE so the sorting order doesn't depend
- on system locale */
-
- oldlocale = setlocale(LC_COLLATE, "C");
- glob_rc = glob(LIMITS_CONF_GLOB, GLOB_ERR, NULL, &globbuf);
-
- if (oldlocale != NULL)
- setlocale (LC_COLLATE, oldlocale);
-
- if (!glob_rc) {
- /* Parse the *.conf files. */
- for (i = 0; globbuf.gl_pathv[i] != NULL; i++) {
- pl->conf_file = globbuf.gl_pathv[i];
- retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid, ctrl, pl);
- if (retval == PAM_IGNORE) {
- D(("the configuration file ('%s') has an applicable '<domain> -' entry", pl->conf_file));
- globfree(&globbuf);
- return PAM_SUCCESS;
- }
- if (retval != PAM_SUCCESS)
- goto out;
+ char **filename_list = read_limits_dir(pamh);
+ if (filename_list != NULL) {
+ for (i = 0; filename_list[i] != NULL; i++) {
+ pl->conf_file = filename_list[i];
+ retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid, ctrl, pl, 0);
+ if (retval != PAM_SUCCESS)
+ break;
}
+ for (i = 0; filename_list[i] != NULL; i++)
+ free(filename_list[i]);
+ free(filename_list);
+ }
+
+ if (retval == PAM_IGNORE) {
+ D(("the configuration file ('%s') has an applicable '<domain> -' entry", pl->conf_file));
+ return PAM_SUCCESS;
}
out:
- globfree(&globbuf);
if (retval != PAM_SUCCESS)
{
- pam_syslog(pamh, LOG_ERR, "error parsing the configuration file: '%s' ",CONF_FILE);
+ pam_syslog(pamh, LOG_ERR, "error parsing the configuration file: '%s' ", pl->conf_file);
return retval;
}
diff --git a/modules/pam_listfile/Makefile.am b/modules/pam_listfile/Makefile.am
index 8b0fc281..c9ba85f6 100644
--- a/modules/pam_listfile/Makefile.am
+++ b/modules/pam_listfile/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_listfile
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_listfile/Makefile.in b/modules/pam_listfile/Makefile.in
index 86a9e918..ffe0df6a 100644
--- a/modules/pam_listfile/Makefile.in
+++ b/modules/pam_listfile/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_listfile.8.xml
dist_check_SCRIPTS = tst-pam_listfile
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_listfile/README.xml b/modules/pam_listfile/README.xml
index d851aef3..d0b60107 100644
--- a/modules/pam_listfile/README.xml
+++ b/modules/pam_listfile/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_listfile.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_listfile.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_listfile-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_listfile.8.xml" xpointer='xpointer(id("pam_listfile-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_listfile/pam_listfile.8 b/modules/pam_listfile/pam_listfile.8
index 35cc2e74..5052664d 100644
--- a/modules/pam_listfile/pam_listfile.8
+++ b/modules/pam_listfile/pam_listfile.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_listfile
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_LISTFILE" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_LISTFILE" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -82,27 +82,27 @@ No credentials are awarded by this module\&.
.SH "OPTIONS"
.PP
.PP
-\fBitem=[tty|user|rhost|ruser|group|shell]\fR
+item=[tty|user|rhost|ruser|group|shell]
.RS 4
What is listed in the file and should be checked for\&.
.RE
.PP
-\fBsense=[allow|deny]\fR
+sense=[allow|deny]
.RS 4
Action to take if found in file, if the item is NOT found in the file, then the opposite action is requested\&.
.RE
.PP
-\fBfile=\fR\fB\fI/path/filename\fR\fR
+file=/path/filename
.RS 4
File containing one item per line\&. The file needs to be a plain file and not world writable\&.
.RE
.PP
-\fBonerr=[succeed|fail]\fR
+onerr=[succeed|fail]
.RS 4
What to do if something weird happens like being unable to open the file\&.
.RE
.PP
-\fBapply=[\fR\fB\fIuser\fR\fR\fB|\fR\fB\fI@group\fR\fR\fB]\fR
+apply=[user|@group]
.RS 4
Restrict the user class for which the restriction apply\&. Note that with
\fBitem=[user|ruser|group]\fR
@@ -111,7 +111,7 @@ this does not make sense, but for
it have a meaning\&.
.RE
.PP
-\fBquiet\fR
+quiet
.RS 4
Do not treat service refusals or missing list files as errors that need to be logged\&.
.RE
diff --git a/modules/pam_listfile/pam_listfile.8.xml b/modules/pam_listfile/pam_listfile.8.xml
index 15f047c2..8847415a 100644
--- a/modules/pam_listfile/pam_listfile.8.xml
+++ b/modules/pam_listfile/pam_listfile.8.xml
@@ -1,45 +1,42 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_listfile">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_listfile">
<refmeta>
<refentrytitle>pam_listfile</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_listfile-name">
+ <refnamediv xml:id="pam_listfile-name">
<refname>pam_listfile</refname>
<refpurpose>deny or allow services based on an arbitrary file</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_listfile-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_listfile-cmdsynopsis" sepchar=" ">
<command>pam_listfile.so</command>
- <arg choice="plain">
+ <arg choice="plain" rep="norepeat">
item=[tty|user|rhost|ruser|group|shell]
</arg>
- <arg choice="plain">
+ <arg choice="plain" rep="norepeat">
sense=[allow|deny]
</arg>
- <arg choice="plain">
+ <arg choice="plain" rep="norepeat">
file=<replaceable>/path/filename</replaceable>
</arg>
- <arg choice="plain">
+ <arg choice="plain" rep="norepeat">
onerr=[succeed|fail]
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
apply=[<replaceable>user</replaceable>|<replaceable>@group</replaceable>]
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
quiet
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_listfile-description">
+ <refsect1 xml:id="pam_listfile-description">
<title>DESCRIPTION</title>
@@ -93,7 +90,7 @@
</para>
</refsect1>
- <refsect1 id="pam_listfile-options">
+ <refsect1 xml:id="pam_listfile-options">
<title>OPTIONS</title>
<para>
@@ -101,7 +98,7 @@
<varlistentry>
<term>
- <option>item=[tty|user|rhost|ruser|group|shell]</option>
+ item=[tty|user|rhost|ruser|group|shell]
</term>
<listitem>
<para>
@@ -112,7 +109,7 @@
<varlistentry>
<term>
- <option>sense=[allow|deny]</option>
+ sense=[allow|deny]
</term>
<listitem>
<para>
@@ -124,7 +121,7 @@
<varlistentry>
<term>
- <option>file=<replaceable>/path/filename</replaceable></option>
+ file=/path/filename
</term>
<listitem>
<para>
@@ -136,7 +133,7 @@
<varlistentry>
<term>
- <option>onerr=[succeed|fail]</option>
+ onerr=[succeed|fail]
</term>
<listitem>
<para>
@@ -148,7 +145,7 @@
<varlistentry>
<term>
- <option>apply=[<replaceable>user</replaceable>|<replaceable>@group</replaceable>]</option>
+ apply=[user|@group]
</term>
<listitem>
<para>
@@ -161,7 +158,7 @@
<varlistentry>
<term>
- <option>quiet</option>
+ quiet
</term>
<listitem>
<para>
@@ -175,7 +172,7 @@
</para>
</refsect1>
- <refsect1 id="pam_listfile-types">
+ <refsect1 xml:id="pam_listfile-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>auth</option>, <option>account</option>,
@@ -183,7 +180,7 @@
</para>
</refsect1>
- <refsect1 id='pam_listfile-return_values'>
+ <refsect1 xml:id="pam_listfile-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -235,7 +232,7 @@
</para>
</refsect1>
- <refsect1 id='pam_listfile-examples'>
+ <refsect1 xml:id="pam_listfile-examples">
<title>EXAMPLES</title>
<para>
Classic 'ftpusers' authentication can be implemented with this entry
@@ -271,7 +268,7 @@ auth required pam_listfile.so \
</para>
</refsect1>
- <refsect1 id='pam_listfile-see_also'>
+ <refsect1 xml:id="pam_listfile-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -286,7 +283,7 @@ auth required pam_listfile.so \
</para>
</refsect1>
- <refsect1 id='pam_listfile-author'>
+ <refsect1 xml:id="pam_listfile-author">
<title>AUTHOR</title>
<para>
pam_listfile was written by Michael K. Johnson &lt;johnsonm@redhat.com&gt;
@@ -294,4 +291,4 @@ auth required pam_listfile.so \
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_listfile/pam_listfile.c b/modules/pam_listfile/pam_listfile.c
index 28fd58fc..937576fd 100644
--- a/modules/pam_listfile/pam_listfile.c
+++ b/modules/pam_listfile/pam_listfile.c
@@ -53,17 +53,16 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
const char *citemp;
char *ifname=NULL;
char aline[256];
- char mybuf[256],myval[256];
+ char mybuf[256],myval[256],apply_val[256];
struct stat fileinfo;
FILE *inf;
- const char *apply_val;
int apply_type;
/* Stuff for "extended" items */
struct passwd *userinfo;
apply_type=APPLY_TYPE_NULL;
- apply_val="";
+ apply_val[0] = '\0';
for(i=0; i < argc; i++) {
{
@@ -133,10 +132,10 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
apply_type=APPLY_TYPE_NONE;
if (myval[0]=='@') {
apply_type=APPLY_TYPE_GROUP;
- apply_val=myval+1;
+ memcpy(apply_val,myval+1,sizeof(myval)-1);
} else {
apply_type=APPLY_TYPE_USER;
- apply_val=myval;
+ memcpy(apply_val,myval,sizeof(myval));
}
} else {
free(ifname);
diff --git a/modules/pam_localuser/Makefile.am b/modules/pam_localuser/Makefile.am
index 46f87a89..f5d49dac 100644
--- a/modules/pam_localuser/Makefile.am
+++ b/modules/pam_localuser/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_localuser
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_localuser/Makefile.in b/modules/pam_localuser/Makefile.in
index 9f1526f2..57ea3071 100644
--- a/modules/pam_localuser/Makefile.in
+++ b/modules/pam_localuser/Makefile.in
@@ -434,6 +434,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -446,11 +447,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -482,12 +485,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -510,6 +515,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -520,12 +526,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -599,7 +609,8 @@ XMLS = README.xml pam_localuser.8.xml
dist_check_SCRIPTS = tst-pam_localuser
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_localuser/README.xml b/modules/pam_localuser/README.xml
index 4ab56d9d..f1b05d1a 100644
--- a/modules/pam_localuser/README.xml
+++ b/modules/pam_localuser/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_localuser.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_localuser.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_localuser-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_localuser.8.xml" xpointer='xpointer(id("pam_localuser-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_localuser/pam_localuser.8 b/modules/pam_localuser/pam_localuser.8
index 724ab543..455fdb2d 100644
--- a/modules/pam_localuser/pam_localuser.8
+++ b/modules/pam_localuser/pam_localuser.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_localuser
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_LOCALUSER" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_LOCALUSER" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -40,12 +40,12 @@ This could also be implemented using pam_listfile\&.so and a very short awk scri
.SH "OPTIONS"
.PP
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBfile=\fR\fB\fI/path/passwd\fR\fR
+file=/path/passwd
.RS 4
Use a file other than
/etc/passwd\&.
diff --git a/modules/pam_localuser/pam_localuser.8.xml b/modules/pam_localuser/pam_localuser.8.xml
index b3c1886b..2002d1d6 100644
--- a/modules/pam_localuser/pam_localuser.8.xml
+++ b/modules/pam_localuser/pam_localuser.8.xml
@@ -1,33 +1,30 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_localuser">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_localuser">
<refmeta>
<refentrytitle>pam_localuser</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_localuser-name">
+ <refnamediv xml:id="pam_localuser-name">
<refname>pam_localuser</refname>
<refpurpose>require users to be listed in /etc/passwd</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_localuser-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_localuser-cmdsynopsis" sepchar=" ">
<command>pam_localuser.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
file=<replaceable>/path/passwd</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_localuser-description">
+ <refsect1 xml:id="pam_localuser-description">
<title>DESCRIPTION</title>
@@ -47,7 +44,7 @@
</refsect1>
- <refsect1 id="pam_localuser-options">
+ <refsect1 xml:id="pam_localuser-options">
<title>OPTIONS</title>
<para>
@@ -55,7 +52,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -66,7 +63,7 @@
<varlistentry>
<term>
- <option>file=<replaceable>/path/passwd</replaceable></option>
+ file=/path/passwd
</term>
<listitem>
<para>
@@ -80,7 +77,7 @@
</para>
</refsect1>
- <refsect1 id="pam_localuser-types">
+ <refsect1 xml:id="pam_localuser-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>account</option>, <option>auth</option>,
@@ -88,7 +85,7 @@
</para>
</refsect1>
- <refsect1 id='pam_localuser-return_values'>
+ <refsect1 xml:id="pam_localuser-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -153,7 +150,7 @@
</para>
</refsect1>
- <refsect1 id='pam_localuser-examples'>
+ <refsect1 xml:id="pam_localuser-examples">
<title>EXAMPLES</title>
<para>
Add the following lines to <filename>/etc/pam.d/su</filename> to
@@ -165,11 +162,11 @@ account required pam_wheel.so
</para>
</refsect1>
- <refsect1 id="pam_localuser-files">
+ <refsect1 xml:id="pam_localuser-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/passwd</filename></term>
+ <term>/etc/passwd</term>
<listitem>
<para>Local user account information.</para>
</listitem>
@@ -177,7 +174,7 @@ account required pam_wheel.so
</variablelist>
</refsect1>
- <refsect1 id='pam_localuser-see_also'>
+ <refsect1 xml:id="pam_localuser-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -192,11 +189,11 @@ account required pam_wheel.so
</para>
</refsect1>
- <refsect1 id='pam_localuser-author'>
+ <refsect1 xml:id="pam_localuser-author">
<title>AUTHOR</title>
<para>
pam_localuser was written by Nalin Dahyabhai &lt;nalin@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_loginuid/Makefile.am b/modules/pam_loginuid/Makefile.am
index 071b2ae5..f7f5fd85 100644
--- a/modules/pam_loginuid/Makefile.am
+++ b/modules/pam_loginuid/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_loginuid
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_loginuid/Makefile.in b/modules/pam_loginuid/Makefile.in
index bcfe714b..fbb16ac9 100644
--- a/modules/pam_loginuid/Makefile.in
+++ b/modules/pam_loginuid/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_loginuid.8.xml
dist_check_SCRIPTS = tst-pam_loginuid
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_loginuid/README.xml b/modules/pam_loginuid/README.xml
index 3bcd38ab..f972105f 100644
--- a/modules/pam_loginuid/README.xml
+++ b/modules/pam_loginuid/README.xml
@@ -1,36 +1,23 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_loginuid.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_loginuid.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_loginuid-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_loginuid.8.xml" xpointer='xpointer(id("pam_loginuid-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_loginuid/pam_loginuid.8 b/modules/pam_loginuid/pam_loginuid.8
index 3bb3fda2..32f1b544 100644
--- a/modules/pam_loginuid/pam_loginuid.8
+++ b/modules/pam_loginuid/pam_loginuid.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_loginuid
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_LOGINUID" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_LOGINUID" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -37,7 +37,7 @@ pam_loginuid \- Record user\*(Aqs login uid to the process attribute
The pam_loginuid module sets the loginuid process attribute for the process that was authenticated\&. This is necessary for applications to be correctly audited\&. This PAM module should only be used for entry point applications like: login, sshd, gdm, vsftpd, crond and atd\&. There are probably other entry point applications besides these\&. You should not use it for applications like sudo or su as that defeats the purpose by changing the loginuid to the account they just switched to\&.
.SH "OPTIONS"
.PP
-\fBrequire_auditd\fR
+require_auditd
.RS 4
This option, when given, will cause this module to query the audit daemon status and deny logins if it is not running\&.
.RE
diff --git a/modules/pam_loginuid/pam_loginuid.8.xml b/modules/pam_loginuid/pam_loginuid.8.xml
index 9513b0e4..d5285f02 100644
--- a/modules/pam_loginuid/pam_loginuid.8.xml
+++ b/modules/pam_loginuid/pam_loginuid.8.xml
@@ -1,30 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_loginuid">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_loginuid">
<refmeta>
<refentrytitle>pam_loginuid</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_loginuid-name">
+ <refnamediv xml:id="pam_loginuid-name">
<refname>pam_loginuid</refname>
<refpurpose>Record user's login uid to the process attribute</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_loginuid-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_loginuid-cmdsynopsis" sepchar=" ">
<command>pam_loginuid.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
require_auditd
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_loginuid-description">
+ <refsect1 xml:id="pam_loginuid-description">
<title>DESCRIPTION</title>
@@ -40,12 +37,12 @@
</para>
</refsect1>
- <refsect1 id="pam_loginuid-options">
+ <refsect1 xml:id="pam_loginuid-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>require_auditd</option>
+ require_auditd
</term>
<listitem>
<para>
@@ -57,14 +54,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_loginuid-types">
+ <refsect1 xml:id="pam_loginuid-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_loginuid-return_values'>
+ <refsect1 xml:id="pam_loginuid-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -98,7 +95,7 @@
</para>
</refsect1>
- <refsect1 id='pam_loginuid-examples'>
+ <refsect1 xml:id="pam_loginuid-examples">
<title>EXAMPLES</title>
<programlisting>
#%PAM-1.0
@@ -111,7 +108,7 @@ session required pam_loginuid.so
</programlisting>
</refsect1>
- <refsect1 id='pam_loginuid-see_also'>
+ <refsect1 xml:id="pam_loginuid-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -132,11 +129,11 @@ session required pam_loginuid.so
</para>
</refsect1>
- <refsect1 id='pam_loginuid-author'>
+ <refsect1 xml:id="pam_loginuid-author">
<title>AUTHOR</title>
<para>
pam_loginuid was written by Steve Grubb &lt;sgrubb@redhat.com&gt;
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_mail/Makefile.am b/modules/pam_mail/Makefile.am
index 6756f409..1f52bcd1 100644
--- a/modules/pam_mail/Makefile.am
+++ b/modules/pam_mail/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_mail
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_mail/Makefile.in b/modules/pam_mail/Makefile.in
index fbbffa78..36df81cd 100644
--- a/modules/pam_mail/Makefile.in
+++ b/modules/pam_mail/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_mail.8.xml
dist_check_SCRIPTS = tst-pam_mail
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_mail/README.xml b/modules/pam_mail/README.xml
index 4165d857..5dc89a85 100644
--- a/modules/pam_mail/README.xml
+++ b/modules/pam_mail/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_mail.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mail.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_mail-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mail.8.xml" xpointer='xpointer(id("pam_mail-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mail.8.xml" xpointer='xpointer(id("pam_mail-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mail.8.xml" xpointer='xpointer(id("pam_mail-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mail.8.xml" xpointer='xpointer(id("pam_mail-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mail.8.xml" xpointer='xpointer(id("pam_mail-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_mail/pam_mail.8 b/modules/pam_mail/pam_mail.8
index a6f77667..36b95ba8 100644
--- a/modules/pam_mail/pam_mail.8
+++ b/modules/pam_mail/pam_mail.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_mail
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_MAIL" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_MAIL" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -49,17 +49,17 @@ format\&.
.SH "OPTIONS"
.PP
.PP
-\fBclose\fR
+close
.RS 4
Indicate if the user has any mail also on logout\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBdir=\fR\fB\fImaildir\fR\fR
+dir=maildir
.RS 4
Look for the user\*(Aqs mail in an alternative location defined by
maildir/<login>\&. The default location for mail is
@@ -68,12 +68,12 @@ maildir
is prefixed by a \*(Aq~\*(Aq, the directory is interpreted as indicating a file in the user\*(Aqs home directory\&.
.RE
.PP
-\fBempty\fR
+empty
.RS 4
Also print message if user has no mail\&.
.RE
.PP
-\fBhash=\fR\fB\fIcount\fR\fR
+hash=count
.RS 4
Mail directory hash depth\&. For example, a
\fIhashcount\fR
@@ -81,26 +81,26 @@ of 2 would make the mail file be
/var/spool/mail/u/s/user\&.
.RE
.PP
-\fBnoenv\fR
+noenv
.RS 4
Do not set the
\fBMAIL\fR
environment variable\&.
.RE
.PP
-\fBnopen\fR
+nopen
.RS 4
Don\*(Aqt print any mail information on login\&. This flag is useful to get the
\fBMAIL\fR
environment variable set, but to not display any information about it\&.
.RE
.PP
-\fBquiet\fR
+quiet
.RS 4
Only report when there is new mail\&.
.RE
.PP
-\fBstandard\fR
+standard
.RS 4
Old style "You have\&.\&.\&." format which doesn\*(Aqt show the mail spool being used\&. This also implies "empty"\&.
.RE
diff --git a/modules/pam_mail/pam_mail.8.xml b/modules/pam_mail/pam_mail.8.xml
index 95216b6c..2c0c0543 100644
--- a/modules/pam_mail/pam_mail.8.xml
+++ b/modules/pam_mail/pam_mail.8.xml
@@ -1,54 +1,51 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_mail">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_mail">
<refmeta>
<refentrytitle>pam_mail</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_mail-name">
+ <refnamediv xml:id="pam_mail-name">
<refname>pam_mail</refname>
<refpurpose>Inform about available mail</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_mail-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_mail-cmdsynopsis" sepchar=" ">
<command>pam_mail.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
close
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
dir=<replaceable>maildir</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
empty
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
hash=<replaceable>count</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
noenv
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
nopen
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
quiet
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
standard
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_mail-description">
+ <refsect1 xml:id="pam_mail-description">
<title>DESCRIPTION</title>
@@ -58,18 +55,18 @@
that has credential or session hooks. It gives a single message
indicating the <emphasis>newness</emphasis> of any mail it finds
in the user's mail folder. This module also sets the PAM
- environment variable, <emphasis remap='B'>MAIL</emphasis>, to the
+ environment variable, <emphasis remap="B">MAIL</emphasis>, to the
user's mail directory.
</para>
<para>
If the mail spool file (be it <filename>/var/mail/$USER</filename>
or a pathname given with the <option>dir=</option> parameter) is
a directory then pam_mail assumes it is in the
- <emphasis remap='I'>Maildir</emphasis> format.
+ <emphasis remap="I">Maildir</emphasis> format.
</para>
</refsect1>
- <refsect1 id="pam_mail-options">
+ <refsect1 xml:id="pam_mail-options">
<title>OPTIONS</title>
<para>
@@ -77,7 +74,7 @@
<varlistentry>
<term>
- <option>close</option>
+ close
</term>
<listitem>
<para>
@@ -88,7 +85,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -99,7 +96,7 @@
<varlistentry>
<term>
- <option>dir=<replaceable>maildir</replaceable></option>
+ dir=maildir
</term>
<listitem>
<para>
@@ -116,7 +113,7 @@
<varlistentry>
<term>
- <option>empty</option>
+ empty
</term>
<listitem>
<para>
@@ -127,7 +124,7 @@
<varlistentry>
<term>
- <option>hash=<replaceable>count</replaceable></option>
+ hash=count
</term>
<listitem>
<para>
@@ -141,11 +138,11 @@
<varlistentry>
<term>
- <option>noenv</option>
+ noenv
</term>
<listitem>
<para>
- Do not set the <emphasis remap='B'>MAIL</emphasis>
+ Do not set the <emphasis remap="B">MAIL</emphasis>
environment variable.
</para>
</listitem>
@@ -153,12 +150,12 @@
<varlistentry>
<term>
- <option>nopen</option>
+ nopen
</term>
<listitem>
<para>
Don't print any mail information on login. This flag is
- useful to get the <emphasis remap='B'>MAIL</emphasis>
+ useful to get the <emphasis remap="B">MAIL</emphasis>
environment variable set, but to not display any information
about it.
</para>
@@ -167,7 +164,7 @@
<varlistentry>
<term>
- <option>quiet</option>
+ quiet
</term>
<listitem>
<para>
@@ -178,7 +175,7 @@
<varlistentry>
<term>
- <option>standard</option>
+ standard
</term>
<listitem>
<para>
@@ -193,7 +190,7 @@
</para>
</refsect1>
- <refsect1 id="pam_mail-types">
+ <refsect1 xml:id="pam_mail-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>session</option> and
@@ -202,7 +199,7 @@
</para>
</refsect1>
- <refsect1 id='pam_mail-return_values'>
+ <refsect1 xml:id="pam_mail-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -244,7 +241,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_mail-examples'>
+ <refsect1 xml:id="pam_mail-examples">
<title>EXAMPLES</title>
<para>
Add the following line to <filename>/etc/pam.d/login</filename> to
@@ -255,7 +252,7 @@ session optional pam_mail.so standard
</para>
</refsect1>
- <refsect1 id='pam_mail-see_also'>
+ <refsect1 xml:id="pam_mail-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -270,11 +267,11 @@ session optional pam_mail.so standard
</para>
</refsect1>
- <refsect1 id='pam_mail-author'>
+ <refsect1 xml:id="pam_mail-author">
<title>AUTHOR</title>
<para>
pam_mail was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_mail/pam_mail.c b/modules/pam_mail/pam_mail.c
index 17383c7b..2b77e560 100644
--- a/modules/pam_mail/pam_mail.c
+++ b/modules/pam_mail/pam_mail.c
@@ -169,7 +169,7 @@ get_folder(pam_handle_t *pamh, int ctrl,
hash[2 * i] = '\0';
rc = asprintf(&folder, MAIL_FILE_FORMAT, path, hash, pwd->pw_name);
- _pam_overwrite(hash);
+ pam_overwrite_string(hash);
_pam_drop(hash);
if (rc < 0)
goto get_folder_cleanup;
@@ -211,7 +211,7 @@ get_mail_status(pam_handle_t *pamh, int ctrl, const char *folder)
}
i = scandir(dir, &namelist, 0, alphasort);
save_errno = errno;
- _pam_overwrite(dir);
+ pam_overwrite_string(dir);
_pam_drop(dir);
if (i < 0) {
type = 0;
@@ -232,7 +232,7 @@ get_mail_status(pam_handle_t *pamh, int ctrl, const char *folder)
}
i = scandir(dir, &namelist, 0, alphasort);
save_errno = errno;
- _pam_overwrite(dir);
+ pam_overwrite_string(dir);
_pam_drop(dir);
if (i < 0) {
type = 0;
@@ -264,7 +264,7 @@ get_mail_status(pam_handle_t *pamh, int ctrl, const char *folder)
}
get_mail_status_cleanup:
- memset(&mail_st, 0, sizeof(mail_st));
+ pam_overwrite_object(&mail_st);
D(("user has %d mail in %s folder", type, folder));
return type;
}
@@ -286,7 +286,7 @@ report_mail(pam_handle_t *pamh, int ctrl, int type, const char *folder)
switch (type)
{
case HAVE_NO_MAIL:
- retval = pam_info (pamh, "%s", _("You have no mail."));
+ retval = pam_info (pamh, "%s", _("You do not have any new mail."));
break;
case HAVE_NEW_MAIL:
retval = pam_info (pamh, "%s", _("You have new mail."));
@@ -415,7 +415,7 @@ static int _do_mail(pam_handle_t *pamh, int flags, int argc,
}
D(("setting env: %s", tmp));
retval = pam_putenv(pamh, tmp);
- _pam_overwrite(tmp);
+ pam_overwrite_string(tmp);
_pam_drop(tmp);
if (retval != PAM_SUCCESS) {
pam_syslog(pamh, LOG_CRIT,
@@ -457,7 +457,7 @@ static int _do_mail(pam_handle_t *pamh, int flags, int argc,
(void) pam_putenv(pamh, MAIL_ENV_NAME);
do_mail_cleanup:
- _pam_overwrite(folder);
+ pam_overwrite_string(folder);
_pam_drop(folder);
/* indicate success or failure */
diff --git a/modules/pam_mkhomedir/Makefile.am b/modules/pam_mkhomedir/Makefile.am
index 04da1dcc..e0f80a96 100644
--- a/modules/pam_mkhomedir/Makefile.am
+++ b/modules/pam_mkhomedir/Makefile.am
@@ -16,7 +16,11 @@ dist_check_SCRIPTS = tst-pam_mkhomedir
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
-DMKHOMEDIR_HELPER=\"$(sbindir)/mkhomedir_helper\" $(WARN_CFLAGS)
diff --git a/modules/pam_mkhomedir/Makefile.in b/modules/pam_mkhomedir/Makefile.in
index 163531e8..3e5cb170 100644
--- a/modules/pam_mkhomedir/Makefile.in
+++ b/modules/pam_mkhomedir/Makefile.in
@@ -455,6 +455,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -467,11 +468,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -503,12 +506,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -531,6 +536,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -541,12 +547,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -620,7 +630,8 @@ XMLS = README.xml pam_mkhomedir.8.xml mkhomedir_helper.8.xml
dist_check_SCRIPTS = tst-pam_mkhomedir
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
-DMKHOMEDIR_HELPER=\"$(sbindir)/mkhomedir_helper\" $(WARN_CFLAGS)
diff --git a/modules/pam_mkhomedir/README.xml b/modules/pam_mkhomedir/README.xml
index 978cbe77..ef998956 100644
--- a/modules/pam_mkhomedir/README.xml
+++ b/modules/pam_mkhomedir/README.xml
@@ -1,36 +1,23 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_mkhomedir.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mkhomedir.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_mkhomedir-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mkhomedir.8.xml" xpointer='xpointer(id("pam_mkhomedir-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_mkhomedir/mkhomedir_helper.8 b/modules/pam_mkhomedir/mkhomedir_helper.8
index a9e68a0e..7f5e6160 100644
--- a/modules/pam_mkhomedir/mkhomedir_helper.8
+++ b/modules/pam_mkhomedir/mkhomedir_helper.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: mkhomedir_helper
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "MKHOMEDIR_HELPER" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "MKHOMEDIR_HELPER" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_mkhomedir/mkhomedir_helper.8.xml b/modules/pam_mkhomedir/mkhomedir_helper.8.xml
index 8a76f2d6..0f4c4b40 100644
--- a/modules/pam_mkhomedir/mkhomedir_helper.8.xml
+++ b/modules/pam_mkhomedir/mkhomedir_helper.8.xml
@@ -1,31 +1,28 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="mkhomedir_helper">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mkhomedir_helper">
<refmeta>
<refentrytitle>mkhomedir_helper</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="mkhomedir_helper-name">
+ <refnamediv xml:id="mkhomedir_helper-name">
<refname>mkhomedir_helper</refname>
<refpurpose>Helper binary that creates home directories</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="mkhomedir_helper-cmdsynopsis">
+ <cmdsynopsis xml:id="mkhomedir_helper-cmdsynopsis" sepchar=" ">
<command>mkhomedir_helper</command>
- <arg choice="req">
+ <arg choice="req" rep="norepeat">
<replaceable>user</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
<replaceable>umask</replaceable>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
<replaceable>path-to-skel</replaceable>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
<replaceable>home_mode</replaceable>
</arg>
</arg>
@@ -33,7 +30,7 @@
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="mkhomedir_helper-description">
+ <refsect1 xml:id="mkhomedir_helper-description">
<title>DESCRIPTION</title>
@@ -63,7 +60,7 @@
</para>
</refsect1>
- <refsect1 id='mkhomedir_helper-see_also'>
+ <refsect1 xml:id="mkhomedir_helper-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -72,7 +69,7 @@
</para>
</refsect1>
- <refsect1 id='mkhomedir_helper-author'>
+ <refsect1 xml:id="mkhomedir_helper-author">
<title>AUTHOR</title>
<para>
Written by Tomas Mraz based on the code originally in
@@ -80,4 +77,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_mkhomedir/mkhomedir_helper.c b/modules/pam_mkhomedir/mkhomedir_helper.c
index 582fecce..3213f028 100644
--- a/modules/pam_mkhomedir/mkhomedir_helper.c
+++ b/modules/pam_mkhomedir/mkhomedir_helper.c
@@ -184,8 +184,7 @@ create_homedir(const struct passwd *pwd,
else
pointed[pointedlen] = 0;
#else
- char pointed[PATH_MAX];
- memset(pointed, 0, sizeof(pointed));
+ char pointed[PATH_MAX] = {};
pointedlen = readlink(newsource, pointed, sizeof(pointed) - 1);
#endif
diff --git a/modules/pam_mkhomedir/pam_mkhomedir.8 b/modules/pam_mkhomedir/pam_mkhomedir.8
index b8a4754c..112b39b0 100644
--- a/modules/pam_mkhomedir/pam_mkhomedir.8
+++ b/modules/pam_mkhomedir/pam_mkhomedir.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_mkhomedir
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_MKHOMEDIR" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_MKHOMEDIR" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -40,18 +40,18 @@ The pam_mkhomedir PAM module will create a users home directory if it does not e
The new users home directory will not be removed after logout of the user\&.
.SH "OPTIONS"
.PP
-\fBsilent\fR
+silent
.RS 4
Don\*(Aqt print informative messages\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
Turns on debugging via
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBumask=\fR\fB\fImask\fR\fR
+umask=mask
.RS 4
The file mode creation mask is set to
\fImask\fR\&. The default value of mask is 0022\&. If this option is not specified, then the permissions of created user home directory is set to the value of
@@ -62,7 +62,7 @@ configuration item from
in the same file\&. If there is no such configuration option either the default value of 0755 is used for the mode\&.
.RE
.PP
-\fBskel=\fR\fB\fI/path/to/skel/directory\fR\fR
+skel=/path/to/skel/directory
.RS 4
Indicate an alternative
skel
diff --git a/modules/pam_mkhomedir/pam_mkhomedir.8.xml b/modules/pam_mkhomedir/pam_mkhomedir.8.xml
index 10109067..ad957248 100644
--- a/modules/pam_mkhomedir/pam_mkhomedir.8.xml
+++ b/modules/pam_mkhomedir/pam_mkhomedir.8.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_mkhomedir'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_mkhomedir">
<refmeta>
<refentrytitle>pam_mkhomedir</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_mkhomedir-name'>
+ <refnamediv xml:id="pam_mkhomedir-name">
<refname>pam_mkhomedir</refname>
<refpurpose>
PAM module to create users home directory
@@ -20,25 +17,25 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_mkhomedir-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_mkhomedir-cmdsynopsis" sepchar=" ">
<command>pam_mkhomedir.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
silent
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
umask=<replaceable>mode</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
skel=<replaceable>skeldir</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_mkhomedir-description">
+ <refsect1 xml:id="pam_mkhomedir-description">
<title>DESCRIPTION</title>
<para>
The pam_mkhomedir PAM module will create a users home directory
@@ -55,13 +52,13 @@
</para>
</refsect1>
- <refsect1 id="pam_mkhomedir-options">
+ <refsect1 xml:id="pam_mkhomedir-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>silent</option>
+ silent
</term>
<listitem>
<para>
@@ -72,7 +69,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -86,7 +83,7 @@
<varlistentry>
<term>
- <option>umask=<replaceable>mask</replaceable></option>
+ umask=mask
</term>
<listitem>
<para>
@@ -106,7 +103,7 @@
<varlistentry>
<term>
- <option>skel=<replaceable>/path/to/skel/directory</replaceable></option>
+ skel=/path/to/skel/directory
</term>
<listitem>
<para>
@@ -119,14 +116,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_mkhomedir-types">
+ <refsect1 xml:id="pam_mkhomedir-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> module type is provided.
</para>
</refsect1>
- <refsect1 id="pam_mkhomedir-return_values">
+ <refsect1 xml:id="pam_mkhomedir-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -165,11 +162,11 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_mkhomedir-files">
+ <refsect1 xml:id="pam_mkhomedir-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/skel</filename></term>
+ <term>/etc/skel</term>
<listitem>
<para>Default skel directory</para>
</listitem>
@@ -177,7 +174,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_mkhomedir-examples'>
+ <refsect1 xml:id="pam_mkhomedir-examples">
<title>EXAMPLES</title>
<para>
A sample /etc/pam.d/login file:
@@ -198,7 +195,7 @@
</refsect1>
- <refsect1 id="pam_mkhomedir-see_also">
+ <refsect1 xml:id="pam_mkhomedir-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -210,10 +207,10 @@
</para>
</refsect1>
- <refsect1 id="pam_mkhomedir-author">
+ <refsect1 xml:id="pam_mkhomedir-author">
<title>AUTHOR</title>
<para>
pam_mkhomedir was written by Jason Gunthorpe &lt;jgg@debian.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_mkhomedir/pam_mkhomedir.c b/modules/pam_mkhomedir/pam_mkhomedir.c
index 48e578fa..6ddcd5a8 100644
--- a/modules/pam_mkhomedir/pam_mkhomedir.c
+++ b/modules/pam_mkhomedir/pam_mkhomedir.c
@@ -125,15 +125,6 @@ create_homedir (pam_handle_t *pamh, options_t *opt,
D(("called."));
- /*
- * This code arranges that the demise of the child does not cause
- * the application to receive a signal it is not expecting - which
- * may kill the application or worse.
- */
- memset(&newsa, '\0', sizeof(newsa));
- newsa.sa_handler = SIG_DFL;
- sigaction(SIGCHLD, &newsa, &oldsa);
-
if (opt->ctrl & MKHOMEDIR_DEBUG) {
pam_syslog(pamh, LOG_DEBUG, "Executing mkhomedir_helper.");
}
@@ -153,6 +144,15 @@ create_homedir (pam_handle_t *pamh, options_t *opt,
login_homemode = _pam_conv_str_umask_to_homemode(opt->umask);
}
+ /*
+ * This code arranges that the demise of the child does not cause
+ * the application to receive a signal it is not expecting - which
+ * may kill the application or worse.
+ */
+ memset(&newsa, '\0', sizeof(newsa));
+ newsa.sa_handler = SIG_DFL;
+ sigaction(SIGCHLD, &newsa, &oldsa);
+
/* fork */
child = fork();
if (child == 0) {
diff --git a/modules/pam_motd/Makefile.am b/modules/pam_motd/Makefile.am
index 956dad2b..fc8f26c4 100644
--- a/modules/pam_motd/Makefile.am
+++ b/modules/pam_motd/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_motd
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_motd/Makefile.in b/modules/pam_motd/Makefile.in
index 14ab6bb8..4116d988 100644
--- a/modules/pam_motd/Makefile.in
+++ b/modules/pam_motd/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_motd.8.xml
dist_check_SCRIPTS = tst-pam_motd
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_motd/README.xml b/modules/pam_motd/README.xml
index 779e4d17..9e8edadf 100644
--- a/modules/pam_motd/README.xml
+++ b/modules/pam_motd/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_motd.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_motd.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_motd-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_motd.8.xml" xpointer='xpointer(id("pam_motd-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_motd.8.xml" xpointer='xpointer(id("pam_motd-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_motd.8.xml" xpointer='xpointer(id("pam_motd-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_motd.8.xml" xpointer='xpointer(id("pam_motd-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_motd.8.xml" xpointer='xpointer(id("pam_motd-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_motd/pam_motd.8 b/modules/pam_motd/pam_motd.8
index a211d6ee..b1a70c02 100644
--- a/modules/pam_motd/pam_motd.8
+++ b/modules/pam_motd/pam_motd.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_motd
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_MOTD" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_MOTD" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -93,7 +93,7 @@ The
environment variable is set after showing the motd files, even when all of them were silenced using symbolic links\&.
.SH "OPTIONS"
.PP
-\fBmotd=\fR\fB\fI/path/filename\fR\fR
+motd=/path/filename
.RS 4
The
/path/filename
@@ -101,7 +101,7 @@ file is displayed as message of the day\&. Multiple paths to try can be specifie
/etc/motd:/run/motd:/usr/lib/motd\&.
.RE
.PP
-\fBmotd_dir=\fR\fB\fI/path/dirname\&.d\fR\fR
+motd_dir=/path/dirname\&.d
.RS 4
The
/path/dirname\&.d
diff --git a/modules/pam_motd/pam_motd.8.xml b/modules/pam_motd/pam_motd.8.xml
index 0afd4c99..74420371 100644
--- a/modules/pam_motd/pam_motd.8.xml
+++ b/modules/pam_motd/pam_motd.8.xml
@@ -1,33 +1,30 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_motd">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_motd">
<refmeta>
<refentrytitle>pam_motd</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_motd-name">
+ <refnamediv xml:id="pam_motd-name">
<refname>pam_motd</refname>
<refpurpose>Display the motd file</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_motd-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_motd-cmdsynopsis" sepchar=" ">
<command>pam_motd.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
motd=<replaceable>/path/filename</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
motd_dir=<replaceable>/path/dirname.d</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_motd-description">
+ <refsect1 xml:id="pam_motd-description">
<title>DESCRIPTION</title>
@@ -38,7 +35,7 @@
following locations:
</para>
<para>
- <simplelist type='vert'>
+ <simplelist type="vert">
<member><filename>/etc/motd</filename></member>
<member><filename>/run/motd</filename></member>
<member><filename>/usr/lib/motd</filename></member>
@@ -79,19 +76,19 @@
<command>ln -s /dev/null /etc/motd.d/my_motd</command>
</para>
<para>
- The <emphasis remap='B'>MOTD_SHOWN=pam</emphasis> environment variable
+ The <emphasis remap="B">MOTD_SHOWN=pam</emphasis> environment variable
is set after showing the motd files, even when all of them were silenced
using symbolic links.
</para>
</refsect1>
- <refsect1 id="pam_motd-options">
+ <refsect1 xml:id="pam_motd-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>motd=<replaceable>/path/filename</replaceable></option>
+ motd=/path/filename
</term>
<listitem>
<para>
@@ -104,7 +101,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>motd_dir=<replaceable>/path/dirname.d</replaceable></option>
+ motd_dir=/path/dirname.d
</term>
<listitem>
<para>
@@ -123,14 +120,14 @@
</para>
</refsect1>
- <refsect1 id="pam_motd-types">
+ <refsect1 xml:id="pam_motd-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_motd-return_values'>
+ <refsect1 xml:id="pam_motd-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -160,7 +157,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_motd-examples'>
+ <refsect1 xml:id="pam_motd-examples">
<title>EXAMPLES</title>
<para>
The suggested usage for <filename>/etc/pam.d/login</filename> is:
@@ -183,7 +180,7 @@ session optional pam_motd.so motd=/elsewhere/motd motd_dir=/elsewhere/motd.d
</para>
</refsect1>
- <refsect1 id='pam_motd-see_also'>
+ <refsect1 xml:id="pam_motd-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -201,7 +198,7 @@ session optional pam_motd.so motd=/elsewhere/motd motd_dir=/elsewhere/motd.d
</para>
</refsect1>
- <refsect1 id='pam_motd-author'>
+ <refsect1 xml:id="pam_motd-author">
<title>AUTHOR</title>
<para>
pam_motd was written by Ben Collins &lt;bcollins@debian.org&gt;.
@@ -212,4 +209,4 @@ session optional pam_motd.so motd=/elsewhere/motd motd_dir=/elsewhere/motd.d
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_motd/pam_motd.c b/modules/pam_motd/pam_motd.c
index 6ac8cba2..5ca486e4 100644
--- a/modules/pam_motd/pam_motd.c
+++ b/modules/pam_motd/pam_motd.c
@@ -166,11 +166,6 @@ static int compare_strings(const void *a, const void *b)
}
}
-static int filter_dirents(const struct dirent *d)
-{
- return (d->d_type == DT_REG || d->d_type == DT_LNK);
-}
-
static void try_to_display_directories_with_overrides(pam_handle_t *pamh,
char **motd_dir_path_split, unsigned int num_motd_dirs, int report_missing)
{
@@ -199,8 +194,7 @@ static void try_to_display_directories_with_overrides(pam_handle_t *pamh,
for (i = 0; i < num_motd_dirs; i++) {
int rv;
- rv = scandir(motd_dir_path_split[i], &(dirscans[i]),
- filter_dirents, alphasort);
+ rv = scandir(motd_dir_path_split[i], &(dirscans[i]), NULL, NULL);
if (rv < 0) {
if (errno != ENOENT || report_missing) {
pam_syslog(pamh, LOG_ERR, "error scanning directory %s: %m",
@@ -215,6 +209,41 @@ static void try_to_display_directories_with_overrides(pam_handle_t *pamh,
if (dirscans_size_total == 0)
goto out;
+ /* filter out unwanted names, directories, and complement data with lstat() */
+ for (i = 0; i < num_motd_dirs; i++) {
+ struct dirent **d = dirscans[i];
+ for (unsigned int j = 0; j < dirscans_sizes[i]; j++) {
+ int rc;
+ char *fullpath;
+ struct stat s;
+
+ switch(d[j]->d_type) { /* the filetype determines how to proceed */
+ case DT_REG: /* regular files and */
+ case DT_LNK: /* symlinks */
+ continue; /* are good. */
+ case DT_UNKNOWN: /* for file systems that do not provide */
+ /* a filetype, we use lstat() */
+ if (join_dir_strings(&fullpath, motd_dir_path_split[i],
+ d[j]->d_name) <= 0)
+ break;
+ rc = lstat(fullpath, &s);
+ _pam_drop(fullpath); /* free the memory alloc'ed by join_dir_strings */
+ if (rc != 0) /* if the lstat() somehow failed */
+ break;
+
+ if (S_ISREG(s.st_mode) || /* regular files and */
+ S_ISLNK(s.st_mode)) continue; /* symlinks are good */
+ break;
+ case DT_DIR: /* We don't want directories */
+ default: /* nor anything else */
+ break;
+ }
+ _pam_drop(d[j]); /* free memory */
+ d[j] = NULL; /* indicate this one was dropped */
+ dirscans_size_total--;
+ }
+ }
+
/* Allocate space for all file names found in the directories, including duplicates. */
if ((dirnames_all = calloc(dirscans_size_total, sizeof(*dirnames_all))) == NULL) {
pam_syslog(pamh, LOG_CRIT, "failed to allocate dirname array");
@@ -225,8 +254,10 @@ static void try_to_display_directories_with_overrides(pam_handle_t *pamh,
unsigned int j;
for (j = 0; j < dirscans_sizes[i]; j++) {
- dirnames_all[i_dirnames] = dirscans[i][j]->d_name;
- i_dirnames++;
+ if (NULL != dirscans[i][j]) {
+ dirnames_all[i_dirnames] = dirscans[i][j]->d_name;
+ i_dirnames++;
+ }
}
}
diff --git a/modules/pam_namespace/Makefile.am b/modules/pam_namespace/Makefile.am
index 47cc38e1..507beea7 100644
--- a/modules/pam_namespace/Makefile.am
+++ b/modules/pam_namespace/Makefile.am
@@ -16,12 +16,16 @@ dist_check_SCRIPTS = tst-pam_namespace
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
namespaceddir = $(SCONFIGDIR)/namespace.d
servicedir = $(systemdunitdir)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DSECURECONF_DIR=\"$(SCONFIGDIR)/\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
diff --git a/modules/pam_namespace/Makefile.in b/modules/pam_namespace/Makefile.in
index e21c836d..8fc29dc1 100644
--- a/modules/pam_namespace/Makefile.in
+++ b/modules/pam_namespace/Makefile.in
@@ -441,6 +441,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -453,11 +454,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -489,12 +492,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -517,6 +522,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -527,12 +533,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -606,11 +616,12 @@ XMLS = README.xml namespace.conf.5.xml pam_namespace.8.xml pam_namespace_helper.
dist_check_SCRIPTS = tst-pam_namespace
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
namespaceddir = $(SCONFIGDIR)/namespace.d
servicedir = $(systemdunitdir)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DSECURECONF_DIR=\"$(SCONFIGDIR)/\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
noinst_HEADERS = md5.h pam_namespace.h argv_parse.h
diff --git a/modules/pam_namespace/README b/modules/pam_namespace/README
index 106a073a..c5a6ec4d 100644
--- a/modules/pam_namespace/README
+++ b/modules/pam_namespace/README
@@ -14,6 +14,9 @@ polyinstantiated directory path, the instance directory path, flag whether the
instance directory was newly created (0 for no, 1 for yes), and the user name
as its arguments.
+If /etc/security/namespace.init does not exist, %vendordir%/security/
+namespace.init is the alternative to be used for it.
+
The pam_namespace module disassociates the session namespace from the parent
namespace. Any mounts/unmounts performed in the parent namespace, such as
mounting of devices, are not reflected in the session namespace. To propagate
@@ -117,6 +120,16 @@ The /etc/security/namespace.conf file specifies which directories are
polyinstantiated, how they are polyinstantiated, how instance directories would
be named, and any users for whom polyinstantiation would not be performed.
+The /etc/security/namespace.conf file ( or %vendordir%/security/namespace.conf
+if it does not exist) specifies which directories are polyinstantiated, how
+they are polyinstantiated, how instance directories would be named, and any
+users for whom polyinstantiation would not be performed. Then individual *.conf
+files from the /etc/security/namespace.d/ and %vendordir%/security/namespace.d
+directories are taken too. If /etc/security/namespace.d/@filename@.conf exists,
+then %vendordir%/security/namespace.d/@filename@.conf will not be used. All
+namespace.d/*.conf files are sorted by their @filename@.conf in lexicographic
+order regardless of which of the directories they reside in.
+
When someone logs in, the file namespace.conf is scanned. Comments are marked
by # characters. Each non comment line represents one polyinstantiated
directory. The fields are separated by spaces but can be quoted by " characters
diff --git a/modules/pam_namespace/README.xml b/modules/pam_namespace/README.xml
index 4ef99c9f..f94cb065 100644
--- a/modules/pam_namespace/README.xml
+++ b/modules/pam_namespace/README.xml
@@ -1,44 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamns SYSTEM "pam_namespace.8.xml">
--->
-<!--
-<!ENTITY nsconf SYSTEM "namespace.conf.5.xml">
--->
-]>
-
-<article>
-
- <articleinfo>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
+
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_namespace.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_namespace-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_namespace.8.xml" xpointer='xpointer(id("pam_namespace-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="namespace.conf.5.xml" xpointer='xpointer(//refsect1[@id = "namespace.conf-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="namespace.conf.5.xml" xpointer='xpointer(id("namespace.conf-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="namespace.conf.5.xml" xpointer='xpointer(//refsect1[@id = "namespace.conf-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="namespace.conf.5.xml" xpointer='xpointer(id("namespace.conf-examples")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_namespace/md5.c b/modules/pam_namespace/md5.c
index 22e41ee0..07ad9a02 100644
--- a/modules/pam_namespace/md5.c
+++ b/modules/pam_namespace/md5.c
@@ -21,6 +21,8 @@
#include "md5.h"
#include <string.h>
+#include "pam_inline.h"
+
#define MD5Name(x) x
#ifdef WORDS_BIGENDIAN
@@ -149,7 +151,7 @@ void MD5Name(MD5Final)(unsigned char digest[16], struct MD5Context *ctx)
MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
byteReverse(ctx->buf.c, 4);
memcpy(digest, ctx->buf.c, 16);
- memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
+ pam_overwrite_object(ctx); /* In case it's sensitive */
}
/* The four core functions - F1 is optimized somewhat */
diff --git a/modules/pam_namespace/namespace.conf.5 b/modules/pam_namespace/namespace.conf.5
index ff122cbf..cf2509ca 100644
--- a/modules/pam_namespace/namespace.conf.5
+++ b/modules/pam_namespace/namespace.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: namespace.conf
.\" Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "NAMESPACE\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "NAMESPACE\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_namespace/namespace.conf.5.xml b/modules/pam_namespace/namespace.conf.5.xml
index a94b49e2..d398639b 100644
--- a/modules/pam_namespace/namespace.conf.5.xml
+++ b/modules/pam_namespace/namespace.conf.5.xml
@@ -1,13 +1,10 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="namespace.conf">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="namespace.conf">
<refmeta>
<refentrytitle>namespace.conf</refentrytitle>
<manvolnum>5</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
<refnamediv>
@@ -16,7 +13,7 @@
</refnamediv>
- <refsect1 id='namespace.conf-description'>
+ <refsect1 xml:id="namespace.conf-description">
<title>DESCRIPTION</title>
<para>
@@ -30,13 +27,29 @@
directory path and the instance directory path as its arguments.
</para>
- <para>
+ <para condition="without_vendordir">
The <filename>/etc/security/namespace.conf</filename> file specifies
which directories are polyinstantiated, how they are polyinstantiated,
how instance directories would be named, and any users for whom
polyinstantiation would not be performed.
</para>
+ <para condition="with_vendordir">
+ The <filename>/etc/security/namespace.conf</filename> file
+ ( or <filename>%vendordir%/security/namespace.conf</filename> if it does
+ not exist) specifies which directories are polyinstantiated, how they are
+ polyinstantiated, how instance directories would be named, and any users
+ for whom polyinstantiation would not be performed.
+ Then individual <filename>*.conf</filename> files from the
+ <filename>/etc/security/namespace.d/</filename> and
+ <filename>%vendordir%/security/namespace.d</filename> directories are taken too.
+ If <filename>/etc/security/namespace.d/@filename@.conf</filename> exists, then
+ <filename>%vendordir%/security/namespace.d/@filename@.conf</filename> will not be used.
+ All <filename>namespace.d/*.conf</filename> files are sorted by their
+ <filename>@filename@.conf</filename> in lexicographic order regardless of which
+ of the directories they reside in.
+ </para>
+
<para>
When someone logs in, the file <filename>namespace.conf</filename> is
scanned. Comments are marked by <emphasis>#</emphasis> characters.
@@ -159,7 +172,7 @@
</refsect1>
- <refsect1 id="namespace.conf-examples">
+ <refsect1 xml:id="namespace.conf-examples">
<title>EXAMPLES</title>
<para>
These are some example lines which might be specified in
@@ -204,7 +217,7 @@
</refsect1>
- <refsect1 id="namespace.conf-see_also">
+ <refsect1 xml:id="namespace.conf-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry><refentrytitle>pam_namespace</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
@@ -213,11 +226,11 @@
</para>
</refsect1>
- <refsect1 id="namespace.conf-author">
+ <refsect1 xml:id="namespace.conf-author">
<title>AUTHORS</title>
<para>
The namespace.conf manual page was written by Janak Desai &lt;janak@us.ibm.com&gt;.
More features added by Tomas Mraz &lt;tmraz@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_namespace/namespace.init b/modules/pam_namespace/namespace.init
index 67d4aa2d..d9053a13 100755
--- a/modules/pam_namespace/namespace.init
+++ b/modules/pam_namespace/namespace.init
@@ -16,7 +16,7 @@ if [ "$3" = 1 ]; then
cp -rT /etc/skel "$homedir"
chown -R "$user":"$gid" "$homedir"
mask=$(awk '/^UMASK/{gsub("#.*$", "", $2); print $2; exit}' /etc/login.defs)
- mode=$(printf "%o" $((0777 & ~$mask)))
+ mode=$(printf "%o" $((0777 & ~mask)))
chmod ${mode:-700} "$homedir"
[ -x /sbin/restorecon ] && /sbin/restorecon -R "$homedir"
fi
diff --git a/modules/pam_namespace/pam_namespace.8 b/modules/pam_namespace/pam_namespace.8
index d0afb6c6..3c9e9b39 100644
--- a/modules/pam_namespace/pam_namespace.8
+++ b/modules/pam_namespace/pam_namespace.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_namespace
.\" Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_NAMESPACE" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_NAMESPACE" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -41,57 +41,57 @@ exists, it is used to initialize the instance directory after it is set up and m
The pam_namespace module disassociates the session namespace from the parent namespace\&. Any mounts/unmounts performed in the parent namespace, such as mounting of devices, are not reflected in the session namespace\&. To propagate selected mount/unmount events from the parent namespace into the disassociated session namespace, an administrator may use the special shared\-subtree feature\&. For additional information on shared\-subtree feature, please refer to the mount(8) man page and the shared\-subtree description at http://lwn\&.net/Articles/159077 and http://lwn\&.net/Articles/159092\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
A lot of debug information is logged using syslog
.RE
.PP
-\fBunmnt_remnt\fR
+unmnt_remnt
.RS 4
For programs such as su and newrole, the login session has already setup a polyinstantiated namespace\&. For these programs, polyinstantiation is performed based on new user id or security context, however the command first needs to undo the polyinstantiation performed by login\&. This argument instructs the command to first undo previous polyinstantiation before proceeding with new polyinstantiation based on new id/context
.RE
.PP
-\fBunmnt_only\fR
+unmnt_only
.RS 4
For trusted programs that want to undo any existing bind mounts and process instance directories on their own, this argument allows them to unmount currently mounted instance directories
.RE
.PP
-\fBrequire_selinux\fR
+require_selinux
.RS 4
If selinux is not enabled, return failure
.RE
.PP
-\fBgen_hash\fR
+gen_hash
.RS 4
Instead of using the security context string for the instance name, generate and use its md5 hash\&.
.RE
.PP
-\fBignore_config_error\fR
+ignore_config_error
.RS 4
If a line in the configuration file corresponding to a polyinstantiated directory contains format error, skip that line process the next line\&. Without this option, pam will return an error to the calling program resulting in termination of the session\&.
.RE
.PP
-\fBignore_instance_parent_mode\fR
+ignore_instance_parent_mode
.RS 4
Instance parent directories by default are expected to have the restrictive mode of 000\&. Using this option, an administrator can choose to ignore the mode of the instance parent\&. This option should be used with caution as it will reduce security and isolation goals of the polyinstantiation mechanism\&.
.RE
.PP
-\fBunmount_on_close\fR
+unmount_on_close
.RS 4
Explicitly unmount the polyinstantiated directories instead of relying on automatic namespace destruction after the last process in a namespace exits\&. This option should be used only in case it is ensured by other means that there cannot be any processes running in the private namespace left after the session close\&. It is also useful only in case there are multiple pam session calls in sequence from the same process\&.
.RE
.PP
-\fBuse_current_context\fR
+use_current_context
.RS 4
Useful for services which do not change the SELinux context with setexeccon call\&. The module will use the current SELinux context of the calling process for the level and context polyinstantiation\&.
.RE
.PP
-\fBuse_default_context\fR
+use_default_context
.RS 4
Useful for services which do not use pam_selinux for changing the SELinux context with setexeccon call\&. The module will use the default SELinux context of the user for the level and context polyinstantiation\&.
.RE
.PP
-\fBmount_private\fR
+mount_private
.RS 4
This option can be used on systems where the / mount point or its submounts are made shared (for example with a
\fBmount \-\-make\-rshared /\fR
diff --git a/modules/pam_namespace/pam_namespace.8.xml b/modules/pam_namespace/pam_namespace.8.xml
index 57c44c4b..598037a4 100644
--- a/modules/pam_namespace/pam_namespace.8.xml
+++ b/modules/pam_namespace/pam_namespace.8.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_namespace'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_namespace">
<refmeta>
<refentrytitle>pam_namespace</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_namespace-name'>
+ <refnamediv xml:id="pam_namespace-name">
<refname>pam_namespace</refname>
<refpurpose>
PAM module for configuring namespace for a session
@@ -20,46 +17,46 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_namespace-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_namespace-cmdsynopsis" sepchar=" ">
<command>pam_namespace.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
unmnt_remnt
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
unmnt_only
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
require_selinux
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
gen_hash
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
ignore_config_error
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
ignore_instance_parent_mode
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
unmount_on_close
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
use_current_context
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
use_default_context
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
mount_private
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_namespace-description">
+ <refsect1 xml:id="pam_namespace-description">
<title>DESCRIPTION</title>
<para>
The pam_namespace PAM module sets up a private namespace for a session
@@ -74,6 +71,12 @@
and the user name as its arguments.
</para>
+ <para condition="with_vendordir">
+ If <filename>/etc/security/namespace.init</filename> does not exist,
+ <filename>%vendordir%/security/namespace.init</filename> is the
+ alternative to be used for it.
+ </para>
+
<para>
The pam_namespace module disassociates the session namespace from
the parent namespace. Any mounts/unmounts performed in the parent
@@ -88,13 +91,13 @@
</refsect1>
- <refsect1 id="pam_namespace-options">
+ <refsect1 xml:id="pam_namespace-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -105,7 +108,7 @@
<varlistentry>
<term>
- <option>unmnt_remnt</option>
+ unmnt_remnt
</term>
<listitem>
<para>
@@ -125,7 +128,7 @@
<varlistentry>
<term>
- <option>unmnt_only</option>
+ unmnt_only
</term>
<listitem>
<para>
@@ -140,7 +143,7 @@
<varlistentry>
<term>
- <option>require_selinux</option>
+ require_selinux
</term>
<listitem>
<para>
@@ -151,7 +154,7 @@
<varlistentry>
<term>
- <option>gen_hash</option>
+ gen_hash
</term>
<listitem>
<para>
@@ -164,7 +167,7 @@
<varlistentry>
<term>
- <option>ignore_config_error</option>
+ ignore_config_error
</term>
<listitem>
<para>
@@ -180,7 +183,7 @@
<varlistentry>
<term>
- <option>ignore_instance_parent_mode</option>
+ ignore_instance_parent_mode
</term>
<listitem>
<para>
@@ -195,7 +198,7 @@
<varlistentry>
<term>
- <option>unmount_on_close</option>
+ unmount_on_close
</term>
<listitem>
<para>
@@ -212,7 +215,7 @@
<varlistentry>
<term>
- <option>use_current_context</option>
+ use_current_context
</term>
<listitem>
<para>
@@ -226,7 +229,7 @@
<varlistentry>
<term>
- <option>use_default_context</option>
+ use_default_context
</term>
<listitem>
<para>
@@ -240,7 +243,7 @@
<varlistentry>
<term>
- <option>mount_private</option>
+ mount_private
</term>
<listitem>
<para>
@@ -265,7 +268,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_namespace-types">
+ <refsect1 xml:id="pam_namespace-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> module type is provided.
@@ -273,7 +276,7 @@
</para>
</refsect1>
- <refsect1 id="pam_namespace-return_values">
+ <refsect1 xml:id="pam_namespace-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -303,33 +306,57 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_namespace-files">
+ <refsect1 xml:id="pam_namespace-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/namespace.conf</filename></term>
+ <term>/etc/security/namespace.conf</term>
<listitem>
<para>Main configuration file</para>
</listitem>
</varlistentry>
+ <varlistentry condition="with_vendordir">
+ <term>%vendordir%/security/namespace.conf</term>
+ <listitem>
+ <para>Default configuration file if
+ <filename>/etc/security/namespace.conf</filename> does not exist.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
- <term><filename>/etc/security/namespace.d</filename></term>
+ <term>/etc/security/namespace.d</term>
<listitem>
<para>Directory for additional configuration files</para>
</listitem>
</varlistentry>
+ <varlistentry condition="with_vendordir">
+ <term>%vendordir%/security/namespace.d</term>
+ <listitem>
+ <para>Directory for additional vendor specific configuration files.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
- <term><filename>/etc/security/namespace.init</filename></term>
+ <term>/etc/security/namespace.init</term>
<listitem>
<para>Init script for instance directories</para>
</listitem>
</varlistentry>
+
+ <varlistentry condition="with_vendordir">
+ <term>%vendordir%/security/namespace.init</term>
+ <listitem>
+ <para>Vendor init script for instance directories if
+ /etc/security/namespace.init does not exist.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
- <refsect1 id="pam_namespace-examples">
+ <refsect1 xml:id="pam_namespace-examples">
<title>EXAMPLES</title>
<para>
@@ -349,7 +376,7 @@
</refsect1>
- <refsect1 id="pam_namespace-see_also">
+ <refsect1 xml:id="pam_namespace-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -367,7 +394,7 @@
</para>
</refsect1>
- <refsect1 id="pam_namespace-authors">
+ <refsect1 xml:id="pam_namespace-authors">
<title>AUTHORS</title>
<para>
The namespace setup scheme was designed by Stephen Smalley, Janak Desai
@@ -378,4 +405,4 @@
&lt;tmraz@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_namespace/pam_namespace.c b/modules/pam_namespace/pam_namespace.c
index 4d4188d0..f34ce934 100644
--- a/modules/pam_namespace/pam_namespace.c
+++ b/modules/pam_namespace/pam_namespace.c
@@ -39,6 +39,94 @@
#include "pam_namespace.h"
#include "argv_parse.h"
+/* --- evaluting all files in VENDORDIR/security/namespace.d and /etc/security/namespace.d --- */
+static const char *base_name(const char *path)
+{
+ const char *base = strrchr(path, '/');
+ return base ? base+1 : path;
+}
+
+static int
+compare_filename(const void *a, const void *b)
+{
+ return strcmp(base_name(* (char * const *) a),
+ base_name(* (char * const *) b));
+}
+
+/* Evaluating a list of files which have to be parsed in the right order:
+ *
+ * - If etc/security/namespace.d/@filename@.conf exists, then
+ * %vendordir%/security/namespace.d/@filename@.conf should not be used.
+ * - All files in both namespace.d directories are sorted by their @filename@.conf in
+ * lexicographic order regardless of which of the directories they reside in. */
+static char **read_namespace_dir(struct instance_data *idata)
+{
+ glob_t globbuf;
+ size_t i=0;
+ int glob_rv = glob(NAMESPACE_D_GLOB, GLOB_ERR | GLOB_NOSORT, NULL, &globbuf);
+ char **file_list;
+ size_t file_list_size = glob_rv == 0 ? globbuf.gl_pathc : 0;
+
+#ifdef VENDOR_NAMESPACE_D_GLOB
+ glob_t globbuf_vendor;
+ int glob_rv_vendor = glob(VENDOR_NAMESPACE_D_GLOB, GLOB_ERR | GLOB_NOSORT, NULL, &globbuf_vendor);
+ if (glob_rv_vendor == 0)
+ file_list_size += globbuf_vendor.gl_pathc;
+#endif
+ file_list = malloc((file_list_size + 1) * sizeof(char*));
+ if (file_list == NULL) {
+ pam_syslog(idata->pamh, LOG_ERR, "Cannot allocate memory for file list: %m");
+#ifdef VENDOR_NAMESPACE_D_GLOB
+ if (glob_rv_vendor == 0)
+ globfree(&globbuf_vendor);
+#endif
+ if (glob_rv == 0)
+ globfree(&globbuf);
+ return NULL;
+ }
+
+ if (glob_rv == 0) {
+ for (i = 0; i < globbuf.gl_pathc; i++) {
+ file_list[i] = strdup(globbuf.gl_pathv[i]);
+ if (file_list[i] == NULL) {
+ pam_syslog(idata->pamh, LOG_ERR, "strdup failed: %m");
+ break;
+ }
+ }
+ }
+#ifdef VENDOR_NAMESPACE_D_GLOB
+ if (glob_rv_vendor == 0) {
+ for (size_t j = 0; j < globbuf_vendor.gl_pathc; j++) {
+ if (glob_rv == 0 && globbuf.gl_pathc > 0) {
+ int double_found = 0;
+ for (size_t k = 0; k < globbuf.gl_pathc; k++) {
+ if (strcmp(base_name(globbuf.gl_pathv[k]),
+ base_name(globbuf_vendor.gl_pathv[j])) == 0) {
+ double_found = 1;
+ break;
+ }
+ }
+ if (double_found)
+ continue;
+ }
+ file_list[i] = strdup(globbuf_vendor.gl_pathv[j]);
+ if (file_list[i] == NULL) {
+ pam_syslog(idata->pamh, LOG_ERR, "strdup failed: %m");
+ break;
+ }
+ i++;
+ }
+ globfree(&globbuf_vendor);
+ }
+#endif
+ file_list[i] = NULL;
+ qsort(file_list, i, sizeof(char *), compare_filename);
+ if (glob_rv == 0)
+ globfree(&globbuf);
+
+ return file_list;
+}
+
/*
* Adds an entry for a polyinstantiated directory to the linked list of
* polyinstantiated directories. It is called from process_line() while
@@ -624,8 +712,6 @@ static int parse_config_file(struct instance_data *idata)
char *line;
int retval;
size_t len = 0;
- glob_t globbuf;
- const char *oldlocale;
size_t n;
/*
@@ -664,13 +750,16 @@ static int parse_config_file(struct instance_data *idata)
* process_line to process each line.
*/
- memset(&globbuf, '\0', sizeof(globbuf));
- oldlocale = setlocale(LC_COLLATE, "C");
- glob(NAMESPACE_D_GLOB, 0, NULL, &globbuf);
- if (oldlocale != NULL)
- setlocale(LC_COLLATE, oldlocale);
-
confname = PAM_NAMESPACE_CONFIG;
+#ifdef VENDOR_PAM_NAMESPACE_CONFIG
+ /* Check whether PAM_NAMESPACE_CONFIG file is available.
+ * If it does not exist, fall back to VENDOR_PAM_NAMESPACE_CONFIG file. */
+ struct stat buffer;
+ if (stat(confname, &buffer) != 0 && errno == ENOENT) {
+ confname = VENDOR_PAM_NAMESPACE_CONFIG;
+ }
+#endif
+ char **filename_list = read_namespace_dir(idata);
n = 0;
for (;;) {
if (idata->flags & PAMNS_DEBUG)
@@ -680,7 +769,6 @@ static int parse_config_file(struct instance_data *idata)
if (fil == NULL) {
pam_syslog(idata->pamh, LOG_ERR, "Error opening config file %s",
confname);
- globfree(&globbuf);
free(rhome);
free(home);
return PAM_SERVICE_ERR;
@@ -698,7 +786,6 @@ static int parse_config_file(struct instance_data *idata)
"Error processing conf file %s line %s", confname, line);
fclose(fil);
free(line);
- globfree(&globbuf);
free(rhome);
free(home);
return PAM_SERVICE_ERR;
@@ -707,14 +794,18 @@ static int parse_config_file(struct instance_data *idata)
fclose(fil);
free(line);
- if (n >= globbuf.gl_pathc)
+ if (filename_list == NULL || filename_list[n] == NULL)
break;
- confname = globbuf.gl_pathv[n];
- n++;
+ confname = filename_list[n++];
+ }
+
+ if (filename_list != NULL) {
+ for (size_t i = 0; filename_list[i] != NULL; i++)
+ free(filename_list[i]);
+ free(filename_list);
}
- globfree(&globbuf);
free(rhome);
free(home);
@@ -1250,16 +1341,17 @@ static int inst_init(const struct polydir_s *polyptr, const char *ipath,
struct instance_data *idata, int newdir)
{
pid_t rc, pid;
- struct sigaction newsa, oldsa;
int status;
const char *init_script = NAMESPACE_INIT_SCRIPT;
- memset(&newsa, '\0', sizeof(newsa));
- newsa.sa_handler = SIG_DFL;
- if (sigaction(SIGCHLD, &newsa, &oldsa) == -1) {
- pam_syslog(idata->pamh, LOG_ERR, "Cannot set signal value");
- return PAM_SESSION_ERR;
+#ifdef VENDOR_NAMESPACE_INIT_SCRIPT
+ /* Check whether NAMESPACE_INIT_SCRIPT file is available.
+ * If it does not exist, fall back to VENDOR_NAMESPACE_INIT_SCRIPT file. */
+ struct stat buffer;
+ if (stat(init_script, &buffer) != 0 && errno == ENOENT) {
+ init_script = VENDOR_NAMESPACE_INIT_SCRIPT;
}
+#endif
if ((polyptr->flags & POLYDIR_ISCRIPT) && polyptr->init_script)
init_script = polyptr->init_script;
@@ -1269,9 +1361,17 @@ static int inst_init(const struct polydir_s *polyptr, const char *ipath,
if (idata->flags & PAMNS_DEBUG)
pam_syslog(idata->pamh, LOG_ERR,
"Namespace init script not executable");
- rc = PAM_SESSION_ERR;
- goto out;
+ return PAM_SESSION_ERR;
} else {
+ struct sigaction newsa, oldsa;
+
+ memset(&newsa, '\0', sizeof(newsa));
+ newsa.sa_handler = SIG_DFL;
+ if (sigaction(SIGCHLD, &newsa, &oldsa) == -1) {
+ pam_syslog(idata->pamh, LOG_ERR, "failed to reset SIGCHLD handler");
+ return PAM_SESSION_ERR;
+ }
+
pid = fork();
if (pid == 0) {
static char *envp[] = { NULL };
@@ -1309,13 +1409,13 @@ static int inst_init(const struct polydir_s *polyptr, const char *ipath,
rc = PAM_SESSION_ERR;
goto out;
}
+ rc = PAM_SUCCESS;
+out:
+ (void) sigaction(SIGCHLD, &oldsa, NULL);
+ return rc;
}
}
- rc = PAM_SUCCESS;
-out:
- (void) sigaction(SIGCHLD, &oldsa, NULL);
-
- return rc;
+ return PAM_SUCCESS;
}
static int create_polydir(struct polydir_s *polyptr,
diff --git a/modules/pam_namespace/pam_namespace.h b/modules/pam_namespace/pam_namespace.h
index b51f2841..a991b4c4 100644
--- a/modules/pam_namespace/pam_namespace.h
+++ b/modules/pam_namespace/pam_namespace.h
@@ -30,7 +30,7 @@
* DEALINGS IN THE SOFTWARE.
*/
-#if !(defined(linux))
+#ifndef __linux__
#error THIS CODE IS KNOWN TO WORK ONLY ON LINUX !!!
#endif
@@ -90,15 +90,17 @@
/*
* Module defines
*/
-#ifndef SECURECONF_DIR
-#define SECURECONF_DIR "/etc/security/"
+#define PAM_NAMESPACE_CONFIG (SCONFIGDIR "/namespace.conf")
+#define NAMESPACE_INIT_SCRIPT (SCONFIGDIR "/namespace.init")
+#define NAMESPACE_D_DIR (SCONFIGDIR "/namespace.d/")
+#define NAMESPACE_D_GLOB (SCONFIGDIR "/namespace.d/*.conf")
+#ifdef VENDOR_SCONFIGDIR
+#define VENDOR_NAMESPACE_INIT_SCRIPT (VENDOR_SCONFIGDIR "/namespace.init")
+#define VENDOR_PAM_NAMESPACE_CONFIG (VENDOR_SCONFIGDIR "/namespace.conf")
+#define VENDOR_NAMESPACE_D_DIR (VENDOR_SCONFIGDIR "/namespace.d/")
+#define VENDOR_NAMESPACE_D_GLOB (VENDOR_SCONFIGDIR "/namespace.d/*.conf")
#endif
-#define PAM_NAMESPACE_CONFIG (SECURECONF_DIR "namespace.conf")
-#define NAMESPACE_INIT_SCRIPT (SECURECONF_DIR "namespace.init")
-#define NAMESPACE_D_DIR (SECURECONF_DIR "namespace.d/")
-#define NAMESPACE_D_GLOB (SECURECONF_DIR "namespace.d/*.conf")
-
/* module flags */
#define PAMNS_DEBUG 0x00000100 /* Running in debug mode */
#define PAMNS_SELINUX_ENABLED 0x00000400 /* SELinux is enabled */
diff --git a/modules/pam_namespace/pam_namespace_helper.8 b/modules/pam_namespace/pam_namespace_helper.8
index df93df2e..317cddc8 100644
--- a/modules/pam_namespace/pam_namespace_helper.8
+++ b/modules/pam_namespace/pam_namespace_helper.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_namespace_helper
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_NAMESPACE_HELPER" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_NAMESPACE_HELPER" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_namespace/pam_namespace_helper.8.xml b/modules/pam_namespace/pam_namespace_helper.8.xml
index 2f5adbed..002c254a 100644
--- a/modules/pam_namespace/pam_namespace_helper.8.xml
+++ b/modules/pam_namespace/pam_namespace_helper.8.xml
@@ -1,27 +1,24 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_namespace_helper">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_namespace_helper">
<refmeta>
<refentrytitle>pam_namespace_helper</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_namespace_helper-name">
+ <refnamediv xml:id="pam_namespace_helper-name">
<refname>pam_namespace_helper</refname>
<refpurpose>Helper binary that creates home directories</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_namespace_helper-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_namespace_helper-cmdsynopsis" sepchar=" ">
<command>pam_namespace_helper</command>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_namespace_helper-description">
+ <refsect1 xml:id="pam_namespace_helper-description">
<title>DESCRIPTION</title>
@@ -43,7 +40,7 @@
</para>
</refsect1>
- <refsect1 id='pam_namespace_helper-see_also'>
+ <refsect1 xml:id="pam_namespace_helper-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -52,11 +49,11 @@
</para>
</refsect1>
- <refsect1 id='pam_namespace_helper-author'>
+ <refsect1 xml:id="pam_namespace_helper-author">
<title>AUTHOR</title>
<para>
Written by Topi Miettinen.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_nologin/Makefile.am b/modules/pam_nologin/Makefile.am
index d1ec2035..4343b61c 100644
--- a/modules/pam_nologin/Makefile.am
+++ b/modules/pam_nologin/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_nologin
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_nologin/Makefile.in b/modules/pam_nologin/Makefile.in
index 0e84bd69..ebfa09b3 100644
--- a/modules/pam_nologin/Makefile.in
+++ b/modules/pam_nologin/Makefile.in
@@ -434,6 +434,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -446,11 +447,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -482,12 +485,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -510,6 +515,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -520,12 +526,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -599,7 +609,8 @@ XMLS = README.xml pam_nologin.8.xml
dist_check_SCRIPTS = tst-pam_nologin
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_nologin/README.xml b/modules/pam_nologin/README.xml
index bc0808e7..5a993324 100644
--- a/modules/pam_nologin/README.xml
+++ b/modules/pam_nologin/README.xml
@@ -1,46 +1,31 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_nologin.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_nologin.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_nologin-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-note"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-note")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_nologin.8.xml" xpointer='xpointer(id("pam_nologin-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_nologin/pam_nologin.8 b/modules/pam_nologin/pam_nologin.8
index df0c255e..ceb0237f 100644
--- a/modules/pam_nologin/pam_nologin.8
+++ b/modules/pam_nologin/pam_nologin.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_nologin
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_NOLOGIN" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_NOLOGIN" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -41,7 +41,7 @@ or
exists\&. The contents of the file are displayed to the user\&. The pam_nologin module has no effect on the root user\*(Aqs ability to log in\&.
.SH "OPTIONS"
.PP
-\fBfile=\fR\fB\fI/path/nologin\fR\fR
+file=/path/nologin
.RS 4
Use this file instead the default
/var/run/nologin
@@ -49,7 +49,7 @@ or
/etc/nologin\&.
.RE
.PP
-\fBsuccessok\fR
+successok
.RS 4
Return PAM_SUCCESS if no file exists, the default is PAM_IGNORE\&.
.RE
diff --git a/modules/pam_nologin/pam_nologin.8.xml b/modules/pam_nologin/pam_nologin.8.xml
index c86e3763..1ea725ce 100644
--- a/modules/pam_nologin/pam_nologin.8.xml
+++ b/modules/pam_nologin/pam_nologin.8.xml
@@ -1,33 +1,30 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_nologin">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_nologin">
<refmeta>
<refentrytitle>pam_nologin</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_nologin-name">
+ <refnamediv xml:id="pam_nologin-name">
<refname>pam_nologin</refname>
<refpurpose>Prevent non-root users from login</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_nologin-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_nologin-cmdsynopsis" sepchar=" ">
<command>pam_nologin.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
file=<replaceable>/path/nologin</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
successok
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_nologin-description">
+ <refsect1 xml:id="pam_nologin-description">
<title>DESCRIPTION</title>
@@ -40,13 +37,13 @@
</para>
</refsect1>
- <refsect1 id="pam_nologin-options">
+ <refsect1 xml:id="pam_nologin-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>file=<replaceable>/path/nologin</replaceable></option>
+ file=/path/nologin
</term>
<listitem>
<para>
@@ -58,7 +55,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>successok</option>
+ successok
</term>
<listitem>
<para>
@@ -69,7 +66,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_nologin-types">
+ <refsect1 xml:id="pam_nologin-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option> and <option>account</option> module
@@ -77,7 +74,7 @@
</para>
</refsect1>
- <refsect1 id='pam_nologin-return_values'>
+ <refsect1 xml:id="pam_nologin-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -123,7 +120,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_nologin-examples'>
+ <refsect1 xml:id="pam_nologin-examples">
<title>EXAMPLES</title>
<para>
The suggested usage for <filename>/etc/pam.d/login</filename> is:
@@ -132,7 +129,7 @@ auth required pam_nologin.so
</programlisting>
</para>
</refsect1>
- <refsect1 id='pam_nologin-note'>
+ <refsect1 xml:id="pam_nologin-note">
<title>NOTES</title>
<para>
In order to make this module effective, all login methods should be
@@ -147,7 +144,7 @@ auth required pam_nologin.so
</para>
</refsect1>
- <refsect1 id='pam_nologin-see_also'>
+ <refsect1 xml:id="pam_nologin-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -165,11 +162,11 @@ auth required pam_nologin.so
</para>
</refsect1>
- <refsect1 id='pam_nologin-author'>
+ <refsect1 xml:id="pam_nologin-author">
<title>AUTHOR</title>
<para>
pam_nologin was written by Michael K. Johnson &lt;johnsonm@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_nologin/pam_nologin.c b/modules/pam_nologin/pam_nologin.c
index b7f9bab0..d7f83e0c 100644
--- a/modules/pam_nologin/pam_nologin.c
+++ b/modules/pam_nologin/pam_nologin.c
@@ -79,7 +79,6 @@ static int perform_check(pam_handle_t *pamh, struct opt_s *opts)
if (fd >= 0) {
- char *mtmp=NULL;
int msg_style = PAM_TEXT_INFO;
struct passwd *user_pwd;
struct stat st;
@@ -99,21 +98,25 @@ static int perform_check(pam_handle_t *pamh, struct opt_s *opts)
goto clean_up_fd;
}
- mtmp = malloc(st.st_size+1);
- if (!mtmp) {
- pam_syslog(pamh, LOG_CRIT, "out of memory");
- retval = PAM_BUF_ERR;
- goto clean_up_fd;
- }
-
- if (pam_modutil_read(fd, mtmp, st.st_size) == st.st_size) {
- mtmp[st.st_size] = '\0';
- (void) pam_prompt (pamh, msg_style, NULL, "%s", mtmp);
+ /* Don't print anything if the message is empty, will only
+ disturb the output with empty lines */
+ if (st.st_size > 0) {
+ char *mtmp = malloc(st.st_size+1);
+ if (!mtmp) {
+ pam_syslog(pamh, LOG_CRIT, "out of memory");
+ retval = PAM_BUF_ERR;
+ goto clean_up_fd;
+ }
+
+ if (pam_modutil_read(fd, mtmp, st.st_size) == st.st_size) {
+ mtmp[st.st_size] = '\0';
+ (void) pam_prompt (pamh, msg_style, NULL, "%s", mtmp);
+ }
+ else
+ retval = PAM_SYSTEM_ERR;
+
+ free(mtmp);
}
- else
- retval = PAM_SYSTEM_ERR;
-
- free(mtmp);
clean_up_fd:
diff --git a/modules/pam_permit/Makefile.am b/modules/pam_permit/Makefile.am
index 3fb4792c..e9a05156 100644
--- a/modules/pam_permit/Makefile.am
+++ b/modules/pam_permit/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_permit
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_permit/Makefile.in b/modules/pam_permit/Makefile.in
index 10941722..47e8fac8 100644
--- a/modules/pam_permit/Makefile.in
+++ b/modules/pam_permit/Makefile.in
@@ -433,6 +433,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -445,11 +446,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -481,12 +484,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -509,6 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -519,12 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -598,7 +608,8 @@ XMLS = README.xml pam_permit.8.xml
dist_check_SCRIPTS = tst-pam_permit
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_permit/README.xml b/modules/pam_permit/README.xml
index acb38b51..c08425f8 100644
--- a/modules/pam_permit/README.xml
+++ b/modules/pam_permit/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_permit.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_permit.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_permit-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_permit.8.xml" xpointer='xpointer(id("pam_permit-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_permit.8.xml" xpointer='xpointer(id("pam_permit-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_permit.8.xml" xpointer='xpointer(id("pam_permit-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_permit.8.xml" xpointer='xpointer(id("pam_permit-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_permit.8.xml" xpointer='xpointer(id("pam_permit-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_permit/pam_permit.8 b/modules/pam_permit/pam_permit.8
index 88dff2bb..5b1881f9 100644
--- a/modules/pam_permit/pam_permit.8
+++ b/modules/pam_permit/pam_permit.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_permit
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_PERMIT" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_PERMIT" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_permit/pam_permit.8.xml b/modules/pam_permit/pam_permit.8.xml
index 6bb49658..0634e5eb 100644
--- a/modules/pam_permit/pam_permit.8.xml
+++ b/modules/pam_permit/pam_permit.8.xml
@@ -1,27 +1,24 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_permit">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_permit">
<refmeta>
<refentrytitle>pam_permit</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_permit-name">
+ <refnamediv xml:id="pam_permit-name">
<refname>pam_permit</refname>
<refpurpose>The promiscuous module</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_permit-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_permit-cmdsynopsis" sepchar=" ">
<command>pam_permit.so</command>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_permit-description">
+ <refsect1 xml:id="pam_permit-description">
<title>DESCRIPTION</title>
@@ -41,13 +38,13 @@
</para>
</refsect1>
- <refsect1 id="pam_permit-options">
+ <refsect1 xml:id="pam_permit-options">
<title>OPTIONS</title>
<para> This module does not recognise any options.</para>
</refsect1>
- <refsect1 id="pam_permit-types">
+ <refsect1 xml:id="pam_permit-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option>, <option>account</option>,
@@ -56,7 +53,7 @@
</para>
</refsect1>
- <refsect1 id='pam_permit-return_values'>
+ <refsect1 xml:id="pam_permit-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -70,7 +67,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_permit-examples'>
+ <refsect1 xml:id="pam_permit-examples">
<title>EXAMPLES</title>
<para>
Add this line to your other login entries to disable account
@@ -81,7 +78,7 @@ account required pam_permit.so
</para>
</refsect1>
- <refsect1 id='pam_permit-see_also'>
+ <refsect1 xml:id="pam_permit-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -96,11 +93,11 @@ account required pam_permit.so
</para>
</refsect1>
- <refsect1 id='pam_permit-author'>
+ <refsect1 xml:id="pam_permit-author">
<title>AUTHOR</title>
<para>
pam_permit was written by Andrew G. Morgan, &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_pwhistory/Makefile.am b/modules/pam_pwhistory/Makefile.am
index 8a4dbcb2..6cd5ffd3 100644
--- a/modules/pam_pwhistory/Makefile.am
+++ b/modules/pam_pwhistory/Makefile.am
@@ -9,14 +9,19 @@ MAINTAINERCLEANFILES = $(MANS) README
EXTRA_DIST = $(XMLS)
if HAVE_DOC
-dist_man_MANS = pam_pwhistory.8 pwhistory_helper.8
+dist_man_MANS = pam_pwhistory.8 pwhistory_helper.8 pwhistory.conf.5
endif
-XMLS = README.xml pam_pwhistory.8.xml pwhistory_helper.8.xml
+XMLS = README.xml pam_pwhistory.8.xml pwhistory_helper.8.xml \
+ pwhistory.conf.5.xml
dist_check_SCRIPTS = tst-pam_pwhistory
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS) -DPWHISTORY_HELPER=\"$(sbindir)/pwhistory_helper\"
@@ -26,12 +31,14 @@ if HAVE_VERSIONING
pam_pwhistory_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
endif
-noinst_HEADERS = opasswd.h
+noinst_HEADERS = opasswd.h pwhistory_config.h
+
+dist_secureconf_DATA = pwhistory.conf
securelib_LTLIBRARIES = pam_pwhistory.la
pam_pwhistory_la_CFLAGS = $(AM_CFLAGS)
pam_pwhistory_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBCRYPT@ @LIBSELINUX@
-pam_pwhistory_la_SOURCES = pam_pwhistory.c opasswd.c
+pam_pwhistory_la_SOURCES = pam_pwhistory.c opasswd.c pwhistory_config.c
sbin_PROGRAMS = pwhistory_helper
pwhistory_helper_CFLAGS = $(AM_CFLAGS) -DHELPER_COMPILE=\"pwhistory_helper\" @EXE_CFLAGS@
@@ -39,6 +46,9 @@ pwhistory_helper_SOURCES = pwhistory_helper.c opasswd.c
pwhistory_helper_LDFLAGS = @EXE_LDFLAGS@
pwhistory_helper_LDADD = $(top_builddir)/libpam/libpam.la @LIBCRYPT@
+check_PROGRAMS = tst-pam_pwhistory-retval
+tst_pam_pwhistory_retval_LDADD = $(top_builddir)/libpam/libpam.la
+
if ENABLE_REGENERATE_MAN
dist_noinst_DATA = README
-include $(top_srcdir)/Make.xml.rules
diff --git a/modules/pam_pwhistory/Makefile.in b/modules/pam_pwhistory/Makefile.in
index cf1082b0..dcb969ac 100644
--- a/modules/pam_pwhistory/Makefile.in
+++ b/modules/pam_pwhistory/Makefile.in
@@ -98,6 +98,7 @@ build_triplet = @build@
host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
sbin_PROGRAMS = pwhistory_helper$(EXEEXT)
+check_PROGRAMS = tst-pam_pwhistory-retval$(EXEEXT)
subdir = modules/pam_pwhistory
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
@@ -118,14 +119,15 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
- $(am__dist_noinst_DATA_DIST) $(noinst_HEADERS) \
- $(am__DIST_COMMON)
+ $(am__dist_noinst_DATA_DIST) $(dist_secureconf_DATA) \
+ $(noinst_HEADERS) $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(securelibdir)" \
- "$(DESTDIR)$(man8dir)"
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" \
+ "$(DESTDIR)$(secureconfdir)"
PROGRAMS = $(sbin_PROGRAMS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
@@ -157,7 +159,8 @@ am__uninstall_files_from_dir = { \
LTLIBRARIES = $(securelib_LTLIBRARIES)
pam_pwhistory_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
am_pam_pwhistory_la_OBJECTS = pam_pwhistory_la-pam_pwhistory.lo \
- pam_pwhistory_la-opasswd.lo
+ pam_pwhistory_la-opasswd.lo \
+ pam_pwhistory_la-pwhistory_config.lo
pam_pwhistory_la_OBJECTS = $(am_pam_pwhistory_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -176,6 +179,10 @@ pwhistory_helper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(pwhistory_helper_CFLAGS) $(CFLAGS) \
$(pwhistory_helper_LDFLAGS) $(LDFLAGS) -o $@
+tst_pam_pwhistory_retval_SOURCES = tst-pam_pwhistory-retval.c
+tst_pam_pwhistory_retval_OBJECTS = tst-pam_pwhistory-retval.$(OBJEXT)
+tst_pam_pwhistory_retval_DEPENDENCIES = \
+ $(top_builddir)/libpam/libpam.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -193,8 +200,10 @@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/pam_pwhistory_la-opasswd.Plo \
./$(DEPDIR)/pam_pwhistory_la-pam_pwhistory.Plo \
+ ./$(DEPDIR)/pam_pwhistory_la-pwhistory_config.Plo \
./$(DEPDIR)/pwhistory_helper-opasswd.Po \
- ./$(DEPDIR)/pwhistory_helper-pwhistory_helper.Po
+ ./$(DEPDIR)/pwhistory_helper-pwhistory_helper.Po \
+ ./$(DEPDIR)/tst-pam_pwhistory-retval.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -214,18 +223,21 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(pam_pwhistory_la_SOURCES) $(pwhistory_helper_SOURCES)
-DIST_SOURCES = $(pam_pwhistory_la_SOURCES) $(pwhistory_helper_SOURCES)
+SOURCES = $(pam_pwhistory_la_SOURCES) $(pwhistory_helper_SOURCES) \
+ tst-pam_pwhistory-retval.c
+DIST_SOURCES = $(pam_pwhistory_la_SOURCES) $(pwhistory_helper_SOURCES) \
+ tst-pam_pwhistory-retval.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+man5dir = $(mandir)/man5
man8dir = $(mandir)/man8
NROFF = nroff
MANS = $(dist_man_MANS)
am__dist_noinst_DATA_DIST = README
-DATA = $(dist_noinst_DATA)
+DATA = $(dist_noinst_DATA) $(dist_secureconf_DATA)
HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
@@ -453,6 +465,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -465,11 +478,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -501,12 +516,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -529,6 +546,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -539,12 +557,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -613,26 +635,31 @@ top_srcdir = @top_srcdir@
CLEANFILES = *~
MAINTAINERCLEANFILES = $(MANS) README
EXTRA_DIST = $(XMLS)
-@HAVE_DOC_TRUE@dist_man_MANS = pam_pwhistory.8 pwhistory_helper.8
-XMLS = README.xml pam_pwhistory.8.xml pwhistory_helper.8.xml
+@HAVE_DOC_TRUE@dist_man_MANS = pam_pwhistory.8 pwhistory_helper.8 pwhistory.conf.5
+XMLS = README.xml pam_pwhistory.8.xml pwhistory_helper.8.xml \
+ pwhistory.conf.5.xml
+
dist_check_SCRIPTS = tst-pam_pwhistory
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS) -DPWHISTORY_HELPER=\"$(sbindir)/pwhistory_helper\"
pam_pwhistory_la_LDFLAGS = -no-undefined -avoid-version -module \
$(am__append_1)
-noinst_HEADERS = opasswd.h
+noinst_HEADERS = opasswd.h pwhistory_config.h
+dist_secureconf_DATA = pwhistory.conf
securelib_LTLIBRARIES = pam_pwhistory.la
pam_pwhistory_la_CFLAGS = $(AM_CFLAGS)
pam_pwhistory_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBCRYPT@ @LIBSELINUX@
-pam_pwhistory_la_SOURCES = pam_pwhistory.c opasswd.c
+pam_pwhistory_la_SOURCES = pam_pwhistory.c opasswd.c pwhistory_config.c
pwhistory_helper_CFLAGS = $(AM_CFLAGS) -DHELPER_COMPILE=\"pwhistory_helper\" @EXE_CFLAGS@
pwhistory_helper_SOURCES = pwhistory_helper.c opasswd.c
pwhistory_helper_LDFLAGS = @EXE_LDFLAGS@
pwhistory_helper_LDADD = $(top_builddir)/libpam/libpam.la @LIBCRYPT@
+tst_pam_pwhistory_retval_LDADD = $(top_builddir)/libpam/libpam.la
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
@@ -667,6 +694,15 @@ $(top_srcdir)/configure: $(am__configure_deps)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
@@ -759,6 +795,10 @@ pwhistory_helper$(EXEEXT): $(pwhistory_helper_OBJECTS) $(pwhistory_helper_DEPEND
@rm -f pwhistory_helper$(EXEEXT)
$(AM_V_CCLD)$(pwhistory_helper_LINK) $(pwhistory_helper_OBJECTS) $(pwhistory_helper_LDADD) $(LIBS)
+tst-pam_pwhistory-retval$(EXEEXT): $(tst_pam_pwhistory_retval_OBJECTS) $(tst_pam_pwhistory_retval_DEPENDENCIES) $(EXTRA_tst_pam_pwhistory_retval_DEPENDENCIES)
+ @rm -f tst-pam_pwhistory-retval$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tst_pam_pwhistory_retval_OBJECTS) $(tst_pam_pwhistory_retval_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -767,8 +807,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_pwhistory_la-opasswd.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_pwhistory_la-pam_pwhistory.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_pwhistory_la-pwhistory_config.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwhistory_helper-opasswd.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwhistory_helper-pwhistory_helper.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_pwhistory-retval.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@@ -811,6 +853,13 @@ pam_pwhistory_la-opasswd.lo: opasswd.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_pwhistory_la_CFLAGS) $(CFLAGS) -c -o pam_pwhistory_la-opasswd.lo `test -f 'opasswd.c' || echo '$(srcdir)/'`opasswd.c
+pam_pwhistory_la-pwhistory_config.lo: pwhistory_config.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_pwhistory_la_CFLAGS) $(CFLAGS) -MT pam_pwhistory_la-pwhistory_config.lo -MD -MP -MF $(DEPDIR)/pam_pwhistory_la-pwhistory_config.Tpo -c -o pam_pwhistory_la-pwhistory_config.lo `test -f 'pwhistory_config.c' || echo '$(srcdir)/'`pwhistory_config.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pam_pwhistory_la-pwhistory_config.Tpo $(DEPDIR)/pam_pwhistory_la-pwhistory_config.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwhistory_config.c' object='pam_pwhistory_la-pwhistory_config.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_pwhistory_la_CFLAGS) $(CFLAGS) -c -o pam_pwhistory_la-pwhistory_config.lo `test -f 'pwhistory_config.c' || echo '$(srcdir)/'`pwhistory_config.c
+
pwhistory_helper-pwhistory_helper.o: pwhistory_helper.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwhistory_helper_CFLAGS) $(CFLAGS) -MT pwhistory_helper-pwhistory_helper.o -MD -MP -MF $(DEPDIR)/pwhistory_helper-pwhistory_helper.Tpo -c -o pwhistory_helper-pwhistory_helper.o `test -f 'pwhistory_helper.c' || echo '$(srcdir)/'`pwhistory_helper.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pwhistory_helper-pwhistory_helper.Tpo $(DEPDIR)/pwhistory_helper-pwhistory_helper.Po
@@ -844,6 +893,49 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-man5: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(dist_man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
install-man8: $(dist_man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
@@ -887,6 +979,27 @@ uninstall-man8:
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+install-dist_secureconfDATA: $(dist_secureconf_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_secureconf_DATA)'; test -n "$(secureconfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(secureconfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(secureconfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(secureconfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(secureconfdir)" || exit $$?; \
+ done
+
+uninstall-dist_secureconfDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_secureconf_DATA)'; test -n "$(secureconfdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(secureconfdir)'; $(am__uninstall_files_from_dir)
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -1060,7 +1173,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
fi; \
$$success || exit 1
-check-TESTS: $(dist_check_SCRIPTS)
+check-TESTS: $(check_PROGRAMS) $(dist_check_SCRIPTS)
@list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@@ -1070,7 +1183,7 @@ check-TESTS: $(dist_check_SCRIPTS)
log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
exit $$?;
-recheck: all $(dist_check_SCRIPTS)
+recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS)
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@set +e; $(am__set_TESTS_bases); \
bases=`for i in $$bases; do echo $$i; done \
@@ -1088,6 +1201,13 @@ tst-pam_pwhistory.log: tst-pam_pwhistory
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+tst-pam_pwhistory-retval.log: tst-pam_pwhistory-retval$(EXEEXT)
+ @p='tst-pam_pwhistory-retval$(EXEEXT)'; \
+ b='tst-pam_pwhistory-retval'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
.test.log:
@p='$<'; \
$(am__set_b); \
@@ -1137,12 +1257,13 @@ distdir-am: $(DISTFILES)
fi; \
done
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+ $(dist_check_SCRIPTS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS)
installdirs:
- for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)"; do \
+ for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(secureconfdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -1182,14 +1303,16 @@ maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \
- clean-securelibLTLIBRARIES mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-sbinPROGRAMS clean-securelibLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/pam_pwhistory_la-opasswd.Plo
-rm -f ./$(DEPDIR)/pam_pwhistory_la-pam_pwhistory.Plo
+ -rm -f ./$(DEPDIR)/pam_pwhistory_la-pwhistory_config.Plo
-rm -f ./$(DEPDIR)/pwhistory_helper-opasswd.Po
-rm -f ./$(DEPDIR)/pwhistory_helper-pwhistory_helper.Po
+ -rm -f ./$(DEPDIR)/tst-pam_pwhistory-retval.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1206,7 +1329,8 @@ info: info-am
info-am:
-install-data-am: install-man install-securelibLTLIBRARIES
+install-data-am: install-dist_secureconfDATA install-man \
+ install-securelibLTLIBRARIES
install-dvi: install-dvi-am
@@ -1222,7 +1346,7 @@ install-info: install-info-am
install-info-am:
-install-man: install-man8
+install-man: install-man5 install-man8
install-pdf: install-pdf-am
@@ -1237,8 +1361,10 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/pam_pwhistory_la-opasswd.Plo
-rm -f ./$(DEPDIR)/pam_pwhistory_la-pam_pwhistory.Plo
+ -rm -f ./$(DEPDIR)/pam_pwhistory_la-pwhistory_config.Plo
-rm -f ./$(DEPDIR)/pwhistory_helper-opasswd.Po
-rm -f ./$(DEPDIR)/pwhistory_helper-pwhistory_helper.Po
+ -rm -f ./$(DEPDIR)/tst-pam_pwhistory-retval.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1255,28 +1381,30 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-man uninstall-sbinPROGRAMS \
- uninstall-securelibLTLIBRARIES
+uninstall-am: uninstall-dist_secureconfDATA uninstall-man \
+ uninstall-sbinPROGRAMS uninstall-securelibLTLIBRARIES
-uninstall-man: uninstall-man8
+uninstall-man: uninstall-man5 uninstall-man8
.MAKE: check-am install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
- check-am clean clean-generic clean-libtool clean-sbinPROGRAMS \
- clean-securelibLTLIBRARIES cscopelist-am ctags ctags-am \
- distclean distclean-compile distclean-generic \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-sbinPROGRAMS clean-securelibLTLIBRARIES cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-man8 install-pdf \
- install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
+ install-data-am install-dist_secureconfDATA install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man5 install-man8 install-pdf install-pdf-am \
+ install-ps install-ps-am install-sbinPROGRAMS \
install-securelibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- recheck tags tags-am uninstall uninstall-am uninstall-man \
+ recheck tags tags-am uninstall uninstall-am \
+ uninstall-dist_secureconfDATA uninstall-man uninstall-man5 \
uninstall-man8 uninstall-sbinPROGRAMS \
uninstall-securelibLTLIBRARIES
diff --git a/modules/pam_pwhistory/README b/modules/pam_pwhistory/README
index 161bebc7..b4868767 100644
--- a/modules/pam_pwhistory/README
+++ b/modules/pam_pwhistory/README
@@ -31,9 +31,9 @@ enforce_for_root
remember=N
- The last N passwords for each user are saved in /etc/security/opasswd. The
- default is 10. Value of 0 makes the module to keep the existing contents of
- the opasswd file unchanged.
+ The last N passwords for each user are saved. The default is 10. Value of 0
+ makes the module to keep the existing contents of the opasswd file
+ unchanged.
retry=N
@@ -43,6 +43,20 @@ authtok_type=STRING
See pam_get_authtok(3) for more details.
+file=/path/filename
+
+ Store password history in file /path/filename rather than the default
+ location. The default location is /etc/security/opasswd.
+
+conf=/path/to/config-file
+
+ Use another configuration file instead of the default /etc/security/
+ pwhistory.conf.
+
+The options for configuring the module behavior are described in the
+pwhistory.conf(5) manual page. The options specified on the module command line
+override the values from the configuration file.
+
EXAMPLES
An example password section would be:
diff --git a/modules/pam_pwhistory/README.xml b/modules/pam_pwhistory/README.xml
index f048e321..194edbc7 100644
--- a/modules/pam_pwhistory/README.xml
+++ b/modules/pam_pwhistory/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_pwhistory.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_pwhistory.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_pwhistory-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_pwhistory.8.xml" xpointer='xpointer(id("pam_pwhistory-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_pwhistory/opasswd.c b/modules/pam_pwhistory/opasswd.c
index a6cd3d2a..859b3da4 100644
--- a/modules/pam_pwhistory/opasswd.c
+++ b/modules/pam_pwhistory/opasswd.c
@@ -44,6 +44,7 @@
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
+#include <limits.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
@@ -67,6 +68,7 @@
#include <security/pam_ext.h>
#endif
#include <security/pam_modules.h>
+#include "pam_inline.h"
#include "opasswd.h"
@@ -74,8 +76,7 @@
#define RANDOM_DEVICE "/dev/urandom"
#endif
-#define OLD_PASSWORDS_FILE "/etc/security/opasswd"
-#define TMP_PASSWORDS_FILE OLD_PASSWORDS_FILE".tmpXXXXXX"
+#define DEFAULT_OLD_PASSWORDS_FILE SCONFIGDIR "/opasswd"
#define DEFAULT_BUFLEN 4096
@@ -129,6 +130,7 @@ compare_password(const char *newpass, const char *oldpass)
char *outval;
#ifdef HAVE_CRYPT_R
struct crypt_data output;
+ int retval;
output.initialized = 0;
@@ -137,12 +139,14 @@ compare_password(const char *newpass, const char *oldpass)
outval = crypt (newpass, oldpass);
#endif
- return outval != NULL && strcmp(outval, oldpass) == 0;
+ retval = outval != NULL && strcmp(outval, oldpass) == 0;
+ pam_overwrite_string(outval);
+ return retval;
}
/* Check, if the new password is already in the opasswd file. */
PAMH_ARG_DECL(int
-check_old_pass, const char *user, const char *newpass, int debug)
+check_old_pass, const char *user, const char *newpass, const char *filename, int debug)
{
int retval = PAM_SUCCESS;
FILE *oldpf;
@@ -156,10 +160,13 @@ check_old_pass, const char *user, const char *newpass, int debug)
return PAM_PWHISTORY_RUN_HELPER;
#endif
- if ((oldpf = fopen (OLD_PASSWORDS_FILE, "r")) == NULL)
+ const char *opasswd_file =
+ (filename != NULL ? filename : DEFAULT_OLD_PASSWORDS_FILE);
+
+ if ((oldpf = fopen (opasswd_file, "r")) == NULL)
{
if (errno != ENOENT)
- pam_syslog (pamh, LOG_ERR, "Cannot open %s: %m", OLD_PASSWORDS_FILE);
+ pam_syslog (pamh, LOG_ERR, "Cannot open %s: %m", opasswd_file);
return PAM_SUCCESS;
}
@@ -235,16 +242,15 @@ check_old_pass, const char *user, const char *newpass, int debug)
} while (oldpass != NULL);
}
- if (buf)
- free (buf);
+ pam_overwrite_n(buf, buflen);
+ free (buf);
return retval;
}
PAMH_ARG_DECL(int
-save_old_pass, const char *user, int howmany, int debug UNUSED)
+save_old_pass, const char *user, int howmany, const char *filename, int debug UNUSED)
{
- char opasswd_tmp[] = TMP_PASSWORDS_FILE;
struct stat opasswd_stat;
FILE *oldpf, *newpf;
int newpf_fd;
@@ -256,6 +262,15 @@ save_old_pass, const char *user, int howmany, int debug UNUSED)
struct passwd *pwd;
const char *oldpass;
+ /* Define opasswd file and temp file for opasswd */
+ const char *opasswd_file =
+ (filename != NULL ? filename : DEFAULT_OLD_PASSWORDS_FILE);
+ char opasswd_tmp[PATH_MAX];
+
+ if ((size_t) snprintf (opasswd_tmp, sizeof (opasswd_tmp), "%s.tmpXXXXXX",
+ opasswd_file) >= sizeof (opasswd_tmp))
+ return PAM_BUF_ERR;
+
pwd = pam_modutil_getpwnam (pamh, user);
if (pwd == NULL)
return PAM_USER_UNKNOWN;
@@ -285,24 +300,22 @@ save_old_pass, const char *user, int howmany, int debug UNUSED)
if (oldpass == NULL || *oldpass == '\0')
return PAM_SUCCESS;
- if ((oldpf = fopen (OLD_PASSWORDS_FILE, "r")) == NULL)
+ if ((oldpf = fopen (opasswd_file, "r")) == NULL)
{
if (errno == ENOENT)
{
- pam_syslog (pamh, LOG_NOTICE, "Creating %s",
- OLD_PASSWORDS_FILE);
+ pam_syslog (pamh, LOG_NOTICE, "Creating %s", opasswd_file);
do_create = 1;
}
else
{
- pam_syslog (pamh, LOG_ERR, "Cannot open %s: %m",
- OLD_PASSWORDS_FILE);
+ pam_syslog (pamh, LOG_ERR, "Cannot open %s: %m", opasswd_file);
return PAM_AUTHTOK_ERR;
}
}
else if (fstat (fileno (oldpf), &opasswd_stat) < 0)
{
- pam_syslog (pamh, LOG_ERR, "Cannot stat %s: %m", OLD_PASSWORDS_FILE);
+ pam_syslog (pamh, LOG_ERR, "Cannot stat %s: %m", opasswd_file);
fclose (oldpf);
return PAM_AUTHTOK_ERR;
}
@@ -312,7 +325,7 @@ save_old_pass, const char *user, int howmany, int debug UNUSED)
if (newpf_fd == -1)
{
pam_syslog (pamh, LOG_ERR, "Cannot create %s temp file: %m",
- OLD_PASSWORDS_FILE);
+ opasswd_file);
if (oldpf)
fclose (oldpf);
return PAM_AUTHTOK_ERR;
@@ -321,23 +334,19 @@ save_old_pass, const char *user, int howmany, int debug UNUSED)
{
if (fchmod (newpf_fd, S_IRUSR|S_IWUSR) != 0)
pam_syslog (pamh, LOG_ERR,
- "Cannot set permissions of %s temp file: %m",
- OLD_PASSWORDS_FILE);
+ "Cannot set permissions of %s temp file: %m", opasswd_file);
if (fchown (newpf_fd, 0, 0) != 0)
pam_syslog (pamh, LOG_ERR,
- "Cannot set owner/group of %s temp file: %m",
- OLD_PASSWORDS_FILE);
+ "Cannot set owner/group of %s temp file: %m", opasswd_file);
}
else
{
if (fchmod (newpf_fd, opasswd_stat.st_mode) != 0)
pam_syslog (pamh, LOG_ERR,
- "Cannot set permissions of %s temp file: %m",
- OLD_PASSWORDS_FILE);
+ "Cannot set permissions of %s temp file: %m", opasswd_file);
if (fchown (newpf_fd, opasswd_stat.st_uid, opasswd_stat.st_gid) != 0)
pam_syslog (pamh, LOG_ERR,
- "Cannot set owner/group of %s temp file: %m",
- OLD_PASSWORDS_FILE);
+ "Cannot set owner/group of %s temp file: %m", opasswd_file);
}
newpf = fdopen (newpf_fd, "w+");
if (newpf == NULL)
@@ -514,6 +523,7 @@ save_old_pass, const char *user, int howmany, int debug UNUSED)
}
if (fputs (out, newpf) < 0)
{
+ pam_overwrite_string(out);
free (out);
retval = PAM_AUTHTOK_ERR;
if (oldpf)
@@ -521,6 +531,7 @@ save_old_pass, const char *user, int howmany, int debug UNUSED)
fclose (newpf);
goto error_opasswd;
}
+ pam_overwrite_string(out);
free (out);
}
@@ -550,14 +561,23 @@ save_old_pass, const char *user, int howmany, int debug UNUSED)
goto error_opasswd;
}
- unlink (OLD_PASSWORDS_FILE".old");
- if (link (OLD_PASSWORDS_FILE, OLD_PASSWORDS_FILE".old") != 0 &&
+ char opasswd_backup[PATH_MAX];
+ if ((size_t) snprintf (opasswd_backup, sizeof (opasswd_backup), "%s.old",
+ opasswd_file) >= sizeof (opasswd_backup))
+ {
+ retval = PAM_BUF_ERR;
+ goto error_opasswd;
+ }
+
+ unlink (opasswd_backup);
+ if (link (opasswd_file, opasswd_backup) != 0 &&
errno != ENOENT)
pam_syslog (pamh, LOG_ERR, "Cannot create backup file of %s: %m",
- OLD_PASSWORDS_FILE);
- rename (opasswd_tmp, OLD_PASSWORDS_FILE);
+ opasswd_file);
+ rename (opasswd_tmp, opasswd_file);
error_opasswd:
unlink (opasswd_tmp);
+ pam_overwrite_n(buf, buflen);
free (buf);
return retval;
diff --git a/modules/pam_pwhistory/opasswd.h b/modules/pam_pwhistory/opasswd.h
index 3f257288..19a4062c 100644
--- a/modules/pam_pwhistory/opasswd.h
+++ b/modules/pam_pwhistory/opasswd.h
@@ -57,10 +57,10 @@ void
helper_log_err(int err, const char *format, ...);
#endif
-PAMH_ARG_DECL(int
-check_old_pass, const char *user, const char *newpass, int debug);
+PAMH_ARG_DECL(int check_old_pass, const char *user, const char *newpass,
+ const char *filename, int debug);
-PAMH_ARG_DECL(int
-save_old_pass, const char *user, int howmany, int debug);
+PAMH_ARG_DECL(int save_old_pass, const char *user, int howmany,
+ const char *filename, int debug);
#endif /* __OPASSWD_H__ */
diff --git a/modules/pam_pwhistory/pam_pwhistory.8 b/modules/pam_pwhistory/pam_pwhistory.8
index bdbd6c8d..df95ee37 100644
--- a/modules/pam_pwhistory/pam_pwhistory.8
+++ b/modules/pam_pwhistory/pam_pwhistory.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_pwhistory
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_PWHISTORY" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_PWHISTORY" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -31,7 +31,7 @@
pam_pwhistory \- PAM module to remember last passwords
.SH "SYNOPSIS"
.HP \w'\fBpam_pwhistory\&.so\fR\ 'u
-\fBpam_pwhistory\&.so\fR [debug] [use_authtok] [enforce_for_root] [remember=\fIN\fR] [retry=\fIN\fR] [authtok_type=\fISTRING\fR]
+\fBpam_pwhistory\&.so\fR [debug] [use_authtok] [enforce_for_root] [remember=\fIN\fR] [retry=\fIN\fR] [authtok_type=\fISTRING\fR] [file=\fI/path/filename\fR] [conf=\fI/path/to/config\-file\fR]
.SH "DESCRIPTION"
.PP
This module saves the last passwords for each user in order to force password change history and keep the user from alternating between the same password too frequently\&.
@@ -39,13 +39,13 @@ This module saves the last passwords for each user in order to force password ch
This module does not work together with kerberos\&. In general, it does not make much sense to use this module in conjunction with NIS or LDAP, since the old passwords are stored on the local machine and are not available on another machine for password history checking\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Turns on debugging via
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBuse_authtok\fR
+use_authtok
.RS 4
When password changing enforce the module to use the new password provided by a previously stacked
\fBpassword\fR
@@ -54,17 +54,16 @@ module (this is used in the example of the stacking of the
module documented below)\&.
.RE
.PP
-\fBenforce_for_root\fR
+enforce_for_root
.RS 4
If this option is set, the check is enforced for root, too\&.
.RE
.PP
-\fBremember=\fR\fB\fIN\fR\fR
+remember=N
.RS 4
The last
\fIN\fR
-passwords for each user are saved in
-/etc/security/opasswd\&. The default is
+passwords for each user are saved\&. The default is
\fI10\fR\&. Value of
\fI0\fR
makes the module to keep the existing contents of the
@@ -72,7 +71,7 @@ opasswd
file unchanged\&.
.RE
.PP
-\fBretry=\fR\fB\fIN\fR\fR
+retry=N
.RS 4
Prompt user at most
\fIN\fR
@@ -80,12 +79,30 @@ times before returning with error\&. The default is
\fI1\fR\&.
.RE
.PP
-\fBauthtok_type=\fR\fB\fISTRING\fR\fR
+authtok_type=STRING
.RS 4
See
\fBpam_get_authtok\fR(3)
for more details\&.
.RE
+.PP
+file=/path/filename
+.RS 4
+Store password history in file
+/path/filename
+rather than the default location\&. The default location is
+/etc/security/opasswd\&.
+.RE
+.PP
+conf=/path/to/config\-file
+.RS 4
+Use another configuration file instead of the default
+/etc/security/pwhistory\&.conf\&.
+.RE
+.PP
+The options for configuring the module behavior are described in the
+\fBpwhistory.conf\fR(5)
+manual page\&. The options specified on the module command line override the values from the configuration file\&.
.SH "MODULE TYPES PROVIDED"
.PP
Only the
@@ -150,10 +167,16 @@ password required pam_unix\&.so use_authtok
.PP
/etc/security/opasswd
.RS 4
-File with password history
+Default file with password history
+.RE
+.PP
+/etc/security/pwhistory\&.conf
+.RS 4
+Config file for pam_pwhistory options
.RE
.SH "SEE ALSO"
.PP
+\fBpwhistory.conf\fR(5),
\fBpam.conf\fR(5),
\fBpam.d\fR(5),
\fBpam\fR(8)
diff --git a/modules/pam_pwhistory/pam_pwhistory.8.xml b/modules/pam_pwhistory/pam_pwhistory.8.xml
index d88115c2..d83d8d97 100644
--- a/modules/pam_pwhistory/pam_pwhistory.8.xml
+++ b/modules/pam_pwhistory/pam_pwhistory.8.xml
@@ -1,46 +1,49 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_pwhistory">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_pwhistory">
<refmeta>
<refentrytitle>pam_pwhistory</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_pwhistory-name">
+ <refnamediv xml:id="pam_pwhistory-name">
<refname>pam_pwhistory</refname>
<refpurpose>PAM module to remember last passwords</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_pwhistory-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_pwhistory-cmdsynopsis" sepchar=" ">
<command>pam_pwhistory.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
use_authtok
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
enforce_for_root
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
remember=<replaceable>N</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
retry=<replaceable>N</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
authtok_type=<replaceable>STRING</replaceable>
</arg>
+ <arg choice="opt" rep="norepeat">
+ file=<replaceable>/path/filename</replaceable>
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ conf=<replaceable>/path/to/config-file</replaceable>
+ </arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_pwhistory-description">
+ <refsect1 xml:id="pam_pwhistory-description">
<title>DESCRIPTION</title>
@@ -58,12 +61,12 @@
</para>
</refsect1>
- <refsect1 id="pam_pwhistory-options">
+ <refsect1 xml:id="pam_pwhistory-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -76,7 +79,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_authtok</option>
+ use_authtok
</term>
<listitem>
<para>
@@ -89,7 +92,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>enforce_for_root</option>
+ enforce_for_root
</term>
<listitem>
<para>
@@ -99,12 +102,12 @@
</varlistentry>
<varlistentry>
<term>
- <option>remember=<replaceable>N</replaceable></option>
+ remember=N
</term>
<listitem>
<para>
The last <replaceable>N</replaceable> passwords for each
- user are saved in <filename>/etc/security/opasswd</filename>.
+ user are saved.
The default is <emphasis>10</emphasis>. Value of
<emphasis>0</emphasis> makes the module to keep the existing
contents of the <filename>opasswd</filename> file unchanged.
@@ -113,7 +116,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>retry=<replaceable>N</replaceable></option>
+ retry=N
</term>
<listitem>
<para>
@@ -126,7 +129,7 @@
<varlistentry>
<term>
- <option>authtok_type=<replaceable>STRING</replaceable></option>
+ authtok_type=STRING
</term>
<listitem>
<para>
@@ -137,17 +140,49 @@
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>
+ file=/path/filename
+ </term>
+ <listitem>
+ <para>
+ Store password history in file <filename>/path/filename</filename>
+ rather than the default location. The default location is
+ <filename>/etc/security/opasswd</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ conf=/path/to/config-file
+ </term>
+ <listitem>
+ <para>
+ Use another configuration file instead of the default
+ <filename>/etc/security/pwhistory.conf</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
+ <para>
+ The options for configuring the module behavior are described in the
+ <citerefentry><refentrytitle>pwhistory.conf</refentrytitle>
+ <manvolnum>5</manvolnum></citerefentry> manual page. The options
+ specified on the module command line override the values from the
+ configuration file.
+ </para>
</refsect1>
- <refsect1 id="pam_pwhistory-types">
+ <refsect1 xml:id="pam_pwhistory-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>password</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_pwhistory-return_values'>
+ <refsect1 xml:id="pam_pwhistory-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -186,7 +221,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_pwhistory-examples'>
+ <refsect1 xml:id="pam_pwhistory-examples">
<title>EXAMPLES</title>
<para>
An example password section would be:
@@ -207,22 +242,40 @@ password required pam_unix.so use_authtok
</para>
</refsect1>
- <refsect1 id="pam_pwhistory-files">
+ <refsect1 xml:id="pam_pwhistory-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/opasswd</filename></term>
+ <term>/etc/security/opasswd</term>
<listitem>
- <para>File with password history</para>
+ <para>Default file with password history</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/security/pwhistory.conf</filename></term>
+ <listitem>
+ <para>Config file for pam_pwhistory options</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="with_vendordir">
+ <term><filename>%vendordir%/security/pwhistory.conf</filename></term>
+ <listitem>
+ <para>
+ Config file for pam_pwhistory options. It will be used if
+ <filename>/etc/security/pwhistory.conf</filename> does not exist.
+ </para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
- <refsect1 id='pam_pwhistory-see_also'>
+ <refsect1 xml:id="pam_pwhistory-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
+ <refentrytitle>pwhistory.conf</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
<refentrytitle>pam.conf</refentrytitle><manvolnum>5</manvolnum>
</citerefentry>,
<citerefentry>
@@ -237,11 +290,11 @@ password required pam_unix.so use_authtok
</para>
</refsect1>
- <refsect1 id='pam_pwhistory-author'>
+ <refsect1 xml:id="pam_pwhistory-author">
<title>AUTHOR</title>
<para>
pam_pwhistory was written by Thorsten Kukuk &lt;kukuk@thkukuk.de&gt;
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_pwhistory/pam_pwhistory.c b/modules/pam_pwhistory/pam_pwhistory.c
index ce2c21f5..5a7fb811 100644
--- a/modules/pam_pwhistory/pam_pwhistory.c
+++ b/modules/pam_pwhistory/pam_pwhistory.c
@@ -63,14 +63,8 @@
#include "opasswd.h"
#include "pam_inline.h"
+#include "pwhistory_config.h"
-struct options_t {
- int debug;
- int enforce_for_root;
- int remember;
- int tries;
-};
-typedef struct options_t options_t;
static void
@@ -104,13 +98,23 @@ parse_option (pam_handle_t *pamh, const char *argv, options_t *options)
options->enforce_for_root = 1;
else if (pam_str_skip_icase_prefix(argv, "authtok_type=") != NULL)
{ /* ignore, for pam_get_authtok */; }
+ else if ((str = pam_str_skip_icase_prefix(argv, "file=")) != NULL)
+ {
+ if (*str != '/')
+ {
+ pam_syslog (pamh, LOG_ERR,
+ "pam_pwhistory: file path should be absolute: %s", argv);
+ }
+ else
+ options->filename = str;
+ }
else
pam_syslog (pamh, LOG_ERR, "pam_pwhistory: unknown option: %s", argv);
}
static int
run_save_helper(pam_handle_t *pamh, const char *user,
- int howmany, int debug)
+ int howmany, const char *filename, int debug)
{
int retval, child;
struct sigaction newsa, oldsa;
@@ -123,7 +127,7 @@ run_save_helper(pam_handle_t *pamh, const char *user,
if (child == 0)
{
static char *envp[] = { NULL };
- char *args[] = { NULL, NULL, NULL, NULL, NULL, NULL };
+ char *args[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
if (pam_modutil_sanitize_helper_fds(pamh, PAM_MODUTIL_PIPE_FD,
PAM_MODUTIL_PIPE_FD,
@@ -137,9 +141,10 @@ run_save_helper(pam_handle_t *pamh, const char *user,
args[0] = (char *)PWHISTORY_HELPER;
args[1] = (char *)"save";
args[2] = (char *)user;
+ args[3] = (char *)filename;
DIAG_POP_IGNORE_CAST_QUAL;
- if (asprintf(&args[3], "%d", howmany) < 0 ||
- asprintf(&args[4], "%d", debug) < 0)
+ if (asprintf(&args[4], "%d", howmany) < 0 ||
+ asprintf(&args[5], "%d", debug) < 0)
{
pam_syslog(pamh, LOG_ERR, "asprintf: %m");
_exit(PAM_SYSTEM_ERR);
@@ -185,7 +190,7 @@ run_save_helper(pam_handle_t *pamh, const char *user,
static int
run_check_helper(pam_handle_t *pamh, const char *user,
- const char *newpass, int debug)
+ const char *newpass, const char *filename, int debug)
{
int retval, child, fds[2];
struct sigaction newsa, oldsa;
@@ -202,7 +207,7 @@ run_check_helper(pam_handle_t *pamh, const char *user,
if (child == 0)
{
static char *envp[] = { NULL };
- char *args[] = { NULL, NULL, NULL, NULL, NULL };
+ char *args[] = { NULL, NULL, NULL, NULL, NULL, NULL };
/* reopen stdin as pipe */
if (dup2(fds[0], STDIN_FILENO) != STDIN_FILENO)
@@ -223,8 +228,9 @@ run_check_helper(pam_handle_t *pamh, const char *user,
args[0] = (char *)PWHISTORY_HELPER;
args[1] = (char *)"check";
args[2] = (char *)user;
+ args[3] = (char *)filename;
DIAG_POP_IGNORE_CAST_QUAL;
- if (asprintf(&args[3], "%d", debug) < 0)
+ if (asprintf(&args[4], "%d", debug) < 0)
{
pam_syslog(pamh, LOG_ERR, "asprintf: %m");
_exit(PAM_SYSTEM_ERR);
@@ -299,6 +305,8 @@ pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv)
options.remember = 10;
options.tries = 1;
+ parse_config_file(pamh, argc, argv, &options);
+
/* Parse parameters for module */
for ( ; argc-- > 0; argv++)
parse_option (pamh, *argv, &options);
@@ -306,7 +314,6 @@ pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv)
if (options.debug)
pam_syslog (pamh, LOG_DEBUG, "pam_sm_chauthtok entered");
-
if (options.remember == 0)
return PAM_IGNORE;
@@ -323,10 +330,10 @@ pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv)
return PAM_SUCCESS;
}
- retval = save_old_pass (pamh, user, options.remember, options.debug);
+ retval = save_old_pass (pamh, user, options.remember, options.filename, options.debug);
if (retval == PAM_PWHISTORY_RUN_HELPER)
- retval = run_save_helper(pamh, user, options.remember, options.debug);
+ retval = run_save_helper(pamh, user, options.remember, options.filename, options.debug);
if (retval != PAM_SUCCESS)
return retval;
@@ -358,9 +365,9 @@ pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv)
if (options.debug)
pam_syslog (pamh, LOG_DEBUG, "check against old password file");
- retval = check_old_pass (pamh, user, newpass, options.debug);
+ retval = check_old_pass (pamh, user, newpass, options.filename, options.debug);
if (retval == PAM_PWHISTORY_RUN_HELPER)
- retval = run_check_helper(pamh, user, newpass, options.debug);
+ retval = run_check_helper(pamh, user, newpass, options.filename, options.debug);
if (retval != PAM_SUCCESS)
{
diff --git a/modules/pam_pwhistory/pwhistory.conf b/modules/pam_pwhistory/pwhistory.conf
new file mode 100644
index 00000000..070b7197
--- /dev/null
+++ b/modules/pam_pwhistory/pwhistory.conf
@@ -0,0 +1,21 @@
+# Configuration for remembering the last passwords used by a user.
+#
+# Enable the debugging logs.
+# Enabled if option is present.
+# debug
+#
+# root account's passwords are also remembered.
+# Enabled if option is present.
+# enforce_for_root
+#
+# Number of passwords to remember.
+# The default is 10.
+# remember = 10
+#
+# Number of times to prompt for the password.
+# The default is 1.
+# retry = 1
+#
+# The directory where the last passwords are kept.
+# The default is /etc/security/opasswd.
+# file = /etc/security/opasswd
diff --git a/modules/pam_pwhistory/pwhistory.conf.5 b/modules/pam_pwhistory/pwhistory.conf.5
new file mode 100644
index 00000000..ae57798f
--- /dev/null
+++ b/modules/pam_pwhistory/pwhistory.conf.5
@@ -0,0 +1,118 @@
+'\" t
+.\" Title: pwhistory.conf
+.\" Author: [see the "AUTHOR" section]
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
+.\" Manual: Linux-PAM Manual
+.\" Source: Linux-PAM
+.\" Language: English
+.\"
+.TH "PWHISTORY\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pwhistory.conf \- pam_pwhistory configuration file
+.SH "DESCRIPTION"
+.PP
+\fBpwhistory\&.conf\fR
+provides a way to configure the default settings for saving the last passwords for each user\&. This file is read by the
+\fIpam_pwhistory\fR
+module and is the preferred method over configuring
+\fIpam_pwhistory\fR
+directly\&.
+.PP
+The file has a very simple
+\fIname = value\fR
+format with possible comments starting with
+\fI#\fR
+character\&. The whitespace at the beginning of line, end of line, and around the
+\fI=\fR
+sign is ignored\&.
+.SH "OPTIONS"
+.PP
+debug
+.RS 4
+Turns on debugging via
+\fBsyslog\fR(3)\&.
+.RE
+.PP
+enforce_for_root
+.RS 4
+If this option is set, the check is enforced for root, too\&.
+.RE
+.PP
+remember=N
+.RS 4
+The last
+\fIN\fR
+passwords for each user are saved\&. The default is
+\fI10\fR\&. Value of
+\fI0\fR
+makes the module to keep the existing contents of the
+opasswd
+file unchanged\&.
+.RE
+.PP
+retry=N
+.RS 4
+Prompt user at most
+\fIN\fR
+times before returning with error\&. The default is 1\&.
+.RE
+.PP
+file=/path/filename
+.RS 4
+Store password history in file
+\fI/path/filename\fR
+rather than the default location\&. The default location is
+/etc/security/opasswd\&.
+.RE
+.SH "EXAMPLES"
+.PP
+/etc/security/pwhistory\&.conf file example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+debug
+remember=5
+file=/tmp/opasswd
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILES"
+.PP
+/etc/security/pwhistory\&.conf
+.RS 4
+the config file for custom options
+.RE
+.SH "SEE ALSO"
+.PP
+\fBpwhistory\fR(8),
+\fBpam_pwhistory\fR(8),
+\fBpam.conf\fR(5),
+\fBpam.d\fR(5),
+\fBpam\fR(8)
+.SH "AUTHOR"
+.PP
+pam_pwhistory was written by Thorsten Kukuk\&. The support for pwhistory\&.conf was written by Iker Pedrosa\&.
diff --git a/modules/pam_pwhistory/pwhistory.conf.5.xml b/modules/pam_pwhistory/pwhistory.conf.5.xml
new file mode 100644
index 00000000..2a2dfd3a
--- /dev/null
+++ b/modules/pam_pwhistory/pwhistory.conf.5.xml
@@ -0,0 +1,152 @@
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pwhistory.conf">
+
+ <refmeta>
+ <refentrytitle>pwhistory.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
+ </refmeta>
+
+ <refnamediv xml:id="pwhistory.conf-name">
+ <refname>pwhistory.conf</refname>
+ <refpurpose>pam_pwhistory configuration file</refpurpose>
+ </refnamediv>
+
+ <refsect1 xml:id="pwhistory.conf-description">
+
+ <title>DESCRIPTION</title>
+ <para>
+ <emphasis remap="B">pwhistory.conf</emphasis> provides a way to configure the
+ default settings for saving the last passwords for each user.
+ This file is read by the <emphasis>pam_pwhistory</emphasis> module and is the
+ preferred method over configuring <emphasis>pam_pwhistory</emphasis> directly.
+ </para>
+ <para>
+ The file has a very simple <emphasis>name = value</emphasis> format with possible comments
+ starting with <emphasis>#</emphasis> character. The whitespace at the beginning of line, end
+ of line, and around the <emphasis>=</emphasis> sign is ignored.
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pwhistory.conf-options">
+
+ <title>OPTIONS</title>
+ <variablelist>
+ <varlistentry>
+ <term>
+ debug
+ </term>
+ <listitem>
+ <para>
+ Turns on debugging via
+ <citerefentry>
+ <refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ enforce_for_root
+ </term>
+ <listitem>
+ <para>
+ If this option is set, the check is enforced for root, too.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ remember=N
+ </term>
+ <listitem>
+ <para>
+ The last <replaceable>N</replaceable> passwords for each
+ user are saved.
+ The default is <emphasis>10</emphasis>. Value of
+ <emphasis>0</emphasis> makes the module to keep the existing
+ contents of the <filename>opasswd</filename> file unchanged.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ retry=N
+ </term>
+ <listitem>
+ <para>
+ Prompt user at most <replaceable>N</replaceable> times
+ before returning with error. The default is 1.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ file=/path/filename
+ </term>
+ <listitem>
+ <para>
+ Store password history in file
+ <replaceable>/path/filename</replaceable> rather than the default
+ location. The default location is
+ <filename>/etc/security/opasswd</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 xml:id="pwhistory.conf-examples">
+ <title>EXAMPLES</title>
+ <para>
+ /etc/security/pwhistory.conf file example:
+ </para>
+ <programlisting>
+debug
+remember=5
+file=/tmp/opasswd
+ </programlisting>
+ </refsect1>
+
+ <refsect1 xml:id="pwhistory.conf-files">
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term>/etc/security/pwhistory.conf</term>
+ <listitem>
+ <para>the config file for custom options</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 xml:id="pwhistory.conf-see_also">
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>pwhistory</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pam_pwhistory</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pam.conf</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pwhistory.conf-author">
+ <title>AUTHOR</title>
+ <para>
+ pam_pwhistory was written by Thorsten Kukuk. The support for
+ pwhistory.conf was written by Iker Pedrosa.
+ </para>
+ </refsect1>
+
+</refentry> \ No newline at end of file
diff --git a/modules/pam_pwhistory/pwhistory_config.c b/modules/pam_pwhistory/pwhistory_config.c
new file mode 100644
index 00000000..692cf80e
--- /dev/null
+++ b/modules/pam_pwhistory/pwhistory_config.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2022 Iker Pedrosa <ipedrosa@redhat.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, and the entire permission notice in its entirety,
+ * including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions. (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <sys/stat.h>
+
+#include <security/pam_modutil.h>
+
+#include "pam_inline.h"
+#include "pwhistory_config.h"
+
+#define PWHISTORY_DEFAULT_CONF SCONFIGDIR "/pwhistory.conf"
+
+#ifdef VENDOR_SCONFIGDIR
+#define VENDOR_PWHISTORY_DEFAULT_CONF (VENDOR_SCONFIGDIR "/pwhistory.conf")
+#endif
+
+void
+parse_config_file(pam_handle_t *pamh, int argc, const char **argv,
+ struct options_t *options)
+{
+ const char *fname = NULL;
+ int i;
+ char *val;
+
+ for (i = 0; i < argc; ++i) {
+ const char *str = pam_str_skip_prefix(argv[i], "conf=");
+
+ if (str != NULL) {
+ fname = str;
+ }
+ }
+
+ if (fname == NULL) {
+ fname = PWHISTORY_DEFAULT_CONF;
+
+#ifdef VENDOR_PWHISTORY_DEFAULT_CONF
+ /*
+ * Check whether PWHISTORY_DEFAULT_CONF file is available.
+ * If it does not exist, fall back to VENDOR_PWHISTORY_DEFAULT_CONF file.
+ */
+ struct stat buffer;
+ if (stat(fname, &buffer) != 0 && errno == ENOENT) {
+ fname = VENDOR_PWHISTORY_DEFAULT_CONF;
+ }
+#endif
+ }
+
+ val = pam_modutil_search_key (pamh, fname, "debug");
+ if (val != NULL) {
+ options->debug = 1;
+ free(val);
+ }
+
+ val = pam_modutil_search_key (pamh, fname, "enforce_for_root");
+ if (val != NULL) {
+ options->enforce_for_root = 1;
+ free(val);
+ }
+
+ val = pam_modutil_search_key (pamh, fname, "remember");
+ if (val != NULL) {
+ unsigned int temp;
+ if (sscanf(val, "%u", &temp) != 1) {
+ pam_syslog(pamh, LOG_ERR,
+ "Bad number supplied for remember argument");
+ } else {
+ options->remember = temp;
+ }
+ free(val);
+ }
+
+ val = pam_modutil_search_key (pamh, fname, "retry");
+ if (val != NULL) {
+ unsigned int temp;
+ if (sscanf(val, "%u", &temp) != 1) {
+ pam_syslog(pamh, LOG_ERR,
+ "Bad number supplied for retry argument");
+ } else {
+ options->tries = temp;
+ }
+ free(val);
+ }
+
+ val = pam_modutil_search_key (pamh, fname, "file");
+ if (val != NULL) {
+ if (*val != '/') {
+ pam_syslog (pamh, LOG_ERR,
+ "File path should be absolute: %s", val);
+ } else {
+ options->filename = val;
+ }
+ }
+}
diff --git a/modules/pam_pwhistory/pwhistory_config.h b/modules/pam_pwhistory/pwhistory_config.h
new file mode 100644
index 00000000..e2b3bc83
--- /dev/null
+++ b/modules/pam_pwhistory/pwhistory_config.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2022 Iker Pedrosa <ipedrosa@redhat.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, and the entire permission notice in its entirety,
+ * including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions. (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _PWHISTORY_CONFIG_H
+#define _PWHISTORY_CONFIG_H
+
+#include <security/pam_ext.h>
+
+struct options_t {
+ int debug;
+ int enforce_for_root;
+ int remember;
+ int tries;
+ const char *filename;
+};
+typedef struct options_t options_t;
+
+void
+parse_config_file(pam_handle_t *pamh, int argc, const char **argv,
+ struct options_t *options);
+
+#endif /* _PWHISTORY_CONFIG_H */
diff --git a/modules/pam_pwhistory/pwhistory_helper.8 b/modules/pam_pwhistory/pwhistory_helper.8
index 684b5b02..0b837d32 100644
--- a/modules/pam_pwhistory/pwhistory_helper.8
+++ b/modules/pam_pwhistory/pwhistory_helper.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pwhistory_helper
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PWHISTORY_HELPER" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PWHISTORY_HELPER" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_pwhistory/pwhistory_helper.8.xml b/modules/pam_pwhistory/pwhistory_helper.8.xml
index a0301764..8370a485 100644
--- a/modules/pam_pwhistory/pwhistory_helper.8.xml
+++ b/modules/pam_pwhistory/pwhistory_helper.8.xml
@@ -1,30 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pwhistory_helper">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pwhistory_helper">
<refmeta>
<refentrytitle>pwhistory_helper</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pwhistory_helper-name">
+ <refnamediv xml:id="pwhistory_helper-name">
<refname>pwhistory_helper</refname>
<refpurpose>Helper binary that transfers password hashes from passwd or shadow to opasswd</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pwhistory_helper-cmdsynopsis">
+ <cmdsynopsis xml:id="pwhistory_helper-cmdsynopsis" sepchar=" ">
<command>pwhistory_helper</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
...
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pwhistory_helper-description">
+ <refsect1 xml:id="pwhistory_helper-description">
<title>DESCRIPTION</title>
@@ -48,7 +45,7 @@
</para>
</refsect1>
- <refsect1 id='pwhistory_helper-see_also'>
+ <refsect1 xml:id="pwhistory_helper-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -57,7 +54,7 @@
</para>
</refsect1>
- <refsect1 id='pwhistory_helper-author'>
+ <refsect1 xml:id="pwhistory_helper-author">
<title>AUTHOR</title>
<para>
Written by Tomas Mraz based on the code originally in
@@ -65,4 +62,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_pwhistory/pwhistory_helper.c b/modules/pam_pwhistory/pwhistory_helper.c
index b08a14a7..469d95fa 100644
--- a/modules/pam_pwhistory/pwhistory_helper.c
+++ b/modules/pam_pwhistory/pwhistory_helper.c
@@ -51,7 +51,7 @@
static int
-check_history(const char *user, const char *debug)
+check_history(const char *user, const char *filename, const char *debug)
{
char pass[PAM_MAX_RESP_SIZE + 1];
char *passwords[] = { pass };
@@ -68,21 +68,21 @@ check_history(const char *user, const char *debug)
return PAM_AUTHTOK_ERR;
}
- retval = check_old_pass(user, pass, dbg);
+ retval = check_old_pass(user, pass, filename, dbg);
- memset(pass, '\0', PAM_MAX_RESP_SIZE); /* clear memory of the password */
+ pam_overwrite_array(pass); /* clear memory of the password */
return retval;
}
static int
-save_history(const char *user, const char *howmany, const char *debug)
+save_history(const char *user, const char *filename, const char *howmany, const char *debug)
{
int num = atoi(howmany);
int dbg = atoi(debug); /* no need to be too fancy here */
int retval;
- retval = save_old_pass(user, num, dbg);
+ retval = save_old_pass(user, num, filename, dbg);
return retval;
}
@@ -92,13 +92,14 @@ main(int argc, char *argv[])
{
const char *option;
const char *user;
+ const char *filename;
/*
* we establish that this program is running with non-tty stdin.
* this is to discourage casual use.
*/
- if (isatty(STDIN_FILENO) || argc < 4)
+ if (isatty(STDIN_FILENO) || argc < 5)
{
fprintf(stderr,
"This binary is not designed for running in this way.\n");
@@ -107,11 +108,12 @@ main(int argc, char *argv[])
option = argv[1];
user = argv[2];
+ filename = argv[3];
- if (strcmp(option, "check") == 0 && argc == 4)
- return check_history(user, argv[3]);
- else if (strcmp(option, "save") == 0 && argc == 5)
- return save_history(user, argv[3], argv[4]);
+ if (strcmp(option, "check") == 0 && argc == 5)
+ return check_history(user, filename, argv[4]);
+ else if (strcmp(option, "save") == 0 && argc == 6)
+ return save_history(user, filename, argv[4], argv[5]);
fprintf(stderr, "This binary is not designed for running in this way.\n");
diff --git a/modules/pam_pwhistory/tst-pam_pwhistory-retval.c b/modules/pam_pwhistory/tst-pam_pwhistory-retval.c
new file mode 100644
index 00000000..9c9a62b4
--- /dev/null
+++ b/modules/pam_pwhistory/tst-pam_pwhistory-retval.c
@@ -0,0 +1,60 @@
+/*
+ * Check pam_pwhistory return values.
+ *
+ * Copyright (c) 2023 Stefan Schubert <schubi@suse.de>
+ */
+
+#include "test_assert.h"
+
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <security/pam_appl.h>
+
+#define MODULE_NAME "pam_pwhistory"
+#define TEST_NAME "tst-" MODULE_NAME "-retval"
+
+static const char service_file[] = TEST_NAME ".service";
+static struct pam_conv conv;
+
+int
+main(void)
+{
+ pam_handle_t *pamh = NULL;
+ FILE *fp;
+ char cwd[PATH_MAX];
+
+ ASSERT_NE(NULL, getcwd(cwd, sizeof(cwd)));
+
+ /* PAM_USER_UNKNOWN */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0,
+ fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so\n"
+ "account required %s/.libs/%s.so\n"
+ "password required %s/.libs/%s.so\n"
+ "session required %s/.libs/%s.so\n",
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_USER_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ /* cleanup */
+ ASSERT_EQ(0, unlink(service_file));
+
+ return 0;
+}
diff --git a/modules/pam_rhosts/Makefile.am b/modules/pam_rhosts/Makefile.am
index cc3f2f26..cb7dbe53 100644
--- a/modules/pam_rhosts/Makefile.am
+++ b/modules/pam_rhosts/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_rhosts
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_rhosts/Makefile.in b/modules/pam_rhosts/Makefile.in
index 6cfb1ff4..f67159cd 100644
--- a/modules/pam_rhosts/Makefile.in
+++ b/modules/pam_rhosts/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_rhosts.8.xml
dist_check_SCRIPTS = tst-pam_rhosts
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_rhosts/README.xml b/modules/pam_rhosts/README.xml
index 5d3307e7..2345dffd 100644
--- a/modules/pam_rhosts/README.xml
+++ b/modules/pam_rhosts/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_rhosts.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rhosts.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_rhosts-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rhosts.8.xml" xpointer='xpointer(id("pam_rhosts-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_rhosts/pam_rhosts.8 b/modules/pam_rhosts/pam_rhosts.8
index 61e9a446..36077de7 100644
--- a/modules/pam_rhosts/pam_rhosts.8
+++ b/modules/pam_rhosts/pam_rhosts.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_rhosts
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_RHOSTS" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_RHOSTS" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -54,17 +54,17 @@ connecting from the remote host (internally specified by the item
\fBpam_authenticate()\fR\&. The module is not capable of independently probing the network connection for such information\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBsilent\fR
+silent
.RS 4
Don\*(Aqt print informative messages\&.
.RE
.PP
-\fBsuperuser=\fR\fB\fIaccount\fR\fR
+superuser=account
.RS 4
Handle
\fIaccount\fR
diff --git a/modules/pam_rhosts/pam_rhosts.8.xml b/modules/pam_rhosts/pam_rhosts.8.xml
index eb96371d..b8a5c1cb 100644
--- a/modules/pam_rhosts/pam_rhosts.8.xml
+++ b/modules/pam_rhosts/pam_rhosts.8.xml
@@ -1,27 +1,24 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_rhosts">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_rhosts">
<refmeta>
<refentrytitle>pam_rhosts</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_rhosts-name">
+ <refnamediv xml:id="pam_rhosts-name">
<refname>pam_rhosts</refname>
<refpurpose>The rhosts PAM module</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_rhosts-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_rhosts-cmdsynopsis" sepchar=" ">
<command>pam_rhosts.so</command>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_rhosts-description">
+ <refsect1 xml:id="pam_rhosts-description">
<title>DESCRIPTION</title>
@@ -53,12 +50,12 @@
</para>
</refsect1>
- <refsect1 id="pam_rhosts-options">
+ <refsect1 xml:id="pam_rhosts-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -68,7 +65,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>silent</option>
+ silent
</term>
<listitem>
<para>
@@ -78,7 +75,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>superuser=<replaceable>account</replaceable></option>
+ superuser=account
</term>
<listitem>
<para>
@@ -89,14 +86,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_rhosts-types">
+ <refsect1 xml:id="pam_rhosts-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>auth</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_rhosts-return_values'>
+ <refsect1 xml:id="pam_rhosts-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -120,7 +117,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_rhosts-examples'>
+ <refsect1 xml:id="pam_rhosts-examples">
<title>EXAMPLES</title>
<para>
To grant a remote user access by <filename>/etc/hosts.equiv</filename>
@@ -137,7 +134,7 @@ auth required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_rhosts-see_also'>
+ <refsect1 xml:id="pam_rhosts-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -161,11 +158,11 @@ auth required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_rhosts-author'>
+ <refsect1 xml:id="pam_rhosts-author">
<title>AUTHOR</title>
<para>
pam_rhosts was written by Thorsten Kukuk &lt;kukuk@thkukuk.de&gt;
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_rootok/Makefile.am b/modules/pam_rootok/Makefile.am
index 787218b4..c5b838f6 100644
--- a/modules/pam_rootok/Makefile.am
+++ b/modules/pam_rootok/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_rootok
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_rootok/Makefile.in b/modules/pam_rootok/Makefile.in
index d4422af6..64b6de13 100644
--- a/modules/pam_rootok/Makefile.in
+++ b/modules/pam_rootok/Makefile.in
@@ -433,6 +433,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -445,11 +446,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -481,12 +484,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -509,6 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -519,12 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -598,7 +608,8 @@ XMLS = README.xml pam_rootok.8.xml
dist_check_SCRIPTS = tst-pam_rootok
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_rootok/README.xml b/modules/pam_rootok/README.xml
index 6fb58cd0..58f77967 100644
--- a/modules/pam_rootok/README.xml
+++ b/modules/pam_rootok/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_rootok.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rootok.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_rootok-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_rootok.8.xml" xpointer='xpointer(id("pam_rootok-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_rootok/pam_rootok.8 b/modules/pam_rootok/pam_rootok.8
index 861a6a6b..5fc021f7 100644
--- a/modules/pam_rootok/pam_rootok.8
+++ b/modules/pam_rootok/pam_rootok.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_rootok
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_ROOTOK" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_ROOTOK" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -44,7 +44,7 @@ of the user but run with the authority of an enhanced effective\-UID\&. It is th
that is checked\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
diff --git a/modules/pam_rootok/pam_rootok.8.xml b/modules/pam_rootok/pam_rootok.8.xml
index 06457bf5..a79c073a 100644
--- a/modules/pam_rootok/pam_rootok.8.xml
+++ b/modules/pam_rootok/pam_rootok.8.xml
@@ -1,30 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_rootok">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_rootok">
<refmeta>
<refentrytitle>pam_rootok</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_rootok-name">
+ <refnamediv xml:id="pam_rootok-name">
<refname>pam_rootok</refname>
<refpurpose>Gain only root access</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_rootok-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_rootok-cmdsynopsis" sepchar=" ">
<command>pam_rootok.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_rootok-description">
+ <refsect1 xml:id="pam_rootok-description">
<title>DESCRIPTION</title>
@@ -38,12 +35,12 @@
</para>
</refsect1>
- <refsect1 id="pam_rootok-options">
+ <refsect1 xml:id="pam_rootok-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -54,7 +51,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_rootok-types">
+ <refsect1 xml:id="pam_rootok-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option>, <option>account</option> and
@@ -62,7 +59,7 @@
</para>
</refsect1>
- <refsect1 id='pam_rootok-return_values'>
+ <refsect1 xml:id="pam_rootok-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -77,7 +74,7 @@
<term>PAM_AUTH_ERR</term>
<listitem>
<para>
- The <emphasis>UID</emphasis> is <emphasis remap='B'>not</emphasis>
+ The <emphasis>UID</emphasis> is <emphasis remap="B">not</emphasis>
<emphasis>0</emphasis>.
</para>
</listitem>
@@ -85,7 +82,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_rootok-examples'>
+ <refsect1 xml:id="pam_rootok-examples">
<title>EXAMPLES</title>
<para>
In the case of the <citerefentry>
@@ -103,7 +100,7 @@ auth required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_rootok-see_also'>
+ <refsect1 xml:id="pam_rootok-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -121,11 +118,11 @@ auth required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_rootok-author'>
+ <refsect1 xml:id="pam_rootok-author">
<title>AUTHOR</title>
<para>
pam_rootok was written by Andrew G. Morgan, &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_rootok/pam_rootok.c b/modules/pam_rootok/pam_rootok.c
index dd374c53..9bc15abf 100644
--- a/modules/pam_rootok/pam_rootok.c
+++ b/modules/pam_rootok/pam_rootok.c
@@ -53,11 +53,10 @@ static int
PAM_FORMAT((printf, 2, 3))
log_callback (int type UNUSED, const char *fmt, ...)
{
- int audit_fd;
va_list ap;
#ifdef HAVE_LIBAUDIT
- audit_fd = audit_open();
+ int audit_fd = audit_open();
if (audit_fd >= 0) {
char *buf;
diff --git a/modules/pam_securetty/Makefile.am b/modules/pam_securetty/Makefile.am
index 8ea02d83..c695d413 100644
--- a/modules/pam_securetty/Makefile.am
+++ b/modules/pam_securetty/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_securetty
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_securetty/Makefile.in b/modules/pam_securetty/Makefile.in
index 0763989f..f207cf98 100644
--- a/modules/pam_securetty/Makefile.in
+++ b/modules/pam_securetty/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_securetty.8.xml
dist_check_SCRIPTS = tst-pam_securetty
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_securetty/README b/modules/pam_securetty/README
index 21764e43..86dbe348 100644
--- a/modules/pam_securetty/README
+++ b/modules/pam_securetty/README
@@ -7,7 +7,7 @@ DESCRIPTION
pam_securetty is a PAM module that allows root logins only if the user is
logging in on a "secure" tty, as defined by the listing in the securetty file.
pam_securetty checks at first, if /etc/securetty exists. If not and it was
-built with vendordir support, it will use <vendordir>/securetty. pam_securetty
+built with vendordir support, it will use %vendordir%/securetty. pam_securetty
also checks that the securetty files are plain files and not world writable. It
will also allow root logins on the tty specified with console= switch on the
kernel command line and on ttys from the /sys/class/tty/console/active.
diff --git a/modules/pam_securetty/README.xml b/modules/pam_securetty/README.xml
index a8c098a0..70176d75 100644
--- a/modules/pam_securetty/README.xml
+++ b/modules/pam_securetty/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_securetty.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_securetty.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_securetty-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_securetty.8.xml" xpointer='xpointer(id("pam_securetty-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_securetty/pam_securetty.8 b/modules/pam_securetty/pam_securetty.8
index a808aea4..ca90438d 100644
--- a/modules/pam_securetty/pam_securetty.8
+++ b/modules/pam_securetty/pam_securetty.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_securetty
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SECURETTY" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_SECURETTY" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -39,7 +39,7 @@ securetty
file\&. pam_securetty checks at first, if
/etc/securetty
exists\&. If not and it was built with vendordir support, it will use
-<vendordir>/securetty\&. pam_securetty also checks that the
+/securetty\&. pam_securetty also checks that the
securetty
files are plain files and not world writable\&. It will also allow root logins on the tty specified with
\fBconsole=\fR
@@ -57,12 +57,12 @@ authentication method before any
authentication methods\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBnoconsole\fR
+noconsole
.RS 4
Do not automatically allow root logins on the kernel console device, as specified on the kernel command line or by the sys file, if it is not also specified in the
securetty
diff --git a/modules/pam_securetty/pam_securetty.8.xml b/modules/pam_securetty/pam_securetty.8.xml
index e49d572b..9038f5b2 100644
--- a/modules/pam_securetty/pam_securetty.8.xml
+++ b/modules/pam_securetty/pam_securetty.8.xml
@@ -1,30 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_securetty">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_securetty">
<refmeta>
<refentrytitle>pam_securetty</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_securetty-name">
+ <refnamediv xml:id="pam_securetty-name">
<refname>pam_securetty</refname>
<refpurpose>Limit root login to special devices</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_securetty-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_securetty-cmdsynopsis" sepchar=" ">
<command>pam_securetty.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_securetty-description">
+ <refsect1 xml:id="pam_securetty-description">
<title>DESCRIPTION</title>
@@ -43,23 +40,23 @@
</para>
<para>
This module has no effect on non-root users and requires that the
- application fills in the <emphasis remap='B'>PAM_TTY</emphasis>
+ application fills in the <emphasis remap="B">PAM_TTY</emphasis>
item correctly.
</para>
<para>
For canonical usage, should be listed as a
- <emphasis remap='B'>required</emphasis> authentication method
- before any <emphasis remap='B'>sufficient</emphasis>
+ <emphasis remap="B">required</emphasis> authentication method
+ before any <emphasis remap="B">sufficient</emphasis>
authentication methods.
</para>
</refsect1>
- <refsect1 id="pam_securetty-options">
+ <refsect1 xml:id="pam_securetty-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -69,7 +66,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>noconsole</option>
+ noconsole
</term>
<listitem>
<para>
@@ -83,14 +80,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_securetty-types">
+ <refsect1 xml:id="pam_securetty-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>auth</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_securetty-return_values'>
+ <refsect1 xml:id="pam_securetty-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -164,7 +161,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_securetty-examples'>
+ <refsect1 xml:id="pam_securetty-examples">
<title>EXAMPLES</title>
<para>
<programlisting>
@@ -174,7 +171,7 @@ auth required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_securetty-see_also'>
+ <refsect1 xml:id="pam_securetty-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -192,11 +189,11 @@ auth required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_securetty-author'>
+ <refsect1 xml:id="pam_securetty-author">
<title>AUTHOR</title>
<para>
pam_securetty was written by Elliot Lee &lt;sopwith@cuc.edu&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_selinux/Makefile.am b/modules/pam_selinux/Makefile.am
index 9476ab33..fbb6de6d 100644
--- a/modules/pam_selinux/Makefile.am
+++ b/modules/pam_selinux/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_selinux
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
-I$(top_srcdir)/libpam_misc/include $(WARN_CFLAGS)
diff --git a/modules/pam_selinux/Makefile.in b/modules/pam_selinux/Makefile.in
index c58ce8e5..cad48d6c 100644
--- a/modules/pam_selinux/Makefile.in
+++ b/modules/pam_selinux/Makefile.in
@@ -440,6 +440,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -452,11 +453,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -488,12 +491,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -516,6 +521,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -526,12 +532,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -605,7 +615,8 @@ XMLS = README.xml pam_selinux.8.xml
dist_check_SCRIPTS = tst-pam_selinux
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
-I$(top_srcdir)/libpam_misc/include $(WARN_CFLAGS)
diff --git a/modules/pam_selinux/README.xml b/modules/pam_selinux/README.xml
index 7e1baf55..dc1b5697 100644
--- a/modules/pam_selinux/README.xml
+++ b/modules/pam_selinux/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_selinux.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_selinux.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_selinux-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_selinux.8.xml" xpointer='xpointer(id("pam_selinux-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_selinux/pam_selinux.8 b/modules/pam_selinux/pam_selinux.8
index 22a3d0a2..260bc477 100644
--- a/modules/pam_selinux/pam_selinux.8
+++ b/modules/pam_selinux/pam_selinux.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_selinux
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SELINUX" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_SELINUX" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -51,43 +51,43 @@ should be placed before them\&. When such a placement is not feasible,
could be used to temporary restore original security contexts\&.
.SH "OPTIONS"
.PP
-\fBopen\fR
+open
.RS 4
Only execute the open_session part of the module\&.
.RE
.PP
-\fBclose\fR
+close
.RS 4
Only execute the close_session part of the module\&.
.RE
.PP
-\fBrestore\fR
+restore
.RS 4
In open_session part of the module, temporarily restore the security contexts as they were before the previous call of the module\&. Another call of this module without the restore option will set up the new security contexts again\&.
.RE
.PP
-\fBnottys\fR
+nottys
.RS 4
Do not setup security context of the controlling terminal\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
Turn on debug messages via
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBverbose\fR
+verbose
.RS 4
Attempt to inform the user when security context is set\&.
.RE
.PP
-\fBselect_context\fR
+select_context
.RS 4
Attempt to ask the user for a custom security context role\&. If MLS is on, ask also for sensitivity level\&.
.RE
.PP
-\fBenv_params\fR
+env_params
.RS 4
Attempt to obtain a custom security context role from PAM environment\&. If MLS is on, obtain also sensitivity level\&. This option and the select_context option are mutually exclusive\&. The respective PAM environment variables are
\fISELINUX_ROLE_REQUESTED\fR,
@@ -95,7 +95,7 @@ Attempt to obtain a custom security context role from PAM environment\&. If MLS
\fISELINUX_USE_CURRENT_RANGE\fR\&. The first two variables are self describing and the last one if set to 1 makes the PAM module behave as if the use_current_range was specified on the command line of the module\&.
.RE
.PP
-\fBuse_current_range\fR
+use_current_range
.RS 4
Use the sensitivity level of the current process for the user context instead of the default level\&. Also suppresses asking of the sensitivity level from the user or obtaining it from PAM environment\&.
.RE
diff --git a/modules/pam_selinux/pam_selinux.8.xml b/modules/pam_selinux/pam_selinux.8.xml
index 28d465f5..3aa632cf 100644
--- a/modules/pam_selinux/pam_selinux.8.xml
+++ b/modules/pam_selinux/pam_selinux.8.xml
@@ -1,54 +1,51 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_selinux">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_selinux">
<refmeta>
<refentrytitle>pam_selinux</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_selinux-name">
+ <refnamediv xml:id="pam_selinux-name">
<refname>pam_selinux</refname>
<refpurpose>PAM module to set the default security context</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_selinux-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_selinux-cmdsynopsis" sepchar=" ">
<command>pam_selinux.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
open
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
close
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
restore
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
nottys
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
verbose
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
select_context
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
env_params
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
use_current_range
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_selinux-description">
+ <refsect1 xml:id="pam_selinux-description">
<title>DESCRIPTION</title>
<para>
pam_selinux is a PAM module that sets up the default SELinux security
@@ -79,12 +76,12 @@
</para>
</refsect1>
- <refsect1 id="pam_selinux-options">
+ <refsect1 xml:id="pam_selinux-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>open</option>
+ open
</term>
<listitem>
<para>
@@ -94,7 +91,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>close</option>
+ close
</term>
<listitem>
<para>
@@ -104,7 +101,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>restore</option>
+ restore
</term>
<listitem>
<para>
@@ -117,7 +114,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>nottys</option>
+ nottys
</term>
<listitem>
<para>
@@ -127,7 +124,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -140,7 +137,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>verbose</option>
+ verbose
</term>
<listitem>
<para>
@@ -150,7 +147,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>select_context</option>
+ select_context
</term>
<listitem>
<para>
@@ -161,7 +158,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>env_params</option>
+ env_params
</term>
<listitem>
<para>
@@ -178,7 +175,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_current_range</option>
+ use_current_range
</term>
<listitem>
<para>
@@ -191,14 +188,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_selinux-types">
+ <refsect1 xml:id="pam_selinux-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_selinux-return_values'>
+ <refsect1 xml:id="pam_selinux-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -236,7 +233,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_selinux-examples'>
+ <refsect1 xml:id="pam_selinux-examples">
<title>EXAMPLES</title>
<programlisting>
auth required pam_unix.so
@@ -245,7 +242,7 @@ session optional pam_selinux.so
</programlisting>
</refsect1>
- <refsect1 id='pam_selinux-see_also'>
+ <refsect1 xml:id="pam_selinux-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -266,11 +263,11 @@ session optional pam_selinux.so
</para>
</refsect1>
- <refsect1 id='pam_selinux-author'>
+ <refsect1 xml:id="pam_selinux-author">
<title>AUTHOR</title>
<para>
pam_selinux was written by Dan Walsh &lt;dwalsh@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_selinux/pam_selinux.c b/modules/pam_selinux/pam_selinux.c
index d8e10d8e..e52e0fc4 100644
--- a/modules/pam_selinux/pam_selinux.c
+++ b/modules/pam_selinux/pam_selinux.c
@@ -393,7 +393,6 @@ free_module_data(module_data_t *data)
freecon(data->prev_exec_context);
if (data->exec_context != data->default_user_context)
freecon(data->exec_context);
- memset(data, 0, sizeof(*data));
free(data);
}
@@ -553,7 +552,7 @@ compute_tty_context(const pam_handle_t *pamh, module_data_t *data)
}
pam_syslog(pamh, LOG_ERR, "Failed to get current context for %s: %m",
data->tty_path);
- return (security_getenforce() == 1) ? PAM_SESSION_ERR : PAM_SUCCESS;
+ return (security_getenforce() != 0) ? PAM_SESSION_ERR : PAM_SUCCESS;
}
tclass = string_to_security_class("chr_file");
@@ -563,7 +562,7 @@ compute_tty_context(const pam_handle_t *pamh, module_data_t *data)
data->prev_tty_context = NULL;
free(data->tty_path);
data->tty_path = NULL;
- return (security_getenforce() == 1) ? PAM_SESSION_ERR : PAM_SUCCESS;
+ return (security_getenforce() != 0) ? PAM_SESSION_ERR : PAM_SUCCESS;
}
if (security_compute_relabel(data->exec_context, data->prev_tty_context,
@@ -575,7 +574,7 @@ compute_tty_context(const pam_handle_t *pamh, module_data_t *data)
data->prev_tty_context = NULL;
free(data->tty_path);
data->tty_path = NULL;
- return (security_getenforce() == 1) ? PAM_SESSION_ERR : PAM_SUCCESS;
+ return (security_getenforce() != 0) ? PAM_SESSION_ERR : PAM_SUCCESS;
}
return PAM_SUCCESS;
@@ -606,7 +605,7 @@ restore_context(const pam_handle_t *pamh, const module_data_t *data, int debug)
data->prev_exec_context ? data->prev_exec_context : "");
err |= set_exec_context(pamh, data->prev_exec_context);
- if (err && security_getenforce() == 1)
+ if (err && security_getenforce() != 0)
return PAM_SESSION_ERR;
return PAM_SUCCESS;
@@ -658,7 +657,7 @@ set_context(pam_handle_t *pamh, const module_data_t *data,
}
#endif
- if (err && security_getenforce() == 1)
+ if (err && security_getenforce() != 0)
return PAM_SESSION_ERR;
return PAM_SUCCESS;
@@ -717,7 +716,7 @@ create_context(pam_handle_t *pamh, int argc, const char **argv,
if (!data->exec_context) {
free_module_data(data);
- return (security_getenforce() == 1) ? PAM_SESSION_ERR : PAM_SUCCESS;
+ return (security_getenforce() != 0) ? PAM_SESSION_ERR : PAM_SUCCESS;
}
if (ttys && (i = compute_tty_context(pamh, data)) != PAM_SUCCESS) {
diff --git a/modules/pam_sepermit/Makefile.am b/modules/pam_sepermit/Makefile.am
index 18a89b60..6e7e96e5 100644
--- a/modules/pam_sepermit/Makefile.am
+++ b/modules/pam_sepermit/Makefile.am
@@ -13,15 +13,18 @@ dist_man_MANS = pam_sepermit.8 sepermit.conf.5
endif
XMLS = README.xml pam_sepermit.8.xml sepermit.conf.5.xml
dist_check_SCRIPTS = tst-pam_sepermit
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
sepermitlockdir = ${localstatedir}/run/sepermit
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
-I$(top_srcdir)/libpam_misc/include \
- -D SEPERMIT_CONF_FILE=\"$(SCONFIGDIR)/sepermit.conf\" \
-D SEPERMIT_LOCKDIR=\"$(sepermitlockdir)\" $(WARN_CFLAGS)
pam_sepermit_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBSELINUX@
@@ -33,6 +36,9 @@ endif
dist_secureconf_DATA = sepermit.conf
securelib_LTLIBRARIES = pam_sepermit.la
+check_PROGRAMS = tst-pam_sepermit-retval
+tst_pam_sepermit_retval_LDADD = $(top_builddir)/libpam/libpam.la
+
install-data-local:
mkdir -p $(DESTDIR)$(sepermitlockdir)
diff --git a/modules/pam_sepermit/Makefile.in b/modules/pam_sepermit/Makefile.in
index 3d2ba129..4fb5cbf7 100644
--- a/modules/pam_sepermit/Makefile.in
+++ b/modules/pam_sepermit/Makefile.in
@@ -95,6 +95,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
+check_PROGRAMS = tst-pam_sepermit-retval$(EXEEXT)
subdir = modules/pam_sepermit
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
@@ -162,6 +163,10 @@ pam_sepermit_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(pam_sepermit_la_LDFLAGS) $(LDFLAGS) \
-o $@
+tst_pam_sepermit_retval_SOURCES = tst-pam_sepermit-retval.c
+tst_pam_sepermit_retval_OBJECTS = tst-pam_sepermit-retval.$(OBJEXT)
+tst_pam_sepermit_retval_DEPENDENCIES = \
+ $(top_builddir)/libpam/libpam.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -177,7 +182,8 @@ am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/pam_sepermit.Plo
+am__depfiles_remade = ./$(DEPDIR)/pam_sepermit.Plo \
+ ./$(DEPDIR)/tst-pam_sepermit-retval.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -197,8 +203,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = pam_sepermit.c
-DIST_SOURCES = pam_sepermit.c
+SOURCES = pam_sepermit.c tst-pam_sepermit-retval.c
+DIST_SOURCES = pam_sepermit.c tst-pam_sepermit-retval.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -436,6 +442,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -448,11 +455,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -484,12 +493,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -512,6 +523,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -522,12 +534,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -599,13 +615,13 @@ EXTRA_DIST = $(XMLS)
@HAVE_DOC_TRUE@dist_man_MANS = pam_sepermit.8 sepermit.conf.5
XMLS = README.xml pam_sepermit.8.xml sepermit.conf.5.xml
dist_check_SCRIPTS = tst-pam_sepermit
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
sepermitlockdir = ${localstatedir}/run/sepermit
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
-I$(top_srcdir)/libpam_misc/include \
- -D SEPERMIT_CONF_FILE=\"$(SCONFIGDIR)/sepermit.conf\" \
-D SEPERMIT_LOCKDIR=\"$(sepermitlockdir)\" $(WARN_CFLAGS)
pam_sepermit_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBSELINUX@
@@ -613,6 +629,7 @@ pam_sepermit_la_LDFLAGS = -no-undefined -avoid-version -module \
$(am__append_1)
dist_secureconf_DATA = sepermit.conf
securelib_LTLIBRARIES = pam_sepermit.la
+tst_pam_sepermit_retval_LDADD = $(top_builddir)/libpam/libpam.la
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
@@ -648,6 +665,15 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \
@@ -686,6 +712,10 @@ clean-securelibLTLIBRARIES:
pam_sepermit.la: $(pam_sepermit_la_OBJECTS) $(pam_sepermit_la_DEPENDENCIES) $(EXTRA_pam_sepermit_la_DEPENDENCIES)
$(AM_V_CCLD)$(pam_sepermit_la_LINK) -rpath $(securelibdir) $(pam_sepermit_la_OBJECTS) $(pam_sepermit_la_LIBADD) $(LIBS)
+tst-pam_sepermit-retval$(EXEEXT): $(tst_pam_sepermit_retval_OBJECTS) $(tst_pam_sepermit_retval_DEPENDENCIES) $(EXTRA_tst_pam_sepermit_retval_DEPENDENCIES)
+ @rm -f tst-pam_sepermit-retval$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tst_pam_sepermit_retval_OBJECTS) $(tst_pam_sepermit_retval_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -693,6 +723,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_sepermit.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_sepermit-retval.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@@ -1006,7 +1037,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
fi; \
$$success || exit 1
-check-TESTS: $(dist_check_SCRIPTS)
+check-TESTS: $(check_PROGRAMS) $(dist_check_SCRIPTS)
@list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@@ -1016,7 +1047,7 @@ check-TESTS: $(dist_check_SCRIPTS)
log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
exit $$?;
-recheck: all $(dist_check_SCRIPTS)
+recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS)
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@set +e; $(am__set_TESTS_bases); \
bases=`for i in $$bases; do echo $$i; done \
@@ -1034,6 +1065,13 @@ tst-pam_sepermit.log: tst-pam_sepermit
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+tst-pam_sepermit-retval.log: tst-pam_sepermit-retval$(EXEEXT)
+ @p='tst-pam_sepermit-retval$(EXEEXT)'; \
+ b='tst-pam_sepermit-retval'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
.test.log:
@p='$<'; \
$(am__set_b); \
@@ -1083,7 +1121,8 @@ distdir-am: $(DISTFILES)
fi; \
done
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+ $(dist_check_SCRIPTS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA)
@@ -1128,11 +1167,12 @@ maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \
- mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-securelibLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/pam_sepermit.Plo
+ -rm -f ./$(DEPDIR)/tst-pam_sepermit-retval.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1180,6 +1220,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/pam_sepermit.Plo
+ -rm -f ./$(DEPDIR)/tst-pam_sepermit-retval.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1204,7 +1245,7 @@ uninstall-man: uninstall-man5 uninstall-man8
.MAKE: check-am install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
- check-am clean clean-generic clean-libtool \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
clean-securelibLTLIBRARIES cscopelist-am ctags ctags-am \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
diff --git a/modules/pam_sepermit/README b/modules/pam_sepermit/README
index cd697bb9..b91424e6 100644
--- a/modules/pam_sepermit/README
+++ b/modules/pam_sepermit/README
@@ -23,6 +23,9 @@ disabled and pam_sepermit will return PAM_IGNORE.
See sepermit.conf(5) for details.
+If there is no explicitly specified configuration file and /etc/security/
+sepermit.conf does not exist, %vendordir%/security/sepermit.conf is used.
+
OPTIONS
debug
diff --git a/modules/pam_sepermit/README.xml b/modules/pam_sepermit/README.xml
index bb65951c..a8d31d8c 100644
--- a/modules/pam_sepermit/README.xml
+++ b/modules/pam_sepermit/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_sepermit.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sepermit.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_sepermit-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sepermit.8.xml" xpointer='xpointer(id("pam_sepermit-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_sepermit/pam_sepermit.8 b/modules/pam_sepermit/pam_sepermit.8
index fb82cb97..f47f4a8a 100644
--- a/modules/pam_sepermit/pam_sepermit.8
+++ b/modules/pam_sepermit/pam_sepermit.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_sepermit
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SEPERMIT" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_SEPERMIT" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -55,13 +55,13 @@ See
for details\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Turns on debugging via
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBconf=\fR\fB\fI/path/to/config/file\fR\fR
+conf=/path/to/config/file
.RS 4
Path to alternative config file overriding the default\&.
.RE
diff --git a/modules/pam_sepermit/pam_sepermit.8.xml b/modules/pam_sepermit/pam_sepermit.8.xml
index 30d9cc54..791d2bbe 100644
--- a/modules/pam_sepermit/pam_sepermit.8.xml
+++ b/modules/pam_sepermit/pam_sepermit.8.xml
@@ -1,33 +1,30 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_sepermit">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sepermit">
<refmeta>
<refentrytitle>pam_sepermit</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_sepermit-name">
+ <refnamediv xml:id="pam_sepermit-name">
<refname>pam_sepermit</refname>
<refpurpose>PAM module to allow/deny login depending on SELinux enforcement state</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_sepermit-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_sepermit-cmdsynopsis" sepchar=" ">
<command>pam_sepermit.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
conf=<replaceable>/path/to/config/file</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_sepermit-description">
+ <refsect1 xml:id="pam_sepermit-description">
<title>DESCRIPTION</title>
<para>
The pam_sepermit module allows or denies login depending on SELinux
@@ -54,15 +51,19 @@
<refentrytitle>sepermit.conf</refentrytitle><manvolnum>5</manvolnum>
</citerefentry> for details.
</para>
-
+ <para condition="with_vendordir">
+ If there is no explicitly specified configuration file and
+ <filename>/etc/security/sepermit.conf</filename> does not exist,
+ <filename>%vendordir%/security/sepermit.conf</filename> is used.
+ </para>
</refsect1>
- <refsect1 id="pam_sepermit-options">
+ <refsect1 xml:id="pam_sepermit-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -75,7 +76,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>conf=<replaceable>/path/to/config/file</replaceable></option>
+ conf=/path/to/config/file
</term>
<listitem>
<para>
@@ -86,7 +87,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_sepermit-types">
+ <refsect1 xml:id="pam_sepermit-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option> and <option>account</option>
@@ -94,7 +95,7 @@
</para>
</refsect1>
- <refsect1 id='pam_sepermit-return_values'>
+ <refsect1 xml:id="pam_sepermit-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -141,11 +142,11 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_sepermit-files">
+ <refsect1 xml:id="pam_sepermit-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/sepermit.conf</filename></term>
+ <term>/etc/security/sepermit.conf</term>
<listitem>
<para>Default configuration file</para>
</listitem>
@@ -153,7 +154,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_sepermit-examples'>
+ <refsect1 xml:id="pam_sepermit-examples">
<title>EXAMPLES</title>
<programlisting>
auth [success=done ignore=ignore default=bad] pam_sepermit.so
@@ -163,7 +164,7 @@ session required pam_permit.so
</programlisting>
</refsect1>
- <refsect1 id='pam_sepermit-see_also'>
+ <refsect1 xml:id="pam_sepermit-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -184,11 +185,11 @@ session required pam_permit.so
</para>
</refsect1>
- <refsect1 id='pam_sepermit-author'>
+ <refsect1 xml:id="pam_sepermit-author">
<title>AUTHOR</title>
<para>
pam_sepermit and this manual page were written by Tomas Mraz &lt;tmraz@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_sepermit/pam_sepermit.c b/modules/pam_sepermit/pam_sepermit.c
index f7d98d5b..5fbc8fdd 100644
--- a/modules/pam_sepermit/pam_sepermit.c
+++ b/modules/pam_sepermit/pam_sepermit.c
@@ -61,6 +61,12 @@
#include <selinux/selinux.h>
+#include "pam_inline.h"
+
+#define SEPERMIT_CONF_FILE (SCONFIGDIR "/sepermit.conf")
+#ifdef VENDOR_SCONFIGDIR
+# define SEPERMIT_VENDOR_CONF_FILE (VENDOR_SCONFIGDIR "/sepermit.conf");
+#endif
#define MODULE "pam_sepermit"
#define OPT_DELIM ":"
@@ -370,16 +376,31 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED,
const char *user = NULL;
char *seuser = NULL;
char *level = NULL;
- const char *cfgfile = SEPERMIT_CONF_FILE;
+ const char *cfgfile = NULL;
/* Parse arguments. */
for (i = 0; i < argc; i++) {
+ const char *str;
+
if (strcmp(argv[i], "debug") == 0) {
debug = 1;
+ } else if ((str = pam_str_skip_prefix(argv[i], "conf=")) != NULL) {
+ cfgfile = str;
+ } else {
+ pam_syslog(pamh, LOG_ERR, "unknown option: %s", argv[i]);
}
- if (strcmp(argv[i], "conf=") == 0) {
- cfgfile = argv[i] + 5;
- }
+ }
+
+ if (cfgfile == NULL) {
+#ifdef SEPERMIT_VENDOR_CONF_FILE
+ struct stat buffer;
+
+ cfgfile = SEPERMIT_CONF_FILE;
+ if (stat(cfgfile, &buffer) != 0 && errno == ENOENT)
+ cfgfile = SEPERMIT_VENDOR_CONF_FILE;
+#else
+ cfgfile = SEPERMIT_CONF_FILE;
+#endif
}
if (debug)
diff --git a/modules/pam_sepermit/sepermit.conf.5 b/modules/pam_sepermit/sepermit.conf.5
index b4b91c8d..e2b17368 100644
--- a/modules/pam_sepermit/sepermit.conf.5
+++ b/modules/pam_sepermit/sepermit.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: sepermit.conf
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "SEPERMIT\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "SEPERMIT\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -78,12 +78,12 @@ syntax\&.
.PP
The recognized options are:
.PP
-\fBexclusive\fR
+exclusive
.RS 4
Only single login session will be allowed for the user and the user\*(Aqs processes will be killed on logout\&.
.RE
.PP
-\fBignore\fR
+ignore
.RS 4
The module will never return PAM_SUCCESS status for the user\&. It will return PAM_IGNORE if SELinux is in the enforcing mode, and PAM_AUTH_ERR otherwise\&. It is useful if you want to support passwordless guest users and other confined users with passwords simultaneously\&.
.RE
diff --git a/modules/pam_sepermit/sepermit.conf.5.xml b/modules/pam_sepermit/sepermit.conf.5.xml
index 511480f6..ff924ce1 100644
--- a/modules/pam_sepermit/sepermit.conf.5.xml
+++ b/modules/pam_sepermit/sepermit.conf.5.xml
@@ -1,13 +1,10 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="sepermit.conf">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sepermit.conf">
<refmeta>
<refentrytitle>sepermit.conf</refentrytitle>
<manvolnum>5</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
<refnamediv>
@@ -15,7 +12,7 @@
<refpurpose>configuration file for the pam_sepermit module</refpurpose>
</refnamediv>
- <refsect1 id='sepermit.conf-description'>
+ <refsect1 xml:id="sepermit.conf-description">
<title>DESCRIPTION</title>
<para>
The lines of the configuration file have the following syntax:
@@ -24,7 +21,7 @@
<replaceable>&lt;user&gt;</replaceable>[:<replaceable>&lt;option&gt;</replaceable>:<replaceable>&lt;option&gt;</replaceable>...]
</para>
<para>
- The <emphasis remap='B'>user</emphasis> can be specified in the following manner:
+ The <emphasis remap="B">user</emphasis> can be specified in the following manner:
</para>
<itemizedlist>
<listitem>
@@ -34,13 +31,13 @@
</listitem>
<listitem>
<para>
- a groupname, with <emphasis remap='B'>@group</emphasis> syntax.
+ a groupname, with <emphasis remap="B">@group</emphasis> syntax.
This should not be confused with netgroups.
</para>
</listitem>
<listitem>
<para>
- a SELinux user name with <emphasis remap='B'>%seuser</emphasis> syntax.
+ a SELinux user name with <emphasis remap="B">%seuser</emphasis> syntax.
</para>
</listitem>
</itemizedlist>
@@ -51,7 +48,7 @@
<variablelist>
<varlistentry>
- <term><option>exclusive</option></term>
+ <term>exclusive</term>
<listitem>
<para>
Only single login session will be allowed for the user
@@ -60,7 +57,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>ignore</option></term>
+ <term>ignore</term>
<listitem>
<para>
The module will never return PAM_SUCCESS status for the user.
@@ -78,7 +75,7 @@
</para>
</refsect1>
- <refsect1 id="sepermit.conf-examples">
+ <refsect1 xml:id="sepermit.conf-examples">
<title>EXAMPLES</title>
<para>
These are some example lines which might be specified in
@@ -91,7 +88,7 @@
</programlisting>
</refsect1>
- <refsect1 id="sepermit.conf-see_also">
+ <refsect1 xml:id="sepermit.conf-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry><refentrytitle>pam_sepermit</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
@@ -101,10 +98,10 @@
</para>
</refsect1>
- <refsect1 id="sepermit.conf-author">
+ <refsect1 xml:id="sepermit.conf-author">
<title>AUTHOR</title>
<para>
pam_sepermit and this manual page were written by Tomas Mraz &lt;tmraz@redhat.com&gt;
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_sepermit/tst-pam_sepermit-retval.c b/modules/pam_sepermit/tst-pam_sepermit-retval.c
new file mode 100644
index 00000000..321bd6d1
--- /dev/null
+++ b/modules/pam_sepermit/tst-pam_sepermit-retval.c
@@ -0,0 +1,158 @@
+/*
+ * Check pam_sepermit return values and conf= option.
+ *
+ * Copyright (c) 2020-2022 Dmitry V. Levin <ldv@altlinux.org>
+ */
+
+#include "test_assert.h"
+
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <security/pam_appl.h>
+
+#define MODULE_NAME "pam_sepermit"
+#define TEST_NAME "tst-" MODULE_NAME "-retval"
+
+static const char service_file[] = TEST_NAME ".service";
+static const char missing_file[] = TEST_NAME ".missing";
+static const char config_file[] = TEST_NAME ".conf";
+static struct pam_conv conv;
+
+int
+main(void)
+{
+ pam_handle_t *pamh = NULL;
+ FILE *fp;
+ char cwd[PATH_MAX];
+
+ ASSERT_NE(NULL, getcwd(cwd, sizeof(cwd)));
+
+ /* PAM_USER_UNKNOWN */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0,
+ fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so\n"
+ "account required %s/.libs/%s.so\n"
+ "password required %s/.libs/%s.so\n"
+ "session required %s/.libs/%s.so\n",
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_USER_UNKNOWN, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_USER_UNKNOWN, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ ASSERT_NE(NULL, fp = fopen(config_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "nosuchuser:ignore\n"));
+ ASSERT_EQ(0, fclose(fp));
+
+ /*
+ * conf= specifies an existing file,
+ * PAM_IGNORE -> PAM_PERM_DENIED
+ */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0,
+ fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so conf=%s\n"
+ "account required %s/.libs/%s.so conf=%s\n"
+ "password required %s/.libs/%s.so conf=%s\n"
+ "session required %s/.libs/%s.so conf=%s\n",
+ cwd, MODULE_NAME, config_file,
+ cwd, MODULE_NAME, config_file,
+ cwd, MODULE_NAME, config_file,
+ cwd, MODULE_NAME, config_file));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "root", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_PERM_DENIED, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ /*
+ * conf= specifies an existing file,
+ * PAM_IGNORE -> PAM_SUCCESS
+ */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0,
+ fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so conf=%s\n"
+ "auth required %s/../pam_permit/.libs/pam_permit.so\n"
+ "account required %s/.libs/%s.so conf=%s\n"
+ "account required %s/../pam_permit/.libs/pam_permit.so\n"
+ "password required %s/.libs/%s.so conf=%s\n"
+ "password required %s/../pam_permit/.libs/pam_permit.so\n"
+ "session required %s/.libs/%s.so conf=%s\n"
+ "session required %s/../pam_permit/.libs/pam_permit.so\n",
+ cwd, MODULE_NAME, config_file, cwd,
+ cwd, MODULE_NAME, config_file, cwd,
+ cwd, MODULE_NAME, config_file, cwd,
+ cwd, MODULE_NAME, config_file, cwd));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "root", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_SUCCESS, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ /*
+ * conf= specifies a missing file,
+ * PAM_IGNORE -> PAM_PERM_DENIED
+ */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0,
+ fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so conf=%s\n"
+ "account required %s/.libs/%s.so conf=%s\n"
+ "password required %s/.libs/%s.so conf=%s\n"
+ "session required %s/.libs/%s.so conf=%s\n",
+ cwd, MODULE_NAME, missing_file,
+ cwd, MODULE_NAME, missing_file,
+ cwd, MODULE_NAME, missing_file,
+ cwd, MODULE_NAME, missing_file));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "root", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_SERVICE_ERR, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_SERVICE_ERR, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ /* cleanup */
+ ASSERT_EQ(0, unlink(config_file));
+ ASSERT_EQ(0, unlink(service_file));
+
+ return 0;
+}
diff --git a/modules/pam_setquota/Makefile.am b/modules/pam_setquota/Makefile.am
index b01a3288..1582e515 100644
--- a/modules/pam_setquota/Makefile.am
+++ b/modules/pam_setquota/Makefile.am
@@ -11,7 +11,11 @@ dist_check_SCRIPTS = tst-pam_setquota
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_setquota/Makefile.in b/modules/pam_setquota/Makefile.in
index f4f49f02..5e4375a9 100644
--- a/modules/pam_setquota/Makefile.in
+++ b/modules/pam_setquota/Makefile.in
@@ -424,6 +424,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -436,11 +437,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -472,12 +475,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -500,6 +505,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -510,12 +516,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -589,7 +599,8 @@ XMLS = README.xml pam_setquota.8.xml
dist_check_SCRIPTS = tst-pam_setquota
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_setquota/README.xml b/modules/pam_setquota/README.xml
index 4eeddecc..7f5e429d 100644
--- a/modules/pam_setquota/README.xml
+++ b/modules/pam_setquota/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_setquota.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_setquota.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_setquota-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_setquota.8.xml" xpointer='xpointer(//refsect1[@id = "pam_setquota-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_setquota.8.xml" xpointer='xpointer(id("pam_setquota-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_setquota/pam_setquota.8 b/modules/pam_setquota/pam_setquota.8
index f09ba960..2c95097c 100644
--- a/modules/pam_setquota/pam_setquota.8
+++ b/modules/pam_setquota/pam_setquota.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_setquota
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SETQUOTA" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_SETQUOTA" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -40,30 +40,30 @@ This makes quotas usable with central user databases, such as MySQL or LDAP\&.
.SH "OPTIONS"
.PP
.PP
-\fBfs=\fR\fB\fI/home\fR\fR
+fs=/home
.RS 4
The device file or mountpoint the policy applies to\&. Defaults to the filesystem containing the users home directory\&.
.RE
.PP
-\fBoverwrite=\fR\fB\fI0\fR\fR
+overwrite=0
.RS 4
Overwrite an existing quota\&. Note: Enabling this will remove the ability for the admin to manually configure different quotas for users for a filesystem with
\fBedquota\fR(8)\&. (Defaults to 0)
.RE
.PP
-\fBdebug=\fR\fB\fI0\fR\fR
+debug=0
.RS 4
Enable debugging\&. A value of 1 outputs the old and new quota on a device\&. A value of 2 also prints out the matched and found filesystems should
\fBfs\fR
be unset\&. (Defaults to 0)
.RE
.PP
-\fBstartuid=\fR\fB\fI1000\fR\fR
+startuid=1000
.RS 4
Describe the start of the UID range the policy is applied to\&. (Defaults to UID_MIN from login\&.defs or the uidmin value defined at compile\-time if UID_MIN is undefined\&.)
.RE
.PP
-\fBenduid=\fR\fB\fI0\fR\fR
+enduid=0
.RS 4
Describe the end of the UID range the policy is applied to\&. Setting
\fIenduid=0\fR
@@ -72,7 +72,7 @@ results in an open\-ended UID range (i\&.e\&. all uids greater than
are included)\&. (Defaults to 0)
.RE
.PP
-\fBbsoftlimit=\fR\fB\fI19000\fR\fR
+bsoftlimit=19000
.RS 4
Soft limit for disk quota blocks, as defined by
\fBquotactl\fR(2)\&. Note:
@@ -83,7 +83,7 @@ and
be set at the same time!
.RE
.PP
-\fBbhardlimit=\fR\fB\fI20000\fR\fR
+bhardlimit=20000
.RS 4
Hard limit for disk quota blocks, as defined by
\fBquotactl\fR(2)\&. Note:
@@ -94,7 +94,7 @@ and
be set at the same time!
.RE
.PP
-\fBisoftlimit=\fR\fB\fI3000\fR\fR
+isoftlimit=3000
.RS 4
Soft limit for inodes, as defined by
\fB quotactl\fR(2)\&. Note:
@@ -105,7 +105,7 @@ and
be set at the same time!
.RE
.PP
-\fBihardlimit=\fR\fB\fI4000\fR\fR
+ihardlimit=4000
.RS 4
Hard limit for inodes, as defined by
\fB quotactl\fR(2)\&. Note:
diff --git a/modules/pam_setquota/pam_setquota.8.xml b/modules/pam_setquota/pam_setquota.8.xml
index fe83c805..41644eeb 100644
--- a/modules/pam_setquota/pam_setquota.8.xml
+++ b/modules/pam_setquota/pam_setquota.8.xml
@@ -1,53 +1,51 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_setquota">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_setquota">
<refmeta>
<refentrytitle>pam_setquota</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_setquota-name">
+ <refnamediv xml:id="pam_setquota-name">
<refname>pam_setquota</refname>
<refpurpose>PAM module to set or modify disk quotas on session start</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_setquota-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_setquota-cmdsynopsis" sepchar=" ">
<command>pam_setquota.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
fs=<replaceable>/home</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
overwrite=<replaceable>0</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug=<replaceable>0</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
startuid=<replaceable>1000</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
enduid=<replaceable>0</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
bsoftlimit=<replaceable>19000</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
bhardlimit=<replaceable>20000</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
isoftlimit=<replaceable>3000</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
ihardlimit=<replaceable>4000</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_setquota-description">
+ <refsect1 xml:id="pam_setquota-description">
<title>DESCRIPTION</title>
@@ -60,14 +58,14 @@
</refsect1>
- <refsect1 id="pam_setquota-options">
+ <refsect1 xml:id="pam_setquota-options">
<title>OPTIONS</title>
<para>
<variablelist>
<varlistentry>
<term>
- <option>fs=<replaceable>/home</replaceable></option>
+ fs=/home
</term>
<listitem>
<para>
@@ -78,7 +76,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>overwrite=<replaceable>0</replaceable></option>
+ overwrite=0
</term>
<listitem>
<para>
@@ -91,7 +89,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>debug=<replaceable>0</replaceable></option>
+ debug=0
</term>
<listitem>
<para>
@@ -103,7 +101,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>startuid=<replaceable>1000</replaceable></option>
+ startuid=1000
</term>
<listitem>
<para>
@@ -115,7 +113,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>enduid=<replaceable>0</replaceable></option>
+ enduid=0
</term>
<listitem>
<para>
@@ -128,7 +126,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>bsoftlimit=<replaceable>19000</replaceable></option>
+ bsoftlimit=19000
</term>
<listitem>
<para>
@@ -142,7 +140,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>bhardlimit=<replaceable>20000</replaceable></option>
+ bhardlimit=20000
</term>
<listitem>
<para>
@@ -156,7 +154,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>isoftlimit=<replaceable>3000</replaceable></option>
+ isoftlimit=3000
</term>
<listitem>
<para>
@@ -169,7 +167,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>ihardlimit=<replaceable>4000</replaceable></option>
+ ihardlimit=4000
</term>
<listitem>
<para>
@@ -184,14 +182,14 @@
</para>
</refsect1>
- <refsect1 id="pam_setquota-types">
+ <refsect1 xml:id="pam_setquota-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> module type is provided.
</para>
</refsect1>
- <refsect1 id='pam_setquota-return_values'>
+ <refsect1 xml:id="pam_setquota-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -255,7 +253,7 @@
</para>
</refsect1>
- <refsect1 id='pam_setquota-examples'>
+ <refsect1 xml:id="pam_setquota-examples">
<title>EXAMPLES</title>
<para>
A single invocation of `pam_setquota` applies a specific policy to a UID
@@ -270,7 +268,7 @@
</para>
</refsect1>
- <refsect1 id='pam_setquota-see_also'>
+ <refsect1 xml:id="pam_setquota-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -285,7 +283,7 @@
</para>
</refsect1>
- <refsect1 id='pam_setquota-author'>
+ <refsect1 xml:id="pam_setquota-author">
<title>AUTHOR</title>
<para>
pam_setquota was originally written by
@@ -298,4 +296,4 @@
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_shells/Makefile.am b/modules/pam_shells/Makefile.am
index b91bada5..e44915f2 100644
--- a/modules/pam_shells/Makefile.am
+++ b/modules/pam_shells/Makefile.am
@@ -15,17 +15,21 @@ dist_check_SCRIPTS = tst-pam_shells
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
+ $(WARN_CFLAGS) $(ECONF_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
endif
securelib_LTLIBRARIES = pam_shells.la
-pam_shells_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_shells_la_LIBADD = $(top_builddir)/libpam/libpam.la $(ECONF_LIBS)
if ENABLE_REGENERATE_MAN
dist_noinst_DATA = README
diff --git a/modules/pam_shells/Makefile.in b/modules/pam_shells/Makefile.in
index c92648bc..3c236b33 100644
--- a/modules/pam_shells/Makefile.in
+++ b/modules/pam_shells/Makefile.in
@@ -148,7 +148,9 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)"
LTLIBRARIES = $(securelib_LTLIBRARIES)
-pam_shells_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+am__DEPENDENCIES_1 =
+pam_shells_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
+ $(am__DEPENDENCIES_1)
pam_shells_la_SOURCES = pam_shells.c
pam_shells_la_OBJECTS = pam_shells.lo
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -428,6 +430,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +443,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +481,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +511,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +522,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,13 +605,14 @@ XMLS = README.xml pam_shells.8.xml
dist_check_SCRIPTS = tst-pam_shells
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
+ $(WARN_CFLAGS) $(ECONF_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
securelib_LTLIBRARIES = pam_shells.la
-pam_shells_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_shells_la_LIBADD = $(top_builddir)/libpam/libpam.la $(ECONF_LIBS)
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
diff --git a/modules/pam_shells/README b/modules/pam_shells/README
index e09dd205..bde6667c 100644
--- a/modules/pam_shells/README
+++ b/modules/pam_shells/README
@@ -7,7 +7,11 @@ DESCRIPTION
pam_shells is a PAM module that only allows access to the system if the user's
shell is listed in /etc/shells.
-It also checks if /etc/shells is a plain file and not world writable.
+If this file does not exist, entries are taken from files %vendordir%/shells,
+%vendordir%/shells.d/* and /etc/shells.d/* in that order.
+
+It also checks if needed files (e.g. /etc/shells) are plain files and not world
+writable.
OPTIONS
diff --git a/modules/pam_shells/README.xml b/modules/pam_shells/README.xml
index 154b97b5..c4da1a06 100644
--- a/modules/pam_shells/README.xml
+++ b/modules/pam_shells/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_shells.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_shells.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_shells-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_shells.8.xml" xpointer='xpointer(id("pam_shells-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_shells.8.xml" xpointer='xpointer(id("pam_shells-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_shells.8.xml" xpointer='xpointer(id("pam_shells-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_shells.8.xml" xpointer='xpointer(id("pam_shells-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_shells.8.xml" xpointer='xpointer(id("pam_shells-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_shells/pam_shells.8 b/modules/pam_shells/pam_shells.8
index 4e519d17..af3dc668 100644
--- a/modules/pam_shells/pam_shells.8
+++ b/modules/pam_shells/pam_shells.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_shells
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SHELLS" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_SHELLS" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -37,9 +37,8 @@ pam_shells \- PAM module to check for valid login shell
pam_shells is a PAM module that only allows access to the system if the user\*(Aqs shell is listed in
/etc/shells\&.
.PP
-It also checks if
-/etc/shells
-is a plain file and not world writable\&.
+It also checks if needed files (e\&.g\&.
+/etc/shells) are plain files and not world writable\&.
.SH "OPTIONS"
.PP
This module does not recognise any options\&.
diff --git a/modules/pam_shells/pam_shells.8.xml b/modules/pam_shells/pam_shells.8.xml
index 15f47671..b9f90e94 100644
--- a/modules/pam_shells/pam_shells.8.xml
+++ b/modules/pam_shells/pam_shells.8.xml
@@ -1,27 +1,24 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_shells">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_shells">
<refmeta>
<refentrytitle>pam_shells</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_shells-name">
+ <refnamediv xml:id="pam_shells-name">
<refname>pam_shells</refname>
<refpurpose>PAM module to check for valid login shell</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_shells-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_shells-cmdsynopsis" sepchar=" ">
<command>pam_shells.so</command>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_shells-description">
+ <refsect1 xml:id="pam_shells-description">
<title>DESCRIPTION</title>
@@ -29,19 +26,27 @@
pam_shells is a PAM module that only allows access to the
system if the user's shell is listed in <filename>/etc/shells</filename>.
</para>
+
+ <para condition="with_vendordir_and_with_econf">
+ If this file does not exist, entries are taken from files
+ <filename>%vendordir%/shells</filename>,
+ <filename>%vendordir%/shells.d/*</filename> and
+ <filename>/etc/shells.d/*</filename> in that order.
+ </para>
+
<para>
- It also checks if <filename>/etc/shells</filename> is a plain
- file and not world writable.
+ It also checks if needed files (e.g. <filename>/etc/shells</filename>) are plain
+ files and not world writable.
</para>
</refsect1>
- <refsect1 id="pam_shells-options">
+ <refsect1 xml:id="pam_shells-options">
<title>OPTIONS</title>
<para> This module does not recognise any options.</para>
</refsect1>
- <refsect1 id="pam_shells-types">
+ <refsect1 xml:id="pam_shells-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option> and <option>account</option>
@@ -49,7 +54,7 @@
</para>
</refsect1>
- <refsect1 id='pam_shells-return_values'>
+ <refsect1 xml:id="pam_shells-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -80,7 +85,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_shells-examples'>
+ <refsect1 xml:id="pam_shells-examples">
<title>EXAMPLES</title>
<para>
<programlisting>
@@ -89,7 +94,7 @@ auth required pam_shells.so
</para>
</refsect1>
- <refsect1 id='pam_shells-see_also'>
+ <refsect1 xml:id="pam_shells-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -107,11 +112,11 @@ auth required pam_shells.so
</para>
</refsect1>
- <refsect1 id='pam_shells-author'>
+ <refsect1 xml:id="pam_shells-author">
<title>AUTHOR</title>
<para>
pam_shells was written by Erik Troan &lt;ewt@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_shells/pam_shells.c b/modules/pam_shells/pam_shells.c
index dc8f4878..abebdd0c 100644
--- a/modules/pam_shells/pam_shells.c
+++ b/modules/pam_shells/pam_shells.c
@@ -13,27 +13,47 @@
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdbool.h>
#include <sys/stat.h>
#include <syslog.h>
#include <unistd.h>
+#if defined (USE_ECONF) && defined (VENDORDIR)
+#include <libeconf.h>
+#endif
#include <security/pam_modules.h>
#include <security/pam_modutil.h>
#include <security/pam_ext.h>
#define SHELL_FILE "/etc/shells"
-
+#define SHELLS "shells"
+#define ETCDIR "/etc"
#define DEFAULT_SHELL "/bin/sh"
+static bool check_file(const char *filename, const void *pamh)
+{
+ struct stat sb;
+
+ if (stat(filename, &sb)) {
+ pam_syslog(pamh, LOG_ERR, "Cannot stat %s: %m", filename);
+ return false; /* must have /etc/shells */
+ }
+
+ if ((sb.st_mode & S_IWOTH) || !S_ISREG(sb.st_mode)) {
+ pam_syslog(pamh, LOG_ERR,
+ "%s is either world writable or not a normal file",
+ filename);
+ return false;
+ }
+ return true;
+}
+
static int perform_check(pam_handle_t *pamh)
{
int retval = PAM_AUTH_ERR;
const char *userName;
const char *userShell;
- char shellFileLine[256];
- struct stat sb;
struct passwd * pw;
- FILE * shellFile;
retval = pam_get_user(pamh, &userName, NULL);
if (retval != PAM_SUCCESS) {
@@ -48,18 +68,50 @@ static int perform_check(pam_handle_t *pamh)
if (userShell[0] == '\0')
userShell = DEFAULT_SHELL;
- if (stat(SHELL_FILE,&sb)) {
- pam_syslog(pamh, LOG_ERR, "Cannot stat %s: %m", SHELL_FILE);
- return PAM_AUTH_ERR; /* must have /etc/shells */
+#if defined (USE_ECONF) && defined (VENDORDIR)
+ size_t size = 0;
+ econf_err error;
+ char **keys;
+ econf_file *key_file;
+
+ error = econf_readDirsWithCallback(&key_file,
+ VENDORDIR,
+ ETCDIR,
+ SHELLS,
+ NULL,
+ "", /* key only */
+ "#", /* comment */
+ check_file, pamh);
+ if (error) {
+ pam_syslog(pamh, LOG_ERR,
+ "Cannot parse shell files: %s",
+ econf_errString(error));
+ return PAM_AUTH_ERR;
}
- if ((sb.st_mode & S_IWOTH) || !S_ISREG(sb.st_mode)) {
+ error = econf_getKeys(key_file, NULL, &size, &keys);
+ if (error) {
pam_syslog(pamh, LOG_ERR,
- "%s is either world writable or not a normal file",
- SHELL_FILE);
+ "Cannot evaluate entries in shell files: %s",
+ econf_errString(error));
+ econf_free (key_file);
return PAM_AUTH_ERR;
}
+ retval = 1;
+ for (size_t i = 0; i < size; i++) {
+ retval = strcmp(keys[i], userShell);
+ if (!retval)
+ break;
+ }
+ econf_free (key_file);
+#else
+ char shellFileLine[256];
+ FILE * shellFile;
+
+ if (!check_file(SHELL_FILE, pamh))
+ return PAM_AUTH_ERR;
+
shellFile = fopen(SHELL_FILE,"r");
if (shellFile == NULL) { /* Check that we opened it successfully */
pam_syslog(pamh, LOG_ERR, "Error opening %s: %m", SHELL_FILE);
@@ -75,6 +127,7 @@ static int perform_check(pam_handle_t *pamh)
}
fclose(shellFile);
+ #endif
if (retval) {
return PAM_AUTH_ERR;
diff --git a/modules/pam_stress/Makefile.am b/modules/pam_stress/Makefile.am
index e964fcc4..ee78daef 100644
--- a/modules/pam_stress/Makefile.am
+++ b/modules/pam_stress/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_stress
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_stress/Makefile.in b/modules/pam_stress/Makefile.in
index 297f39d2..4788de54 100644
--- a/modules/pam_stress/Makefile.in
+++ b/modules/pam_stress/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_stress.8.xml
dist_check_SCRIPTS = tst-pam_stress
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_stress/README.xml b/modules/pam_stress/README.xml
index 6f94685e..cc7a1848 100644
--- a/modules/pam_stress/README.xml
+++ b/modules/pam_stress/README.xml
@@ -1,31 +1,19 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamstress SYSTEM "pam_stress.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_stress.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_stress-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_stress.8.xml" xpointer='xpointer(id("pam_stress-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_stress.8.xml" xpointer='xpointer(//refsect1[@id = "pam_stress-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_stress.8.xml" xpointer='xpointer(id("pam_stress-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_stress.8.xml" xpointer='xpointer(//refsect1[@id = "pam_stress-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_stress.8.xml" xpointer='xpointer(id("pam_stress-options")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_stress/pam_stress.8 b/modules/pam_stress/pam_stress.8
index 2fdb9397..a522b7fb 100644
--- a/modules/pam_stress/pam_stress.8
+++ b/modules/pam_stress/pam_stress.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_stress
.\" Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_STRESS" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_STRESS" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -37,52 +37,52 @@ pam_stress \- The stress\-testing PAM module
The pam_stress PAM module is mainly intended to give the impression of failing as a fully functioning module might\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Put lots of information in syslog\&. *NOTE* this option writes passwords to syslog, so don\*(Aqt use anything sensitive when testing\&.
.RE
.PP
-\fBno_warn\fR
+no_warn
.RS 4
Do not give warnings about things (otherwise warnings are issued via the conversation function)
.RE
.PP
-\fBuse_first_pass\fR
+use_first_pass
.RS 4
Do not prompt for a password, for pam_sm_authentication function just use item PAM_AUTHTOK\&.
.RE
.PP
-\fBtry_first_pass\fR
+try_first_pass
.RS 4
Do not prompt for a password unless there has been no previous authentication token (item PAM_AUTHTOK is NULL)
.RE
.PP
-\fBrootok\fR
+rootok
.RS 4
This is intended for the pam_sm_chauthtok function and it instructs this function to permit root to change the user\*(Aqs password without entering the old password\&.
.RE
.PP
-\fBexpired\fR
+expired
.RS 4
An argument intended for the account and chauthtok module parts\&. It instructs the module to act as if the user\*(Aqs password has expired
.RE
.PP
-\fBfail_1\fR
+fail_1
.RS 4
This instructs the module to make its first function fail\&.
.RE
.PP
-\fBfail_2\fR
+fail_2
.RS 4
This instructs the module to make its second function (if there is one) fail\&.
.RE
.PP
-\fBprelim\fR
+prelim
.RS 4
For pam_sm_chauthtok, means fail on PAM_PRELIM_CHECK\&.
.RE
.PP
-\fBrequired\fR
+required
.RS 4
For pam_sm_chauthtok, means fail if the user hasn\*(Aqt already been authenticated by this module\&. (See stress_new_pwd data string in the NOTES\&.)
.RE
diff --git a/modules/pam_stress/pam_stress.8.xml b/modules/pam_stress/pam_stress.8.xml
index 98888b1c..617b7aae 100644
--- a/modules/pam_stress/pam_stress.8.xml
+++ b/modules/pam_stress/pam_stress.8.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_stress'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_stress">
<refmeta>
<refentrytitle>pam_stress</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_stress-name'>
+ <refnamediv xml:id="pam_stress-name">
<refname>pam_stress</refname>
<refpurpose>The stress-testing PAM module</refpurpose>
</refnamediv>
@@ -18,42 +15,42 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_stress-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_stress-cmdsynopsis" sepchar=" ">
<command>pam_stress.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
no_warn
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
use_first_pass
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
try_first_pass
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
rootok
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
expired
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
fail_1
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
fail_2
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
prelim
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
required
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_stress-description">
+ <refsect1 xml:id="pam_stress-description">
<title>DESCRIPTION</title>
<para>
The pam_stress PAM module is mainly intended to give the impression of failing as a fully
@@ -61,13 +58,13 @@ functioning module might.
</para>
</refsect1>
- <refsect1 id="pam_stress-options">
+ <refsect1 xml:id="pam_stress-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -79,7 +76,7 @@ functioning module might.
<varlistentry>
<term>
- <option>no_warn</option>
+ no_warn
</term>
<listitem>
<para>
@@ -91,7 +88,7 @@ functioning module might.
<varlistentry>
<term>
- <option>use_first_pass</option>
+ use_first_pass
</term>
<listitem>
<para>
@@ -103,7 +100,7 @@ functioning module might.
<varlistentry>
<term>
- <option>try_first_pass</option>
+ try_first_pass
</term>
<listitem>
<para>
@@ -115,7 +112,7 @@ functioning module might.
<varlistentry>
<term>
- <option>rootok</option>
+ rootok
</term>
<listitem>
<para>
@@ -128,7 +125,7 @@ functioning module might.
<varlistentry>
<term>
- <option>expired</option>
+ expired
</term>
<listitem>
<para>
@@ -141,7 +138,7 @@ functioning module might.
<varlistentry>
<term>
- <option>fail_1</option>
+ fail_1
</term>
<listitem>
<para>
@@ -152,7 +149,7 @@ functioning module might.
<varlistentry>
<term>
- <option>fail_2</option>
+ fail_2
</term>
<listitem>
<para>
@@ -164,7 +161,7 @@ functioning module might.
<varlistentry>
<term>
- <option>prelim</option>
+ prelim
</term>
<listitem>
<para>
@@ -175,7 +172,7 @@ functioning module might.
<varlistentry>
<term>
- <option>required</option>
+ required
</term>
<listitem>
<para>
@@ -189,7 +186,7 @@ functioning module might.
</variablelist>
</refsect1>
- <refsect1 id="pam_stress-types">
+ <refsect1 xml:id="pam_stress-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>auth</option>, <option>account</option>,
@@ -197,7 +194,7 @@ functioning module might.
</para>
</refsect1>
- <refsect1 id="pam_stress-return_values">
+ <refsect1 xml:id="pam_stress-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -307,7 +304,7 @@ functioning module might.
</variablelist>
</refsect1>
- <refsect1 id='pam_stress-notes'>
+ <refsect1 xml:id="pam_stress-notes">
<title>NOTES</title>
<para>
This module uses the stress_new_pwd data string which tells
@@ -316,7 +313,7 @@ functioning module might.
</para>
</refsect1>
- <refsect1 id='pam_stress-examples'>
+ <refsect1 xml:id="pam_stress-examples">
<title>EXAMPLES</title>
<programlisting>
#%PAM-1.0
@@ -329,7 +326,7 @@ session required pam_stress.so
</programlisting>
</refsect1>
- <refsect1 id="pam_stress-see_also">
+ <refsect1 xml:id="pam_stress-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -344,7 +341,7 @@ session required pam_stress.so
</para>
</refsect1>
- <refsect1 id="pam_stress-authors">
+ <refsect1 xml:id="pam_stress-authors">
<title>AUTHORS</title>
<para>
The pam_stress PAM module was developed by
@@ -353,4 +350,4 @@ session required pam_stress.so
Lucas Ramage &lt;ramage.lucas@protonmail.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_stress/pam_stress.c b/modules/pam_stress/pam_stress.c
index 6c7a6251..b2c55586 100644
--- a/modules/pam_stress/pam_stress.c
+++ b/modules/pam_stress/pam_stress.c
@@ -18,6 +18,7 @@
#include <security/pam_modules.h>
#include <security/_pam_macros.h>
#include <security/pam_ext.h>
+#include "pam_inline.h"
/* ---------- */
@@ -240,7 +241,7 @@ int pam_sm_authenticate(pam_handle_t *pamh, int flags,
/* try to set password item */
retval = pam_set_item(pamh,PAM_AUTHTOK,pass);
- _pam_overwrite(pass); /* clean up local copy of password */
+ pam_overwrite_string(pass); /* clean up local copy of password */
free(pass);
pass = NULL;
if (retval != PAM_SUCCESS) {
@@ -432,7 +433,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
return retval;
}
retval = pam_set_item(pamh, PAM_OLDAUTHTOK, pass);
- _pam_overwrite(pass);
+ pam_overwrite_string(pass);
free(pass);
pass = NULL;
if (retval != PAM_SUCCESS) {
@@ -495,7 +496,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
if (strcmp(resp[i-2].resp,resp[i-1].resp)) {
/* passwords are not the same; forget and return error */
- _pam_drop_reply(resp, i);
+ pam_drop_response(resp, i);
if (!(flags & PAM_SILENT) && !(ctrl & PAM_ST_NO_WARN)) {
pmsg[0] = &msg[0];
@@ -505,7 +506,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
resp = NULL;
(void) converse(pamh,1,pmsg,&resp);
if (resp) {
- _pam_drop_reply(resp, 1);
+ pam_drop_response(resp, 1);
}
}
return PAM_AUTHTOK_ERR;
@@ -523,7 +524,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
retval = PAM_SYSTEM_ERR;
}
- _pam_drop_reply(resp, i); /* clean up the passwords */
+ pam_drop_response(resp, i); /* clean up the passwords */
} else {
pam_syslog(pamh, LOG_ERR,
"pam_sm_chauthtok: this must be a Linux-PAM error");
diff --git a/modules/pam_succeed_if/Makefile.am b/modules/pam_succeed_if/Makefile.am
index cb54f843..f79a4b03 100644
--- a/modules/pam_succeed_if/Makefile.am
+++ b/modules/pam_succeed_if/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_succeed_if
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_succeed_if/Makefile.in b/modules/pam_succeed_if/Makefile.in
index 995b6db5..5028fe07 100644
--- a/modules/pam_succeed_if/Makefile.in
+++ b/modules/pam_succeed_if/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_succeed_if.8.xml
dist_check_SCRIPTS = tst-pam_succeed_if
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_succeed_if/README.xml b/modules/pam_succeed_if/README.xml
index c52f00a0..1c174af0 100644
--- a/modules/pam_succeed_if/README.xml
+++ b/modules/pam_succeed_if/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_succeed_if.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_succeed_if.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_succeed_if-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_succeed_if.8.xml" xpointer='xpointer(id("pam_succeed_if-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_succeed_if/pam_succeed_if.8 b/modules/pam_succeed_if/pam_succeed_if.8
index 8b33c62a..e61af0cb 100644
--- a/modules/pam_succeed_if/pam_succeed_if.8
+++ b/modules/pam_succeed_if/pam_succeed_if.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_succeed_if
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
-.\" Manual: Linux-PAM
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
+.\" Manual: Linux-PAM Manual
.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_SUCCEED_IF" "8" "09/03/2021" "Linux-PAM" "Linux\-PAM"
+.TH "PAM_SUCCEED_IF" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -42,32 +42,32 @@ The module should be given one or more conditions as module arguments, and authe
The following
\fIflag\fRs are supported:
.PP
-\fBdebug\fR
+debug
.RS 4
Turns on debugging messages sent to syslog\&.
.RE
.PP
-\fBuse_uid\fR
+use_uid
.RS 4
Evaluate conditions using the account of the user whose UID the application is running under instead of the user being authenticated\&.
.RE
.PP
-\fBquiet\fR
+quiet
.RS 4
Don\*(Aqt log failure or success to the system log\&.
.RE
.PP
-\fBquiet_fail\fR
+quiet_fail
.RS 4
Don\*(Aqt log failure to the system log\&.
.RE
.PP
-\fBquiet_success\fR
+quiet_success
.RS 4
Don\*(Aqt log success to the system log\&.
.RE
.PP
-\fBaudit\fR
+audit
.RS 4
Log unknown users to the system log\&.
.RE
@@ -86,82 +86,82 @@ Available fields are
and
\fIservice\fR:
.PP
-\fBfield < number\fR
+field < number
.RS 4
Field has a value numerically less than number\&.
.RE
.PP
-\fBfield <= number\fR
+field <= number
.RS 4
Field has a value numerically less than or equal to number\&.
.RE
.PP
-\fBfield eq number\fR
+field eq number
.RS 4
Field has a value numerically equal to number\&.
.RE
.PP
-\fBfield >= number\fR
+field >= number
.RS 4
Field has a value numerically greater than or equal to number\&.
.RE
.PP
-\fBfield > number\fR
+field > number
.RS 4
Field has a value numerically greater than number\&.
.RE
.PP
-\fBfield ne number\fR
+field ne number
.RS 4
Field has a value numerically different from number\&.
.RE
.PP
-\fBfield = string\fR
+field = string
.RS 4
Field exactly matches the given string\&.
.RE
.PP
-\fBfield != string\fR
+field != string
.RS 4
Field does not match the given string\&.
.RE
.PP
-\fBfield =~ glob\fR
+field =~ glob
.RS 4
Field matches the given glob\&.
.RE
.PP
-\fBfield !~ glob\fR
+field !~ glob
.RS 4
Field does not match the given glob\&.
.RE
.PP
-\fBfield in item:item:\&.\&.\&.\fR
+field in item:item:\&.\&.\&.
.RS 4
Field is contained in the list of items separated by colons\&.
.RE
.PP
-\fBfield notin item:item:\&.\&.\&.\fR
+field notin item:item:\&.\&.\&.
.RS 4
Field is not contained in the list of items separated by colons\&.
.RE
.PP
-\fBuser ingroup group[:group:\&.\&.\&.\&.]\fR
+user ingroup group[:group:\&.\&.\&.\&.]
.RS 4
User is in given group(s)\&.
.RE
.PP
-\fBuser notingroup group[:group:\&.\&.\&.\&.]\fR
+user notingroup group[:group:\&.\&.\&.\&.]
.RS 4
User is not in given group(s)\&.
.RE
.PP
-\fBuser innetgr netgroup\fR
+user innetgr netgroup
.RS 4
(user,host) is in given netgroup\&.
.RE
.PP
-\fBuser notinnetgr group\fR
+user notinnetgr group
.RS 4
(user,host) is not in given netgroup\&.
.RE
diff --git a/modules/pam_succeed_if/pam_succeed_if.8.xml b/modules/pam_succeed_if/pam_succeed_if.8.xml
index 14d939a3..90fd1145 100644
--- a/modules/pam_succeed_if/pam_succeed_if.8.xml
+++ b/modules/pam_succeed_if/pam_succeed_if.8.xml
@@ -1,34 +1,30 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-
-<refentry id='pam_succeed_if'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_succeed_if">
<!-- Copyright 2003, 2004 Red Hat, Inc. -->
<!-- Written by Nalin Dahyabhai &lt;nalin@redhat.com&gt; -->
<refmeta>
<refentrytitle>pam_succeed_if</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='sectdesc'>Linux-PAM</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_succeed_if-name'>
+ <refnamediv xml:id="pam_succeed_if-name">
<refname>pam_succeed_if</refname>
<refpurpose>test account characteristics</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id='pam_succeed_if-cmdsynopsis'>
+ <cmdsynopsis xml:id="pam_succeed_if-cmdsynopsis" sepchar=" ">
<command>pam_succeed_if.so</command>
- <arg choice='opt' rep='repeat'><replaceable>flag</replaceable></arg>
- <arg choice='opt' rep='repeat'><replaceable>condition</replaceable></arg>
+ <arg choice="opt" rep="repeat"><replaceable>flag</replaceable></arg>
+ <arg choice="opt" rep="repeat"><replaceable>condition</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_succeed_if-description'>
+ <refsect1 xml:id="pam_succeed_if-description">
<title>DESCRIPTION</title>
<para>
pam_succeed_if.so is designed to succeed or fail authentication
@@ -43,7 +39,7 @@
</para>
</refsect1>
- <refsect1 id="pam_succeed_if-options">
+ <refsect1 xml:id="pam_succeed_if-options">
<title>OPTIONS</title>
<para>
The following <emphasis>flag</emphasis>s are supported:
@@ -51,13 +47,13 @@
<variablelist>
<varlistentry>
- <term><option>debug</option></term>
+ <term>debug</term>
<listitem>
<para>Turns on debugging messages sent to syslog.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>use_uid</option></term>
+ <term>use_uid</term>
<listitem>
<para>
Evaluate conditions using the account of the user whose UID
@@ -67,13 +63,13 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>quiet</option></term>
+ <term>quiet</term>
<listitem>
<para>Don't log failure or success to the system log.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>quiet_fail</option></term>
+ <term>quiet_fail</term>
<listitem>
<para>
Don't log failure to the system log.
@@ -81,7 +77,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>quiet_success</option></term>
+ <term>quiet_success</term>
<listitem>
<para>
Don't log success to the system log.
@@ -89,7 +85,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>audit</option></term>
+ <term>audit</term>
<listitem>
<para>
Log unknown users to the system log.
@@ -112,13 +108,13 @@
<variablelist>
<varlistentry>
- <term><option>field &lt; number</option></term>
+ <term>field &lt; number</term>
<listitem>
<para>Field has a value numerically less than number.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field &lt;= number</option></term>
+ <term>field &lt;= number</term>
<listitem>
<para>
Field has a value numerically less than or equal to number.
@@ -126,7 +122,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field eq number</option></term>
+ <term>field eq number</term>
<listitem>
<para>
Field has a value numerically equal to number.
@@ -134,7 +130,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field &gt;= number</option></term>
+ <term>field &gt;= number</term>
<listitem>
<para>
Field has a value numerically greater than or equal to number.
@@ -142,7 +138,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field &gt; number</option></term>
+ <term>field &gt; number</term>
<listitem>
<para>
Field has a value numerically greater than number.
@@ -150,7 +146,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field ne number</option></term>
+ <term>field ne number</term>
<listitem>
<para>
Field has a value numerically different from number.
@@ -158,7 +154,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field = string</option></term>
+ <term>field = string</term>
<listitem>
<para>
Field exactly matches the given string.
@@ -166,7 +162,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field != string</option></term>
+ <term>field != string</term>
<listitem>
<para>
Field does not match the given string.
@@ -174,49 +170,49 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field =~ glob</option></term>
+ <term>field =~ glob</term>
<listitem>
<para>Field matches the given glob.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field !~ glob</option></term>
+ <term>field !~ glob</term>
<listitem>
<para>Field does not match the given glob.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field in item:item:...</option></term>
+ <term>field in item:item:...</term>
<listitem>
<para>Field is contained in the list of items separated by colons.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>field notin item:item:...</option></term>
+ <term>field notin item:item:...</term>
<listitem>
<para>Field is not contained in the list of items separated by colons.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>user ingroup group[:group:....]</option></term>
+ <term>user ingroup group[:group:....]</term>
<listitem>
<para>User is in given group(s).</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>user notingroup group[:group:....]</option></term>
+ <term>user notingroup group[:group:....]</term>
<listitem>
<para>User is not in given group(s).</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>user innetgr netgroup</option></term>
+ <term>user innetgr netgroup</term>
<listitem>
<para>(user,host) is in given netgroup.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>user notinnetgr group</option></term>
+ <term>user notinnetgr group</term>
<listitem>
<para>(user,host) is not in given netgroup.</para>
</listitem>
@@ -224,7 +220,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_succeed_if-types">
+ <refsect1 xml:id="pam_succeed_if-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>account</option>, <option>auth</option>,
@@ -232,7 +228,7 @@
</para>
</refsect1>
- <refsect1 id='pam_succeed_if-return_values'>
+ <refsect1 xml:id="pam_succeed_if-return_values">
<title>RETURN VALUES</title>
<variablelist>
@@ -267,7 +263,7 @@
</refsect1>
- <refsect1 id='pam_succeed_if-examples'>
+ <refsect1 xml:id="pam_succeed_if-examples">
<title>EXAMPLES</title>
<para>
To emulate the behaviour of <emphasis>pam_wheel</emphasis>, except
@@ -288,7 +284,7 @@ type required othermodule.so arguments...
</programlisting>
</refsect1>
- <refsect1 id='pam_succeed_if-see_also'>
+ <refsect1 xml:id="pam_succeed_if-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -300,8 +296,8 @@ type required othermodule.so arguments...
</para>
</refsect1>
- <refsect1 id='pam_succeed_if-author'>
+ <refsect1 xml:id="pam_succeed_if-author">
<title>AUTHOR</title>
<para>Nalin Dahyabhai &lt;nalin@redhat.com&gt;</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_succeed_if/pam_succeed_if.c b/modules/pam_succeed_if/pam_succeed_if.c
index 7103ae30..5bf79c45 100644
--- a/modules/pam_succeed_if/pam_succeed_if.c
+++ b/modules/pam_succeed_if/pam_succeed_if.c
@@ -294,13 +294,6 @@ evaluate(pam_handle_t *pamh, int debug,
{
char buf[LINE_MAX] = "";
const char *attribute = left;
- /* Figure out what we're evaluating here, and convert it to a string.*/
- if ((strcasecmp(left, "login") == 0) ||
- (strcasecmp(left, "name") == 0) ||
- (strcasecmp(left, "user") == 0)) {
- snprintf(buf, sizeof(buf), "%s", user);
- left = buf;
- }
/* Get information about the user if needed. */
if ((*pwd == NULL) &&
((strcasecmp(left, "uid") == 0) ||
@@ -314,33 +307,34 @@ evaluate(pam_handle_t *pamh, int debug,
return PAM_USER_UNKNOWN;
}
}
- if (strcasecmp(left, "uid") == 0) {
+ /* Figure out what we're evaluating here, and convert it to a string.*/
+ if ((strcasecmp(left, "login") == 0) ||
+ (strcasecmp(left, "name") == 0) ||
+ (strcasecmp(left, "user") == 0)) {
+ snprintf(buf, sizeof(buf), "%s", user);
+ left = buf;
+ } else if (strcasecmp(left, "uid") == 0) {
snprintf(buf, sizeof(buf), "%lu", (unsigned long) (*pwd)->pw_uid);
left = buf;
- }
- if (strcasecmp(left, "gid") == 0) {
+ } else if (strcasecmp(left, "gid") == 0) {
snprintf(buf, sizeof(buf), "%lu", (unsigned long) (*pwd)->pw_gid);
left = buf;
- }
- if (strcasecmp(left, "shell") == 0) {
+ } else if (strcasecmp(left, "shell") == 0) {
snprintf(buf, sizeof(buf), "%s", (*pwd)->pw_shell);
left = buf;
- }
- if ((strcasecmp(left, "home") == 0) ||
+ } else if ((strcasecmp(left, "home") == 0) ||
(strcasecmp(left, "dir") == 0) ||
(strcasecmp(left, "homedir") == 0)) {
snprintf(buf, sizeof(buf), "%s", (*pwd)->pw_dir);
left = buf;
- }
- if (strcasecmp(left, "service") == 0) {
+ } else if (strcasecmp(left, "service") == 0) {
const void *svc;
if (pam_get_item(pamh, PAM_SERVICE, &svc) != PAM_SUCCESS ||
svc == NULL)
svc = "";
snprintf(buf, sizeof(buf), "%s", (const char *)svc);
left = buf;
- }
- if (strcasecmp(left, "ruser") == 0) {
+ } else if (strcasecmp(left, "ruser") == 0) {
const void *ruser;
if (pam_get_item(pamh, PAM_RUSER, &ruser) != PAM_SUCCESS ||
ruser == NULL)
@@ -348,16 +342,14 @@ evaluate(pam_handle_t *pamh, int debug,
snprintf(buf, sizeof(buf), "%s", (const char *)ruser);
left = buf;
user = buf;
- }
- if (strcasecmp(left, "rhost") == 0) {
+ } else if (strcasecmp(left, "rhost") == 0) {
const void *rhost;
if (pam_get_item(pamh, PAM_RHOST, &rhost) != PAM_SUCCESS ||
rhost == NULL)
rhost = "";
snprintf(buf, sizeof(buf), "%s", (const char *)rhost);
left = buf;
- }
- if (strcasecmp(left, "tty") == 0) {
+ } else if (strcasecmp(left, "tty") == 0) {
const void *tty;
if (pam_get_item(pamh, PAM_TTY, &tty) != PAM_SUCCESS ||
tty == NULL)
diff --git a/modules/pam_time/Makefile.am b/modules/pam_time/Makefile.am
index 833d51a6..a71e6781 100644
--- a/modules/pam_time/Makefile.am
+++ b/modules/pam_time/Makefile.am
@@ -12,13 +12,17 @@ dist_man_MANS = time.conf.5 pam_time.8
endif
XMLS = README.xml time.conf.5.xml pam_time.8.xml
dist_check_SCRIPTS = tst-pam_time
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DPAM_TIME_CONF=\"$(SCONFIGDIR)/time.conf\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
@@ -28,6 +32,9 @@ pam_time_la_LIBADD = $(top_builddir)/libpam/libpam.la
securelib_LTLIBRARIES = pam_time.la
dist_secureconf_DATA = time.conf
+check_PROGRAMS = tst-pam_time-retval
+tst_pam_time_retval_LDADD = $(top_builddir)/libpam/libpam.la
+
if ENABLE_REGENERATE_MAN
dist_noinst_DATA = README
-include $(top_srcdir)/Make.xml.rules
diff --git a/modules/pam_time/Makefile.in b/modules/pam_time/Makefile.in
index 08d02d62..a1f0467c 100644
--- a/modules/pam_time/Makefile.in
+++ b/modules/pam_time/Makefile.in
@@ -94,6 +94,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
+check_PROGRAMS = tst-pam_time-retval$(EXEEXT)
subdir = modules/pam_time
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
@@ -157,6 +158,9 @@ AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+tst_pam_time_retval_SOURCES = tst-pam_time-retval.c
+tst_pam_time_retval_OBJECTS = tst-pam_time-retval.$(OBJEXT)
+tst_pam_time_retval_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -172,7 +176,8 @@ am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/pam_time.Plo
+am__depfiles_remade = ./$(DEPDIR)/pam_time.Plo \
+ ./$(DEPDIR)/tst-pam_time-retval.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -192,8 +197,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = pam_time.c
-DIST_SOURCES = pam_time.c
+SOURCES = pam_time.c tst-pam_time-retval.c
+DIST_SOURCES = pam_time.c tst-pam_time-retval.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -431,6 +436,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -443,11 +449,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -479,12 +487,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -507,6 +517,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -517,12 +528,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -594,16 +609,18 @@ EXTRA_DIST = $(XMLS)
@HAVE_DOC_TRUE@dist_man_MANS = time.conf.5 pam_time.8
XMLS = README.xml time.conf.5.xml pam_time.8.xml
dist_check_SCRIPTS = tst-pam_time
-TESTS = $(dist_check_SCRIPTS)
+TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -DPAM_TIME_CONF=\"$(SCONFIGDIR)/time.conf\" $(WARN_CFLAGS)
+ $(WARN_CFLAGS)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
pam_time_la_LIBADD = $(top_builddir)/libpam/libpam.la
securelib_LTLIBRARIES = pam_time.la
dist_secureconf_DATA = time.conf
+tst_pam_time_retval_LDADD = $(top_builddir)/libpam/libpam.la
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
@@ -639,6 +656,15 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \
@@ -677,6 +703,10 @@ clean-securelibLTLIBRARIES:
pam_time.la: $(pam_time_la_OBJECTS) $(pam_time_la_DEPENDENCIES) $(EXTRA_pam_time_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) -rpath $(securelibdir) $(pam_time_la_OBJECTS) $(pam_time_la_LIBADD) $(LIBS)
+tst-pam_time-retval$(EXEEXT): $(tst_pam_time_retval_OBJECTS) $(tst_pam_time_retval_DEPENDENCIES) $(EXTRA_tst_pam_time_retval_DEPENDENCIES)
+ @rm -f tst-pam_time-retval$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tst_pam_time_retval_OBJECTS) $(tst_pam_time_retval_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -684,6 +714,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_time.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_time-retval.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@@ -997,7 +1028,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
fi; \
$$success || exit 1
-check-TESTS: $(dist_check_SCRIPTS)
+check-TESTS: $(check_PROGRAMS) $(dist_check_SCRIPTS)
@list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@@ -1007,7 +1038,7 @@ check-TESTS: $(dist_check_SCRIPTS)
log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
exit $$?;
-recheck: all $(dist_check_SCRIPTS)
+recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS)
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@set +e; $(am__set_TESTS_bases); \
bases=`for i in $$bases; do echo $$i; done \
@@ -1025,6 +1056,13 @@ tst-pam_time.log: tst-pam_time
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+tst-pam_time-retval.log: tst-pam_time-retval$(EXEEXT)
+ @p='tst-pam_time-retval$(EXEEXT)'; \
+ b='tst-pam_time-retval'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
.test.log:
@p='$<'; \
$(am__set_b); \
@@ -1074,7 +1112,8 @@ distdir-am: $(DISTFILES)
fi; \
done
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+ $(dist_check_SCRIPTS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA)
@@ -1119,11 +1158,12 @@ maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
-clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \
- mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-securelibLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/pam_time.Plo
+ -rm -f ./$(DEPDIR)/tst-pam_time-retval.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1171,6 +1211,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/pam_time.Plo
+ -rm -f ./$(DEPDIR)/tst-pam_time-retval.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1195,7 +1236,7 @@ uninstall-man: uninstall-man5 uninstall-man8
.MAKE: check-am install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
- check-am clean clean-generic clean-libtool \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
clean-securelibLTLIBRARIES cscopelist-am ctags ctags-am \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
diff --git a/modules/pam_time/README b/modules/pam_time/README
index 9b20847c..2fa4c164 100644
--- a/modules/pam_time/README
+++ b/modules/pam_time/README
@@ -14,6 +14,9 @@ from which they are making their request.
By default rules for time/port access are taken from config file /etc/security/
time.conf. An alternative file can be specified with the conffile option.
+If there is no explicitly specified configuration file and /etc/security/
+time.conf does not exist, %vendordir%/security/time.conf is used.
+
If Linux PAM is compiled with audit support the module will report when it
denies access.
diff --git a/modules/pam_time/README.xml b/modules/pam_time/README.xml
index 6c11eec1..8a2faa0b 100644
--- a/modules/pam_time/README.xml
+++ b/modules/pam_time/README.xml
@@ -1,34 +1,19 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamtime SYSTEM "pam_time.8.xml">
--->
-<!--
-<!ENTITY timeconf SYSTEM "time.conf.5.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_time.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_time-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_time.8.xml" xpointer='xpointer(id("pam_time-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_time.8.xml" xpointer='xpointer(//refsect1[@id = "pam_time-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_time.8.xml" xpointer='xpointer(id("pam_time-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="time.conf.5.xml" xpointer='xpointer(//refsect1[@id = "time.conf-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="time.conf.5.xml" xpointer='xpointer(id("time.conf-examples")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_time/pam_time.8 b/modules/pam_time/pam_time.8
index 28d84d75..48c7ffce 100644
--- a/modules/pam_time/pam_time.8
+++ b/modules/pam_time/pam_time.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_time
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_TIME" "8" "09/03/2021" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_TIME" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -44,18 +44,18 @@ option\&.
If Linux PAM is compiled with audit support the module will report when it denies access\&.
.SH "OPTIONS"
.PP
-\fBconffile=/path/to/time\&.conf\fR
+conffile=/path/to/time\&.conf
.RS 4
Indicate an alternative time\&.conf style configuration file to override the default\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
Some debug information is printed with
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBnoaudit\fR
+noaudit
.RS 4
Do not report logins at disallowed time to the audit subsystem\&.
.RE
diff --git a/modules/pam_time/pam_time.8.xml b/modules/pam_time/pam_time.8.xml
index 4708220c..1fa60a10 100644
--- a/modules/pam_time/pam_time.8.xml
+++ b/modules/pam_time/pam_time.8.xml
@@ -1,16 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-<refentry id='pam_time'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_time">
<refmeta>
<refentrytitle>pam_time</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='setdesc'>Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_time-name'>
+ <refnamediv xml:id="pam_time-name">
<refname>pam_time</refname>
<refpurpose>
PAM module for time control access
@@ -20,22 +17,22 @@
<!-- body begins here -->
<refsynopsisdiv>
- <cmdsynopsis id="pam_time-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_time-cmdsynopsis" sepchar=" ">
<command>pam_time.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
conffile=conf-file
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
noaudit
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_time-description">
+ <refsect1 xml:id="pam_time-description">
<title>DESCRIPTION</title>
<para>
The pam_time PAM module does not authenticate the user, but instead
@@ -51,19 +48,24 @@
<filename>/etc/security/time.conf</filename>.
An alternative file can be specified with the <emphasis>conffile</emphasis> option.
</para>
+ <para condition="with_vendordir">
+ If there is no explicitly specified configuration file and
+ <filename>/etc/security/time.conf</filename> does not exist,
+ <filename>%vendordir%/security/time.conf</filename> is used.
+ </para>
<para>
If Linux PAM is compiled with audit support the module will report
when it denies access.
</para>
</refsect1>
- <refsect1 id="pam_time-options">
+ <refsect1 xml:id="pam_time-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>conffile=/path/to/time.conf</option>
+ conffile=/path/to/time.conf
</term>
<listitem>
<para>
@@ -74,7 +76,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -86,7 +88,7 @@
<varlistentry>
<term>
- <option>noaudit</option>
+ noaudit
</term>
<listitem>
<para>
@@ -98,14 +100,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_time-types">
+ <refsect1 xml:id="pam_time-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>account</option> type is provided.
</para>
</refsect1>
- <refsect1 id="pam_time-return_values">
+ <refsect1 xml:id="pam_time-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -151,11 +153,11 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_time-files">
+ <refsect1 xml:id="pam_time-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/etc/security/time.conf</filename></term>
+ <term>/etc/security/time.conf</term>
<listitem>
<para>Default configuration file</para>
</listitem>
@@ -163,7 +165,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_time-examples'>
+ <refsect1 xml:id="pam_time-examples">
<title>EXAMPLES</title>
<programlisting>
#%PAM-1.0
@@ -174,7 +176,7 @@ login account required pam_time.so
</programlisting>
</refsect1>
- <refsect1 id="pam_time-see_also">
+ <refsect1 xml:id="pam_time-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -189,10 +191,10 @@ login account required pam_time.so
</para>
</refsect1>
- <refsect1 id="pam_time-authors">
+ <refsect1 xml:id="pam_time-authors">
<title>AUTHOR</title>
<para>
pam_time was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_time/pam_time.c b/modules/pam_time/pam_time.c
index 089ae22d..6b7adefc 100644
--- a/modules/pam_time/pam_time.c
+++ b/modules/pam_time/pam_time.c
@@ -33,6 +33,11 @@
#include <libaudit.h>
#endif
+#define PAM_TIME_CONF (SCONFIGDIR "/time.conf")
+#ifdef VENDOR_SCONFIGDIR
+#define VENDOR_PAM_TIME_CONF (VENDOR_SCONFIGDIR "/time.conf")
+#endif
+
#define PAM_TIME_BUFLEN 1000
#define FIELD_SEPARATOR ';' /* this is new as of .02 */
@@ -53,7 +58,7 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv, const char **
{
int ctrl = 0;
- *conffile = PAM_TIME_CONF;
+ *conffile = NULL;
/* step through arguments */
for (; argc-- > 0; ++argv) {
const char *str;
@@ -77,6 +82,20 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv, const char **
}
}
+ if (*conffile == NULL) {
+ *conffile = PAM_TIME_CONF;
+#ifdef VENDOR_PAM_TIME_CONF
+ /*
+ * Check whether PAM_TIME_CONF file is available.
+ * If it does not exist, fall back to VENDOR_PAM_TIME_CONF file.
+ */
+ struct stat buffer;
+ if (stat(*conffile, &buffer) != 0 && errno == ENOENT) {
+ *conffile = VENDOR_PAM_TIME_CONF;
+ }
+#endif
+ }
+
return ctrl;
}
@@ -88,7 +107,7 @@ shift_buf(char *mem, int from)
char *start = mem;
while ((*mem = mem[from]) != '\0')
++mem;
- memset(mem, '\0', PAM_TIME_BUFLEN - (mem - start));
+ pam_overwrite_n(mem, PAM_TIME_BUFLEN - (mem - start));
return mem;
}
@@ -149,7 +168,7 @@ read_field(const pam_handle_t *pamh, int fd, char **buf, int *from, int *state,
if (i < 0) {
pam_syslog(pamh, LOG_ERR, "error reading %s: %m", file);
close(fd);
- memset(*buf, 0, PAM_TIME_BUFLEN);
+ pam_overwrite_n(*buf, PAM_TIME_BUFLEN);
_pam_drop(*buf);
*state = STATE_EOF;
return -1;
@@ -168,7 +187,7 @@ read_field(const pam_handle_t *pamh, int fd, char **buf, int *from, int *state,
return -1;
}
- memset(to, '\0', PAM_TIME_BUFLEN - (to - *buf));
+ pam_overwrite_n(to, PAM_TIME_BUFLEN - (to - *buf));
to = *buf;
onspace = 1; /* delete any leading spaces */
diff --git a/modules/pam_time/time.conf.5 b/modules/pam_time/time.conf.5
index 2dda8bee..c68dfa74 100644
--- a/modules/pam_time/time.conf.5
+++ b/modules/pam_time/time.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: time.conf
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "TIME\&.CONF" "5" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "TIME\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_time/time.conf.5.xml b/modules/pam_time/time.conf.5.xml
index acbe2329..3fe263d5 100644
--- a/modules/pam_time/time.conf.5.xml
+++ b/modules/pam_time/time.conf.5.xml
@@ -1,13 +1,10 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="time.conf">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="time.conf">
<refmeta>
<refentrytitle>time.conf</refentrytitle>
<manvolnum>5</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
<refnamediv>
@@ -15,7 +12,7 @@
<refpurpose>configuration file for the pam_time module</refpurpose>
</refnamediv>
- <refsect1 id='time.conf-description'>
+ <refsect1 xml:id="time.conf-description">
<title>DESCRIPTION</title>
<para>
@@ -43,9 +40,9 @@
</para>
<para>
In words, each rule occupies a line, terminated with a newline
- or the beginning of a comment; a '<emphasis remap='B'>#</emphasis>'.
+ or the beginning of a comment; a '<emphasis remap="B">#</emphasis>'.
It contains four fields separated with semicolons,
- '<emphasis remap='B'>;</emphasis>'.
+ '<emphasis remap="B">;</emphasis>'.
</para>
<para>
@@ -107,7 +104,7 @@
</para>
</refsect1>
- <refsect1 id="time.conf-examples">
+ <refsect1 xml:id="time.conf-examples">
<title>EXAMPLES</title>
<para>
These are some example lines which might be specified in
@@ -131,7 +128,7 @@ games ; * ; !waster ; Wd0000-2400 | Wk1800-0800
</para>
</refsect1>
- <refsect1 id="time.conf-see_also">
+ <refsect1 xml:id="time.conf-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry><refentrytitle>pam_time</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
@@ -140,10 +137,10 @@ games ; * ; !waster ; Wd0000-2400 | Wk1800-0800
</para>
</refsect1>
- <refsect1 id="time.conf-author">
+ <refsect1 xml:id="time.conf-author">
<title>AUTHOR</title>
<para>
pam_time was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_time/tst-pam_time-retval.c b/modules/pam_time/tst-pam_time-retval.c
new file mode 100644
index 00000000..281ac80d
--- /dev/null
+++ b/modules/pam_time/tst-pam_time-retval.c
@@ -0,0 +1,107 @@
+/*
+ * Check pam_time return values.
+ *
+ * Copyright (c) 2020-2022 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2022 Stefan Schubert <schubi@suse.de>
+ */
+
+#include "test_assert.h"
+
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <security/pam_appl.h>
+
+#define MODULE_NAME "pam_time"
+#define TEST_NAME "tst-" MODULE_NAME "-retval"
+
+static const char service_file[] = TEST_NAME ".service";
+static const char config_file[] = TEST_NAME ".conf";
+static struct pam_conv conv;
+
+int
+main(void)
+{
+ pam_handle_t *pamh = NULL;
+ FILE *fp;
+ char cwd[PATH_MAX];
+
+ ASSERT_NE(NULL, getcwd(cwd, sizeof(cwd)));
+
+ /* PAM_USER_UNKNOWN */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0,
+ fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so\n"
+ "account required %s/.libs/%s.so\n"
+ "password required %s/.libs/%s.so\n"
+ "session required %s/.libs/%s.so\n",
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME,
+ cwd, MODULE_NAME));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_USER_UNKNOWN, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ ASSERT_NE(NULL, fp = fopen(config_file, "w"));
+ ASSERT_LT(0, fprintf(fp, "# only root can access %s\n"
+ "%s ; * ; !root ; !Al0000-2400\n",
+ service_file, service_file));
+ ASSERT_EQ(0, fclose(fp));
+
+ /* conffile= specifies an existing file */
+ ASSERT_NE(NULL, fp = fopen(service_file, "w"));
+ ASSERT_LT(0,
+ fprintf(fp, "#%%PAM-1.0\n"
+ "auth required %s/.libs/%s.so conffile=%s\n"
+ "account required %s/.libs/%s.so conffile=%s\n"
+ "password required %s/.libs/%s.so conffile=%s\n"
+ "session required %s/.libs/%s.so conffile=%s\n",
+ cwd, MODULE_NAME, config_file,
+ cwd, MODULE_NAME, config_file,
+ cwd, MODULE_NAME, config_file,
+ cwd, MODULE_NAME, config_file));
+ ASSERT_EQ(0, fclose(fp));
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "root", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ ASSERT_EQ(PAM_SUCCESS,
+ pam_start_confdir(service_file, "noone", &conv, ".", &pamh));
+ ASSERT_NE(NULL, pamh);
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_authenticate(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_setcred(pamh, 0));
+ ASSERT_EQ(PAM_PERM_DENIED, pam_acct_mgmt(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_chauthtok(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_open_session(pamh, 0));
+ ASSERT_EQ(PAM_MODULE_UNKNOWN, pam_close_session(pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end(pamh, 0));
+ pamh = NULL;
+
+ /* cleanup */
+ ASSERT_EQ(0, unlink(config_file));
+ ASSERT_EQ(0, unlink(service_file));
+
+ return 0;
+}
diff --git a/modules/pam_timestamp/Makefile.am b/modules/pam_timestamp/Makefile.am
index d290b85f..27d61237 100644
--- a/modules/pam_timestamp/Makefile.am
+++ b/modules/pam_timestamp/Makefile.am
@@ -16,15 +16,19 @@ dist_check_SCRIPTS = tst-pam_timestamp
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
noinst_HEADERS = hmacsha1.h sha1.h hmac_openssl_wrapper.h
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
+ $(LOGIND_CFLAGS) $(WARN_CFLAGS)
pam_timestamp_la_LDFLAGS = -no-undefined -avoid-version -module $(AM_LDFLAGS) $(CRYPTO_LIBS)
-pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la $(SYSTEMD_LIBS)
if HAVE_VERSIONING
pam_timestamp_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
endif
@@ -42,17 +46,14 @@ pam_timestamp_la_CFLAGS = $(AM_CFLAGS)
pam_timestamp_check_SOURCES = pam_timestamp_check.c
pam_timestamp_check_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@
-pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la
+pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la $(SYSTEMD_LIBS)
pam_timestamp_check_LDFLAGS = @EXE_LDFLAGS@
-if COND_USE_OPENSSL
-hmacfile_SOURCES = hmac_openssl_wrapper.c
-else
+if !COND_USE_OPENSSL
hmacfile_SOURCES = hmacfile.c hmacsha1.c sha1.c
-endif
hmacfile_LDADD = $(top_builddir)/libpam/libpam.la
-
check_PROGRAMS = hmacfile
+endif
if ENABLE_REGENERATE_MAN
dist_noinst_DATA = README
diff --git a/modules/pam_timestamp/Makefile.in b/modules/pam_timestamp/Makefile.in
index 440020b5..feffca8e 100644
--- a/modules/pam_timestamp/Makefile.in
+++ b/modules/pam_timestamp/Makefile.in
@@ -100,7 +100,7 @@ host_triplet = @host@
sbin_PROGRAMS = pam_timestamp_check$(EXEEXT)
@COND_USE_OPENSSL_TRUE@am__append_2 = hmac_openssl_wrapper.c
@COND_USE_OPENSSL_FALSE@am__append_3 = hmacsha1.c sha1.c
-check_PROGRAMS = hmacfile$(EXEEXT)
+@COND_USE_OPENSSL_FALSE@check_PROGRAMS = hmacfile$(EXEEXT)
subdir = modules/pam_timestamp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
@@ -158,7 +158,9 @@ am__uninstall_files_from_dir = { \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
LTLIBRARIES = $(securelib_LTLIBRARIES)
-pam_timestamp_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+am__DEPENDENCIES_1 =
+pam_timestamp_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
+ $(am__DEPENDENCIES_1)
am__pam_timestamp_la_SOURCES_DIST = pam_timestamp.c \
hmac_openssl_wrapper.c hmacsha1.c sha1.c
@COND_USE_OPENSSL_TRUE@am__objects_1 = pam_timestamp_la-hmac_openssl_wrapper.lo
@@ -175,18 +177,17 @@ pam_timestamp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(pam_timestamp_la_CFLAGS) $(CFLAGS) \
$(pam_timestamp_la_LDFLAGS) $(LDFLAGS) -o $@
-am__hmacfile_SOURCES_DIST = hmacfile.c hmacsha1.c sha1.c \
- hmac_openssl_wrapper.c
+am__hmacfile_SOURCES_DIST = hmacfile.c hmacsha1.c sha1.c
@COND_USE_OPENSSL_FALSE@am_hmacfile_OBJECTS = hmacfile.$(OBJEXT) \
@COND_USE_OPENSSL_FALSE@ hmacsha1.$(OBJEXT) sha1.$(OBJEXT)
-@COND_USE_OPENSSL_TRUE@am_hmacfile_OBJECTS = \
-@COND_USE_OPENSSL_TRUE@ hmac_openssl_wrapper.$(OBJEXT)
hmacfile_OBJECTS = $(am_hmacfile_OBJECTS)
-hmacfile_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+@COND_USE_OPENSSL_FALSE@hmacfile_DEPENDENCIES = \
+@COND_USE_OPENSSL_FALSE@ $(top_builddir)/libpam/libpam.la
am_pam_timestamp_check_OBJECTS = \
pam_timestamp_check-pam_timestamp_check.$(OBJEXT)
pam_timestamp_check_OBJECTS = $(am_pam_timestamp_check_OBJECTS)
-pam_timestamp_check_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+pam_timestamp_check_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
+ $(am__DEPENDENCIES_1)
pam_timestamp_check_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(pam_timestamp_check_CFLAGS) $(CFLAGS) \
@@ -206,8 +207,7 @@ am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/hmac_openssl_wrapper.Po \
- ./$(DEPDIR)/hmacfile.Po ./$(DEPDIR)/hmacsha1.Po \
+am__depfiles_remade = ./$(DEPDIR)/hmacfile.Po ./$(DEPDIR)/hmacsha1.Po \
./$(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Po \
./$(DEPDIR)/pam_timestamp_la-hmac_openssl_wrapper.Plo \
./$(DEPDIR)/pam_timestamp_la-hmacsha1.Plo \
@@ -473,6 +473,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -485,11 +486,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -521,12 +524,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -549,6 +554,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -559,12 +565,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -638,25 +648,25 @@ XMLS = README.xml pam_timestamp.8.xml pam_timestamp_check.8.xml
dist_check_SCRIPTS = tst-pam_timestamp
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
noinst_HEADERS = hmacsha1.h sha1.h hmac_openssl_wrapper.h
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
+ $(LOGIND_CFLAGS) $(WARN_CFLAGS)
pam_timestamp_la_LDFLAGS = -no-undefined -avoid-version -module \
$(AM_LDFLAGS) $(CRYPTO_LIBS) $(am__append_1)
-pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la $(SYSTEMD_LIBS)
securelib_LTLIBRARIES = pam_timestamp.la
pam_timestamp_la_SOURCES = pam_timestamp.c $(am__append_2) \
$(am__append_3)
pam_timestamp_la_CFLAGS = $(AM_CFLAGS)
pam_timestamp_check_SOURCES = pam_timestamp_check.c
pam_timestamp_check_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@
-pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la
+pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la $(SYSTEMD_LIBS)
pam_timestamp_check_LDFLAGS = @EXE_LDFLAGS@
@COND_USE_OPENSSL_FALSE@hmacfile_SOURCES = hmacfile.c hmacsha1.c sha1.c
-@COND_USE_OPENSSL_TRUE@hmacfile_SOURCES = hmac_openssl_wrapper.c
-hmacfile_LDADD = $(top_builddir)/libpam/libpam.la
+@COND_USE_OPENSSL_FALSE@hmacfile_LDADD = $(top_builddir)/libpam/libpam.la
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
@@ -802,7 +812,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac_openssl_wrapper.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmacfile.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmacsha1.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Po@am__quote@ # am--include-marker
@@ -1236,8 +1245,7 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
clean-sbinPROGRAMS clean-securelibLTLIBRARIES mostlyclean-am
distclean: distclean-am
- -rm -f ./$(DEPDIR)/hmac_openssl_wrapper.Po
- -rm -f ./$(DEPDIR)/hmacfile.Po
+ -rm -f ./$(DEPDIR)/hmacfile.Po
-rm -f ./$(DEPDIR)/hmacsha1.Po
-rm -f ./$(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Po
-rm -f ./$(DEPDIR)/pam_timestamp_la-hmac_openssl_wrapper.Plo
@@ -1290,8 +1298,7 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -f ./$(DEPDIR)/hmac_openssl_wrapper.Po
- -rm -f ./$(DEPDIR)/hmacfile.Po
+ -rm -f ./$(DEPDIR)/hmacfile.Po
-rm -f ./$(DEPDIR)/hmacsha1.Po
-rm -f ./$(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Po
-rm -f ./$(DEPDIR)/pam_timestamp_la-hmac_openssl_wrapper.Plo
diff --git a/modules/pam_timestamp/README.xml b/modules/pam_timestamp/README.xml
index 5b72deb1..fe01080b 100644
--- a/modules/pam_timestamp/README.xml
+++ b/modules/pam_timestamp/README.xml
@@ -1,46 +1,31 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_timestamp.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_timestamp.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_timestamp-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-notes"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-notes")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_timestamp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_timestamp-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_timestamp.8.xml" xpointer='xpointer(id("pam_timestamp-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_timestamp/hmac_openssl_wrapper.c b/modules/pam_timestamp/hmac_openssl_wrapper.c
index 926c2fb9..2549c1db 100644
--- a/modules/pam_timestamp/hmac_openssl_wrapper.c
+++ b/modules/pam_timestamp/hmac_openssl_wrapper.c
@@ -54,6 +54,7 @@
#include <security/pam_modutil.h>
#include "hmac_openssl_wrapper.h"
+#include "pam_inline.h"
#define LOGIN_DEFS "/etc/login.defs"
#define CRYPTO_KEY "HMAC_CRYPTO_ALGO"
@@ -144,7 +145,7 @@ read_file(pam_handle_t *pamh, int fd, char **text, size_t *text_length)
if (bytes_read < (size_t)st.st_size) {
pam_syslog(pamh, LOG_ERR, "Short read on key file");
- memset(tmp, 0, st.st_size);
+ pam_overwrite_n(tmp, st.st_size);
free(tmp);
return PAM_AUTH_ERR;
}
@@ -167,14 +168,14 @@ write_file(pam_handle_t *pamh, const char *file_name, char *text,
S_IRUSR | S_IWUSR);
if (fd == -1) {
pam_syslog(pamh, LOG_ERR, "Unable to open [%s]: %m", file_name);
- memset(text, 0, text_length);
+ pam_overwrite_n(text, text_length);
free(text);
return PAM_AUTH_ERR;
}
if (fchown(fd, owner, group) == -1) {
pam_syslog(pamh, LOG_ERR, "Unable to change ownership [%s]: %m", file_name);
- memset(text, 0, text_length);
+ pam_overwrite_n(text, text_length);
free(text);
close(fd);
return PAM_AUTH_ERR;
@@ -294,7 +295,7 @@ done:
free(hmac_message);
}
if (key != NULL) {
- memset(key, 0, key_length);
+ pam_overwrite_n(key, key_length);
free(key);
}
if (ctx != NULL) {
diff --git a/modules/pam_timestamp/hmacsha1.c b/modules/pam_timestamp/hmacsha1.c
index 45a3cac2..384ccde8 100644
--- a/modules/pam_timestamp/hmacsha1.c
+++ b/modules/pam_timestamp/hmacsha1.c
@@ -48,6 +48,7 @@
#include <unistd.h>
#include <syslog.h>
#include <security/pam_ext.h>
+#include "pam_inline.h"
#include "hmacsha1.h"
#include "sha1.h"
@@ -107,7 +108,7 @@ hmac_key_create(pam_handle_t *pamh, const char *filename, size_t key_size,
/* If we didn't get enough, stop here. */
if (count < key_size) {
pam_syslog(pamh, LOG_ERR, "Short read on random device");
- memset(key, 0, key_size);
+ pam_overwrite_n(key, key_size);
free(key);
close(keyfd);
return;
@@ -122,7 +123,7 @@ hmac_key_create(pam_handle_t *pamh, const char *filename, size_t key_size,
}
count += i;
}
- memset(key, 0, key_size);
+ pam_overwrite_n(key, key_size);
free(key);
close(keyfd);
}
@@ -180,7 +181,7 @@ hmac_key_read(pam_handle_t *pamh, const char *filename, size_t default_key_size,
/* Require that we got the expected amount of data. */
if (count < st.st_size) {
- memset(tmp, 0, st.st_size);
+ pam_overwrite_n(tmp, st.st_size);
free(tmp);
return;
}
@@ -204,7 +205,7 @@ hmac_sha1_generate(void **mac, size_t *mac_length,
const void *raw_key, size_t raw_key_size,
const void *text, size_t text_length)
{
- unsigned char key[MAXIMUM_KEY_SIZE], tmp_key[MAXIMUM_KEY_SIZE];
+ unsigned char key[MAXIMUM_KEY_SIZE] = {}, tmp_key[MAXIMUM_KEY_SIZE];
size_t maximum_key_size = SHA1_BLOCK_SIZE,
minimum_key_size = SHA1_OUTPUT_SIZE;
const unsigned char ipad = 0x36, opad = 0x5c;
@@ -223,7 +224,6 @@ hmac_sha1_generate(void **mac, size_t *mac_length,
/* If the key is too long, "compress" it, else copy it and pad it
* out with zero bytes. */
- memset(key, 0, sizeof(key));
if (raw_key_size > maximum_key_size) {
sha1_init(&sha1);
sha1_update(&sha1, raw_key, raw_key_size);
@@ -251,8 +251,8 @@ hmac_sha1_generate(void **mac, size_t *mac_length,
sha1_output(&sha1, outer);
/* We don't need any of the keys any more. */
- memset(key, 0, sizeof(key));
- memset(tmp_key, 0, sizeof(tmp_key));
+ pam_overwrite_array(key);
+ pam_overwrite_array(tmp_key);
/* Allocate space to store the output. */
*mac_length = sizeof(outer);
@@ -284,7 +284,7 @@ hmac_sha1_generate_file(pam_handle_t *pamh, void **mac, size_t *mac_length,
hmac_sha1_generate(mac, mac_length,
key, key_length,
text, text_length);
- memset(key, 0, key_length);
+ pam_overwrite_n(key, key_length);
free(key);
}
diff --git a/modules/pam_timestamp/pam_timestamp.8 b/modules/pam_timestamp/pam_timestamp.8
index cd8195dc..a7b7e1c3 100644
--- a/modules/pam_timestamp/pam_timestamp.8
+++ b/modules/pam_timestamp/pam_timestamp.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_timestamp
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_TIMESTAMP" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_TIMESTAMP" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -45,33 +45,28 @@ When an application opens a session using
directory for the user\&. When an application attempts to authenticate the user, a
\fIpam_timestamp\fR
will treat a sufficiently recent timestamp file as grounds for succeeding\&.
-.PP
-The default encryption hash is taken from the
-\fBHMAC_CRYPTO_ALGO\fR
-variable from
-\fI/etc/login\&.defs\fR\&.
.SH "OPTIONS"
.PP
-\fBtimestampdir=\fR\fB\fIdirectory\fR\fR
+timestampdir=directory
.RS 4
Specify an alternate directory where
\fIpam_timestamp\fR
creates timestamp files\&.
.RE
.PP
-\fBtimestamp_timeout=\fR\fB\fInumber\fR\fR
+timestamp_timeout=number
.RS 4
How long should
\fIpam_timestamp\fR
treat timestamp as valid after their last modification date (in seconds)\&. Default is 300 seconds\&.
.RE
.PP
-\fBverbose\fR
+verbose
.RS 4
Attempt to inform the user when access is granted\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
Turns on debugging messages sent to
\fBsyslog\fR(3)\&.
diff --git a/modules/pam_timestamp/pam_timestamp.8.xml b/modules/pam_timestamp/pam_timestamp.8.xml
index 83e5aea8..a763ad86 100644
--- a/modules/pam_timestamp/pam_timestamp.8.xml
+++ b/modules/pam_timestamp/pam_timestamp.8.xml
@@ -1,39 +1,36 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_timestamp">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_timestamp">
<refmeta>
<refentrytitle>pam_timestamp</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_timestamp-name">
+ <refnamediv xml:id="pam_timestamp-name">
<refname>pam_timestamp</refname>
<refpurpose>Authenticate using cached successful authentication attempts</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_timestamp-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_timestamp-cmdsynopsis" sepchar=" ">
<command>pam_timestamp.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
timestampdir=<replaceable>directory</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
timestamp_timeout=<replaceable>number</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
verbose
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_timestamp-description">
+ <refsect1 xml:id="pam_timestamp-description">
<title>DESCRIPTION</title>
@@ -52,18 +49,18 @@ file as grounds for succeeding.
</para>
<para condition="openssl_hmac">
The default encryption hash is taken from the
- <emphasis remap='B'>HMAC_CRYPTO_ALGO</emphasis> variable from
+ <emphasis remap="B">HMAC_CRYPTO_ALGO</emphasis> variable from
<emphasis>/etc/login.defs</emphasis>.
</para>
</refsect1>
- <refsect1 id="pam_timestamp-options">
+ <refsect1 xml:id="pam_timestamp-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>timestampdir=<replaceable>directory</replaceable></option>
+ timestampdir=directory
</term>
<listitem>
<para>
@@ -74,7 +71,7 @@ file as grounds for succeeding.
</varlistentry>
<varlistentry>
<term>
- <option>timestamp_timeout=<replaceable>number</replaceable></option>
+ timestamp_timeout=number
</term>
<listitem>
<para>
@@ -86,7 +83,7 @@ file as grounds for succeeding.
</varlistentry>
<varlistentry>
<term>
- <option>verbose</option>
+ verbose
</term>
<listitem>
<para>
@@ -96,7 +93,7 @@ file as grounds for succeeding.
</varlistentry>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -109,7 +106,7 @@ file as grounds for succeeding.
</variablelist>
</refsect1>
- <refsect1 id="pam_timestamp-types">
+ <refsect1 xml:id="pam_timestamp-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option> and <option>session</option>
@@ -117,7 +114,7 @@ file as grounds for succeeding.
</para>
</refsect1>
- <refsect1 id='pam_timestamp-return_values'>
+ <refsect1 xml:id="pam_timestamp-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -148,7 +145,7 @@ file as grounds for succeeding.
</variablelist>
</refsect1>
- <refsect1 id='pam_timestamp-notes'>
+ <refsect1 xml:id="pam_timestamp-notes">
<title>NOTES</title>
<para>
Users can get confused when they are not always asked for passwords when
@@ -157,7 +154,7 @@ noticing that it is not being asked for.
</para>
</refsect1>
- <refsect1 id='pam_timestamp-examples'>
+ <refsect1 xml:id="pam_timestamp-examples">
<title>EXAMPLES</title>
<programlisting>
auth sufficient pam_timestamp.so verbose
@@ -168,11 +165,11 @@ session optional pam_timestamp.so
</programlisting>
</refsect1>
- <refsect1 id="pam_timestamp-files">
+ <refsect1 xml:id="pam_timestamp-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/var/run/pam_timestamp/...</filename></term>
+ <term>/var/run/pam_timestamp/...</term>
<listitem>
<para>timestamp files and directories</para>
</listitem>
@@ -180,7 +177,7 @@ session optional pam_timestamp.so
</variablelist>
</refsect1>
- <refsect1 id='pam_timestamp-see_also'>
+ <refsect1 xml:id="pam_timestamp-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -198,11 +195,11 @@ session optional pam_timestamp.so
</para>
</refsect1>
- <refsect1 id='pam_timestamp-author'>
+ <refsect1 xml:id="pam_timestamp-author">
<title>AUTHOR</title>
<para>
pam_timestamp was written by Nalin Dahyabhai.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_timestamp/pam_timestamp.c b/modules/pam_timestamp/pam_timestamp.c
index 01dd1385..c5fa6dfc 100644
--- a/modules/pam_timestamp/pam_timestamp.c
+++ b/modules/pam_timestamp/pam_timestamp.c
@@ -53,7 +53,6 @@
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
-#include <utmp.h>
#include <syslog.h>
#include <paths.h>
#ifdef WITH_OPENSSL
@@ -62,6 +61,12 @@
#include "hmacsha1.h"
#endif /* WITH_OPENSSL */
+#ifdef USE_LOGIND
+#include <systemd/sd-login.h>
+#else
+#include <utmp.h>
+#endif
+
#include <security/pam_modules.h>
#include <security/_pam_macros.h>
#include <security/pam_ext.h>
@@ -90,7 +95,7 @@
static int
check_dir_perms(pam_handle_t *pamh, const char *tdir)
{
- char scratch[BUFLEN];
+ char scratch[BUFLEN] = {};
struct stat st;
int i;
/* Check that the directory is "safe". */
@@ -98,7 +103,6 @@ check_dir_perms(pam_handle_t *pamh, const char *tdir)
return PAM_AUTH_ERR;
}
/* Iterate over the path, checking intermediate directories. */
- memset(scratch, 0, sizeof(scratch));
for (i = 0; (tdir[i] != '\0') && (i < (int)sizeof(scratch)); i++) {
scratch[i] = tdir[i];
if ((scratch[i] == '/') || (tdir[i + 1] == '\0')) {
@@ -200,10 +204,26 @@ timestamp_good(time_t then, time_t now, time_t interval)
}
static int
-check_login_time(const char *ruser, time_t timestamp)
+check_login_time(
+#ifdef USE_LOGIND
+ uid_t uid,
+#else
+ const char *ruser,
+#endif
+ time_t timestamp)
{
- struct utmp utbuf, *ut;
time_t oldest_login = 0;
+#ifdef USE_LOGIND
+#define USEC_PER_SEC ((uint64_t) 1000000ULL)
+ uint64_t usec = 0;
+
+ if (sd_uid_get_login_time(uid, &usec) < 0) {
+ return PAM_SERVICE_ERR;
+ }
+
+ oldest_login = usec/USEC_PER_SEC;
+#else
+ struct utmp utbuf, *ut;
setutent();
while(
@@ -224,6 +244,7 @@ check_login_time(const char *ruser, time_t timestamp)
}
}
endutent();
+#endif
if(oldest_login == 0 || timestamp < oldest_login) {
return PAM_AUTH_ERR;
}
@@ -532,7 +553,15 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv)
close(fd);
return PAM_AUTH_ERR;
}
+#ifdef USE_LOGIND
+ struct passwd *pwd = pam_modutil_getpwnam(pamh, ruser);
+ if (pwd != NULL) {
+ return PAM_SERVICE_ERR;
+ }
+ if (check_login_time(pwd->pw_uid, then) != PAM_SUCCESS)
+#else
if (check_login_time(ruser, then) != PAM_SUCCESS)
+#endif
{
pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' is "
"older than oldest login, disallowing "
@@ -728,6 +757,9 @@ main(int argc, char **argv)
fd_set write_fds;
char path[BUFLEN];
struct stat st;
+#ifdef USE_LOGIND
+ uid_t uid;
+#endif
/* Check that there's nothing funny going on with stdio. */
if ((fstat(STDIN_FILENO, &st) == -1) ||
@@ -783,6 +815,9 @@ main(int argc, char **argv)
if (pwd == NULL) {
retval = 4;
}
+#ifdef USE_LOGIND
+ uid = pwd->pw_uid;
+#endif
/* Get the name of the target user. */
user = strdup(pwd->pw_name);
@@ -833,7 +868,11 @@ main(int argc, char **argv)
/* Check the timestamp. */
if (lstat(path, &st) != -1) {
/* Check oldest login against timestamp */
+#ifdef USE_LOGIND
+ if (check_login_time(uid, st.st_mtime) != PAM_SUCCESS) {
+#else
if (check_login_time(user, st.st_mtime) != PAM_SUCCESS) {
+#endif
retval = 7;
} else if (timestamp_good(st.st_mtime, time(NULL),
DEFAULT_TIMESTAMP_TIMEOUT) != PAM_SUCCESS) {
diff --git a/modules/pam_timestamp/pam_timestamp_check.8 b/modules/pam_timestamp/pam_timestamp_check.8
index a0373757..3425a369 100644
--- a/modules/pam_timestamp/pam_timestamp_check.8
+++ b/modules/pam_timestamp/pam_timestamp_check.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_timestamp_check
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_TIMESTAMP_CHECK" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_TIMESTAMP_CHECK" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -39,19 +39,19 @@ With no arguments
will check to see if the default timestamp is valid, or optionally remove it\&.
.SH "OPTIONS"
.PP
-\fB\-k\fR
+\-k
.RS 4
Instead of checking the validity of a timestamp, remove it\&. This is analogous to sudo\*(Aqs
\fI\-k\fR
option\&.
.RE
.PP
-\fB\-d\fR
+\-d
.RS 4
Instead of returning validity using an exit status, loop indefinitely, polling regularly and printing the status on standard output\&.
.RE
.PP
-\fB\fItarget_user\fR\fR
+target_user
.RS 4
By default
\fBpam_timestamp_check\fR
diff --git a/modules/pam_timestamp/pam_timestamp_check.8.xml b/modules/pam_timestamp/pam_timestamp_check.8.xml
index 3a65d7ef..f0c09560 100644
--- a/modules/pam_timestamp/pam_timestamp_check.8.xml
+++ b/modules/pam_timestamp/pam_timestamp_check.8.xml
@@ -1,36 +1,33 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_timestamp_check">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_timestamp_check">
<refmeta>
<refentrytitle>pam_timestamp_check</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_timestamp_check-name">
+ <refnamediv xml:id="pam_timestamp_check-name">
<refname>pam_timestamp_check</refname>
<refpurpose>Check to see if the default timestamp is valid</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_timestamp_check-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_timestamp_check-cmdsynopsis" sepchar=" ">
<command>pam_timestamp_check</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
-k
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
-d
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
<replaceable>target_user</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_timestamp_check-description">
+ <refsect1 xml:id="pam_timestamp_check-description">
<title>DESCRIPTION</title>
@@ -40,13 +37,13 @@ see if the default timestamp is valid, or optionally remove it.
</para>
</refsect1>
- <refsect1 id="pam_timestamp_check-options">
+ <refsect1 xml:id="pam_timestamp_check-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>-k</option>
+ -k
</term>
<listitem>
<para>
@@ -57,7 +54,7 @@ see if the default timestamp is valid, or optionally remove it.
</varlistentry>
<varlistentry>
<term>
- <option>-d</option>
+ -d
</term>
<listitem>
<para>
@@ -69,7 +66,7 @@ see if the default timestamp is valid, or optionally remove it.
</varlistentry>
<varlistentry>
<term>
- <option><replaceable>target_user</replaceable></option>
+ target_user
</term>
<listitem>
<para>
@@ -85,7 +82,7 @@ see if the default timestamp is valid, or optionally remove it.
</variablelist>
</refsect1>
- <refsect1 id='pam_timestamp_check-return_values'>
+ <refsect1 xml:id="pam_timestamp_check-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -147,7 +144,7 @@ see if the default timestamp is valid, or optionally remove it.
</variablelist>
</refsect1>
- <refsect1 id='pam_timestamp-notes'>
+ <refsect1 xml:id="pam_timestamp-notes">
<title>NOTES</title>
<para>
Users can get confused when they are not always asked for passwords when
@@ -156,7 +153,7 @@ noticing that it is not being asked for.
</para>
</refsect1>
- <refsect1 id='pam_timestamp-examples'>
+ <refsect1 xml:id="pam_timestamp-examples">
<title>EXAMPLES</title>
<programlisting>
auth sufficient pam_timestamp.so verbose
@@ -167,11 +164,11 @@ session optional pam_timestamp.so
</programlisting>
</refsect1>
- <refsect1 id="pam_timestamp-files">
+ <refsect1 xml:id="pam_timestamp-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>/var/run/sudo/...</filename></term>
+ <term>/var/run/sudo/...</term>
<listitem>
<para>timestamp files and directories</para>
</listitem>
@@ -179,7 +176,7 @@ session optional pam_timestamp.so
</variablelist>
</refsect1>
- <refsect1 id='pam_timestamp-see_also'>
+ <refsect1 xml:id="pam_timestamp-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -197,11 +194,11 @@ session optional pam_timestamp.so
</para>
</refsect1>
- <refsect1 id='pam_timestamp-author'>
+ <refsect1 xml:id="pam_timestamp-author">
<title>AUTHOR</title>
<para>
pam_timestamp was written by Nalin Dahyabhai.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_tty_audit/Makefile.in b/modules/pam_tty_audit/Makefile.in
index 124a811a..e3f556bf 100644
--- a/modules/pam_tty_audit/Makefile.in
+++ b/modules/pam_tty_audit/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/modules/pam_tty_audit/README.xml b/modules/pam_tty_audit/README.xml
index 4dad6bbe..95b851cb 100644
--- a/modules/pam_tty_audit/README.xml
+++ b/modules/pam_tty_audit/README.xml
@@ -1,41 +1,31 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd">
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tty_audit.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_tty_audit-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-notes"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-notes")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tty_audit.8.xml" xpointer='xpointer(id("pam_tty_audit-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_tty_audit/pam_tty_audit.8 b/modules/pam_tty_audit/pam_tty_audit.8
index 628cec46..ada11ae6 100644
--- a/modules/pam_tty_audit/pam_tty_audit.8
+++ b/modules/pam_tty_audit/pam_tty_audit.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_tty_audit
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_TTY_AUDIT" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_TTY_AUDIT" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -37,7 +37,7 @@ pam_tty_audit \- Enable or disable TTY auditing for specified users
The pam_tty_audit PAM module is used to enable or disable TTY auditing\&. By default, the kernel does not audit input on any TTY\&.
.SH "OPTIONS"
.PP
-\fBdisable=\fR\fB\fIpatterns\fR\fR
+disable=patterns
.RS 4
For each user matching
\fB\fIpatterns\fR\fR, disable TTY auditing\&. This overrides any previous
@@ -46,7 +46,7 @@ option matching the same user name on the command line\&. See NOTES for further
\fB\fIpatterns\fR\fR\&.
.RE
.PP
-\fBenable=\fR\fB\fIpatterns\fR\fR
+enable=patterns
.RS 4
For each user matching
\fB\fIpatterns\fR\fR, enable TTY auditing\&. This overrides any previous
@@ -55,7 +55,7 @@ option matching the same user name on the command line\&. See NOTES for further
\fB\fIpatterns\fR\fR\&.
.RE
.PP
-\fBopen_only\fR
+open_only
.RS 4
Set the TTY audit flag when opening the session, but do not restore it when closing the session\&. Using this option is necessary for some services that don\*(Aqt
\fBfork()\fR
@@ -63,7 +63,7 @@ to run the authenticated session, such as
\fBsudo\fR\&.
.RE
.PP
-\fBlog_passwd\fR
+log_passwd
.RS 4
Log keystrokes when ECHO mode is off but ICANON mode is active\&. This is the mode in which the tty is placed during password entry\&. By default, passwords are not logged\&. This option may not be available on older kernels (3\&.9?)\&.
.RE
diff --git a/modules/pam_tty_audit/pam_tty_audit.8.xml b/modules/pam_tty_audit/pam_tty_audit.8.xml
index 1c0ba5c4..b46bbf7b 100644
--- a/modules/pam_tty_audit/pam_tty_audit.8.xml
+++ b/modules/pam_tty_audit/pam_tty_audit.8.xml
@@ -1,33 +1,30 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_tty_audit">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_tty_audit">
<refmeta>
<refentrytitle>pam_tty_audit</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_tty_audit-name">
+ <refnamediv xml:id="pam_tty_audit-name">
<refname>pam_tty_audit</refname>
<refpurpose>Enable or disable TTY auditing for specified users</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_tty_audit-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_tty_audit-cmdsynopsis" sepchar=" ">
<command>pam_tty_audit.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
disable=<replaceable>patterns</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
enable=<replaceable>patterns</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_tty_audit-description">
+ <refsect1 xml:id="pam_tty_audit-description">
<title>DESCRIPTION</title>
<para>
The pam_tty_audit PAM module is used to enable or disable TTY auditing.
@@ -35,12 +32,12 @@
</para>
</refsect1>
- <refsect1 id="pam_tty_audit-options">
+ <refsect1 xml:id="pam_tty_audit-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>disable=<replaceable>patterns</replaceable></option>
+ disable=patterns
</term>
<listitem>
<para>
@@ -53,7 +50,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>enable=<replaceable>patterns</replaceable></option>
+ enable=patterns
</term>
<listitem>
<para>
@@ -66,7 +63,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>open_only</option>
+ open_only
</term>
<listitem>
<para>
@@ -79,7 +76,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>log_passwd</option>
+ log_passwd
</term>
<listitem>
<para>
@@ -93,14 +90,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_tty_audit-types">
+ <refsect1 xml:id="pam_tty_audit-types">
<title>MODULE TYPES PROVIDED</title>
<para>
- Only the <emphasis remap='B'>session</emphasis> type is supported.
+ Only the <emphasis remap="B">session</emphasis> type is supported.
</para>
</refsect1>
- <refsect1 id='pam_tty_audit-return_values'>
+ <refsect1 xml:id="pam_tty_audit-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -125,7 +122,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_tty_audit-notes'>
+ <refsect1 xml:id="pam_tty_audit-notes">
<title>NOTES</title>
<para>
When TTY auditing is enabled, it is inherited by all processes started by
@@ -158,7 +155,7 @@
</para>
</refsect1>
- <refsect1 id='pam_tty_audit-examples'>
+ <refsect1 xml:id="pam_tty_audit-examples">
<title>EXAMPLES</title>
<para>
Audit all administrative actions.
@@ -168,7 +165,7 @@ session required pam_tty_audit.so disable=* enable=root
</para>
</refsect1>
- <refsect1 id='pam_tty_audit-see_also'>
+ <refsect1 xml:id="pam_tty_audit-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -186,14 +183,14 @@ session required pam_tty_audit.so disable=* enable=root
</para>
</refsect1>
- <refsect1 id='pam_tty_audit-author'>
+ <refsect1 xml:id="pam_tty_audit-author">
<title>AUTHOR</title>
<para>
- pam_tty_audit was written by Miloslav Trma&ccaron;
+ pam_tty_audit was written by Miloslav Trmač
&lt;mitr@redhat.com&gt;.
The log_passwd option was added by Richard Guy Briggs
&lt;rgb@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_umask/Makefile.am b/modules/pam_umask/Makefile.am
index b8c506ef..1482a432 100644
--- a/modules/pam_umask/Makefile.am
+++ b/modules/pam_umask/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_umask
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_umask/Makefile.in b/modules/pam_umask/Makefile.in
index b4d72c99..08ad8c69 100644
--- a/modules/pam_umask/Makefile.in
+++ b/modules/pam_umask/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_umask.8.xml
dist_check_SCRIPTS = tst-pam_umask
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_umask/README.xml b/modules/pam_umask/README.xml
index 9afbe543..d2b82d10 100644
--- a/modules/pam_umask/README.xml
+++ b/modules/pam_umask/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_umask.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_umask.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_umask-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_umask.8.xml" xpointer='xpointer(id("pam_umask-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_umask.8.xml" xpointer='xpointer(id("pam_umask-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_umask.8.xml" xpointer='xpointer(id("pam_umask-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_umask.8.xml" xpointer='xpointer(id("pam_umask-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_umask.8.xml" xpointer='xpointer(id("pam_umask-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_umask/pam_umask.8 b/modules/pam_umask/pam_umask.8
index 73a609fe..741c316e 100644
--- a/modules/pam_umask/pam_umask.8
+++ b/modules/pam_umask/pam_umask.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_umask
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_UMASK" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_UMASK" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -86,27 +86,27 @@ The GECOS field is split on comma \*(Aq,\*(Aq characters\&. The module also in a
.SH "OPTIONS"
.PP
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBsilent\fR
+silent
.RS 4
Don\*(Aqt print informative messages\&.
.RE
.PP
-\fBusergroups\fR
+usergroups
.RS 4
If the user is not root and the username is the same as primary group name, the umask group bits are set to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007)\&.
.RE
.PP
-\fBnousergroups\fR
+nousergroups
.RS 4
This is the direct opposite of the usergroups option described above, which can be useful in case pam_umask has been compiled with usergroups enabled by default and you want to disable it at runtime\&.
.RE
.PP
-\fBumask=\fR\fB\fImask\fR\fR
+umask=mask
.RS 4
Sets the calling process\*(Aqs file mode creation mask (umask) to
\fBmask\fR
diff --git a/modules/pam_umask/pam_umask.8.xml b/modules/pam_umask/pam_umask.8.xml
index 7c4a310b..05276672 100644
--- a/modules/pam_umask/pam_umask.8.xml
+++ b/modules/pam_umask/pam_umask.8.xml
@@ -1,42 +1,39 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_umask">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_umask">
<refmeta>
<refentrytitle>pam_umask</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_umask-name">
+ <refnamediv xml:id="pam_umask-name">
<refname>pam_umask</refname>
<refpurpose>PAM module to set the file mode creation mask</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_umask-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_umask-cmdsynopsis" sepchar=" ">
<command>pam_umask.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
silent
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
usergroups
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
nousergroups
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
umask=<replaceable>mask</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_umask-description">
+ <refsect1 xml:id="pam_umask-description">
<title>DESCRIPTION</title>
@@ -81,7 +78,7 @@
</refsect1>
- <refsect1 id="pam_umask-options">
+ <refsect1 xml:id="pam_umask-options">
<title>OPTIONS</title>
<para>
@@ -89,7 +86,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -100,7 +97,7 @@
<varlistentry>
<term>
- <option>silent</option>
+ silent
</term>
<listitem>
<para>
@@ -111,20 +108,20 @@
<varlistentry>
<term>
- <option>usergroups</option>
+ usergroups
</term>
<listitem>
<para>
If the user is not root and the username is the same as
primary group name, the umask group bits are set to be the
- same as owner bits (examples: 022 -> 002, 077 -> 007).
+ same as owner bits (examples: 022 -&gt; 002, 077 -&gt; 007).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- <option>nousergroups</option>
+ nousergroups
</term>
<listitem>
<para>
@@ -137,7 +134,7 @@
<varlistentry>
<term>
- <option>umask=<replaceable>mask</replaceable></option>
+ umask=mask
</term>
<listitem>
<para>
@@ -153,14 +150,14 @@
</para>
</refsect1>
- <refsect1 id="pam_umask-types">
+ <refsect1 xml:id="pam_umask-types">
<title>MODULE TYPES PROVIDED</title>
<para>
Only the <option>session</option> type is provided.
</para>
</refsect1>
- <refsect1 id='pam_umask-return_values'>
+ <refsect1 xml:id="pam_umask-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -225,7 +222,7 @@
</para>
</refsect1>
- <refsect1 id='pam_umask-examples'>
+ <refsect1 xml:id="pam_umask-examples">
<title>EXAMPLES</title>
<para>
Add the following line to <filename>/etc/pam.d/login</filename> to
@@ -236,7 +233,7 @@
</para>
</refsect1>
- <refsect1 id='pam_umask-see_also'>
+ <refsect1 xml:id="pam_umask-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -251,11 +248,11 @@
</para>
</refsect1>
- <refsect1 id='pam_umask-author'>
+ <refsect1 xml:id="pam_umask-author">
<title>AUTHOR</title>
<para>
pam_umask was written by Thorsten Kukuk &lt;kukuk@thkukuk.de&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_unix/Makefile.am b/modules/pam_unix/Makefile.am
index 1658735b..a1dfe44e 100644
--- a/modules/pam_unix/Makefile.am
+++ b/modules/pam_unix/Makefile.am
@@ -5,7 +5,7 @@
CLEANFILES = *~
MAINTAINERCLEANFILES = $(MANS) README
-EXTRA_DIST = md5.c md5_crypt.c lckpwdf.-c $(XMLS) CHANGELOG
+EXTRA_DIST = md5.c md5_crypt.c lckpwdf.-c yppasswd_xdr.c $(XMLS) CHANGELOG
if HAVE_DOC
dist_man_MANS = pam_unix.8 unix_chkpwd.8 unix_update.8
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_unix
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
-DCHKPWD_HELPER=\"$(sbindir)/unix_chkpwd\" \
@@ -39,7 +43,10 @@ noinst_PROGRAMS = bigcrypt
pam_unix_la_SOURCES = bigcrypt.c pam_unix_acct.c \
pam_unix_auth.c pam_unix_passwd.c pam_unix_sess.c support.c \
- passverify.c yppasswd_xdr.c md5_good.c md5_broken.c
+ passverify.c md5_good.c md5_broken.c
+if HAVE_NIS
+ pam_unix_la_SOURCES += yppasswd_xdr.c
+endif
bigcrypt_SOURCES = bigcrypt.c bigcrypt_main.c
bigcrypt_CFLAGS = $(AM_CFLAGS)
diff --git a/modules/pam_unix/Makefile.in b/modules/pam_unix/Makefile.in
index 4dcfdf64..1de5b72b 100644
--- a/modules/pam_unix/Makefile.in
+++ b/modules/pam_unix/Makefile.in
@@ -98,6 +98,7 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
sbin_PROGRAMS = unix_chkpwd$(EXEEXT) unix_update$(EXEEXT)
noinst_PROGRAMS = bigcrypt$(EXEEXT)
+@HAVE_NIS_TRUE@am__append_2 = yppasswd_xdr.c
subdir = modules/pam_unix
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
@@ -156,9 +157,13 @@ am__uninstall_files_from_dir = { \
}
LTLIBRARIES = $(securelib_LTLIBRARIES)
pam_unix_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+am__pam_unix_la_SOURCES_DIST = 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 yppasswd_xdr.c
+@HAVE_NIS_TRUE@am__objects_1 = yppasswd_xdr.lo
am_pam_unix_la_OBJECTS = bigcrypt.lo pam_unix_acct.lo pam_unix_auth.lo \
pam_unix_passwd.lo pam_unix_sess.lo support.lo passverify.lo \
- yppasswd_xdr.lo md5_good.lo md5_broken.lo
+ md5_good.lo md5_broken.lo $(am__objects_1)
pam_unix_la_OBJECTS = $(am_pam_unix_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -247,7 +252,7 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(pam_unix_la_SOURCES) $(bigcrypt_SOURCES) \
$(unix_chkpwd_SOURCES) $(unix_update_SOURCES)
-DIST_SOURCES = $(pam_unix_la_SOURCES) $(bigcrypt_SOURCES) \
+DIST_SOURCES = $(am__pam_unix_la_SOURCES_DIST) $(bigcrypt_SOURCES) \
$(unix_chkpwd_SOURCES) $(unix_update_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
@@ -486,6 +491,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -498,11 +504,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -534,12 +542,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -562,6 +572,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -572,12 +583,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -645,13 +660,14 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
CLEANFILES = *~
MAINTAINERCLEANFILES = $(MANS) README
-EXTRA_DIST = md5.c md5_crypt.c lckpwdf.-c $(XMLS) CHANGELOG
+EXTRA_DIST = md5.c md5_crypt.c lckpwdf.-c yppasswd_xdr.c $(XMLS) CHANGELOG
@HAVE_DOC_TRUE@dist_man_MANS = pam_unix.8 unix_chkpwd.8 unix_update.8
XMLS = README.xml pam_unix.8.xml unix_chkpwd.8.xml unix_update.8.xml
dist_check_SCRIPTS = tst-pam_unix
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
-DCHKPWD_HELPER=\"$(sbindir)/unix_chkpwd\" \
-DUPDATE_HELPER=\"$(sbindir)/unix_update\" \
@@ -664,10 +680,9 @@ pam_unix_la_LIBADD = $(top_builddir)/libpam/libpam.la \
securelib_LTLIBRARIES = pam_unix.la
noinst_HEADERS = md5.h support.h yppasswd.h bigcrypt.h passverify.h
-pam_unix_la_SOURCES = bigcrypt.c pam_unix_acct.c \
- pam_unix_auth.c pam_unix_passwd.c pam_unix_sess.c support.c \
- passverify.c yppasswd_xdr.c md5_good.c md5_broken.c
-
+pam_unix_la_SOURCES = 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 $(am__append_2)
bigcrypt_SOURCES = bigcrypt.c bigcrypt_main.c
bigcrypt_CFLAGS = $(AM_CFLAGS)
bigcrypt_LDADD = @LIBCRYPT@
diff --git a/modules/pam_unix/README.xml b/modules/pam_unix/README.xml
index 7fd340b3..49a65946 100644
--- a/modules/pam_unix/README.xml
+++ b/modules/pam_unix/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_unix.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_unix.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_unix-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_unix.8.xml" xpointer='xpointer(id("pam_unix-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_unix.8.xml" xpointer='xpointer(id("pam_unix-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_unix.8.xml" xpointer='xpointer(id("pam_unix-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_unix.8.xml" xpointer='xpointer(id("pam_unix-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_unix.8.xml" xpointer='xpointer(id("pam_unix-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_unix/bigcrypt.c b/modules/pam_unix/bigcrypt.c
index d8d61a4b..c1028668 100644
--- a/modules/pam_unix/bigcrypt.c
+++ b/modules/pam_unix/bigcrypt.c
@@ -29,6 +29,7 @@
#include <string.h>
#include <stdlib.h>
#include <security/_pam_macros.h>
+#include "pam_inline.h"
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
@@ -56,12 +57,12 @@ char *bigcrypt(const char *key, const char *salt)
#endif
unsigned long int keylen, n_seg, j;
char *cipher_ptr, *plaintext_ptr, *tmp_ptr, *salt_ptr;
- char keybuf[KEYBUF_SIZE + 1];
+ char keybuf[KEYBUF_SIZE + 1] = {};
D(("called with key='%s', salt='%s'.", key, salt));
/* reset arrays */
- dec_c2_cryptbuf = malloc(CBUF_SIZE);
+ dec_c2_cryptbuf = calloc(1, CBUF_SIZE);
if (!dec_c2_cryptbuf) {
return NULL;
}
@@ -73,8 +74,6 @@ char *bigcrypt(const char *key, const char *salt)
}
cdata->initialized = 0;
#endif
- memset(keybuf, 0, KEYBUF_SIZE + 1);
- memset(dec_c2_cryptbuf, 0, CBUF_SIZE);
/* fill KEYBUF_SIZE with key */
strncpy(keybuf, key, KEYBUF_SIZE);
@@ -116,6 +115,7 @@ char *bigcrypt(const char *key, const char *salt)
}
/* and place in the static area */
strncpy(cipher_ptr, tmp_ptr, 13);
+ pam_overwrite_string(tmp_ptr);
cipher_ptr += ESEGMENT_SIZE + SALT_SIZE;
plaintext_ptr += SEGMENT_SIZE; /* first block of SEGMENT_SIZE */
@@ -136,9 +136,10 @@ char *bigcrypt(const char *key, const char *salt)
tmp_ptr = crypt(plaintext_ptr, salt_ptr);
#endif
if (tmp_ptr == NULL) {
- _pam_overwrite(dec_c2_cryptbuf);
+ pam_overwrite_string(dec_c2_cryptbuf);
free(dec_c2_cryptbuf);
#ifdef HAVE_CRYPT_R
+ pam_overwrite_object(cdata);
free(cdata);
#endif
return NULL;
@@ -146,6 +147,7 @@ char *bigcrypt(const char *key, const char *salt)
/* skip the salt for seg!=0 */
strncpy(cipher_ptr, (tmp_ptr + SALT_SIZE), ESEGMENT_SIZE);
+ pam_overwrite_string(tmp_ptr);
cipher_ptr += ESEGMENT_SIZE;
plaintext_ptr += SEGMENT_SIZE;
@@ -155,6 +157,7 @@ char *bigcrypt(const char *key, const char *salt)
D(("key=|%s|, salt=|%s|\nbuf=|%s|\n", key, salt, dec_c2_cryptbuf));
#ifdef HAVE_CRYPT_R
+ pam_overwrite_object(cdata);
free(cdata);
#endif
diff --git a/modules/pam_unix/md5.c b/modules/pam_unix/md5.c
index 593d6dc3..95b8de4c 100644
--- a/modules/pam_unix/md5.c
+++ b/modules/pam_unix/md5.c
@@ -21,26 +21,27 @@
#include <string.h>
#include "md5.h"
+#include "pam_inline.h"
+
#ifndef HIGHFIRST
#define byteReverse(buf, len) /* Nothing */
#else
-typedef unsigned char PAM_ATTRIBUTE_ALIGNED(4) uint8_aligned;
-
-static void byteReverse(uint8_aligned *buf, unsigned longs);
+static void byteReverse(uint32 *buf, unsigned longs);
#ifndef ASM_MD5
/*
* Note: this code is harmless on little-endian machines.
*/
-static void byteReverse(uint8_aligned *buf, unsigned longs)
+static void byteReverse(uint32 *buf, unsigned longs)
{
uint32 t;
do {
- t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
- ((unsigned) buf[1] << 8 | buf[0]);
- *(uint32 *) buf = t;
- buf += 4;
+ unsigned char *p = (unsigned char *) buf;
+ t = (uint32) ((unsigned) p[3] << 8 | p[2]) << 16 |
+ ((unsigned) p[1] << 8 | p[0]);
+ *buf = t;
+ ++buf;
} while (--longs);
}
#endif
@@ -89,7 +90,7 @@ void MD5Name(MD5Update)(struct MD5Context *ctx, unsigned const char *buf, unsign
return;
}
memcpy(p, buf, t);
- byteReverse(ctx->in.c, 16);
+ byteReverse(ctx->in.i, 16);
MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
buf += t;
len -= t;
@@ -98,7 +99,7 @@ void MD5Name(MD5Update)(struct MD5Context *ctx, unsigned const char *buf, unsign
while (len >= 64) {
memcpy(ctx->in.c, buf, 64);
- byteReverse(ctx->in.c, 16);
+ byteReverse(ctx->in.i, 16);
MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
buf += 64;
len -= 64;
@@ -133,7 +134,7 @@ void MD5Name(MD5Final)(unsigned char digest[16], struct MD5Context *ctx)
if (count < 8) {
/* Two lots of padding: Pad the first block to 64 bytes */
memset(p, 0, count);
- byteReverse(ctx->in.c, 16);
+ byteReverse(ctx->in.i, 16);
MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
/* Now fill the next block with 56 bytes */
@@ -142,15 +143,15 @@ void MD5Name(MD5Final)(unsigned char digest[16], struct MD5Context *ctx)
/* Pad block to 56 bytes */
memset(p, 0, count - 8);
}
- byteReverse(ctx->in.c, 14);
+ byteReverse(ctx->in.i, 14);
/* Append length in bits and transform */
memcpy(ctx->in.i + 14, ctx->bits, 2*sizeof(uint32));
MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
- byteReverse(ctx->buf.c, 4);
+ byteReverse(ctx->buf.i, 4);
memcpy(digest, ctx->buf.c, 16);
- memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
+ pam_overwrite_object(ctx); /* In case it's sensitive */
}
#ifndef ASM_MD5
diff --git a/modules/pam_unix/md5_crypt.c b/modules/pam_unix/md5_crypt.c
index 94f7b434..ed5ecda4 100644
--- a/modules/pam_unix/md5_crypt.c
+++ b/modules/pam_unix/md5_crypt.c
@@ -87,7 +87,7 @@ char *MD5Name(crypt_md5)(const char *pw, const char *salt)
MD5Name(MD5Update)(&ctx,(unsigned const char *)final,pl>16 ? 16 : pl);
/* Don't leave anything around in vm they could use. */
- memset(final, 0, sizeof final);
+ pam_overwrite_array(final);
/* Then something really weird... */
for (j = 0, i = strlen(pw); i; i >>= 1)
@@ -151,7 +151,7 @@ char *MD5Name(crypt_md5)(const char *pw, const char *salt)
*p = '\0';
/* Don't leave anything around in vm they could use. */
- memset(final, 0, sizeof final);
+ pam_overwrite_array(final);
return passwd;
}
diff --git a/modules/pam_unix/pam_unix.8 b/modules/pam_unix/pam_unix.8
index d9cdea5a..438717f9 100644
--- a/modules/pam_unix/pam_unix.8
+++ b/modules/pam_unix/pam_unix.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_unix
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_UNIX" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_UNIX" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -71,31 +71,31 @@ Remaining arguments, supported by others functions of this module, are silently
\fBsyslog\fR(3)\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Turns on debugging via
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBaudit\fR
+audit
.RS 4
A little more extreme than debug\&.
.RE
.PP
-\fBquiet\fR
+quiet
.RS 4
Turns off informational messages namely messages about session open and close via
\fBsyslog\fR(3)\&.
.RE
.PP
-\fBnullok\fR
+nullok
.RS 4
The default action of this module is to not permit the user access to a service if their official password is blank\&. The
\fBnullok\fR
argument overrides this default\&.
.RE
.PP
-\fBnullresetok\fR
+nullresetok
.RS 4
Allow users to authenticate with blank password if password reset is enforced even if
\fBnullok\fR
@@ -104,24 +104,24 @@ is not set\&. If password reset is not required and
is not set the authentication with blank password will be denied\&.
.RE
.PP
-\fBtry_first_pass\fR
+try_first_pass
.RS 4
Before prompting the user for their password, the module first tries the previous stacked module\*(Aqs password in case that satisfies this module as well\&.
.RE
.PP
-\fBuse_first_pass\fR
+use_first_pass
.RS 4
The argument
\fBuse_first_pass\fR
forces the module to use a previous stacked modules password and will never prompt the user \- if no password is available or the password is not appropriate, the user will be denied access\&.
.RE
.PP
-\fBnodelay\fR
+nodelay
.RS 4
This argument can be used to discourage the authentication component from requesting a delay should the authentication as a whole fail\&. The default action is for the module to request a delay\-on\-failure of the order of two second\&.
.RE
.PP
-\fBuse_authtok\fR
+use_authtok
.RS 4
When password changing enforce the module to set the new password to the one provided by a previously stacked
\fBpassword\fR
@@ -130,17 +130,17 @@ module (this is used in the example of the stacking of the
module documented below)\&.
.RE
.PP
-\fBauthtok_type=\fR\fB\fItype\fR\fR
+authtok_type=type
.RS 4
This argument can be used to modify the password prompt when changing passwords to include the type of the password\&. Empty by default\&.
.RE
.PP
-\fBnis\fR
+nis
.RS 4
NIS RPC is used for setting new passwords\&.
.RE
.PP
-\fBremember=\fR\fB\fIn\fR\fR
+remember=n
.RS 4
The last
\fIn\fR
@@ -151,75 +151,75 @@ in order to force password change history and keep the user from alternating bet
module should be used\&.
.RE
.PP
-\fBshadow\fR
+shadow
.RS 4
Try to maintain a shadow based system\&.
.RE
.PP
-\fBmd5\fR
+md5
.RS 4
When a user changes their password next, encrypt it with the MD5 algorithm\&.
.RE
.PP
-\fBbigcrypt\fR
+bigcrypt
.RS 4
When a user changes their password next, encrypt it with the DEC C2 algorithm\&.
.RE
.PP
-\fBsha256\fR
+sha256
.RS 4
When a user changes their password next, encrypt it with the SHA256 algorithm\&. The SHA256 algorithm must be supported by the
\fBcrypt\fR(3)
function\&.
.RE
.PP
-\fBsha512\fR
+sha512
.RS 4
When a user changes their password next, encrypt it with the SHA512 algorithm\&. The SHA512 algorithm must be supported by the
\fBcrypt\fR(3)
function\&.
.RE
.PP
-\fBblowfish\fR
+blowfish
.RS 4
When a user changes their password next, encrypt it with the blowfish algorithm\&. The blowfish algorithm must be supported by the
\fBcrypt\fR(3)
function\&.
.RE
.PP
-\fBgost_yescrypt\fR
+gost_yescrypt
.RS 4
When a user changes their password next, encrypt it with the gost\-yescrypt algorithm\&. The gost\-yescrypt algorithm must be supported by the
\fBcrypt\fR(3)
function\&.
.RE
.PP
-\fByescrypt\fR
+yescrypt
.RS 4
When a user changes their password next, encrypt it with the yescrypt algorithm\&. The yescrypt algorithm must be supported by the
\fBcrypt\fR(3)
function\&.
.RE
.PP
-\fBrounds=\fR\fB\fIn\fR\fR
+rounds=n
.RS 4
Set the optional number of rounds of the SHA256, SHA512, blowfish, gost\-yescrypt, and yescrypt password hashing algorithms to
\fIn\fR\&.
.RE
.PP
-\fBbroken_shadow\fR
+broken_shadow
.RS 4
Ignore errors reading shadow information for users in the account management module\&.
.RE
.PP
-\fBminlen=\fR\fB\fIn\fR\fR
+minlen=n
.RS 4
Set a minimum password length of
\fIn\fR
characters\&. The max\&. for DES crypt based passwords are 8 characters\&.
.RE
.PP
-\fBno_pass_expiry\fR
+no_pass_expiry
.RS 4
When set ignore password expiration as defined by the
\fIshadow\fR
diff --git a/modules/pam_unix/pam_unix.8.xml b/modules/pam_unix/pam_unix.8.xml
index 9f9c8185..dfc04274 100644
--- a/modules/pam_unix/pam_unix.8.xml
+++ b/modules/pam_unix/pam_unix.8.xml
@@ -1,30 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_unix">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_unix">
<refmeta>
<refentrytitle>pam_unix</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_unix-name">
+ <refnamediv xml:id="pam_unix-name">
<refname>pam_unix</refname>
<refpurpose>Module for traditional password authentication</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_unix-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_unix-cmdsynopsis" sepchar=" ">
<command>pam_unix.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
...
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_unix-description">
+ <refsect1 xml:id="pam_unix-description">
<title>DESCRIPTION</title>
@@ -42,7 +39,7 @@
<emphasis>shadow</emphasis> elements: expire, last_change, max_change,
min_change, warn_change. In the case of the latter, it may offer advice
to the user on changing their password or, through the
- <emphasis remap='B'>PAM_AUTHTOKEN_REQD</emphasis> return, delay
+ <emphasis remap="B">PAM_AUTHTOKEN_REQD</emphasis> return, delay
giving service to the user until they have established a new password.
The entries listed above are documented in the <citerefentry>
<refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
@@ -89,7 +86,7 @@
<para>
The password component of this module performs the task of updating
the user's password. The default encryption hash is taken from the
- <emphasis remap='B'>ENCRYPT_METHOD</emphasis> variable from
+ <emphasis remap="B">ENCRYPT_METHOD</emphasis> variable from
<emphasis>/etc/login.defs</emphasis>
</para>
@@ -107,13 +104,13 @@
</para>
</refsect1>
- <refsect1 id="pam_unix-options">
+ <refsect1 xml:id="pam_unix-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -127,7 +124,7 @@
<varlistentry>
<term>
- <option>audit</option>
+ audit
</term>
<listitem>
<para>
@@ -138,7 +135,7 @@
<varlistentry>
<term>
- <option>quiet</option>
+ quiet
</term>
<listitem>
<para>
@@ -153,7 +150,7 @@
<varlistentry>
<term>
- <option>nullok</option>
+ nullok
</term>
<listitem>
<para>
@@ -165,7 +162,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>nullresetok</option>
+ nullresetok
</term>
<listitem>
<para>
@@ -178,7 +175,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>try_first_pass</option>
+ try_first_pass
</term>
<listitem>
<para>
@@ -190,7 +187,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_first_pass</option>
+ use_first_pass
</term>
<listitem>
<para>
@@ -203,7 +200,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>nodelay</option>
+ nodelay
</term>
<listitem>
<para>
@@ -216,7 +213,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_authtok</option>
+ use_authtok
</term>
<listitem>
<para>
@@ -230,7 +227,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>authtok_type=<replaceable>type</replaceable></option>
+ authtok_type=type
</term>
<listitem>
<para>
@@ -242,7 +239,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>nis</option>
+ nis
</term>
<listitem>
<para>
@@ -252,7 +249,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>remember=<replaceable>n</replaceable></option>
+ remember=n
</term>
<listitem>
<para>
@@ -269,7 +266,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>shadow</option>
+ shadow
</term>
<listitem>
<para>
@@ -279,7 +276,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>md5</option>
+ md5
</term>
<listitem>
<para>
@@ -290,7 +287,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>bigcrypt</option>
+ bigcrypt
</term>
<listitem>
<para>
@@ -301,7 +298,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>sha256</option>
+ sha256
</term>
<listitem>
<para>
@@ -315,7 +312,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>sha512</option>
+ sha512
</term>
<listitem>
<para>
@@ -329,7 +326,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>blowfish</option>
+ blowfish
</term>
<listitem>
<para>
@@ -343,7 +340,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>gost_yescrypt</option>
+ gost_yescrypt
</term>
<listitem>
<para>
@@ -357,7 +354,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>yescrypt</option>
+ yescrypt
</term>
<listitem>
<para>
@@ -371,7 +368,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>rounds=<replaceable>n</replaceable></option>
+ rounds=n
</term>
<listitem>
<para>
@@ -384,7 +381,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>broken_shadow</option>
+ broken_shadow
</term>
<listitem>
<para>
@@ -395,7 +392,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>minlen=<replaceable>n</replaceable></option>
+ minlen=n
</term>
<listitem>
<para>
@@ -407,7 +404,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>no_pass_expiry</option>
+ no_pass_expiry
</term>
<listitem>
<para>
@@ -418,9 +415,9 @@
meaning that other authentication source or method succeeded.
The example can be public key authentication in
<emphasis>sshd</emphasis>. The module will return
- <emphasis remap='B'>PAM_SUCCESS</emphasis> instead of eventual
- <emphasis remap='B'>PAM_NEW_AUTHTOK_REQD</emphasis> or
- <emphasis remap='B'>PAM_AUTHTOK_EXPIRED</emphasis>.
+ <emphasis remap="B">PAM_SUCCESS</emphasis> instead of eventual
+ <emphasis remap="B">PAM_NEW_AUTHTOK_REQD</emphasis> or
+ <emphasis remap="B">PAM_AUTHTOK_EXPIRED</emphasis>.
</para>
</listitem>
</varlistentry>
@@ -432,7 +429,7 @@
</para>
</refsect1>
- <refsect1 id="pam_unix-types">
+ <refsect1 xml:id="pam_unix-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>account</option>, <option>auth</option>,
@@ -440,7 +437,7 @@
</para>
</refsect1>
- <refsect1 id='pam_unix-return_values'>
+ <refsect1 xml:id="pam_unix-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -454,7 +451,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_unix-examples'>
+ <refsect1 xml:id="pam_unix-examples">
<title>EXAMPLES</title>
<para>
An example usage for <filename>/etc/pam.d/login</filename>
@@ -473,7 +470,7 @@ session required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_unix-see_also'>
+ <refsect1 xml:id="pam_unix-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -491,11 +488,11 @@ session required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_unix-author'>
+ <refsect1 xml:id="pam_unix-author">
<title>AUTHOR</title>
<para>
pam_unix was written by various people.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_unix/pam_unix_passwd.c b/modules/pam_unix/pam_unix_passwd.c
index a20e919e..c3417413 100644
--- a/modules/pam_unix/pam_unix_passwd.c
+++ b/modules/pam_unix/pam_unix_passwd.c
@@ -66,30 +66,21 @@
#include <security/pam_ext.h>
#include <security/pam_modutil.h>
+#include "pam_inline.h"
#include "pam_cc_compat.h"
#include "md5.h"
#include "support.h"
#include "passverify.h"
#include "bigcrypt.h"
-#if (HAVE_YP_GET_DEFAULT_DOMAIN || HAVE_GETDOMAINNAME) && HAVE_YP_MASTER
-# define HAVE_NIS
-#endif
-
#ifdef HAVE_NIS
# include <rpc/rpc.h>
-
-# if HAVE_RPCSVC_YP_PROT_H
-# include <rpcsvc/yp_prot.h>
-# endif
-
-# if HAVE_RPCSVC_YPCLNT_H
-# include <rpcsvc/ypclnt.h>
-# endif
+# include <rpcsvc/yp_prot.h>
+# include <rpcsvc/ypclnt.h>
# include "yppasswd.h"
-# if !HAVE_DECL_GETRPCPORT &&!HAVE_RPCB_GETADDR
+# if !defined(HAVE_DECL_GETRPCPORT) &&!defined(HAVE_RPCB_GETADDR)
extern int getrpcport(const char *host, unsigned long prognum,
unsigned long versnum, unsigned int proto);
# endif /* GNU libc 2.1 */
diff --git a/modules/pam_unix/passverify.c b/modules/pam_unix/passverify.c
index f2474a5b..81b10d88 100644
--- a/modules/pam_unix/passverify.c
+++ b/modules/pam_unix/passverify.c
@@ -96,7 +96,7 @@ PAMH_ARG_DECL(int verify_pwd_hash,
} else if (*hash != '$' && hash_len >= 13) {
pp = bigcrypt(p, hash);
if (pp && hash_len == 13 && strlen(pp) > hash_len) {
- _pam_overwrite(pp + hash_len);
+ pam_overwrite_string(pp + hash_len);
}
} else {
/*
@@ -147,7 +147,7 @@ PAMH_ARG_DECL(int verify_pwd_hash,
if (cdata != NULL) {
cdata->initialized = 0;
pp = x_strdup(crypt_r(p, hash, cdata));
- memset(cdata, '\0', sizeof(*cdata));
+ pam_overwrite_object(cdata);
free(cdata);
}
#else
@@ -334,7 +334,7 @@ PAMH_ARG_DECL(int check_shadow_expiry,
#define PW_TMPFILE "/etc/npasswd"
#define SH_TMPFILE "/etc/nshadow"
-#define OPW_TMPFILE "/etc/security/nopasswd"
+#define OPW_TMPFILE SCONFIGDIR "/nopasswd"
/*
* i64c - convert an integer to a radix 64 character
@@ -427,7 +427,7 @@ PAMH_ARG_DECL(char * create_password_hash,
#else
char salt[64]; /* contains rounds number + max 16 bytes of salt + algo id */
#endif
- char *sp;
+ char *sp, *ret;
#ifdef HAVE_CRYPT_R
struct crypt_data *cdata = NULL;
#endif
@@ -456,7 +456,7 @@ PAMH_ARG_DECL(char * create_password_hash,
password = tmppass;
}
hashed = bigcrypt(password, salt);
- memset(tmppass, '\0', sizeof(tmppass));
+ pam_overwrite_array(tmppass);
password = NULL;
return hashed;
}
@@ -494,18 +494,21 @@ PAMH_ARG_DECL(char * create_password_hash,
on(UNIX_SHA256_PASS, ctrl) ? "sha256" :
on(UNIX_SHA512_PASS, ctrl) ? "sha512" : algoid);
if(sp) {
- memset(sp, '\0', strlen(sp));
+ pam_overwrite_string(sp);
}
#ifdef HAVE_CRYPT_R
+ pam_overwrite_object(cdata);
free(cdata);
#endif
return NULL;
}
- sp = x_strdup(sp);
+ ret = strdup(sp);
+ pam_overwrite_string(sp);
#ifdef HAVE_CRYPT_R
+ pam_overwrite_object(cdata);
free(cdata);
#endif
- return sp;
+ return ret;
}
#ifdef WITH_SELINUX
@@ -1090,7 +1093,7 @@ helper_verify_password(const char *name, const char *p, int nullok)
}
if (hash) {
- _pam_overwrite(hash);
+ pam_overwrite_string(hash);
_pam_drop(hash);
}
diff --git a/modules/pam_unix/passverify.h b/modules/pam_unix/passverify.h
index c07037d2..463ef185 100644
--- a/modules/pam_unix/passverify.h
+++ b/modules/pam_unix/passverify.h
@@ -8,7 +8,7 @@
#define PAM_UNIX_RUN_HELPER PAM_CRED_INSUFFICIENT
-#define OLD_PASSWORDS_FILE "/etc/security/opasswd"
+#define OLD_PASSWORDS_FILE SCONFIGDIR "/opasswd"
int
is_pwd_shadowed(const struct passwd *pwd);
diff --git a/modules/pam_unix/support.c b/modules/pam_unix/support.c
index 27ca7127..043273d2 100644
--- a/modules/pam_unix/support.c
+++ b/modules/pam_unix/support.c
@@ -19,7 +19,7 @@
#include <ctype.h>
#include <syslog.h>
#include <sys/resource.h>
-#ifdef HAVE_RPCSVC_YPCLNT_H
+#ifdef HAVE_NIS
#include <rpcsvc/ypclnt.h>
#endif
@@ -805,7 +805,7 @@ int _unix_verify_password(pam_handle_t * pamh, const char *name
}
cleanup:
- memset(pw, 0, sizeof(pw)); /* clear memory of the password */
+ pam_overwrite_array(pw); /* clear memory of the password */
if (data_name)
_pam_delete(data_name);
if (salt)
diff --git a/modules/pam_unix/support.h b/modules/pam_unix/support.h
index 19754dc1..81054002 100644
--- a/modules/pam_unix/support.h
+++ b/modules/pam_unix/support.h
@@ -151,10 +151,10 @@ static const UNIX_Ctrls unix_args[UNIX_CTRLS_] =
/* use this to free strings. ESPECIALLY password strings */
-#define _pam_delete(xx) \
-{ \
- _pam_overwrite(xx); \
- _pam_drop(xx); \
+#define _pam_delete(xx) \
+{ \
+ pam_overwrite_string(xx); \
+ _pam_drop(xx); \
}
extern int _make_remark(pam_handle_t * pamh, unsigned long long ctrl,
diff --git a/modules/pam_unix/unix_chkpwd.8 b/modules/pam_unix/unix_chkpwd.8
index 93c95bd6..7c1963b3 100644
--- a/modules/pam_unix/unix_chkpwd.8
+++ b/modules/pam_unix/unix_chkpwd.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: unix_chkpwd
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "UNIX_CHKPWD" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "UNIX_CHKPWD" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_unix/unix_chkpwd.8.xml b/modules/pam_unix/unix_chkpwd.8.xml
index a10dbe33..ca0fa109 100644
--- a/modules/pam_unix/unix_chkpwd.8.xml
+++ b/modules/pam_unix/unix_chkpwd.8.xml
@@ -1,30 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="unix_chkpwd">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="unix_chkpwd">
<refmeta>
<refentrytitle>unix_chkpwd</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="unix_chkpwd-name">
+ <refnamediv xml:id="unix_chkpwd-name">
<refname>unix_chkpwd</refname>
<refpurpose>Helper binary that verifies the password of the current user</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="unix_chkpwd-cmdsynopsis">
+ <cmdsynopsis xml:id="unix_chkpwd-cmdsynopsis" sepchar=" ">
<command>unix_chkpwd</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
...
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="unix_chkpwd-description">
+ <refsect1 xml:id="unix_chkpwd-description">
<title>DESCRIPTION</title>
@@ -48,7 +45,7 @@
</para>
</refsect1>
- <refsect1 id='unix_chkpwd-see_also'>
+ <refsect1 xml:id="unix_chkpwd-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -57,11 +54,11 @@
</para>
</refsect1>
- <refsect1 id='unix_chkpwd-author'>
+ <refsect1 xml:id="unix_chkpwd-author">
<title>AUTHOR</title>
<para>
Written by Andrew Morgan and other various people.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_unix/unix_chkpwd.c b/modules/pam_unix/unix_chkpwd.c
index 3931bab2..556a2e2c 100644
--- a/modules/pam_unix/unix_chkpwd.c
+++ b/modules/pam_unix/unix_chkpwd.c
@@ -176,7 +176,7 @@ int main(int argc, char *argv[])
retval = helper_verify_password(user, pass, nullok);
- memset(pass, '\0', PAM_MAX_RESP_SIZE); /* clear memory of the password */
+ pam_overwrite_array(pass); /* clear memory of the password */
/* return pass or fail */
diff --git a/modules/pam_unix/unix_update.8 b/modules/pam_unix/unix_update.8
index b1f5ac71..b3b7a28f 100644
--- a/modules/pam_unix/unix_update.8
+++ b/modules/pam_unix/unix_update.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: unix_update
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "UNIX_UPDATE" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "UNIX_UPDATE" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_unix/unix_update.8.xml b/modules/pam_unix/unix_update.8.xml
index 6c7467b9..1a968652 100644
--- a/modules/pam_unix/unix_update.8.xml
+++ b/modules/pam_unix/unix_update.8.xml
@@ -1,30 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="unix_update">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="unix_update">
<refmeta>
<refentrytitle>unix_update</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="unix_update-name">
+ <refnamediv xml:id="unix_update-name">
<refname>unix_update</refname>
<refpurpose>Helper binary that updates the password of a given user</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="unix_update-cmdsynopsis">
+ <cmdsynopsis xml:id="unix_update-cmdsynopsis" sepchar=" ">
<command>unix_update</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
...
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="unix_update-description">
+ <refsect1 xml:id="unix_update-description">
<title>DESCRIPTION</title>
@@ -48,7 +45,7 @@
</para>
</refsect1>
- <refsect1 id='unix_update-see_also'>
+ <refsect1 xml:id="unix_update-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -57,11 +54,11 @@
</para>
</refsect1>
- <refsect1 id='unix_update-author'>
+ <refsect1 xml:id="unix_update-author">
<title>AUTHOR</title>
<para>
Written by Tomas Mraz and other various people.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_unix/unix_update.c b/modules/pam_unix/unix_update.c
index 3559972b..49a70ff3 100644
--- a/modules/pam_unix/unix_update.c
+++ b/modules/pam_unix/unix_update.c
@@ -55,15 +55,18 @@ set_password(const char *forwho, const char *shadow, const char *remember)
if (npass != 2) { /* is it a valid password? */
if (npass == 1) {
helper_log_err(LOG_DEBUG, "no new password supplied");
- memset(pass, '\0', PAM_MAX_RESP_SIZE);
+ pam_overwrite_array(pass);
} else {
helper_log_err(LOG_DEBUG, "no valid passwords supplied");
}
return PAM_AUTHTOK_ERR;
}
- if (lock_pwdf() != PAM_SUCCESS)
+ if (lock_pwdf() != PAM_SUCCESS) {
+ pam_overwrite_array(pass);
+ pam_overwrite_array(towhat);
return PAM_AUTHTOK_LOCK_BUSY;
+ }
pwd = getpwnam(forwho);
@@ -98,8 +101,8 @@ set_password(const char *forwho, const char *shadow, const char *remember)
}
done:
- memset(pass, '\0', PAM_MAX_RESP_SIZE);
- memset(towhat, '\0', PAM_MAX_RESP_SIZE);
+ pam_overwrite_array(pass);
+ pam_overwrite_array(towhat);
unlock_pwdf();
diff --git a/modules/pam_unix/yppasswd.h b/modules/pam_unix/yppasswd.h
index 5f947071..dc686cd7 100644
--- a/modules/pam_unix/yppasswd.h
+++ b/modules/pam_unix/yppasswd.h
@@ -1,28 +1,20 @@
/*
- * yppasswdd
- * Copyright 1994, 1995, 1996 Olaf Kirch, <okir@lst.de>
- *
- * This program is covered by the GNU General Public License, version 2
- * or later. It is provided in the hope that it is useful. However, the author
- * disclaims ALL WARRANTIES, expressed or implied. See the GPL for details.
- *
- * This file was generated automatically by rpcgen from yppasswd.x, and
- * editied manually.
+ * Please do not edit this file.
+ * It was generated using rpcgen.
*/
-#ifndef _YPPASSWD_H_
-#define _YPPASSWD_H_
+#ifndef _YPPASSWD_H_RPCGEN
+#define _YPPASSWD_H_RPCGEN
-#define YPPASSWDPROG ((u_long)100009)
-#define YPPASSWDVERS ((u_long)1)
-#define YPPASSWDPROC_UPDATE ((u_long)1)
+#include <rpc/rpc.h>
-/*
- * The password struct passed by the update call. I renamed it to
- * xpasswd to avoid a type clash with the one defined in <pwd.h>.
- */
-#ifndef __sgi
-typedef struct xpasswd {
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct xpasswd {
char *pw_name;
char *pw_passwd;
int pw_uid;
@@ -30,22 +22,45 @@ typedef struct xpasswd {
char *pw_gecos;
char *pw_dir;
char *pw_shell;
-} xpasswd;
-
-#else
-#include <pwd.h>
+};
typedef struct xpasswd xpasswd;
-#endif
-/* The updated password information, plus the old password.
- */
-typedef struct yppasswd {
+struct yppasswd {
char *oldpass;
xpasswd newpw;
-} yppasswd;
+};
+typedef struct yppasswd yppasswd;
-/* XDR encoding/decoding routines */
-bool_t xdr_xpasswd(XDR * xdrs, xpasswd * objp);
-bool_t xdr_yppasswd(XDR * xdrs, yppasswd * objp);
+#define YPPASSWDPROG 100009
+#define YPPASSWDVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define YPPASSWDPROC_UPDATE 1
+extern int * yppasswdproc_update_1(yppasswd *, CLIENT *);
+extern int * yppasswdproc_update_1_svc(yppasswd *, struct svc_req *);
+extern int yppasswdprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define YPPASSWDPROC_UPDATE 1
+extern int * yppasswdproc_update_1();
+extern int * yppasswdproc_update_1_svc();
+extern int yppasswdprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern bool_t xdr_passwd (XDR *, xpasswd*);
+extern bool_t xdr_yppasswd (XDR *, yppasswd*);
+
+#else /* K&R C */
+extern bool_t xdr_passwd ();
+extern bool_t xdr_yppasswd ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
-#endif /* _YPPASSWD_H_ */
+#endif /* !_YPPASSWD_H_RPCGEN */
diff --git a/modules/pam_unix/yppasswd_xdr.c b/modules/pam_unix/yppasswd_xdr.c
index f2b86a56..0523d523 100644
--- a/modules/pam_unix/yppasswd_xdr.c
+++ b/modules/pam_unix/yppasswd_xdr.c
@@ -1,40 +1,36 @@
/*
- * yppasswdd
- * Copyright 1994, 1995, 1996 Olaf Kirch, <okir@lst.de>
- *
- * This program is covered by the GNU General Public License, version 2
- * or later. It is provided in the hope that it is useful. However, the author
- * disclaims ALL WARRANTIES, expressed or implied. See the GPL for details.
- *
- * This file was generated automatically by rpcgen from yppasswd.x, and
- * editied manually.
+ * Please do not edit this file.
+ * It was generated using rpcgen.
*/
-#include "config.h"
-
-#ifdef HAVE_RPC_RPC_H
-
-#include <rpc/rpc.h>
#include "yppasswd.h"
bool_t
-xdr_xpasswd(XDR * xdrs, xpasswd * objp)
+xdr_passwd (XDR *xdrs, xpasswd *objp)
{
- return xdr_string(xdrs, &objp->pw_name, ~0)
- && xdr_string(xdrs, &objp->pw_passwd, ~0)
- && xdr_int(xdrs, &objp->pw_uid)
- && xdr_int(xdrs, &objp->pw_gid)
- && xdr_string(xdrs, &objp->pw_gecos, ~0)
- && xdr_string(xdrs, &objp->pw_dir, ~0)
- && xdr_string(xdrs, &objp->pw_shell, ~0);
+ if (!xdr_string (xdrs, &objp->pw_name, ~0))
+ return FALSE;
+ if (!xdr_string (xdrs, &objp->pw_passwd, ~0))
+ return FALSE;
+ if (!xdr_int (xdrs, &objp->pw_uid))
+ return FALSE;
+ if (!xdr_int (xdrs, &objp->pw_gid))
+ return FALSE;
+ if (!xdr_string (xdrs, &objp->pw_gecos, ~0))
+ return FALSE;
+ if (!xdr_string (xdrs, &objp->pw_dir, ~0))
+ return FALSE;
+ if (!xdr_string (xdrs, &objp->pw_shell, ~0))
+ return FALSE;
+ return TRUE;
}
-
bool_t
-xdr_yppasswd(XDR * xdrs, yppasswd * objp)
+xdr_yppasswd (XDR *xdrs, yppasswd *objp)
{
- return xdr_string(xdrs, &objp->oldpass, ~0)
- && xdr_xpasswd(xdrs, &objp->newpw);
+ if (!xdr_string (xdrs, &objp->oldpass, ~0))
+ return FALSE;
+ if (!xdr_passwd (xdrs, &objp->newpw))
+ return FALSE;
+ return TRUE;
}
-
-#endif
diff --git a/modules/pam_userdb/Makefile.am b/modules/pam_userdb/Makefile.am
index aa70e7de..e31d9ccc 100644
--- a/modules/pam_userdb/Makefile.am
+++ b/modules/pam_userdb/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_userdb
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_userdb/Makefile.in b/modules/pam_userdb/Makefile.in
index 6eb785f0..c19b4231 100644
--- a/modules/pam_userdb/Makefile.in
+++ b/modules/pam_userdb/Makefile.in
@@ -431,6 +431,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -443,11 +444,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -479,12 +482,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -507,6 +512,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -517,12 +523,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -596,7 +606,8 @@ XMLS = README.xml pam_userdb.8.xml
dist_check_SCRIPTS = tst-pam_userdb
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_userdb/README.xml b/modules/pam_userdb/README.xml
index b22c09e7..4e8f8ee7 100644
--- a/modules/pam_userdb/README.xml
+++ b/modules/pam_userdb/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_userdb.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_userdb.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_userdb-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_userdb.8.xml" xpointer='xpointer(id("pam_userdb-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_userdb/pam_userdb.8 b/modules/pam_userdb/pam_userdb.8
index fc002787..c6397723 100644
--- a/modules/pam_userdb/pam_userdb.8
+++ b/modules/pam_userdb/pam_userdb.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_userdb
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_USERDB" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_USERDB" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -37,7 +37,7 @@ pam_userdb \- PAM module to authenticate against a db database
The pam_userdb module is used to verify a username/password pair against values stored in a Berkeley DB database\&. The database is indexed by the username, and the data fields corresponding to the username keys are the passwords\&.
.SH "OPTIONS"
.PP
-\fBcrypt=[crypt|none]\fR
+crypt=[crypt|none]
.RS 4
Indicates whether encrypted or plaintext passwords are stored in the database\&. If it is
\fBcrypt\fR, passwords should be stored in the database in
@@ -47,7 +47,7 @@ form\&. If
is selected, passwords should be stored in the database as plaintext\&.
.RE
.PP
-\fBdb=\fR\fB\fI/path/database\fR\fR
+db=/path/database
.RS 4
Use the
/path/database
@@ -58,37 +58,37 @@ if no database is provided\&. Note that the path to the database file should be
suffix\&.
.RE
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&. Note that password hashes, both from db and computed, will be printed to syslog\&.
.RE
.PP
-\fBdump\fR
+dump
.RS 4
Dump all the entries in the database to the log\&. Don\*(Aqt do this by default!
.RE
.PP
-\fBicase\fR
+icase
.RS 4
Make the password verification to be case insensitive (ie when working with registration numbers and such)\&. Only works with plaintext password storage\&.
.RE
.PP
-\fBtry_first_pass\fR
+try_first_pass
.RS 4
Use the authentication token previously obtained by another module that did the conversation with the application\&. If this token can not be obtained then the module will try to converse\&. This option can be used for stacking different modules that need to deal with the authentication tokens\&.
.RE
.PP
-\fBuse_first_pass\fR
+use_first_pass
.RS 4
Use the authentication token previously obtained by another module that did the conversation with the application\&. If this token can not be obtained then the module will fail\&. This option can be used for stacking different modules that need to deal with the authentication tokens\&.
.RE
.PP
-\fBunknown_ok\fR
+unknown_ok
.RS 4
Do not return error when checking for a user that is not in the database\&. This can be used to stack more than one pam_userdb module that will check a username/password pair in more than a database\&.
.RE
.PP
-\fBkey_only\fR
+key_only
.RS 4
The username and password are concatenated together in the database hash as \*(Aqusername\-password\*(Aq with a random value\&. if the concatenation of the username and password with a dash in the middle returns any result, the user is valid\&. this is useful in cases where the username may not be unique but the username and password pair are\&.
.RE
diff --git a/modules/pam_userdb/pam_userdb.8.xml b/modules/pam_userdb/pam_userdb.8.xml
index bce92850..0f964102 100644
--- a/modules/pam_userdb/pam_userdb.8.xml
+++ b/modules/pam_userdb/pam_userdb.8.xml
@@ -1,54 +1,51 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_userdb">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_userdb">
<refmeta>
<refentrytitle>pam_userdb</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_userdb-name">
+ <refnamediv xml:id="pam_userdb-name">
<refname>pam_userdb</refname>
<refpurpose>PAM module to authenticate against a db database</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_userdb-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_userdb-cmdsynopsis" sepchar=" ">
<command>pam_userdb.so</command>
- <arg choice="plain">
+ <arg choice="plain" rep="norepeat">
db=<replaceable>/path/database</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
crypt=[crypt|none]
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
icase
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
dump
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
try_first_pass
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
use_first_pass
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
unknown_ok
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
key_only
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_userdb-description">
+ <refsect1 xml:id="pam_userdb-description">
<title>DESCRIPTION</title>
@@ -60,13 +57,13 @@
</para>
</refsect1>
- <refsect1 id="pam_userdb-options">
+ <refsect1 xml:id="pam_userdb-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>crypt=[crypt|none]</option>
+ crypt=[crypt|none]
</term>
<listitem>
<para>
@@ -82,13 +79,13 @@
</varlistentry>
<varlistentry>
<term>
- <option>db=<replaceable>/path/database</replaceable></option>
+ db=/path/database
</term>
<listitem>
<para>
Use the <filename>/path/database</filename> database for
performing lookup. There is no default; the module will
- return <emphasis remap='B'>PAM_IGNORE</emphasis> if no
+ return <emphasis remap="B">PAM_IGNORE</emphasis> if no
database is provided. Note that the path to the database file
should be specified without the <filename>.db</filename> suffix.
</para>
@@ -96,7 +93,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -107,7 +104,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>dump</option>
+ dump
</term>
<listitem>
<para>
@@ -118,7 +115,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>icase</option>
+ icase
</term>
<listitem>
<para>
@@ -131,7 +128,7 @@
<varlistentry>
<term>
- <option>try_first_pass</option>
+ try_first_pass
</term>
<listitem>
<para>
@@ -146,7 +143,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_first_pass</option>
+ use_first_pass
</term>
<listitem>
<para>
@@ -161,7 +158,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>unknown_ok</option>
+ unknown_ok
</term>
<listitem>
<para>
@@ -174,7 +171,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>key_only</option>
+ key_only
</term>
<listitem>
<para>
@@ -191,7 +188,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_userdb-types">
+ <refsect1 xml:id="pam_userdb-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option> and <option>account</option> module
@@ -199,7 +196,7 @@
</para>
</refsect1>
- <refsect1 id='pam_userdb-return_values'>
+ <refsect1 xml:id="pam_userdb-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -259,14 +256,14 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_userdb-examples'>
+ <refsect1 xml:id="pam_userdb-examples">
<title>EXAMPLES</title>
<programlisting>
auth sufficient pam_userdb.so icase db=/etc/dbtest
</programlisting>
</refsect1>
- <refsect1 id='pam_userdb-see_also'>
+ <refsect1 xml:id="pam_userdb-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -284,11 +281,11 @@ auth sufficient pam_userdb.so icase db=/etc/dbtest
</para>
</refsect1>
- <refsect1 id='pam_userdb-author'>
+ <refsect1 xml:id="pam_userdb-author">
<title>AUTHOR</title>
<para>
pam_userdb was written by Cristian Gafton &gt;gafton@redhat.com&lt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_userdb/pam_userdb.c b/modules/pam_userdb/pam_userdb.c
index f467ea4c..297403b0 100644
--- a/modules/pam_userdb/pam_userdb.c
+++ b/modules/pam_userdb/pam_userdb.c
@@ -62,7 +62,7 @@ obtain_authtok(pam_handle_t *pamh)
retval = pam_set_item(pamh, PAM_AUTHTOK, resp);
/* clean it up */
- _pam_overwrite(resp);
+ pam_overwrite_string(resp);
_pam_drop(resp);
if ( (retval != PAM_SUCCESS) ||
@@ -181,7 +181,7 @@ user_lookup (pam_handle_t *pamh, const char *database, const char *cryptmode,
if (key.dptr) {
data = dbm_fetch(dbm, key);
- memset(key.dptr, 0, key.dsize);
+ pam_overwrite_n(key.dptr, key.dsize);
free(key.dptr);
}
@@ -247,8 +247,11 @@ user_lookup (pam_handle_t *pamh, const char *database, const char *cryptmode,
free(cdata);
#endif
}
+ pam_overwrite_string(pwhash);
free(pwhash);
}
+
+ pam_overwrite_string(cryptpw);
} else {
/* Unknown password encryption method -
diff --git a/modules/pam_usertype/Makefile.am b/modules/pam_usertype/Makefile.am
index 28224b94..e6d35e48 100644
--- a/modules/pam_usertype/Makefile.am
+++ b/modules/pam_usertype/Makefile.am
@@ -16,7 +16,11 @@ dist_check_SCRIPTS = tst-pam_usertype
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_usertype/Makefile.in b/modules/pam_usertype/Makefile.in
index 4118a622..28b96739 100644
--- a/modules/pam_usertype/Makefile.in
+++ b/modules/pam_usertype/Makefile.in
@@ -429,6 +429,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -441,11 +442,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -477,12 +480,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -505,6 +510,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -515,12 +521,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -594,7 +604,8 @@ XMLS = README.xml pam_usertype.8.xml
dist_check_SCRIPTS = tst-pam_usertype
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_usertype/README b/modules/pam_usertype/README
index 246a3895..290a8fe1 100644
--- a/modules/pam_usertype/README
+++ b/modules/pam_usertype/README
@@ -6,8 +6,8 @@ DESCRIPTION
pam_usertype.so is designed to succeed or fail authentication based on type of
the account of the authenticated user. The type of the account is decided with
-help of SYS_UID_MIN and SYS_UID_MAX settings in /etc/login.defs. One use is to
-select whether to load other modules based on this test.
+help of SYS_UID_MAX settings in /etc/login.defs. One use is to select whether
+to load other modules based on this test.
The module should be given only one condition as module argument.
Authentication will succeed only if the condition is met.
diff --git a/modules/pam_usertype/README.xml b/modules/pam_usertype/README.xml
index 58550465..7faf549e 100644
--- a/modules/pam_usertype/README.xml
+++ b/modules/pam_usertype/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_usertype.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_usertype.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_usertype-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_usertype.8.xml" xpointer='xpointer(id("pam_usertype-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_usertype.8.xml" xpointer='xpointer(//refsect1[@id = "pam_usertype-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_usertype.8.xml" xpointer='xpointer(id("pam_usertype-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_usertype.8.xml" xpointer='xpointer(//refsect1[@id = "pam_usertype-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_usertype.8.xml" xpointer='xpointer(id("pam_usertype-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_usertype.8.xml" xpointer='xpointer(//refsect1[@id = "pam_usertype-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_usertype.8.xml" xpointer='xpointer(id("pam_usertype-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_usertype.8.xml" xpointer='xpointer(//refsect1[@id = "pam_usertype-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_usertype.8.xml" xpointer='xpointer(id("pam_usertype-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_usertype/pam_usertype.8 b/modules/pam_usertype/pam_usertype.8
index 2f021013..4bc8652e 100644
--- a/modules/pam_usertype/pam_usertype.8
+++ b/modules/pam_usertype/pam_usertype.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_usertype
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
-.\" Manual: Linux-PAM
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
+.\" Manual: Linux-PAM Manual
.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_USERTYPE" "8" "09/03/2021" "Linux-PAM" "Linux\-PAM"
+.TH "PAM_USERTYPE" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -35,8 +35,6 @@ pam_usertype \- check if the authenticated user is a system or regular account
.SH "DESCRIPTION"
.PP
pam_usertype\&.so is designed to succeed or fail authentication based on type of the account of the authenticated user\&. The type of the account is decided with help of
-\fISYS_UID_MIN\fR
-and
\fISYS_UID_MAX\fR
settings in
\fI/etc/login\&.defs\fR\&. One use is to select whether to load other modules based on this test\&.
@@ -47,12 +45,12 @@ The module should be given only one condition as module argument\&. Authenticati
The following
\fIflag\fRs are supported:
.PP
-\fBuse_uid\fR
+use_uid
.RS 4
Evaluate conditions using the account of the user whose UID the application is running under instead of the user being authenticated\&.
.RE
.PP
-\fBaudit\fR
+audit
.RS 4
Log unknown users to the system log\&.
.RE
@@ -60,12 +58,12 @@ Log unknown users to the system log\&.
Available
\fIcondition\fRs are:
.PP
-\fBissystem\fR
+issystem
.RS 4
Succeed if the user is a system user\&.
.RE
.PP
-\fBisregular\fR
+isregular
.RS 4
Succeed if the user is a regular user\&.
.RE
diff --git a/modules/pam_usertype/pam_usertype.8.xml b/modules/pam_usertype/pam_usertype.8.xml
index 7651da6e..87ad0796 100644
--- a/modules/pam_usertype/pam_usertype.8.xml
+++ b/modules/pam_usertype/pam_usertype.8.xml
@@ -1,37 +1,33 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-
-<refentry id='pam_usertype'>
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_usertype">
<refmeta>
<refentrytitle>pam_usertype</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class='sectdesc'>Linux-PAM</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id='pam_usertype-name'>
+ <refnamediv xml:id="pam_usertype-name">
<refname>pam_usertype</refname>
<refpurpose>check if the authenticated user is a system or regular account</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id='pam_usertype-cmdsynopsis'>
+ <cmdsynopsis xml:id="pam_usertype-cmdsynopsis" sepchar=" ">
<command>pam_usertype.so</command>
- <arg choice='opt' rep='repeat'><replaceable>flag</replaceable></arg>
- <arg choice='req'><replaceable>condition</replaceable></arg>
+ <arg choice="opt" rep="repeat"><replaceable>flag</replaceable></arg>
+ <arg choice="req" rep="norepeat"><replaceable>condition</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id='pam_usertype-description'>
+ <refsect1 xml:id="pam_usertype-description">
<title>DESCRIPTION</title>
<para>
pam_usertype.so is designed to succeed or fail authentication
based on type of the account of the authenticated user.
The type of the account is decided with help of
- <emphasis>SYS_UID_MIN</emphasis> and <emphasis>SYS_UID_MAX</emphasis>
+ <emphasis>SYS_UID_MAX</emphasis>
settings in <emphasis>/etc/login.defs</emphasis>. One use is to select
whether to load other modules based on this test.
</para>
@@ -42,7 +38,7 @@
</para>
</refsect1>
- <refsect1 id="pam_usertype-options">
+ <refsect1 xml:id="pam_usertype-options">
<title>OPTIONS</title>
<para>
The following <emphasis>flag</emphasis>s are supported:
@@ -50,7 +46,7 @@
<variablelist>
<varlistentry>
- <term><option>use_uid</option></term>
+ <term>use_uid</term>
<listitem>
<para>
Evaluate conditions using the account of the user whose UID
@@ -60,7 +56,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>audit</option></term>
+ <term>audit</term>
<listitem>
<para>
Log unknown users to the system log.
@@ -75,13 +71,13 @@
<variablelist>
<varlistentry>
- <term><option>issystem</option></term>
+ <term>issystem</term>
<listitem>
<para>Succeed if the user is a system user.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>isregular</option></term>
+ <term>isregular</term>
<listitem>
<para>Succeed if the user is a regular user.</para>
</listitem>
@@ -89,7 +85,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_usertype-types">
+ <refsect1 xml:id="pam_usertype-types">
<title>MODULE TYPES PROVIDED</title>
<para>
All module types (<option>account</option>, <option>auth</option>,
@@ -97,7 +93,7 @@
</para>
</refsect1>
- <refsect1 id='pam_usertype-return_values'>
+ <refsect1 xml:id="pam_usertype-return_values">
<title>RETURN VALUES</title>
<variablelist>
@@ -170,7 +166,7 @@
</refsect1>
- <refsect1 id='pam_usertype-examples'>
+ <refsect1 xml:id="pam_usertype-examples">
<title>EXAMPLES</title>
<para>
Skip remaining modules if the user is a system user:
@@ -180,7 +176,7 @@ account sufficient pam_usertype.so issystem
</programlisting>
</refsect1>
- <refsect1 id='pam_usertype-see_also'>
+ <refsect1 xml:id="pam_usertype-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -192,8 +188,8 @@ account sufficient pam_usertype.so issystem
</para>
</refsect1>
- <refsect1 id='pam_usertype-author'>
+ <refsect1 xml:id="pam_usertype-author">
<title>AUTHOR</title>
<para>Pavel Březina &lt;pbrezina@redhat.com&gt;</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_usertype/pam_usertype.c b/modules/pam_usertype/pam_usertype.c
index d03b73b5..cfd9c8bb 100644
--- a/modules/pam_usertype/pam_usertype.c
+++ b/modules/pam_usertype/pam_usertype.c
@@ -194,7 +194,6 @@ static int
pam_usertype_is_system(pam_handle_t *pamh, uid_t uid)
{
uid_t uid_min;
- uid_t sys_min;
uid_t sys_max;
if (uid == (uid_t)-1) {
@@ -202,21 +201,19 @@ pam_usertype_is_system(pam_handle_t *pamh, uid_t uid)
return PAM_USER_UNKNOWN;
}
- if (uid <= 99) {
- /* Reserved. */
- return PAM_SUCCESS;
- }
-
if (uid == PAM_USERTYPE_OVERFLOW_UID) {
/* nobody */
return PAM_SUCCESS;
}
uid_min = pam_usertype_get_id(pamh, "UID_MIN", PAM_USERTYPE_UIDMIN);
- sys_min = pam_usertype_get_id(pamh, "SYS_UID_MIN", PAM_USERTYPE_SYSUIDMIN);
sys_max = pam_usertype_get_id(pamh, "SYS_UID_MAX", uid_min - 1);
- return uid >= sys_min && uid <= sys_max ? PAM_SUCCESS : PAM_AUTH_ERR;
+ if (uid <= sys_max && uid < uid_min) {
+ return PAM_SUCCESS;
+ }
+
+ return PAM_AUTH_ERR;
}
static int
@@ -253,7 +250,7 @@ pam_usertype_evaluate(struct pam_usertype_opts *opts,
/**
* Arguments:
- * - issystem: uid in <SYS_UID_MIN, SYS_UID_MAX>
+ * - issystem: uid less than SYS_UID_MAX
* - isregular: not issystem
* - use_uid: use user that runs application not that is being authenticate (same as in pam_succeed_if)
* - audit: log unknown users to syslog
diff --git a/modules/pam_warn/Makefile.am b/modules/pam_warn/Makefile.am
index d0f021fe..5e13f8f2 100644
--- a/modules/pam_warn/Makefile.am
+++ b/modules/pam_warn/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_warn
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_warn/Makefile.in b/modules/pam_warn/Makefile.in
index a1f192f9..aff1ee54 100644
--- a/modules/pam_warn/Makefile.in
+++ b/modules/pam_warn/Makefile.in
@@ -433,6 +433,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -445,11 +446,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -481,12 +484,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -509,6 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -519,12 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -598,7 +608,8 @@ XMLS = README.xml pam_warn.8.xml
dist_check_SCRIPTS = tst-pam_warn
TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_warn/README.xml b/modules/pam_warn/README.xml
index 4367c28f..56093f80 100644
--- a/modules/pam_warn/README.xml
+++ b/modules/pam_warn/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_warn.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_warn.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_warn-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_warn.8.xml" xpointer='xpointer(id("pam_warn-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_warn.8.xml" xpointer='xpointer(id("pam_warn-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_warn.8.xml" xpointer='xpointer(id("pam_warn-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_warn.8.xml" xpointer='xpointer(id("pam_warn-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_warn.8.xml" xpointer='xpointer(id("pam_warn-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_warn/pam_warn.8 b/modules/pam_warn/pam_warn.8
index 2b990faa..3e507d76 100644
--- a/modules/pam_warn/pam_warn.8
+++ b/modules/pam_warn/pam_warn.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_warn
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_WARN" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_WARN" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/modules/pam_warn/pam_warn.8.xml b/modules/pam_warn/pam_warn.8.xml
index 1764ec92..a20c5f71 100644
--- a/modules/pam_warn/pam_warn.8.xml
+++ b/modules/pam_warn/pam_warn.8.xml
@@ -1,25 +1,22 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_warn">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_warn">
<refmeta>
<refentrytitle>pam_warn</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_warn-name">
+ <refnamediv xml:id="pam_warn-name">
<refname>pam_warn</refname>
<refpurpose>PAM module which logs all PAM items if called</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_warn-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_warn-cmdsynopsis" sepchar=" ">
<command>pam_warn.so</command>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_warn-description">
+ <refsect1 xml:id="pam_warn-description">
<title>DESCRIPTION</title>
<para>
pam_warn is a PAM module that logs the service, terminal, user,
@@ -28,17 +25,17 @@
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>. The items are not probed for, but instead obtained
from the standard PAM items. The module always returns
- <emphasis remap='B'>PAM_IGNORE</emphasis>, indicating that it
+ <emphasis remap="B">PAM_IGNORE</emphasis>, indicating that it
does not want to affect the authentication process.
</para>
</refsect1>
- <refsect1 id="pam_warn-options">
+ <refsect1 xml:id="pam_warn-options">
<title>OPTIONS</title>
<para>This module does not recognise any options.</para>
</refsect1>
- <refsect1 id="pam_warn-types">
+ <refsect1 xml:id="pam_warn-types">
<title>MODULE TYPES PROVIDED</title>
<para>
The <option>auth</option>, <option>account</option>,
@@ -47,7 +44,7 @@
</para>
</refsect1>
- <refsect1 id='pam_warn-return_values'>
+ <refsect1 xml:id="pam_warn-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -61,7 +58,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_warn-examples'>
+ <refsect1 xml:id="pam_warn-examples">
<title>EXAMPLES</title>
<programlisting>
#%PAM-1.0
@@ -80,7 +77,7 @@ other session required pam_deny.so
</programlisting>
</refsect1>
- <refsect1 id='pam_warn-see_also'>
+ <refsect1 xml:id="pam_warn-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -95,11 +92,11 @@ other session required pam_deny.so
</para>
</refsect1>
- <refsect1 id='pam_warn-author'>
+ <refsect1 xml:id="pam_warn-author">
<title>AUTHOR</title>
<para>
pam_warn was written by Andrew G. Morgan &lt;morgan@kernel.org&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_wheel/Makefile.am b/modules/pam_wheel/Makefile.am
index 67ddc678..4d9084e0 100644
--- a/modules/pam_wheel/Makefile.am
+++ b/modules/pam_wheel/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_wheel
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_wheel/Makefile.in b/modules/pam_wheel/Makefile.in
index fedf07ad..d9ea36d3 100644
--- a/modules/pam_wheel/Makefile.in
+++ b/modules/pam_wheel/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_wheel.8.xml
dist_check_SCRIPTS = tst-pam_wheel
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_wheel/README.xml b/modules/pam_wheel/README.xml
index 9e33d7ff..e40c46e8 100644
--- a/modules/pam_wheel/README.xml
+++ b/modules/pam_wheel/README.xml
@@ -1,41 +1,27 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_wheel.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_wheel.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_wheel-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_wheel.8.xml" xpointer='xpointer(id("pam_wheel-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_wheel/pam_wheel.8 b/modules/pam_wheel/pam_wheel.8
index 648046e6..8077e814 100644
--- a/modules/pam_wheel/pam_wheel.8
+++ b/modules/pam_wheel/pam_wheel.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_wheel
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_WHEEL" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_WHEEL" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -42,12 +42,12 @@ group\&. If no group with this name exist, the module is using the group with th
\fB0\fR\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBdeny\fR
+deny
.RS 4
Reverse the sense of the auth operation: if the user is trying to get UID 0 access and is a member of the wheel group (or the group of the
\fBgroup\fR
@@ -56,24 +56,24 @@ option), deny access\&. Conversely, if the user is not in the group, return PAM_
was also specified, in which case we return PAM_SUCCESS)\&.
.RE
.PP
-\fBgroup=\fR\fB\fIname\fR\fR
+group=name
.RS 4
Instead of checking the wheel or GID 0 groups, use the
\fB\fIname\fR\fR
group to perform the authentication\&.
.RE
.PP
-\fBroot_only\fR
+root_only
.RS 4
The check for wheel membership is done only when the target user UID is 0\&.
.RE
.PP
-\fBtrust\fR
+trust
.RS 4
The pam_wheel module will return PAM_SUCCESS instead of PAM_IGNORE if the user is a member of the wheel group (thus with a little play stacking the modules the wheel members may be able to su to root without being prompted for a passwd)\&.
.RE
.PP
-\fBuse_uid\fR
+use_uid
.RS 4
The check will be done against the real uid of the calling process, instead of trying to obtain the user from the login session associated with the terminal in use\&.
.RE
diff --git a/modules/pam_wheel/pam_wheel.8.xml b/modules/pam_wheel/pam_wheel.8.xml
index ee8c7d26..af0fd619 100644
--- a/modules/pam_wheel/pam_wheel.8.xml
+++ b/modules/pam_wheel/pam_wheel.8.xml
@@ -1,45 +1,42 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_wheel">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_wheel">
<refmeta>
<refentrytitle>pam_wheel</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_wheel-name">
+ <refnamediv xml:id="pam_wheel-name">
<refname>pam_wheel</refname>
<refpurpose>Only permit root access to members of group wheel</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_wheel-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_wheel-cmdsynopsis" sepchar=" ">
<command>pam_wheel.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
deny
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
group=<replaceable>name</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
root_only
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
trust
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
use_uid
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_wheel-description">
+ <refsect1 xml:id="pam_wheel-description">
<title>DESCRIPTION</title>
<para>
The pam_wheel PAM module is used to enforce the so-called
@@ -47,16 +44,16 @@
access to the target user if the applicant user is a member of the
<emphasis>wheel</emphasis> group. If no group with this name exist,
the module is using the group with the group-ID
- <emphasis remap='B'>0</emphasis>.
+ <emphasis remap="B">0</emphasis>.
</para>
</refsect1>
- <refsect1 id="pam_wheel-options">
+ <refsect1 xml:id="pam_wheel-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -66,7 +63,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>deny</option>
+ deny
</term>
<listitem>
<para>
@@ -81,7 +78,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>group=<replaceable>name</replaceable></option>
+ group=name
</term>
<listitem>
<para>
@@ -93,7 +90,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>root_only</option>
+ root_only
</term>
<listitem>
<para>
@@ -104,7 +101,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>trust</option>
+ trust
</term>
<listitem>
<para>
@@ -118,7 +115,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_uid</option>
+ use_uid
</term>
<listitem>
<para>
@@ -131,15 +128,15 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_wheel-types">
+ <refsect1 xml:id="pam_wheel-types">
<title>MODULE TYPES PROVIDED</title>
<para>
- The <emphasis remap='B'>auth</emphasis> and
- <emphasis remap='B'>account</emphasis> module types are provided.
+ The <emphasis remap="B">auth</emphasis> and
+ <emphasis remap="B">account</emphasis> module types are provided.
</para>
</refsect1>
- <refsect1 id='pam_wheel-return_values'>
+ <refsect1 xml:id="pam_wheel-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -204,7 +201,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_wheel-examples'>
+ <refsect1 xml:id="pam_wheel-examples">
<title>EXAMPLES</title>
<para>
The root account gains access by default (rootok), only wheel
@@ -218,7 +215,7 @@ su auth required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_wheel-see_also'>
+ <refsect1 xml:id="pam_wheel-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -233,11 +230,11 @@ su auth required pam_unix.so
</para>
</refsect1>
- <refsect1 id='pam_wheel-author'>
+ <refsect1 xml:id="pam_wheel-author">
<title>AUTHOR</title>
<para>
pam_wheel was written by Cristian Gafton &lt;gafton@redhat.com&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_xauth/Makefile.am b/modules/pam_xauth/Makefile.am
index 7c557706..bf736abe 100644
--- a/modules/pam_xauth/Makefile.am
+++ b/modules/pam_xauth/Makefile.am
@@ -15,7 +15,11 @@ dist_check_SCRIPTS = tst-pam_xauth
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
+if HAVE_VENDORDIR
+secureconfdir = $(VENDOR_SCONFIGDIR)
+else
secureconfdir = $(SCONFIGDIR)
+endif
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_xauth/Makefile.in b/modules/pam_xauth/Makefile.in
index 4838634b..4d3a6b79 100644
--- a/modules/pam_xauth/Makefile.in
+++ b/modules/pam_xauth/Makefile.in
@@ -428,6 +428,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -440,11 +441,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -476,12 +479,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -504,6 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,12 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -593,7 +603,8 @@ XMLS = README.xml pam_xauth.8.xml
dist_check_SCRIPTS = tst-pam_xauth
TESTS = $(dist_check_SCRIPTS)
securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_FALSE@secureconfdir = $(SCONFIGDIR)
+@HAVE_VENDORDIR_TRUE@secureconfdir = $(VENDOR_SCONFIGDIR)
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
$(WARN_CFLAGS)
diff --git a/modules/pam_xauth/README.xml b/modules/pam_xauth/README.xml
index adefbd98..04fc2468 100644
--- a/modules/pam_xauth/README.xml
+++ b/modules/pam_xauth/README.xml
@@ -1,46 +1,31 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.docbook.org/xml/4.3/docbookx.dtd"
-[
-<!--
-<!ENTITY pamaccess SYSTEM "pam_xauth.8.xml">
--->
-]>
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
-<article>
-
- <articleinfo>
+ <info>
<title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_xauth.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_xauth-name"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-name")/*)'/>
</title>
- </articleinfo>
+ </info>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-description"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-description")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-options"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-options")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-examples"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-examples")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-implementation"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-implementation")/*)'/>
</section>
<section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-author"]/*)'/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_xauth.8.xml" xpointer='xpointer(id("pam_xauth-author")/*)'/>
</section>
-</article>
+</article> \ No newline at end of file
diff --git a/modules/pam_xauth/pam_xauth.8 b/modules/pam_xauth/pam_xauth.8
index 90177fbc..31c90745 100644
--- a/modules/pam_xauth/pam_xauth.8
+++ b/modules/pam_xauth/pam_xauth.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: pam_xauth
.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 09/03/2021
+.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
+.\" Date: 05/07/2023
.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
+.\" Source: Linux-PAM
.\" Language: English
.\"
-.TH "PAM_XAUTH" "8" "09/03/2021" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_XAUTH" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -76,12 +76,12 @@ Both the import and export files support wildcards (such as
\fI*\fR)\&. Both the import and export files can be empty, signifying that no users are allowed\&.
.SH "OPTIONS"
.PP
-\fBdebug\fR
+debug
.RS 4
Print debug information\&.
.RE
.PP
-\fBxauthpath=\fR\fB\fI/path/to/xauth\fR\fR
+xauthpath=/path/to/xauth
.RS 4
Specify the path the xauth program (it is expected in
/usr/X11R6/bin/xauth,
@@ -90,12 +90,12 @@ Specify the path the xauth program (it is expected in
by default)\&.
.RE
.PP
-\fBsystemuser=\fR\fB\fIUID\fR\fR
+systemuser=UID
.RS 4
Specify the highest UID which will be assumed to belong to a "system" user\&. pam_xauth will refuse to forward credentials to users with UID less than or equal to this number, except for root and the "targetuser", if specified\&.
.RE
.PP
-\fBtargetuser=\fR\fB\fIUID\fR\fR
+targetuser=UID
.RS 4
Specify a single target UID which is exempt from the systemuser check\&.
.RE
diff --git a/modules/pam_xauth/pam_xauth.8.xml b/modules/pam_xauth/pam_xauth.8.xml
index 08c06cf8..f5fc5a3c 100644
--- a/modules/pam_xauth/pam_xauth.8.xml
+++ b/modules/pam_xauth/pam_xauth.8.xml
@@ -1,39 +1,36 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<refentry id="pam_xauth">
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_xauth">
<refmeta>
<refentrytitle>pam_xauth</refentrytitle>
<manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
</refmeta>
- <refnamediv id="pam_xauth-name">
+ <refnamediv xml:id="pam_xauth-name">
<refname>pam_xauth</refname>
<refpurpose>PAM module to forward xauth keys between users</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <cmdsynopsis id="pam_xauth-cmdsynopsis">
+ <cmdsynopsis xml:id="pam_xauth-cmdsynopsis" sepchar=" ">
<command>pam_xauth.so</command>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
debug
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
xauthpath=<replaceable>/path/to/xauth</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
systemuser=<replaceable>UID</replaceable>
</arg>
- <arg choice="opt">
+ <arg choice="opt" rep="norepeat">
targetuser=<replaceable>UID</replaceable>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="pam_xauth-description">
+ <refsect1 xml:id="pam_xauth-description">
<title>DESCRIPTION</title>
<para>
The pam_xauth PAM module is designed to forward xauth keys
@@ -81,25 +78,25 @@
If a user has a <filename>.xauth/export</filename> file, the user will
only forward cookies to users listed in the file. If there is no
<filename>~/.xauth/export</filename> file, and the invoking user is
- not <emphasis remap='B'>root</emphasis>, the user will forward cookies
+ not <emphasis remap="B">root</emphasis>, the user will forward cookies
to any other user. If there is no <filename>~/.xauth/export</filename>
- file, and the invoking user is <emphasis remap='B'>root</emphasis>,
- the user will <emphasis remap='I'>not</emphasis> forward cookies to
+ file, and the invoking user is <emphasis remap="B">root</emphasis>,
+ the user will <emphasis remap="I">not</emphasis> forward cookies to
other users.
</para>
<para>
Both the import and export files support wildcards (such as
- <emphasis remap='I'>*</emphasis>). Both the import and export files
+ <emphasis remap="I">*</emphasis>). Both the import and export files
can be empty, signifying that no users are allowed.
</para>
</refsect1>
- <refsect1 id="pam_xauth-options">
+ <refsect1 xml:id="pam_xauth-options">
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -109,7 +106,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>xauthpath=<replaceable>/path/to/xauth</replaceable></option>
+ xauthpath=/path/to/xauth
</term>
<listitem>
<para>
@@ -122,7 +119,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>systemuser=<replaceable>UID</replaceable></option>
+ systemuser=UID
</term>
<listitem>
<para>
@@ -135,7 +132,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>targetuser=<replaceable>UID</replaceable></option>
+ targetuser=UID
</term>
<listitem>
<para>
@@ -147,14 +144,14 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_xauth-types">
+ <refsect1 xml:id="pam_xauth-types">
<title>MODULE TYPES PROVIDED</title>
<para>
- Only the <emphasis remap='B'>session</emphasis> type is provided.
+ Only the <emphasis remap="B">session</emphasis> type is provided.
</para>
</refsect1>
- <refsect1 id='pam_xauth-return_values'>
+ <refsect1 xml:id="pam_xauth-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -205,7 +202,7 @@
</variablelist>
</refsect1>
- <refsect1 id='pam_xauth-examples'>
+ <refsect1 xml:id="pam_xauth-examples">
<title>EXAMPLES</title>
<para>
Add the following line to <filename>/etc/pam.d/su</filename> to
@@ -216,10 +213,10 @@ session optional pam_xauth.so
</para>
</refsect1>
- <refsect1 id="pam_xauth-implementation">
+ <refsect1 xml:id="pam_xauth-implementation">
<title>IMPLEMENTATION DETAILS</title>
<para>
- pam_xauth will work <emphasis remap='I'>only</emphasis> if it is
+ pam_xauth will work <emphasis remap="I">only</emphasis> if it is
used from a setuid application in which the
<function>getuid</function>() call returns the id of the user
running the application, and for which PAM can supply the name
@@ -247,17 +244,17 @@ session optional pam_xauth.so
</para>
</refsect1>
- <refsect1 id="pam_lastlog-files">
+ <refsect1 xml:id="pam_lastlog-files">
<title>FILES</title>
<variablelist>
<varlistentry>
- <term><filename>~/.xauth/import</filename></term>
+ <term>~/.xauth/import</term>
<listitem>
<para>XXX</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><filename>~/.xauth/export</filename></term>
+ <term>~/.xauth/export</term>
<listitem>
<para>XXX</para>
</listitem>
@@ -266,7 +263,7 @@ session optional pam_xauth.so
</refsect1>
- <refsect1 id='pam_xauth-see_also'>
+ <refsect1 xml:id="pam_xauth-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -281,7 +278,7 @@ session optional pam_xauth.so
</para>
</refsect1>
- <refsect1 id='pam_xauth-author'>
+ <refsect1 xml:id="pam_xauth-author">
<title>AUTHOR</title>
<para>
pam_xauth was written by Nalin Dahyabhai &lt;nalin@redhat.com&gt;,
@@ -290,4 +287,4 @@ session optional pam_xauth.so
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_xauth/pam_xauth.c b/modules/pam_xauth/pam_xauth.c
index 03f8dc78..f3e2a40d 100644
--- a/modules/pam_xauth/pam_xauth.c
+++ b/modules/pam_xauth/pam_xauth.c
@@ -52,6 +52,7 @@
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
+#include <signal.h>
#include <security/pam_modules.h>
#include <security/_pam_macros.h>
@@ -99,6 +100,7 @@ run_coprocess(pam_handle_t *pamh, const char *input, char **output,
char *buffer = NULL;
size_t buffer_size = 0;
va_list ap;
+ struct sigaction newsa, oldsa;
*output = NULL;
@@ -114,6 +116,17 @@ run_coprocess(pam_handle_t *pamh, const char *input, char **output,
return -1;
}
+ memset(&newsa, '\0', sizeof(newsa));
+ newsa.sa_handler = SIG_DFL;
+ if (sigaction(SIGCHLD, &newsa, &oldsa) == -1) {
+ pam_syslog(pamh, LOG_ERR, "failed to reset SIGCHLD handler: %m");
+ close(ipipe[0]);
+ close(ipipe[1]);
+ close(opipe[0]);
+ close(opipe[1]);
+ return -1;
+ }
+
/* Fork off a child. */
child = fork();
if (child == -1) {
@@ -128,7 +141,7 @@ run_coprocess(pam_handle_t *pamh, const char *input, char **output,
if (child == 0) {
/* We're the child. */
size_t j;
- const char *args[10];
+ const char *args[10] = {};
/* Drop privileges. */
if (setgid(gid) == -1)
{
@@ -168,8 +181,6 @@ run_coprocess(pam_handle_t *pamh, const char *input, char **output,
PAM_MODUTIL_NULL_FD) < 0) {
_exit(1);
}
- /* Initialize the argument list. */
- memset(args, 0, sizeof(args));
/* Convert the varargs list into a regular array of strings. */
va_start(ap, command);
args[0] = command;
@@ -209,6 +220,7 @@ run_coprocess(pam_handle_t *pamh, const char *input, char **output,
}
close(opipe[0]);
waitpid(child, NULL, 0);
+ sigaction(SIGCHLD, &oldsa, NULL); /* restore old signal handler */
return -1;
}
/* Save the new buffer location, copy the newly-read data into
@@ -225,6 +237,7 @@ run_coprocess(pam_handle_t *pamh, const char *input, char **output,
close(opipe[0]);
*output = buffer;
waitpid(child, NULL, 0);
+ sigaction(SIGCHLD, &oldsa, NULL); /* restore old signal handler */
return 0;
}
@@ -549,9 +562,8 @@ pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED,
}
/* Allocate enough space to hold an adjusted name. */
tlen = strlen(display) + LINE_MAX + 1;
- t = malloc(tlen);
+ t = calloc(1, tlen);
if (t != NULL) {
- memset(t, 0, tlen);
if (gethostname(t, tlen - 1) != -1) {
/* Append the protocol and then the
* screen number. */
diff --git a/pgp.keys.asc b/pgp.keys.asc
index 583accd9..b56d6ab1 100644
--- a/pgp.keys.asc
+++ b/pgp.keys.asc
@@ -1,154 +1,138 @@
+pub 4096R/A340AEB7 2015-10-21
+ Key fingerprint = 296D 6F29 A020 808E 8717 A884 2DB5 BD89 A340 AEB7
+uid Dmitry V. Levin <ldv@altlinux.org>
+sub 4096R/39E16E36 2015-10-21 [expires: 2025-10-18]
-pub 1024D/D41A6DF2 2002-09-23 Andrew G. Morgan <morgan@kernel.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.0.6 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-mQGiBD2PVCcRBADmR2dfKJIaGj120v0EjrGbnYic8nKCrDLUHmtiZyIlMeTNqnw/
-/Q2m057SIyFC5K5W7XV8LIsOcpEBAdIS5QLClwec/wqVj1FU5TLHNifR9fBq+DaI
-tyMH+LX/HUo4xPaJ5KnE62/3M/SyUx/S69RURfRdDsC+9ucKZkW9mnRiUwCgm18E
-+aUKNBKGyqHaNK+n50jxW0ED/2epmE6porj12MyTlTvmxHuq7SSqgzTP8KoNoOE4
-mtZnYAkopb8uksBo4yj4abfBZNiVXEttc+XpwhnRODfy576wVy/lmDMTFAz7CYw8
-5Qmsf9HZXyAS+XovscbYYAWq11BycqHzVNqOevMZPX4Om7+rHBcIPI6pCd3ouPlW
-ObE5A/oDWXC35DcgFdmgVH2qr5COEvrDs9T5w4UdRXBMj2khE+32rdP0qqGYCW13
-by84+Cpoekmg+6/FqL/At0Xl2a87czur5xR9mrDd32iknws0DggEuf+zL3Twt9kA
-ftnqgiGr33iaNeXwgqfgQYMbxruLvjaAOayKPhr+tgJU6bIpWbQkQW5kcmV3IEcu
-IE1vcmdhbiA8bW9yZ2FuQGtlcm5lbC5vcmc+iFcEExECABcFAj2PVCcFCwcKAwQD
-FQMCAxYCAQIXgAAKCRBCF4Sr1Bpt8u+VAJ958HbiLmhrpWjAauN9GrtKudijkACf
-R2XasdjQs2ECc2qMX19QwNohDAc=
-=7XTB
------END PGP PUBLIC KEY BLOCK-----
-
-
-The following is my DSA key 'D41A6DF2' signed with my old '2A398175'
-RSA key.
-
------BEGIN PGP MESSAGE-----
-Version: 2.6.3a
-
-owF9k82L42QAxmccVjFzUNjbHLQLHlbDTJq0aZuRAd+8+WgmaZqkTZtWWchHk6Zt
-vpOmGcT1A1zm5EVZPXhQYW972IMHFVxQPK14UNjLICKiexBkEQQ9iI7zB/hcf4eH
-B57f6dY7O5e2jt76ab/58Db7HPVasb3NvLvzT/5G44+H1uSpW0/fffDih3Dv9+uv
-/ka/9Nh3n/h865FH0Qd1/f7Ny4/jg28/uPJ9tvvRjTdPrz1z+vVnyf4t50T95vmr
-/gtninr/q7NP56+8/4Xb/tlJl9d/vXNj9+bnly6/vHX2p56urvwQ/3j3y92Pt/eO
-3w57h3vO7O+/tn+5dw17HT555/bOe9YTQZR6ZrjPNHHQYjhi6zz7/4VmeUGuKbxS
-U3RaEmBNZCc1WupD8QIjo1ma+VF4WOPDQuFra/ygftCqXeVlHZP8sNg8i8AoCGZh
-fljjorTmh25Uy2az2jzP40MMK8vywAuL2Ds470eQQOV9miGUEbQ1GjCBRjiueCyY
-/AIn6us6u0h5K5z4dicUYcpIejfI/WklrHqzoZyEJYZgKhHUyfZAqDhIiuS4bYw6
-kpD17ZilgSMMSFWCq3JmY2UyWuCcTg6lruy7GuXSCcqYApJXvS4qGVhXj5obxTwm
-xZBtEVijhw0qfYMNWpSma67mMBlEqcIWp8sxFYSar5fQC/AOi6CmLsq0yFdJ15RF
-NCTri824zjIYMYsDthVH6fmWXjVcDdfBplsk7cEg8U6GSkeM5KjPNpEgn4YTsIxi
-q1MsMzpqVoumabn0VPZHBpvnNmrE5TzU+oxbke1WOaqwVcD0hhw4acNJ2UFINchc
-qjs1KjBAjWid2dZkAsYJjtOVnXRPRnLSn617U8Vo9oM2mnZpW1CEVgydRlQoqzHS
-t1gSYBEzNmCDZGyPcwJv1CWSlIR9dp0yGTUky6buaAbdWxDLOYs2iNRR6knCT+AY
-byBW1WmiMI5my8BDWxiXSBjI68aKMDtt+6RIyY1GBSnjNAh/GZZZnfE8tnDRE6kx
-LHNqCRA3DxPP59NGwzflmVF6ieupk561SQtpvTBB36xEZZ6iuXestywhHlvqUh2T
-SzsYNQTWLhCBxdd24MwtH3SsMVVNCa5Q+XxlB+TKguQ5s1Gfs1l2w0JA2xxYXJyO
-g6UtglJlEE7tQbCZQKAKhgeACDUacs1BitNx3inQETimyE7X8qVgnsbjBTALmeLT
-XCwcf7EE0EU0wjAzZ6FmBAttIukZOKWWcjRngH2EHLWNIY1cGMTKzP/o9S8=
-=cdkf
------END PGP MESSAGE-----
-
-Type Bits/KeyID Date User ID
-pub 1024/2A398175 1996/11/17 Andrew G. Morgan <morgan@linux.kernel.org>
- Andrew G. Morgan <morgan@transmeta.com>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: 2.6.3a
-
-mQCNAzKOhJ4AAAEEAJ9xYnZSD1kYanF+8GUBhHf/gx6hGd8ZNmS5qIC8Qb8rMcTI
-+E16nV+FnNRlPRbShITYjq1TPvVK8gTliZf41N9LRQZw0rywRt1NQyhdfKgDWYxB
-kSOwK67oDjkzzC56XS2rrGI6K3Rz/VtYElRyuQ6ZyaKTGcgU/TTwrUUqOYF1AAUR
-tCpBbmRyZXcgRy4gTW9yZ2FuIDxtb3JnYW5AbGludXgua2VybmVsLm9yZz6JAJUD
-BRA2iFK0NPCtRSo5gXUBAalqA/9s3Hx8BUESiC9PpL88KSVe3ENoO0ogAuMDK3vj
-k2a17Twxi92Dc/NPXr8ewEKF/h1GiRetLBVPGaSVC+602+2cr5SHqzUzAeyF2Xa6
-VAxCskxkAssTxIW7nyAMWaOB5A/1xm3YChawVQx3XIvbIp+HXHDNr/60COtlGm7I
-IcHftbQnQW5kcmV3IEcuIE1vcmdhbiA8bW9yZ2FuQHRyYW5zbWV0YS5jb20+iQCV
-AwUQNohVmTTwrUUqOYF1AQEgWwP+K94N0OO+I2A7lnP5Jp7O+kfMJCFxPZOeozrq
-O8uKsAs03ekS+kDJ3p2ec65BOzZyweHEu1HtOtdZbXsN3zynLKBwJrvvaHBQpAqv
-BrjfNsl9a+NFmfa4fmdPWTzCaG2rmFlaQvZ6FP7QrHXB/1+VlH0gJ90FOgAd3Qyp
-4hhW9g8=
-=qQJI
------END PGP PUBLIC KEY BLOCK-----
-
-Type Bits/KeyID Date User ID
-pub 1024/4536A8DD 1996/01/28 Michael K. Johnson <johnsonm@redhat.com>
- Michael K. Johnson <johnsonm@nigel.vnet.net>
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: 2.6.3a
-
-mQCNAzEK0l0AAAEEAMWweYcS6ov1RISP6E7lb3vgQOrmhBy6S/8zkuHo92IkQWXm
-V9AcMUY/eJPRJH6yI6o1ZKN4InT4uCkSIQOd2C8XyeIK5jFhpmP9DhoucacNL5H7
-oCV4wtFGhUDaDl9VeTtbWLSMESxJ4T/fL/IfkW95/Q2dF7zIDid5aW9FNqjdAAUR
-tChNaWNoYWVsIEsuIEpvaG5zb24gPGpvaG5zb25tQHJlZGhhdC5jb20+iQCVAwUQ
-MuqeiDTwrUUqOYF1AQEjywP/bCWLybbZSI8plyUSWD3yxwjsE+8BiOPGRu1AARUz
-GbVZq9LqPDyjFtH9DqgXULyZtCAk8ebZonH/h/0EnZTi4tiZg3BHKXhIlWQnNz4D
-QRdtUEmMNQzi9+3mU99CBGigsrDQnNrnI88ejo/0YY3gdt6752g5HAvY13h9A0ZP
-MFWJAJUDBRAxgAouJ3lpb0U2qN0BActVA/9vgBOUheUpLPiIry/+2qqJv+e+LnHw
-DgZqROpli9bhJ4wfb1sXPYkFzchR8BUeU0NY6HvAwxEilSNPE1yQoaJuy8POtTuu
-aFO4wvuLp0v5LuatXaU8EsncwjrBsWqRB6Dqd+jyq24Pjx0YKNSRJxceiBE8SBDW
-HESAhYTYCBLy77QsTWljaGFlbCBLLiBKb2huc29uIDxqb2huc29ubUBuaWdlbC52
-bmV0Lm5ldD6JAJUDBRAxGljWe01Ojay67k0BAf3qA/48N9OvgGk9nNR+Pg6aW3rK
-2Dy8t2RQdFGd4b7gBtZeXUAklq9ppYZtS+cXFHoQ8d7K8XBjHh+rgF2oOSBQUrQf
-eb8XkKSZQxB7DZVdi1gAsOzSwCrn4TWSSKc28P4Mjuj1Jr2f1FGST1+cGIl7JbhV
-kLGjmvOIgs7lS8FE0Hhm/4kAlQMFEDEWclxEcVNogr/H7QEBN1QD/1iY+KYQyOTz
-fgaBsx+Bt11kstmOlYhXx23yK2etG0p8XCD2r3aojGOTR/e3o2bLiJo4xe+iMhOM
-dvdSzxSPGQ20wX3jGJaRrRiSClFTQbZSelGG0FcOGfM3mL5zeHaXzRcRciK3VDkD
-IFzTQ3J5NJVBIVlAkxTMIxho758lR2SjiQCVAwUQMREqFnoDqzGe1QXFAQFdpAP/
-VPPoYO50seo1rLL28AA2PVKqo6BJwj0ZMsC14MDJEKryBbj/E4Ma25uSlzBjj+t9
-rbygoz0XWUQMLh8XPAEps3nE3n8FWROsdlucGzGiDGKVEygLPzCsjR7aGEspN1Y7
-4qOZPxbpGG7B5exOLur4ACY75m6oBh+PN+Q1liCIYXKJAJUDBRAxDpk1iGe2nxKR
-G10BAeQjBACmx4DyJacQXxuckDaKMTXa8v2Q7lQpPDyHdn1oAUsx1mrbSL55v2AI
-Q0riFWcFRTERpjAToCLgQjK1pKpmJcduiXURj6TPVKd88hYkuCIpn2hIaI7SCkd8
-HZlfFiuaxVN29UbbzHv3C+mseydpkPRrovqmOSuj2xAGFALo6Vl9U4kAlQMFEDEN
-eD5EFXDNRmtCiQEBRmoEAJAuyY0F5hbweDOdeAhxLWeiTl9jGwQYDS3T5B5/9ZpC
-bJ1yX7Pk2o7LvR9tg/Ji5sfMMvIpH48DNT4kyjmmChFXCUBccwd+33ugdTcYDwLR
-Cdt7k9r2yXz1LEH+lVNKOEIhuIq8/sX61hvFR7+qSABthTLrvvynycD5n2pG3F7L
-=aGjw
------END PGP PUBLIC KEY BLOCK-----
-
-Type Bits/KeyID Date User ID
-pub 1024/D4F4D901 1997/03/05 Cristian Gafton <gafton@sorosis.ro>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: 2.6.3a
-
-mQCNAzMdU6sAAAEEAKLF73rRJ3RUtl+y4bLUOVOV7ataJ46ZHxDZeGAVi+/suwT9
-Kq7QdaeFc4Xwaq8PVWv7pZ4/qTwHUkdbjBVeLt+KOlprvKuadyAh9aG/SqmKkEvA
-hCS3yZDwNmeSLO7VIN5ko1nIwVD4kPJvS3xX6kn6jd4mvv/qGfGvxKXU9NkBAAUR
-tCNDcmlzdGlhbiBHYWZ0b24gPGdhZnRvbkBzb3Jvc2lzLnJvPokAlQMFEDMeTlI0
-8K1FKjmBdQEBmgQD/02JxAU6+fiaBKwRIFDdsLYTy8mPgYaoul9RIX450W5D5nY/
-/696F6TfmFUzvnrvTbZUDyLxHB0mnh4SrdKRKo57i7RDrdx3Mqlt/xP4R6nHwFed
-yTMvz3KB9tYuWfC1fJp69/VRIkMrw448zKkgqHUnAKxMIHvXnV3M9jd6lXSYiQCV
-AwUQMx1Tq/GvxKXU9NkBAQE3/gP/RZMe59OkBWS4whc9c6eac6zwcC/hNc1vyiZ5
-2TEHJ10PgtNtHchD7j3xsDO17/DGEZB23OQiPAeLdqnBr+y2uiSlQfYdpVHBHX3A
-uX3onc69LpEHmUAJAVOvfU1scnDtOH/KeVN3nwc6PWLxzLWzXfUbwLNK+LiPMNMV
-1qygu+s=
-=J4G2
------END PGP PUBLIC KEY BLOCK-----
-
-Type Bits/KeyID Date User ID
-pub 1024/A5D75B79 1997/03/01 Andrey V. Savochkin <saw@msu.ru>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: 2.6.3a
-
-mQCNAzMYf1MAAAEEAK1S5jgmWnn8IS9mKoSpXu87f2soQhVZ3XdvsBCK2V7BojlU
-0+JJrK+2gMH5tavyFsQ6cKch6I4xH54cS4P4tNE9M7OtfoXOxejtp9U9KZio8T0X
-gM8qOS4fTQEfmdHSA5ETe5Vv+WPZ+/3SCo5kD1uIUUwppHDgJH+l396l11t5AAUR
-tCBBbmRyZXkgVi4gU2F2b2Noa2luIDxzYXdAbXN1LnJ1PokAlQMFEDaIUh008K1F
-KjmBdQEBFtkD/38mraXdr4aEYC6lxlG3cF+59XB6FjyBYhtwgNshpI2mB5XLr25p
-f4jMFNUqnY/bGjXWKwbNguzJ0ukD8TgOg1ZXQZztRso1t1Y2M1KPbwlqj8ib1bZG
-inQO/eqLrVwFH6F9CTiF0Fgy7faAIHN6BfE0o8earrcIwjT7sxRej3lziQCVAwUQ
-M35653fqPT1smcpJAQHeqgQAlXMOru6Rz1TkslVrWD0n7dvBUHQxs0HS1pcWJnZJ
-6kcYMLSA2RBi1fRabwzuOtzK60tOmfmnD7btcGBMMflOtfSulEg/xKNw2awEsNQK
-ULEIBsvrpMr0UN4hWkxTggDXaykg7rQqgrbAsicoLuTtPDIbc+yhQcFEVGJiPO/I
-tqiJAJUDBRAzfnUef89/VVw/1FkBAQ2lA/9q6FQM4RZzp75qxZ7jqAwUy9RFAKhp
-L63YFJX3i1JsUjNoO51pjj5pEAxVVQsorqbdsmpC2aOUTf1AufEcs1kLojb3tc19
-MhXPyHTJs66QqWutdP/yOW+CLzmILAsbEgI6O+toVZ0rHVXjEtRgKUnYReHLrlYj
-RKlBnkVc3NtPcIkAlQMFEDMYf1N/pd/epddbeQEBfKYD/3x/PkH2e+Cy7YXsfwxb
-y/n+6eNIbfakSYjkwN5tDOeaKhdQKUJBKVwAzD2yrLmMDx6uW+FUOTucb6Anau6R
-iKrAJq/a4DcpAeymo7cAthVU7en7HWwebQcL4wZGao1BJI+ulynki4sIqkfbGP83
-DK775eovl5X195ZkE/wNJvoi
-=V5TY
+mQINBFYnbLEBEACsADGvgMHHpUYlc+g0KnDHeolGcP0rNmIHKsRTt+/liKwaVDMk
+MlSsv/kyUwZPu0rVOnQy0lvVOjEXBViMbqcN6UTGMJbxLZKLgqY4a0B25CWKNuMT
+qb3/1ZgeIXHpP1hMTk60+yca3eRBSwYUAv4PxUBV15ipnYc0pDxkMy3v8Ty3FSxT
+aHnm0qxnRTgC/ZFSj66+iixlo4B2km2cHwuxm1NE4FQQ5y+liWB7ycb2snX4a00Q
+IhJEre480viprcyXfw6GiixlRUWexRd+wBYdwLYy8fxvHw/fV5NhjF7Fy5GkXfC0
+MVCPE+PMbuhgRIhgbMN9UlRy1V2xOfBsJaYlQfJVfxGSC2n4S4mB3SOGlbn5G7Wb
+vDqQAPyrfZ089siKsurLtJI2ksZBtPpoJ0Meh8tfqqOfzcSULrJPwPHleyZQNkgQ
+ScuChJPVcJkZMv2aE3tcK//NiSXYhtTwWzc9TOIFN2PfaXh5oWFUcnAK+2FxQWW3
+D0jwx3njy2UcxqAVNjIUhNtSHtBXZKEMZgfWfpgzNNbxJIJMZqVA5L4/7LuINdIZ
+aEl8VYb/89nMjVs+FMp55Zd/Va53Hugc7VxaS6JuFetC84ax4x2aKSGtiKj5CLhJ
+TBuy1Z9t4RimWkj0x0l3D0tdtmwYvWYCVaF0A7/i21J8RwBTiBEfT41HowARAQAB
+tCJEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+iQI3BBMBCAAhBQJW
+J3OlAhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEC21vYmjQK633lQQAJeb
+7Rxnl7t9iMYqQXlS1T4GMHVhk1flrN7k7roOg19n8u+Y3WzszCqSvRG9r3kn4ZaN
+ZYiLtGf3jwVoZIvxEdiMveL89orGObSbnDEA3bwe20MFMouYbPYX9LamGR08CZ9u
+CQ5HjeKlyos0IcqdXyM2AZ6yfPG5C1FTTStRr94vlr+gYm0mCTPAXWIIwdf4wwlL
+Noei1GpVKGdU47zVmRfoENUjl47ykXme7PnRKJr1mjDzdEsdzDgW7olrRzCG7mbK
+tDoGby5DRrIquArjODhWdqX4iipzpaZesMsTkP0OHNkUYS9pDbMf6uJDmNXeNN4h
+EphJQzkq2yGBGF8riIqiVmum3hPGA1pbomeUobVl+2fdsP3G+m2Py9jB75v0OheE
+jey2+vhuSpVKVL8IuwFv5TYlU66RHY0tDFXO6S52KacIVAywQ2JdrSmfKtIVWOO2
+eDRbtaSKTiYA3dPRCyECUn24GgLFOCBfp6GgVF40uROepIZTU+wC9Txe9QnSuAcm
+CWoQbq4CaJFROGoLFuFqaiuxhQkbv+yAqWg/+ozImsWSemRxLaT2bm6IHZT0VdnP
+LuhSmC5EAKN3rx6oK2EyMSvwx3X8gKdkUzrg75d/tcS9eAmi7gMwpDPdKhkWaN4q
+MCHZDLA+fIuk/CPMJnrvtR4BMq4Y62u+uVOtoqUAiQI6BBMBCAAkAhsDBQsJCAcD
+BRUKCQgLBRYCAwEAAh4BAheABQJWJ3O0AhkBAAoJEC21vYmjQK630H4P/i79LBSd
+/lqrPloeaehvYvSputXrmMjwc/vXKpEY1F8fM2yftIy8ED1RdZw2A8o9l7E6ZFRb
+MKhMlrcTOiGL0TZg2ctOi1YpaRlFyzKE7bjyS44fC4OF5JJWsM9Xl2Am4/8ppgft
+AthxWvuC4iBf7iHGuQYuKPlv99zw5kzmae7oH5QHcKj/OCLh49/06XEiXyoRcogR
+XPx5WheeJigM4vX9gvqf2KsO3KwKTK7H2QjmAVtoTbmqBGvBvyqd43IDwuJSCAUu
+hKpCRSK92W50IJ6YV8sOBSDOEOPskQypQyGqctj014pjkBfHM49lealcldMaVyPk
+UqVWb5ldSBMvpAqrl0GPZR9tJ+MqMTYw0wTKvMr2jjgVfICTq1VJq2WlYL+oRn5K
+M80q+vqP7cmYZG2hjnYMTwyqDRWy9ecnKqOTPSeGPhbxQvnVnuxeUP2izfuY8pET
+exkbgXRNvDQXvMft/963k/OXETilaFCOe1rdzjSldgATnsLJVZxIBBzdYoMrmMZe
+fb9DnYUbWIKc6NvEDeWBbaTF8pqZg34vj9HfNwaMqZUWcmQP+ehUh3w1lwSdjeIh
+J7Z9qc9j+A+jl47QcJ0zpbS4U5K5D/e0qHlu5n2fOs1By/FslQoV6DDpIjnDgvrE
+o/jv3yd0O2IK/fvTmJuDiVVlR+oqqncTQLF0iEYEEBECAAYFAlYnefIACgkQ2XqG
+i/fduzrVdgCeIrs08mJ91aqZLEiDP4WjSWSd5HkAoJiCXZSkPRAN3VLsRsxefmkQ
+ZaQjiEYEEBECAAYFAlYnehEACgkQfKvmrJ41Nh6TMQCfZ6mUun/PTqNnRKOBHXBW
+9LSJqekAnRDhtkSwY5D4C4JMHiBBUv9SbzxwiQIcBBABAgAGBQJWPlP4AAoJEHvM
+cvpUpXXN4uQP/jn+xSBiITRgCsdqC8P7E3cO4D7tVBwZrFDNx+8ARefK8XvSiIop
+T0xR4OU2j65oGs9r5/F80eOdMFiazXkntNTv2xF4JTMBgme8QaG7EsRoG/pJqIV8
+s+G8xO8tdf7aQzRmYVvvwnd7jPnCioUQA20KwQ6EyvlLPE94OR63PGrm9SI+yHmF
+xOn1k+uB2g0HjbZabnFTJuOxvsJNrh0I1XPYb227HsQxHdLJhoAN9ZoE3+nJ7xDl
+9arCeI6sAcgwDb5B7tH//afD2eLm2DScPeoyBoU6yDI+V3thcVKAZgm8ow9z/wc9
+LyWtq83KsRp7qVy41m88DriHVHMmXLoXCQNQ8QSJl5BXhgs9DYK+AxvZEZL9v40C
+H+ZTf1AvH7OPYb+wyYpL2zD1ngyMyr6xqhBXAWuxboL2KDsJfzrz+rwprlDDDxek
+Ad075jGZDDVqgbM2HVD72pLRxnxAX4fi0tUSksF0x/zBBB1W9TPLMtVh2j1rlovB
+HdMitiNlC/squJzscYM8+ovke5OTdyKxBHlMzACP2tlUCoW4T4ORtzbtXl+aAAmf
+36o3pvs1wqkhgoZTmQic/o7ammVp4wHU1q+WzuRaELIbxPzca24hGz6A2VXBZif3
+jYUnLIb+ZYYB4XREZP9UH+7duHNj9CufIy96mN2aqjIqo1l0E6eKzhBmiQIcBBMB
+CAAGBQJWPocJAAoJEP78ZdGBr2RKzJcP/0tmmfl+XKFaTXd/V9z3nPs+yE5yMFBy
+QSiwFInEkNn7Cb/IsK2OeCtcOim7yrGKD5UyB8uNKGwJ52nf5mo+jtX/rtKd1Vxi
+QkCU+g/x2lUGFJU5y3jTtxXK99i+0+sa5gT8vDgFOZb3lUgsEKIHeGFOS656ffiQ
+tS8tp6Zs4AmPQxJcO28r/fKjP8yg2wUjZDvair/CWxM4FosHCXLa9dJDyYa3akMM
+ETgYD+BmrgcSjiIjvv6ONesBJlLf/7PxwjZOLjbmnTocyJZqRRqZMaLc3FjOH4Md
+EuzzM82OmpH36h7pjD7fXahEIs1LY3zsa6k7kZawX84oqBcVql70iZQ7Le+EwgMd
+S649wywWxKrdDPSzMnKlCod1ado7DDjbkRFfB/0sJNcyWuuKnanZ+jtTdbb9oGfI
+S/JlCu3JybmEdwuxpEa9xw9l+MUVRJIpcOVbEMCmNTKyabvFRciYnWav/xtYmjoA
+5ivKT2NNOkNs9ycijG6h0xUTDwLcXv6cHzE2XHzh+HmAzoM9sV7SgEZl9Mt/pR+l
+IrlmP/oZkDReAbToF6JfwQpPlKusyganJjL0JI8Yv+zwPOAa7F2KNE4jtmTdarxN
+RxYqqvPj/NQlcbHOKB6MAKkVbmSlOl9tUIyU17hFZAatWkhOMeyXyLbb2efeDvaq
+coMRLMswa6ukiQIcBBABCAAGBQJWPuOZAAoJENgdDwyO0+iCyHMP/jC7IXOp75XX
+Q71yCqPLB5Fnb//i641Y5DtjfGXqILgNQKn+MBgeN8oW6IFZQI6YfUR1HKS6gwUn
+PEGXOc/vSTv1ifjQ1LQE85wm+L+9RLVJqymdOBIGDhObWa0l8DzpKCb4gnIcLNFD
+Jf3NkKswalby7GEVwe1e86dTQzGjiik/3Ii3jVxigOKtgLtQjBeEwKcPImJkewCY
+a6lJx/Aylf8GhQ15a9KOHOSr+lbc+B5l57tWKrDMJCWXyYsJNV7LkJ0GSv6rmHrh
+uWSr+Zqil0YqCTEawz6FmlhYSJjTz1NG7UGjyCFzhn7piU7w5JYqJOVnpkGcRlvu
+6n1IbzGfHBiafUqAAcqxEoWRQyYHKyfoZBVBPVpgwdrx5M3XKe0HEx5DBq5aBdUK
+8rU9JJ/fHrLgjb3XxxXHTARNKdLlzcpufAP4XnrYQL7Co7h/YSc1/D4T8DTne9M4
+4z3wcUzxl9pNGX06uhs9wcqFTu0Wwg0m3GUHizfO6NZ/RejBaVfcx/2rGeBxlSqf
+SbIYfscrqmuL1HStjjUqmZIM70Rvobrp5nR610IRIRN918fAIE/ocwx0H/B/33bk
+XeEuR7qhtwvaD2o9yosT1KIZE1r+A9FxnzmCs3v1uly/5X1PMNQQwERDItS9jDm5
+TzxHnUf1XdHc9E4P43jFrj8yNOT7iIrTiQIcBBMBCgAGBQJWP2aFAAoJEN0/YqbE
+cdMw9ewP/iu6otC2BZE3id/1o7tyyvcdEkTx1sLOq+qRTSLuKoC/gB9KBjCeqh+L
+mrr1yxDcN/VFXxSf5Y8zHrBD/twQ0kMbRu3r7+a+bAsxobfBcpGC2HCyHPTHyIL9
+9QNugMAm1XKWXJoNwc0GepEKpWyn0OhSXyX3TOCijZ6fxllBtU+1XjVOvwIyqV0f
+v4GepiiOqI4B5RJRK1Hj2645nV8IAXExsJhaQGG57tAOVyNw80OmcFDISH1kaINL
+ZkC+DNAHLV3jU8WmqhuT68FWjsTZ95DlsBfgUYoulX+vGlvlisyba6pwXxiI/GQH
+mxIHVtZp3if88i+YDfyBXje8NVprgMRH4YStRBWjm7ki5zh99YR/VqGKt8NTYdIi
+8yuaQTDHoJeWhvjCOguPb19i42RzbEVKY7zdKVziwYVELpGtLJ5Jhj7HMGkj/Q+3
+9n47IqpiQ2gmRtx3lncOtyKBcbG9CcBE4g5Jk0zIXzO1ksjBKy830PgPWng8CoY5
+Vh6gsFvq57wWOEQaWRr7LtKufainZIb5BiIX4LOQR6yo7j7RP0qdId8V79BNrbrB
+5LLdFS0tWFmVQv6Rssq6Tmq6VW0NBv53D7ELj7DYHcRCpw+7b1PqFOkGfr4XLmWj
+vzFRB+RB+xZdYgyQaWbXV9wSSgbhuUm8TP8/PsYKXNqDUExN1ixjiQIcBBABCAAG
+BQJWQRe2AAoJEDVC+iPpPR9CRjMP/jHa+sAN91J+xrUMoZ/FSR+yzJXoz6c/gTs+
+XyKY8eGz9Q7x3O3bNNYaXsGBHttwTM82l8hxxlYBaDe/UJ/qZtGKoJ0qW6PI1UPb
+yCzjS/uL8TSKWZHVcCUBklqUAsd+Za3VwRLCmQ6CuyvHsooOWpvcTuFKZwm2aA7i
+IqisJBWtbiC5jVgJVo90blWkG9NOK/td5tP4iqw8fhiW6HPUlyOriVaYXaM352dO
+RG2wWrF66rOfNFwG/HM3TxJU3cHbeSvNPbftWGaN9ob6w9boCnn3G6KSF1jOTfe5
+doVVmWrEhWDhtSBsn62MzsspdKxbKNUqS6CmUbZT79IrFtKUVOxdqdBaZpwrnESx
+1ndGB/jYI+x92UqnRmNKIylqrx09wU/tUZoFGgQnohENc+LK676OxRbIcyhpfWDJ
+27K54GHfDXRmAi6tPMp87GAG1FxEkZXJULHsiI9TfLZnCoTLlDQGv+UadxdM+dDe
+A9hesK+UmohxVKUgyefaEMl9Yc5JfLiFlLA7aTI2E+V4/7nKjVeG+hUg/22y4ZYB
+KhS/mLmWphXx3qo60j8Hu1oArp3ckl5nne5s9yYyxYj8+2UGSPri8t6PSJG1bBGy
+0TM7F8THondVVA1wSsjEYB6Z8rPhV7cnN2G76nb9731kLkjT3b/A5i10UiW7NBrd
+YWDm+eMZuQINBFYnbj4BEAC1LKikhtm6BC9J/sIpeOND/gUn4YYfxYCue2Be3Gh2
+Dig8gX2wNK8mB76AC9mScx5vwzj94PLfB7NJTQOav17icVoBDa7FZ17EgfiOCzlk
+2fKdfjwhrwWpJ/tZzPPmFQyBoMzSLKAYRW5lQv3mz+u+BVZi4vcBE7L+rrEYGwki
+rCjGox+JVg2NI7UWualSrNgHvy7u6thTJBYwu+EE78h8QvLqbjFa8kqKSTYZ4oFO
+9FwQwLm61ANSriMpQ4dLdkE9t2ua+cHgrfojAKXyvY6M32A2a8xsFMZ2RPKvUgln
++vmr41mEgmS/bnHr8jHmATo4M3VrdxkxlxcW2Hxbh699aNx8tcJzJ24TGzyGfrGe
+ncqB6u+lOZ+ngjrDZbayrPAGdc+XJ6hxCJ+krgmkj+dlRskf630QjEYahmxKdwW9
+L6KNudYOhjjr7VUbFFt5fd29E3QCjL8daYh92K87kzX6dVc0e+ENwO32B6mYNDRA
+EC1cRS/3eiQvlGaDyfpWj4j3j9fTiM3CeJ8xTKW8YpMwg2FIaVT0v7CLg31mv4T6
+W6yFYykkiVvLvZSkf4LXxLJ+b5r6sykP1ALXxuSYMDkRiSkmKAUNdGdWrPCU7mU5
+ncQUH/XkH6KtxbxUL3EpaIkMJC/tJ8uq/eid11Lic+7eKdN7fnOrxSbVkIiBzrGB
+uQARAQABiQREBBgBCAAPBQJWJ24+AhsCBQkSzAMAAikJEC21vYmjQK63wV0gBBkB
+CAAGBQJWJ24+AAoJEKgEH6g54W424awP/16ClxGMNYxGIrjtOGk1Jkpb8wkPX8n4
+P4lJGSmBk1TLjH5Z4Py5HB43Z3aWuHivF8tl0QkLSuJb05eg2NrCEK/fI3XzCPVL
+Twn4mkH7RGYTGdt2S6n551CpbsqXGvCQCmM7kf7mRwlkjpjpX7SAZ7PTLQNNFX0O
+kltM8xCedorZ2Yr3jZlrkvT8VhqPYzvqkGIJ2nT8CRdLQ7Gag8imkFgkNrEEwEIz
+ZE/A7rVJ86BPoloBkwUhJPFRNwLPX1pQ9VDc1Mr5/E25Msyl4/AAfhmp9FtkXLDk
+UYHzHS8YMIRkSqxJjEN6x6JCcjXI6YJ5TsqiXUBEyUch7R1omVXodeK1ctvTxXkj
+0dGB0+YTtsuQO9ATJIJRfHBFX5y/adl6sQwF1fI9x8iCXgcwIGVwh+sq/54x2HSZ
+jT1aWjzJU1fhZU1WCp2rWU4oFwhzHRvMZDGh5oFGB8Vwhzz+dGshV6RD5fq6gUW2
+M2YRrNXh2fpjTj/slXR+QVAmqK99+kW/lAcByF5Y48aPxUha8OE0PlS4pBvDwl9N
+RnjQJdZbDDinG354VkVAbXj6U+CCPkJBIHDvia/7q/Cn9U/fSeCtr7wl0hL0VSql
+nJtOI9lUVmUIxZFH6PNf+RLSa4HUizcH6S/+QoAhHkBpOh1JzLuaMkXN/S3GqAg+
+MqxnwP8l2k5yQtEQAIDs+gmHB2iyzz61ka49spB8XajmFZxsmICjAe0zNxthECYl
+7bwVsb7+JicJ2fNXWKAxIQ2FMy381HFV9fj4xw7I9jiMTg5arWOCeaRZ6u5gp2Fr
+s1SvHJxonnt7phUjyvlOE2ifkoGI8W3JVGulMDg7C/RxKJZX1sa8Iy9Z51Uoj4LE
+aFRwlkTTlIAKYgsdh3iMtwQgJZPe4z0g14IFc859A3fmMdwLH8DMkTuMVP101jdj
+kAc8+nRXqnv/BftH+tKarL0/FTEjuBiAG7dINg1jBSWHDnT82gpQfANETwyG3Nho
+Qe3dZnVepa731Pwhrbak+nCTC6CNbKpR240DKH+mGI9G1V5EDDtJmcH3EpszaLO/
++4PYhNQln9yJflWymyx5jOGb7OK3/bPYQyx2WsMgt8+ZxHlpuSTcPIN61F2vi2xr
+9Sb94KWnoNl5vqoQg4K9/UVNTrIrL4wj/A3PKB7jYfcSoN5ivHW3SIz4YL6QpDFc
+P1pDJjK/EwNXQSABGRHACo9AKgPdtB2RPbwTWCWMHa+XsNpIaXK/2pllMCZelR+G
+E9Cc3Op7kN6orLJx+uFIAYwQOwJvZKftmzGh6ALzuFjRIPtwlC65BhO2WbUTLwBy
+fHBFeOnRy4QXWyZvwWtqFbsRpDzxcHZ615EzWZhv5yprGE7rMejp3NOxo7Mc
+=gcmT
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/po/Linux-PAM.pot b/po/Linux-PAM.pot
index 5e92d7e9..093e0e75 100644
--- a/po/Linux-PAM.pot
+++ b/po/Linux-PAM.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: Linux-PAM 1.5.2\n"
+"Project-Id-Version: Linux-PAM 1.5.3\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,48 +18,48 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -199,47 +199,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -247,45 +253,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -294,18 +300,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -350,12 +356,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -385,17 +391,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -415,7 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -448,31 +454,31 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr ""
diff --git a/po/af.po b/po/af.po
index e5dd8f52..cd6c809a 100644
--- a/po/af.po
+++ b/po/af.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Afrikaans (http://www.transifex.com/projects/p/fedora/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Jy moet 'n korter wagwoord kies."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Jy moet 'n korter wagwoord kies."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Jy moet 'n korter wagwoord kies."
diff --git a/po/am.po b/po/am.po
index d995af71..0d0cfbc1 100644
--- a/po/am.po
+++ b/po/am.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Amharic (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "አጠር ያለ የይለፍ ቃል መምረጥ አለብህ."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "አጠር ያለ የይለፍ ቃል መምረጥ አለብህ."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "አጠር ያለ የይለፍ ቃል መምረጥ አለብህ."
diff --git a/po/ar.po b/po/ar.po
index 01238ceb..fd2d5b39 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-07-05 10:55+0000\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Arabic <https://translate.fedoraproject.org/projects/linux-"
@@ -22,49 +22,49 @@ msgstr ""
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 4.1.1\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "كلمة السر: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "كلمة سر %s الجديدة: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "كلمة سر الجديدة: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "كلمة سر %s الجديدة: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "كلمة سر الجديدة: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "أعد كتابة كلمة سر %s الجديدة: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "أعد كتابة كلمة سر الجديدة: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "عذرًا، يوجد عدم تطابق بين كلمات السر."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى."
@@ -205,48 +205,54 @@ msgstr "يحتاج التطبيق إلى استدعاء libpam مرة أخرى"
msgid "Unknown PAM error"
msgstr "خطأ PAM غير معروف"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...الوقت ينفد...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...عذرًا، انتهى الوقت!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "محادثة خاطئة (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -258,45 +264,45 @@ msgstr[4] ""
msgstr[5] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr "%a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr "من %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr "في %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "تسجيل الدخول الأخير:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "مرحبًا بك في حسابك الجديد!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -309,19 +315,19 @@ msgstr[4] ""
msgstr[5] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "مرات تسجيل دخول كثيرة جدًا لـ '%s'."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "لديك بريد جديد."
#: modules/pam_mail/pam_mail.c:292
@@ -366,12 +372,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى."
@@ -403,17 +409,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr "لا يصلح كسياق أمان"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "تم تخصيص سياق الأمان %s"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "تم تخصيص سياق الأمان %s"
@@ -433,7 +439,7 @@ msgstr "فشل pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "تسجيل الدخول: فشل تشعيب: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -473,39 +479,43 @@ msgstr[5] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "تعذر تغيير كلمة السر الخاصة بـ NIS."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "لم يتم إدخال كلمة السر"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "تعذر تغيير كلمة السر الخاصة بـ NIS."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "يجب عليك اختيار كلمة مرور أقصر."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "يجب اختيار كلمة سر أطول"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "يجب الانتظار فترة أطول لتغيير كلمة السر"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "لديك بريد جديد."
+
#~ msgid "is the same as the old one"
#~ msgstr "لا يوجد اختلاف عن كلمة السر القديمة"
diff --git a/po/as.po b/po/as.po
index cf2549d6..b0174efc 100644
--- a/po/as.po
+++ b/po/as.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2013-04-10 02:40-0400\n"
"Last-Translator: ngoswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese (http://www.transifex.com/projects/p/fedora/language/"
@@ -23,49 +23,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "গুপ্তশব্দ:"
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "নতুন %s গুপ্তশব্দ: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "নতুন গুপ্তশব্দ: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "নতুন %s গুপ্তশব্দ: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "নতুন গুপ্তশব্দ: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "নতুন %s গুপ্তশব্দ পুনঃ লিখক: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "নতুন গুপ্তশব্দ পুনঃ লিখক: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "ক্ষমা কৰিব, গুপ্তশব্দৰ অমিল "
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s পুনঃ লিখক"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "গুপ্ত শব্দ সলনি কৰা বাতিল কৰা হ'ল ।"
@@ -206,48 +206,54 @@ msgstr "অনুপ্ৰয়োগে আকৌ libpam ক মাতিব ল
msgid "Unknown PAM error"
msgstr "অজ্ঞাত PAM ভুল"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...সময় পাৰ হৈ গৈছে...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...ক্ষমা কৰিব, আপোনাৰ বাবে সময় অন্ত হ'ল!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ভুল সম্বাদ (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s বিফল: প্ৰস্থানৰ কোড %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s বিফল: %d%s সঙ্কেত ধৰা গ'ল"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s বিফল: অজ্ঞাত অৱস্থা 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "প্ৰৱেশ বিফল শেহতীয়া বিফলতা -ৰ পৰা\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u বিফল প্ৰৱেশৰ বাবে হিচাপ লক কৰা হৈছে"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -255,45 +261,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s ৰ পৰা"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s ত"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "শেহতীয়া প্ৰৱেশ:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "আপোনাৰ নতুন হিচাপলৈ স্বাগতম!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "শেহতীয়া প্ৰৱেশ বিফল:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -302,19 +308,19 @@ msgstr[0] "শেহতীয়া সফল প্ৰৱেশৰ পিছত %d
msgstr[1] "শেহতীয়া সফল প্ৰৱেশৰ পিছত %d বিফল হোৱা প্ৰৱেশৰ চেষ্টা চলোৱা হৈছিল ।"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "শেহতীয়া সফল প্ৰৱেশৰ পিছত %d বিফল হোৱা প্ৰৱেশৰ চেষ্টা চলোৱা হৈছিল ।"
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s' ৰ বাবে বহুতো প্ৰৱেশ ।"
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "আপোনাৰ নতুন ডাক আহিছে ।"
#: modules/pam_mail/pam_mail.c:292
@@ -359,12 +365,12 @@ msgstr "'%s' পঞ্জিকা সৃষ্টি কৰা হৈছে ।
msgid "Unable to create and initialize directory '%s'."
msgstr "%s পঞ্জিকা সৃষ্টি আৰু আৰম্ভ কৰিব পৰা নাই ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "গুপ্তশব্দ ইতিমধ্যে ব্যৱহৃত । অন্য এটা বাচি লওক ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "পাছৱাৰ্ড ইতিমধ্যে ব্যৱহাৰ হৈছে।"
@@ -395,17 +401,17 @@ msgstr "স্তৰ: "
msgid "This is not a valid security context."
msgstr "এটা বৈধ সুৰক্ষাৰ সন্দৰ্ভ নহয়"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "সুৰক্ষাৰ সন্দৰ্ভ %s নিযুক্ত কৰা হ'ল"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "চাবি নিৰ্মাণৰ সন্দৰ্ভ %s নিযুক্ত কৰা হ'ল"
@@ -425,7 +431,7 @@ msgstr "pam_set_item() কৰোঁতে বিফল\n"
msgid "login: failure forking: %m"
msgstr "প্ৰৱেশ: forking ত বিফল: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "অভিগম্যতাৰ অনুমতি (শেহতীয়া অভিগম্যতা %ld ছেকেণ্ড আগতে) ।"
@@ -461,40 +467,44 @@ msgstr[1] "সকীয়নী: আপোনাৰ গুপ্তশব্দ %d
msgid "Warning: your password will expire in %d days."
msgstr "সকীয়নী: আপোনাৰ গুপ্তশব্দ %d দিনত অন্ত হ'ব"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS গুপ্তশব্দ সলনি কৰিব পৰা নহয় ।"
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "কোনো গুপ্তশব্দ দিয়া হোৱা নাই"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS গুপ্তশব্দ সলনি কৰিব পৰা নহয় ।"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "আপুনি ইয়াতকৈ এটা দীঘল গুপ্তশব্দ নিৰ্ব্বাচন কৰিব লাগিব"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "আপুনি ইয়াতকৈ এটা দীঘল গুপ্তশব্দ নিৰ্ব্বাচন কৰিব লাগিব"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s ৰ বাবে গুপ্তশব্দ সলনি কৰা হৈছে ।"
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "আপোনাৰ গুপ্তশব্দ সলনি কৰিবলৈ আপুনি আৰু কিছু পৰ অপেক্ষা কৰিব লাগিব"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "আপোনাৰ নতুন ডাক আহিছে ।"
+
#~ msgid "is the same as the old one"
#~ msgstr "পুৰণিটোৰ সৈতে একেই"
@@ -561,9 +571,6 @@ msgstr "আপোনাৰ গুপ্তশব্দ সলনি কৰিব
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: সকলো ব্যৱহাৰকৰোঁতাক শূণ্য নোহোৱা অৱস্থালৈ পুনঃ প্ৰতিষ্ঠা কৰিব নোৱাৰি\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "প্ৰৱেশ বিফল শেহতীয়া বিফলতা -ৰ পৰা\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/az.po b/po/az.po
index 6f54a02b..78bfaa78 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM 1.4.0\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-04-25 00:40+0000\n"
"Last-Translator: Alesker Abdullayev - FEDORA Azerbaijan <tech@abdullaeff."
"com>\n"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.1\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Şifrə: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Cari %s şifrəniz: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Cari şifrəniz: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Yeni %s şifrəniz: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Yeni şifrəniz: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -202,47 +202,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Bağışlayın, vaxtınız bitdi!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -250,45 +256,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -297,18 +303,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -353,12 +359,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -388,17 +394,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -418,7 +424,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -451,31 +457,31 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr ""
diff --git a/po/be.po b/po/be.po
index c5b43e85..c90cf795 100644
--- a/po/be.po
+++ b/po/be.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Belarusian (http://www.transifex.com/projects/p/fedora/"
@@ -21,48 +21,48 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -202,47 +202,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -252,45 +258,45 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -301,18 +307,18 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -357,12 +363,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -392,17 +398,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -422,7 +428,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -457,34 +463,34 @@ msgstr[3] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Вы павінны выбраць больш кароткі пароль."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Вы павінны выбраць больш кароткі пароль."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Вы павінны выбраць больш кароткі пароль."
diff --git a/po/bg.gmo b/po/bg.gmo
index b58007d0..dd6ce4bc 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index c6f5cac7..85091196 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-12-20 08:00+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Bulgarian <https://translate.fedoraproject.org/projects/linux-"
@@ -22,48 +22,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.3.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Парола: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Nastoyashta парола %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Nastoyashta парола: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Нова парола %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Нова парола: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Отново новата парола %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Отново новата парола: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Съжаляваме, паролите не съвпадат."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Напишете пак %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Промяната на паролата е прекратена."
@@ -206,49 +206,55 @@ msgstr "Приложението се нуждае от повторно изв
msgid "Unknown PAM error"
msgstr "Непозната PAM грешка"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Времето изтича...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Съжаляваме, Вашето време изтече!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "погрешен разговор (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s се провали: код на грешка %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s се провали: уловен сигнал %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s се провали: непознат статус 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Usage: %s [--dir /път/към/директорията-на-tally] [--user потребителско_име] "
"[--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Влязъл Неуспехи Последен неуспех От\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Акаунтът е заключен поради %u неуспешни опита за влизане."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, fuzzy, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -256,45 +262,45 @@ msgstr[0] "(остават %d мин. за отключване)"
msgstr[1] "(остават %d мин. за отключване)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(остават %d мин. за отключване)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " от %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " на %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Последно влизане:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Добре дошли в новия Ви акаунт!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Последно неуспешно влизане:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -305,19 +311,20 @@ msgstr[1] ""
"След последното успешно влизане, имаше %d неуспешни опита за влизане."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "След последното успешно влизане, имаше %d неуспешни опита за влизане."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Твърде много влизания за '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Нямате писма."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Имате нови писма."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -361,12 +368,12 @@ msgstr "Създаване на директория '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Не мога да създам и настроя директория '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Паролата вече е използвана. Изберете друга."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Паролата вече е използвана."
@@ -396,17 +403,17 @@ msgstr "ниво:"
msgid "This is not a valid security context."
msgstr "Невалиден контекст за сигурност."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Не може да бъде получен валиден контекст за %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Зададен е контекст за сигурност %s."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Зададен е key creation context %s."
@@ -426,7 +433,7 @@ msgstr "pam_set_item() не успя \n"
msgid "login: failure forking: %m"
msgstr "вход: неуспех при стартиране: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Достъпът е предоставен (последният достъп бе преди %ld секунди)."
@@ -461,35 +468,38 @@ msgstr[1] "Внимание: срокът на паролата Ви изтич
msgid "Warning: your password will expire in %d days."
msgstr "Внимание: паролата Ви ще изтече след %d дни."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS парола не може да бъде променена."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Не е предоставена парола."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Паролата не е променена."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Трябва да изберете по-кратка парола."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Трябва да изберете по-дълга парола."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Смяна на паролата за %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Трябва да изчакате повече, за да промените Вашата парола."
+#~ msgid "You have no mail."
+#~ msgstr "Нямате писма."
+
#~ msgid "is the same as the old one"
#~ msgstr "е същата като старата"
@@ -555,9 +565,6 @@ msgstr "Трябва да изчакате повече, за да промен
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Не мога да установя всички потребители на non-zero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Влязъл Неуспехи Последен неуспех От\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/bn.po b/po/bn.po
index 5d929422..5e95084e 100644
--- a/po/bn.po
+++ b/po/bn.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2012-04-10 04:36-0400\n"
"Last-Translator: Mahay Alam Khan <mahayalamkhan@gmail.com>\n"
"Language-Team: Bengali <info@ankur.org.bd>\n"
@@ -27,49 +27,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "নতুন %s পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "নতুন পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "নতুন %s পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "নতুন পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "নতুন %s পাসওয়ার্ড পুনরায় লিখুন: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "নতুন পাসওয়ার্ড পুনরায় লিখুন: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "দুঃখিত, পাসওয়ার্ড দুটি এক নয়।"
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s পুনরায় লিখুন"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "পাসওয়ার্ড পরিবর্তন প্রক্রিয়া বাতিল করা হয়েছে।"
@@ -210,48 +210,54 @@ msgstr "অ্যাপ্লিকেশন দ্বারা পুনরা
msgid "Unknown PAM error"
msgstr "PAM সংক্রান্ত অজানা ত্রুটি"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...সময় সমাপ্তির পথে...⏎ \n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...দুঃখিত, সময় সমাপ্ত!⏎ \n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ত্রুটিপূর্ণ তথ্যবিনিময় (%d)⏎\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s বিফল: প্রস্থানকালীন কোড %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s বিফল: %d%s সিগনাল প্রাপ্ত"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s বিফল: অজানা অবস্থা 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "লগ-ইন বিফলতা সর্বশেষ বিফলতা চিহ্নিত স্থান থেকে\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছে"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -259,45 +265,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s থেকে"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s -র উপর"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "সর্বশেষ লগ-ইন:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "নতুন অ্যাকাউন্টে স্বাগতম!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "সর্বশেষ বিফল লগ-ইন:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -306,19 +312,19 @@ msgstr[0] "সর্বশেষ সফল লগ-ইনের পরে %d-ট
msgstr[1] "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।"
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s'-র ক্ষেত্রে অত্যাধিক লগ-ইন"
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "নতুন মেইল প্রাপ্ত।"
#: modules/pam_mail/pam_mail.c:292
@@ -363,12 +369,12 @@ msgstr "'%s' ডিরেক্টরি নির্মাণ করা হচ
msgid "Unable to create and initialize directory '%s'."
msgstr "ডিরেক্টরি '%s' নির্মাণ ও আরম্ভ করতে ব্যর্থ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।"
@@ -400,17 +406,17 @@ msgstr "level: "
msgid "This is not a valid security context."
msgstr "বৈধ নিরাপত্তা সংক্রান্ত context নয়"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "Security Context %s ধার্য করা হয়েছে"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "কি নির্মাণের Context %s ধার্য করা হয়েছে"
@@ -430,7 +436,7 @@ msgstr "pam_set_item() করতে ব্যর্থ\n"
msgid "login: failure forking: %m"
msgstr "লগ-ইন: fork করতে ব্যর্থ: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "প্রবেশাধিকার প্রদান করা হয়েছে (%ld পূর্বে সর্বশেষ লগ-ইন করা হয়েছে)।"
@@ -468,39 +474,43 @@ msgstr[1] "সতর্কবাণী: %d দিন পরে পাসওয়
msgid "Warning: your password will expire in %d days."
msgstr "সতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবে"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS পাসওয়ার্ড পরিবর্তন করা সম্ভব হয়নি।"
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "কোনো পাসওয়ার্ড উল্লিখিত হয়নি"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS পাসওয়ার্ড পরিবর্তন করা সম্ভব হয়নি।"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "আপনি একটি ছোট পাসওয়ার্ড নির্বাচন করতে হবে।"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "চিহ্নিত পাসওয়ার্ডের থেকে লম্বা পাসওয়ার্ড উল্লেখ করা আবশ্যক"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s-র পাসওয়ার্ড পরিবর্তন করা হচ্ছে।"
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "কিছু কাল পরে পাসওয়ার্ড পরিবর্তন করা সম্ভব হবে"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "নতুন মেইল প্রাপ্ত।"
+
#~ msgid "is the same as the old one"
#~ msgstr "পুরোনোটির অনুরূপ"
@@ -568,9 +578,6 @@ msgstr "কিছু কাল পরে পাসওয়ার্ড পরি
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: সব ব্যবহারকারীর জন্য শূণ্য-ভিন্ন মান ধার্য করতে ব্যর্থ\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "লগ-ইন বিফলতা সর্বশেষ বিফলতা চিহ্নিত স্থান থেকে\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/bn_IN.po b/po/bn_IN.po
index 324658d6..c54a73fa 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2012-02-28 05:38-0500\n"
"Last-Translator: runa <runabh@gmail.com>\n"
"Language-Team: Bengali (India) <anubad@lists.ankur.org.in>\n"
@@ -22,49 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "নতুন %s পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "নতুন পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "নতুন %s পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "নতুন পাসওয়ার্ড: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "নতুন %s পাসওয়ার্ড পুনরায় লিখুন: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "নতুন পাসওয়ার্ড পুনরায় লিখুন: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "দুঃখিত, পাসওয়ার্ড দুটি এক নয়।"
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s পুনরায় লিখুন"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "পাসওয়ার্ড পরিবর্তনের কর্ম পরিত্যাগ করা হয়েছে।"
@@ -205,48 +205,54 @@ msgstr "অ্যাপ্লিকেশন দ্বারা পুনরা
msgid "Unknown PAM error"
msgstr "PAM সংক্রান্ত অজানা ত্রুটি"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...সময় সমাপ্তির পথে...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...দুঃখিত, সময় সমাপ্ত!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ত্রুটিপূর্ণ তথ্যবিনিময় (conversation) (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s বিফল: প্রস্থানকালীন কোড %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s বিফল: %d%s সিগনাল প্রাপ্ত"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s বিফল: অজানা অবস্থা 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "লগ-ইন বিফলতা সর্বশেষ বিফলতা চিহ্নিত স্থান থেকে\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছে"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -254,45 +260,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s থেকে"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s -র উপর"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "সর্বশেষ লগ-ইন:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "নতুন অ্যাকাউন্টে স্বাগতম!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "সর্বশেষ বিফল লগ-ইন:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -301,19 +307,19 @@ msgstr[0] "সর্বশেষ সফল লগ-ইনের পরে %d-ট
msgstr[1] "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।"
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s'-র ক্ষেত্রে অত্যাধিক লগ-ইন"
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "নতুন মেইল প্রাপ্ত।"
#: modules/pam_mail/pam_mail.c:292
@@ -358,12 +364,12 @@ msgstr "'%s' ডিরেক্টরি নির্মাণ করা হচ
msgid "Unable to create and initialize directory '%s'."
msgstr "ডিরেক্টরি '%s' নির্মাণ ও আরম্ভ করতে ব্যর্থ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।"
@@ -395,17 +401,17 @@ msgstr "level: "
msgid "This is not a valid security context."
msgstr "বৈধ নিরাপত্তা সংক্রান্ত context নয়"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "Security Context %s ধার্য করা হয়েছে"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "কি নির্মাণের Context %s ধার্য করা হয়েছে"
@@ -425,7 +431,7 @@ msgstr "pam_set_item() করতে ব্যর্থ\n"
msgid "login: failure forking: %m"
msgstr "লগ-ইন: fork করতে ব্যর্থ: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "প্রবেশাধিকার প্রদান করা হয়েছে (%ld পূর্বে সর্বশেষ লগ-ইন করা হয়েছে)।"
@@ -463,39 +469,43 @@ msgstr[1] "সতর্কবাণী: %d দিন পরে পাসওয়
msgid "Warning: your password will expire in %d days."
msgstr "সতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবে"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS পাসওয়ার্ড পরিবর্তন করা সম্ভব হয়নি।"
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "কোনো পাসওয়ার্ড উল্লিখিত হয়নি"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS পাসওয়ার্ড পরিবর্তন করা সম্ভব হয়নি।"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "আপনি একটি ছোট পাসওয়ার্ড নির্বাচন করতে হবে।"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "চিহ্নিত পাসওয়ার্ডের থেকে লম্বা পাসওয়ার্ড উল্লেখ করা আবশ্যক"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s-র পাসওয়ার্ড পরিবর্তন করা হচ্ছে।"
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "কিছু কাল পরে পাসওয়ার্ড পরিবর্তন করা সম্ভব হবে"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "নতুন মেইল প্রাপ্ত।"
+
#~ msgid "is the same as the old one"
#~ msgstr "পুরোনোটির অনুরূপ"
@@ -563,9 +573,6 @@ msgstr "কিছু কাল পরে পাসওয়ার্ড পরি
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: সব ব্যবহারকারীর জন্য শূণ্য-ভিন্ন মান ধার্য করতে ব্যর্থ\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "লগ-ইন বিফলতা সর্বশেষ বিফলতা চিহ্নিত স্থান থেকে\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/bs.po b/po/bs.po
index 660c5a5a..3461a608 100644
--- a/po/bs.po
+++ b/po/bs.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bosnian (http://www.transifex.com/projects/p/fedora/language/"
@@ -21,48 +21,48 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -202,47 +202,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -251,45 +257,45 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -299,18 +305,18 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -355,12 +361,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -390,17 +396,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -420,7 +426,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -454,34 +460,34 @@ msgstr[2] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Morate odabrati kraću lozinku."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Morate odabrati kraću lozinku."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Morate odabrati kraću lozinku."
diff --git a/po/ca.gmo b/po/ca.gmo
index f65f78c0..efe52ead 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 4eb0fe2d..2ec6108a 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-07-22 00:54+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Catalan <https://translate.fedoraproject.org/projects/linux-"
@@ -26,48 +26,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.7.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Contrasenya: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Contrasenya actual de %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Contrasenya actual: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nova contrasenya de %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nova contrasenya: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Torneu a escriure la nova contrasenya de %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Torneu a escriure la nova contrasenya: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Les contrasenyes no coincideixen."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Torneu a escriure %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "S'ha cancel·lat el canvi de contrasenya."
@@ -208,49 +208,55 @@ msgstr "L'aplicació necessita cridar novament libpam"
msgid "Unknown PAM error"
msgstr "Error de PAM desconegut"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...S'acaba el temps...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...S'ha acabat el temps.\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "conversa errònia (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s ha fallat: codi de sortida %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s ha fallat: s'ha atrapat el senyal %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s ha fallat: estat 0x%x desconegut"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Forma d’ús: %s: [--dir /directori/path/to/tally] [--user nom_usuari] [--"
"reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Entrada Fallades Última fallada Des de\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "El compte està bloquejat a causa de %u inicis fallits de sessió."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -258,45 +264,45 @@ msgstr[0] "(resten %d minut per desbloquejar)"
msgstr[1] "(resten %d minuts per desbloquejar)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(resten %d minuts per desbloquejar)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %-d %b de %Y, %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " des de %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " a %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Últim inici de sessió:%s des de %s a %s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Benvingut al vostre nou compte!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Últim inici de sessió fallit:%s des de %s a %s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -309,21 +315,22 @@ msgstr[1] ""
"reeixit."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"S'han produït %d intents fallits d'inici de sessió des de l'últim inici de "
"sessió reeixit."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Hi havia massa inicis de sessió per a '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "No teniu cap correu."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Teniu correu nou."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -367,12 +374,12 @@ msgstr "Creant el directori '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "No s'ha pogut crear i inicialitzar el directori '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Aquesta contrasenya ja s'ha fet servir. Trieu-ne una altra."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "La contrasenya ja ha estat utilitzada."
@@ -402,17 +409,17 @@ msgstr "nivell:"
msgid "This is not a valid security context."
msgstr "Aquest no és un context de seguretat vàlid."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "No s'ha pogut obtenir un context vàlid per a %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "S'ha assignat el context de seguretat %s."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "S'ha assignat el context de creació de clau %s."
@@ -432,7 +439,7 @@ msgstr "s'ha produït un error en pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "inici de sessió: ha fallat la bifurcació: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "S'ha concedit l'accés (l'últim accés va ser fa %ld segons)."
@@ -468,35 +475,38 @@ msgstr[1] "Atenció: la contrasenya venç d'aquí a %d dies."
msgid "Warning: your password will expire in %d days."
msgstr "Atenció: la contrasenya venç d'aquí a %d dies."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "No s'ha pogut canviar la contrasenya NIS."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "No s'ha proporcionat cap contrasenya."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "No s'ha canviat la contrasenya."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Heu de triar una contrasenya més curta."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Heu de triar una contrasenya més llarga."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "S'està canviant la contrasenya de %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Heu d'esperar més temps abans de canviar la contrasenya."
+#~ msgid "You have no mail."
+#~ msgstr "No teniu cap correu."
+
#~ msgid "is the same as the old one"
#~ msgstr "és la mateixa que l'antiga"
@@ -564,9 +574,6 @@ msgstr "Heu d'esperar més temps abans de canviar la contrasenya."
#~ msgstr ""
#~ "%s: no es poden restablir tots els usuaris a un valor diferent de zero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Entrada Fallades Última fallada Des de\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index 75979c7a..4e7efec7 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 588b63c2..448b49cb 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -9,13 +9,14 @@
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Tomáš Mráz <tmraz@redhat.com>, 2020.
# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# Josef Hruska <hrusjos@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2020-03-20 10:38+0000\n"
-"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2023-01-24 18:20+0000\n"
+"Last-Translator: Josef Hruska <hrusjos@gmail.com>\n"
"Language-Team: Czech <https://translate.fedoraproject.org/projects/linux-pam/"
"master/cs/>\n"
"Language: cs\n"
@@ -23,50 +24,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 3.11.3\n"
+"X-Generator: Weblate 4.15.1\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Heslo: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Současné %s heslo: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Současné heslo: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nové %s heslo: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nové heslo: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Opakujte nové %s heslo: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Opakujte nové heslo: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Hesla se neshodují."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Opakujte %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Změna hesla byla přerušena."
@@ -206,96 +207,102 @@ msgstr "Aplikace musí znovu zavolat libpam"
msgid "Unknown PAM error"
msgstr "Neznámá chyba PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Dochází čas...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Promiňte, čas vypršel!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "nesprávná konverzace (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s selhal: návratový kód %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s selhal: dostal signál %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s selhal: neznámý kód stavu 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Použití: %s [--dir /cesta/k/tally-adresari] [--user uzivatelske_jmeno] [--"
-"reset]\n"
+"legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Selhání Poslední selhání Od\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Účet je uzamčen z důvodu %u neúspěšných pokusů o přihlášení."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
-#, fuzzy, c-format
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
+#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] "(%d minut zbývá do odemčení)"
-msgstr[1] "(%d minut zbývá do odemčení)"
+msgstr[0] "(%d minuta zbývá do odemčení)"
+msgstr[1] "(%d minuty zbývají do odemčení)"
msgstr[2] "(%d minut zbývá do odemčení)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minut zbývá do odemčení)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %d.%m.%Y %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " z %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " na %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Poslední přihlášení:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Vítejte na vašem novém účtu!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Poslední neúspěšné přihlášení:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -305,19 +312,19 @@ msgstr[1] "Od posledního úspěšného došlo k %d neúspěšným pokusům o p
msgstr[2] "Od posledního úspěšného došlo k %d neúspěšným pokusům o přihlášení."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Od posledního úspěšného došlo k %d neúspěšným pokusům o přihlášení."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Proběhlo příliš mnoho přihlášení pro '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Nemáte žádnou poštu."
+msgid "You do not have any new mail."
+msgstr "Nemáte žádnou novou poštu."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -361,12 +368,12 @@ msgstr "Vytváření adresáře '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Nezdařilo se vytvořit a inicializovat adresář '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Heslo již bylo použito. Zvolte jiné."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Heslo již bylo použito."
@@ -396,17 +403,17 @@ msgstr "úroveň:"
msgid "This is not a valid security context."
msgstr "Toto není platný bezpečnostní kontext."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Nepodařilo se získat platný kontext pro %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Bezpečnostní kontext %s byl přiřazen."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Kontext pro vytváření klíčů %s byl přidělen."
@@ -426,7 +433,7 @@ msgstr "chyba pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: chyba forku: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Přístup byl povolen (poslední přístup před %ld vteřinami)."
@@ -460,35 +467,38 @@ msgstr[2] "Varování: Vaše heslo vyprší za %d dní."
msgid "Warning: your password will expire in %d days."
msgstr "Varování: Počet dní do vypršení hesla: %d"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS heslo se nepodařilo změnit."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Heslo nebylo zadáno."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Heslo nebylo změněno."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Musíte zvolit kratší heslo."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Musíte si zvolit delší heslo."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Změna hesla pro %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Na změnu svého hesla musíte počkat déle."
+#~ msgid "You have no mail."
+#~ msgstr "Nemáte žádnou poštu."
+
#~ msgid "is the same as the old one"
#~ msgstr "je stejné jako předcházející"
@@ -555,9 +565,6 @@ msgstr "Na změnu svého hesla musíte počkat déle."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Nelze resetovat všechny uživatele nenulově\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Selhání Poslední selhání Od\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/cy.po b/po/cy.po
index d22b405f..b8b41c4b 100644
--- a/po/cy.po
+++ b/po/cy.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Welsh (http://www.transifex.com/projects/p/fedora/language/"
@@ -21,48 +21,48 @@ msgstr ""
"11) ? 2 : 3;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -202,47 +202,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -252,45 +258,45 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -301,18 +307,18 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -357,12 +363,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -392,17 +398,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -422,7 +428,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -457,34 +463,34 @@ msgstr[3] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Rhaid i chi ddewis cyfrinair byrrach."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Rhaid i chi ddewis cyfrinair byrrach."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Rhaid i chi ddewis cyfrinair byrrach."
diff --git a/po/da.gmo b/po/da.gmo
index 10e91b30..cb7d31fd 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index a9c55164..e5e5f56e 100644
--- a/po/da.po
+++ b/po/da.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-07-22 00:54+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Danish <https://translate.fedoraproject.org/projects/linux-"
@@ -23,48 +23,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.7.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Adgangskode: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Nuværende %s adgangskode: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Nuværende adgangskode: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Ny %s adgangskode: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Ny adgangskode: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Genindtast ny %s adgangskode: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Genindtast ny adgangskode: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Adgangskoderne stemmer ikke overens."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Genindtast %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Ændring af adgangskode blev afbrudt."
@@ -204,48 +204,54 @@ msgstr "Programmet skal kalde libpam igen"
msgid "Unknown PAM error"
msgstr "Ukendt PAM-fejl"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Tiden er ved at udløbe...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Din tid er desværre gået!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "konversationsfejl (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s fejlede: afslutningskode %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s fejlede: fangede signal %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s fejlede: ukendt status 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Anvendelse: %s [--dir /sti/til/tally-mappe] [--user brugernavn] [--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Fejlende Sidste fejl Fra\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Konto låst på grund af %u fejlende logins."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -253,45 +259,45 @@ msgstr[0] "(%d minut tilbage hvor der kan låses op)"
msgstr[1] "(%d minutter tilbage hvor der kan låses op)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minutter tilbage hvor der kan låses op)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " fra %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " på %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Sidste login:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Velkommen til din nye konto!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Sidste fejlende login:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -300,19 +306,20 @@ msgstr[0] "Der var %d fejlende loginforsøg siden sidste succesfulde login."
msgstr[1] "Der var %d fejlende loginforsøg siden sidste succesfulde login."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Der var %d fejlende loginforsøg siden sidste succesfulde login."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Der var for mange logins for '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Du har ingen post."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Du har ny e-post."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -356,12 +363,12 @@ msgstr "Opretter mappe \"%s\"."
msgid "Unable to create and initialize directory '%s'."
msgstr "Kunne ikke oprette og initialisere mappe \"%s\"."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Adgangskoden er allerede blevet brugt. Vælg en anden."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Adgangskode er allerede i brug."
@@ -391,17 +398,17 @@ msgstr "niveau:"
msgid "This is not a valid security context."
msgstr "Der er ikke et gyldigt sikkerhedskontekst."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Der kunne ikke indhentes et gyldigt kontekst for %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Sikkerhedskontekst %s er blevet tildelt."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Nøgleoprettelseskonteksten %s er blevet tildelt."
@@ -421,7 +428,7 @@ msgstr "pam_set_item() mislykkedes\n"
msgid "login: failure forking: %m"
msgstr "login: fejl ved forgrening: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Adgang er blevet givet (sidste adgang var for %ld sekunder siden)."
@@ -455,35 +462,38 @@ msgstr[1] "Advarsel: Din adgangskode udløber om %d dage."
msgid "Warning: your password will expire in %d days."
msgstr "Advarsel: din adgangskode udløber om %d dage."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS-adgangskoden kunne ikke ændres."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Der er ikke angivet nogen adgangskode."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Adgangskoden er ikke blevet ændret."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Du skal vælge en kortere adgangskode."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Du skal vælge en længere adgangskode."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Ændrer adgangskode for %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Du skal vente længere for at ændre din adgangskode."
+#~ msgid "You have no mail."
+#~ msgstr "Du har ingen post."
+
#~ msgid "is the same as the old one"
#~ msgstr "er den samme som den gamle"
@@ -549,9 +559,6 @@ msgstr "Du skal vente længere for at ændre din adgangskode."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Alle brugere kunne ikke nulstilles til ikke-nul\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Fejlende Sidste fejl Fra\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/de.gmo b/po/de.gmo
index c7f56c29..536fea82 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 7fd9459e..a611941d 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,13 +6,14 @@
# Roman Spirgi <bigant@fedoraproject.org>, 2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Dmitry V. Levin <ldv@altlinux.org>, 2020, 2021.
+# Ettore Atalan <atalanttore@googlemail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-07-21 13:28+0000\n"
-"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-12-06 09:19+0000\n"
+"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
"Language-Team: German <https://translate.fedoraproject.org/projects/linux-"
"pam/master/de/>\n"
"Language: de\n"
@@ -20,50 +21,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Passwort: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Geben Sie das aktuelle %s Passwort ein: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Geben Sie das aktuelle Passwort ein: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Geben Sie ein neues %s Passwort ein: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Geben Sie ein neues Passwort ein: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Geben Sie das neue %s Passwort erneut ein: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Geben Sie das neue Passwort erneut ein: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Die Passwörter stimmen nicht überein."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Neu eingeben %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Passwort Änderung wurde abgebrochen."
@@ -207,49 +208,55 @@ msgstr "Anwendung muss libpam wieder aufrufen"
msgid "Unknown PAM error"
msgstr "Unbekannter PAM-Fehler"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Zeit läuft ab...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Ihre Zeit ist abgelaufen!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "fehlerhafte Kommunikation (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s schlug fehl: Fehlercode %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s schlug fehl: Signal %d%s erhalten"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s schlug fehl: Unbekannter Status 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Aufruf: %s [--dir /path/to/tally-Verzeichnis] [--user Benutzername] [--"
-"reset]\n"
+"reset] [--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Anmeldung Fehler Letzter Fehler Von\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Das Konto ist wegen %u fehlgeschlagener Anmelde-Versuche gesperrt."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -257,45 +264,45 @@ msgstr[0] "(noch %d Minute zum Entsperren)"
msgstr[1] "(noch %d Minuten zum Entsperren)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(noch %d Minuten zum Entsperren)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %A, den %d. %B %Y, %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " von %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " auf %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Letzte Anmeldung:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Willkommen in Ihrem neuen Konto!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Letzte fehlgeschlagene Anmeldung:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -306,20 +313,20 @@ msgstr[1] ""
"Es gab %d fehlgeschlagene Versuche seit der letzten erfolgreichen Anmeldung."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Es gab %d fehlgeschlagene Versuche seit der letzten erfolgreichen Anmeldung."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Zu viele Anmeldungen für '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Sie haben keine Nachrichten."
+msgid "You do not have any new mail."
+msgstr "Sie haben keine neue E-Mail."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -363,12 +370,12 @@ msgstr "Erstelle Verzeichnis '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Verzeichnis '%s' kann nicht erstellt und initialisiert werden."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Passwort wurde bereits verwendet. Wählen Sie ein anderes aus."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Das gleiche Passwort wurde bereits einmal verwendet."
@@ -398,17 +405,17 @@ msgstr "Stufe:"
msgid "This is not a valid security context."
msgstr "Kein gültiger Sicherheitskontext."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Unfähig einen gültigen Kontext zu erhalten für %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Sicherheitskontext %s zugewiesen."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Schlüssel-Erzeugungskontext %s zugeordnet."
@@ -428,7 +435,7 @@ msgstr "Fehler bei pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "Anmeldung: Fehler bei Abspaltung: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Zugriff erlaubt (letzter Zugriff war vor %ld Sekunden)."
@@ -461,35 +468,38 @@ msgstr[1] "Warnung: Ihr Passwort läuft in %d Tagen ab."
msgid "Warning: your password will expire in %d days."
msgstr "Warnung: Ihr Passwort läuft in %d Tagen ab."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Änderung des NIS-Passworts nicht möglich."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Kein Passwort angegeben."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Passwort nicht geändert."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Sie müssen ein kürzeres Passwort wählen."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Sie müssen ein längeres Passwort auswählen."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Ändern des Passworts für %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Sie können Ihr Passwort noch nicht ändern."
+#~ msgid "You have no mail."
+#~ msgstr "Sie haben keine Nachrichten."
+
#~ msgid "is the same as the old one"
#~ msgstr "ist das gleiche wie das Alte"
@@ -557,9 +567,6 @@ msgstr "Sie können Ihr Passwort noch nicht ändern."
#~ msgstr ""
#~ "%s: Es können nicht alle Benutzer auf Nicht-null zurückgesetzt werden\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Account Fehler Letzter Versuch Von\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/de_CH.po b/po/de_CH.po
index fefc8515..fceab0f2 100644
--- a/po/de_CH.po
+++ b/po/de_CH.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Sie müssen ein kürzeres Passwort wählen."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Sie müssen ein kürzeres Passwort wählen."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Sie müssen ein kürzeres Passwort wählen."
diff --git a/po/el.po b/po/el.po
index 0a498838..f0b467c2 100644
--- a/po/el.po
+++ b/po/el.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Greek <trans-el@lists.fedoraproject.org>\n"
@@ -19,48 +19,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -200,47 +200,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -248,45 +254,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -295,18 +301,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -351,12 +357,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -386,17 +392,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -416,7 +422,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -449,34 +455,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Πρέπει να επιλέξετε μικρότερο κωδικό πρόσβασης."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Πρέπει να επιλέξετε μικρότερο κωδικό πρόσβασης."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Πρέπει να επιλέξετε μικρότερο κωδικό πρόσβασης."
diff --git a/po/eo.gmo b/po/eo.gmo
index 5552ceb3..8eb7cc21 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index a47e9be7..d03f0e37 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-02-05 00:40+0000\n"
"Last-Translator: Carmen Bianca Bakker <carmen@carmenbianca.eu>\n"
"Language-Team: Esperanto <https://translate.fedoraproject.org/projects/linux-"
@@ -21,48 +21,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.4.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Pasvorto: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Aktuala %s pasvorto: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Aktuala pasvorto: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nova %s pasvorto: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nova pasvorto: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Retajpu novan %s pasvorton: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Retajpu novan pasvorton: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Pardonon, la pasvortoj ne kongruas."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Retajpu %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Pasvortoŝanĝo ĉesis."
@@ -202,47 +202,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr "Nekonata PAM-eraro"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+msgstr ""
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, fuzzy, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -250,45 +256,45 @@ msgstr[0] "(restas %d minutoj por malŝlosi)"
msgstr[1] "(restas %d minutoj por malŝlosi)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(restas %d minutoj por malŝlosi)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %e-a de %b %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " de %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " sur %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Lasta saluto: %s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Bonvenon al via nova konto!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Lasta malsukcesa saluto: %s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -297,19 +303,20 @@ msgstr[0] "Estis %d malsukcesa salutprovo ekde la lasta sukcesa saluto."
msgstr[1] "Estis %d malsukcesaj salutprovoj ekde la lasta sukcesa saluto."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Estis %d malsukcesaj salutprovoj ekde la lasta sukcesa saluto."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Estis tro multaj salutoj por '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Vi ne havas poŝton."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Vi havas novan poŝton."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -353,12 +360,12 @@ msgstr "Kreante dosierujon '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Pasvorto jam uzita. Elektu alian."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Pasvorto jam uzita."
@@ -388,17 +395,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -418,7 +425,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -451,31 +458,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Vi devas elekti pli mallongan pasvorton."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Vi devas elekti pli longan pasvorton."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr ""
+
+#~ msgid "You have no mail."
+#~ msgstr "Vi ne havas poŝton."
diff --git a/po/es.gmo b/po/es.gmo
index 78cc54f1..b06cdb3a 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index a3245897..086743be 100644
--- a/po/es.po
+++ b/po/es.po
@@ -13,13 +13,13 @@
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Dmitry V. Levin <ldv@altlinux.org>, 2020.
# Álvaro Castillo <sincorchetes@gmail.com>, 2020.
-# Emilio Herrera <ehespinosa57@gmail.com>, 2021.
+# Emilio Herrera <ehespinosa57@gmail.com>, 2021, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-03-14 19:01+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-10-18 15:19+0000\n"
"Last-Translator: Emilio Herrera <ehespinosa57@gmail.com>\n"
"Language-Team: Spanish <https://translate.fedoraproject.org/projects/linux-"
"pam/master/es/>\n"
@@ -28,50 +28,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5.1\n"
+"X-Generator: Weblate 4.14.1\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Contraseña: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Contraseña %s actual: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Contraseña actual: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nueva %s contraseña: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nueva contraseña: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Vuelva a escribir la nueva %s contraseña: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Vuelva a escribir la nueva contraseña: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Las contraseñas no coinciden."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Vuelva a escribir %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Se ha abortado el cambio de contraseña."
@@ -214,95 +214,101 @@ msgstr "La aplicación debe llamar a libpam de nuevo"
msgid "Unknown PAM error"
msgstr "Error desconocido de PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...El tiempo se está agotando...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Lo sentimos, el tiempo se ha agotado.\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "conversación incorrecta (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s fallido: código de salida %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s fallido: señal capturada %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s fallido: estado desconocido 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Usage: %s [--dir /ruta/al/directorio-de-conteo] [--user nombre-de-usuario] "
"[--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Fallo de Ingresos Ultimo fallo desde\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "La cuenta está bloqueada debido a %u inicios de sesión fallidos."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
-#, fuzzy, c-format
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
+#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] "(%d minutos restantes para el desbloqueo)"
+msgstr[0] "(%d minuto restante para el desbloqueo)"
msgstr[1] "(%d minutos restantes para el desbloqueo)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minutos restantes para el desbloqueo)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " de %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " en %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Último inicio de sesión:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "¡Bienvenido a su nueva cuenta!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Último inicio de sesión fallido:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -312,19 +318,19 @@ msgstr[1] ""
"Hubo %d intentos de logueo fallidos desde el último logueo exitoso. "
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Hubo %d intentos de logueo fallidos desde el último logueo exitoso. "
-#: modules/pam_limits/pam_limits.c:1164
-#, fuzzy, c-format
+#: modules/pam_limits/pam_limits.c:1269
+#, c-format
msgid "There were too many logins for '%s'."
-msgstr "Hay demasiados inicios de sesión para \"%s\"."
+msgstr "Hubo demasiados inicios de sesión para \"%s\"."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Tiene correo nuevo."
#: modules/pam_mail/pam_mail.c:292
@@ -369,19 +375,19 @@ msgstr "Creando directorio '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "No se pudo crear e inicializar el directorio '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "La contraseña ya se ha utilizado. Seleccione otra."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "La contraseña ya se ha utilizado. Seleccione otra."
#: modules/pam_selinux/pam_selinux.c:172
-#, fuzzy, c-format
+#, c-format
msgid "The default security context is %s."
-msgstr "Contexto de Seguridad Predeterminado %s\n"
+msgstr "Contexto de Seguridad Predeterminado %s."
#: modules/pam_selinux/pam_selinux.c:176
msgid "Would you like to enter a different role or level?"
@@ -392,33 +398,32 @@ msgid "role:"
msgstr "función:"
#: modules/pam_selinux/pam_selinux.c:193
-#, fuzzy, c-format
+#, c-format
msgid "There is no default type for role %s."
-msgstr "No hay tipo por defecto para la función %s\n"
+msgstr "No hay tipo por defecto para la función %s."
#: modules/pam_selinux/pam_selinux.c:225
msgid "level:"
msgstr "nivel:"
#: modules/pam_selinux/pam_selinux.c:259
-#, fuzzy
msgid "This is not a valid security context."
-msgstr "No es un contexto de seguridad válido"
+msgstr "No es un contexto de seguridad válido."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
-msgstr ""
+msgstr "No se pudo obtener un contexto válido para %s."
-#: modules/pam_selinux/pam_selinux.c:640
-#, fuzzy, c-format
+#: modules/pam_selinux/pam_selinux.c:639
+#, c-format
msgid "Security context %s has been assigned."
-msgstr "Contexto de seguridad %s asignado"
+msgstr "Contexto de seguridad %s asignado."
-#: modules/pam_selinux/pam_selinux.c:656
-#, fuzzy, c-format
+#: modules/pam_selinux/pam_selinux.c:655
+#, c-format
msgid "Key creation context %s has been assigned."
-msgstr "Contexto de Creación Clave %s Asignado"
+msgstr "Contexto de creación de clave %s asignado."
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
@@ -435,7 +440,7 @@ msgstr "error en pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "inicio de sesión: error en horquilla: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Acceso permitido (el último acceso fué hace %ld segundos)."
@@ -473,39 +478,42 @@ msgstr[1] "Advertencia: la contraseña caducará dentro de %d días"
msgid "Warning: your password will expire in %d days."
msgstr "Advertencia: la contraseña caducará dentro de %d días"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "No es posible cambiar la contraseña NIS."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "No se ha proporcionado ninguna contraseña"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "No es posible cambiar la contraseña NIS."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Debes elegir una contraseña más corta."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Debe elegir una contraseña más larga"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Cambiando la contraseña de %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Debe esperar más tiempo para cambiar la contraseña"
+#~ msgid "You have no mail."
+#~ msgstr "No tiene correo nuevo."
+
#~ msgid "is the same as the old one"
#~ msgstr "es igual que la antigua"
@@ -575,9 +583,6 @@ msgstr "Debe esperar más tiempo para cambiar la contraseña"
#~ "%s: No es posible restaurar a todos los usuarios a un número distinto de "
#~ "cero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Fallo de Ingresos Ultimo fallo desde\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/et.gmo b/po/et.gmo
index 3b8de9a0..eb719b98 100644
--- a/po/et.gmo
+++ b/po/et.gmo
Binary files differ
diff --git a/po/et.po b/po/et.po
index c189a37f..aa19290c 100644
--- a/po/et.po
+++ b/po/et.po
@@ -3,67 +3,68 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <turakas@gmail.com>, 2012.
+# <turakas@gmail.com>, 2012.
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# H A <contact+fedora@hen.ee>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2012-12-02 06:25-0500\n"
-"Last-Translator: mihkel <turakas@gmail.com>\n"
-"Language-Team: Estonian (http://www.transifex.com/projects/p/fedora/language/"
-"et/)\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-06-21 23:18+0000\n"
+"Last-Translator: H A <contact+fedora@hen.ee>\n"
+"Language-Team: Estonian <https://translate.fedoraproject.org/projects/linux-"
+"pam/master/et/>\n"
"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Zanata 3.8.3\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.13\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Parool: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "Uus %s parool: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "Uus parool: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Uus %s parool: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Uus parool: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Kinnita uus %s parool: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Kinnita uus parool: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Kahjuks paroolid ei klapi."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
-msgstr ""
+msgstr "Kirjuta uuesti %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Paroolivahetus katkestatud."
@@ -204,47 +205,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr "Tundmatu PAM-i viga"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Aeg hakkab otsa saama...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Kahjuks on su aeg otsas!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "vigane vestlus (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+msgstr ""
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -252,45 +259,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -299,19 +306,19 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Sul ei ole posti kaustas %s."
#: modules/pam_mail/pam_mail.c:292
@@ -356,12 +363,12 @@ msgstr "loon kataloogi '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Parooli on juba kasutatud. Vali uus parool."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "Parooli on juba kasutatud. Vali uus parool."
@@ -392,17 +399,17 @@ msgstr "tase:"
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -422,7 +429,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -456,35 +463,35 @@ msgstr[1] "Hoiatus: su parool aegub %d päeva pärast"
msgid "Warning: your password will expire in %d days."
msgstr "Hoiatus: su parool aegub %d päeva pärast"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Parooli on juba kasutatud. Vali uus parool."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "Parooli on juba kasutatud. Vali uus parool."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Peate valima lühema parooli."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Sa pead valima pikema parooli"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Sa pead valima pikema parooli"
diff --git a/po/eu.po b/po/eu.po
index e21dbd48..f9c7aa79 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2012-12-24 08:54-0500\n"
"Last-Translator: Asier Iturralde Sarasola <asier.iturralde@gmail.com>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/fedora/language/"
@@ -21,49 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Pasahitza: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "%s Pasahitz berria: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "%s Pasahitz berria: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "%s Pasahitz berria: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Pasahitz berria: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Idatzi berriz %s pasahitz berria: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Idatzi berriz pasahitz berria: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Idatzi berriz %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -203,47 +203,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -251,45 +257,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -298,18 +304,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -354,12 +360,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -389,17 +395,17 @@ msgstr "maila:"
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -419,7 +425,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -452,34 +458,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Pasahitz laburragoa aukeratu behar duzu."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Pasahitz laburragoa aukeratu behar duzu."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Pasahitz laburragoa aukeratu behar duzu."
diff --git a/po/fa.po b/po/fa.po
index 4125be7c..21dc193f 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,92 +201,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -294,18 +300,18 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -350,12 +356,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -385,17 +391,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -415,7 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -447,34 +453,34 @@ msgstr[0] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "شما باید رمز عبور کوتاهتری انتخاب کنید."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "شما باید رمز عبور کوتاهتری انتخاب کنید."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "شما باید رمز عبور کوتاهتری انتخاب کنید."
diff --git a/po/fi.gmo b/po/fi.gmo
index d04368f1..8a79199f 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 315bb09c..49e720d6 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -10,16 +10,16 @@
# Ville-Pekka Vainio <vpvainio@iki.fi>, 2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2020.
-# Jan Kuparinen <copper_fin@hotmail.com>, 2021.
+# Jan Kuparinen <copper_fin@hotmail.com>, 2021, 2022.
# Ricky Tigg <ricky.tigg@gmail.com>, 2021.
# Dmitry V. Levin <ldv@altlinux.org>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-07-22 00:54+0000\n"
-"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-11-15 18:19+0000\n"
+"Last-Translator: Jan Kuparinen <copper_fin@hotmail.com>\n"
"Language-Team: Finnish <https://translate.fedoraproject.org/projects/linux-"
"pam/master/fi/>\n"
"Language: fi\n"
@@ -27,50 +27,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Salasana: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Nykyinen %s salasana: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Nykyinen salasana: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Uusi %s salasana: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Uusi salasana: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Anna uudelleen uusi %s salasana: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Kirjoita uudelleen uusi salasana: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Salasanat eivät täsmää."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Kirjoita uudelleen %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Salasanan vaihtaminen keskeytettiin."
@@ -210,49 +210,55 @@ msgstr "Sovelluksen tarvitsee kutsua uudelleen libpam:ia"
msgid "Unknown PAM error"
msgstr "Tuntematon PAM-virhe"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Aika on loppumassa...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Aikasi on loppunut!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "virheellinen keskustelu (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s epäonnistui: loppukoodi %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s epäonnistui: otettiin kiinni signaali %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s epäonnistui: tuntematon tila 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-"Käyttö:%s: [--dir /polku/missä/tally-hakemisto] [--user käyttäjätunnus] [--"
-"reset]\n"
+"Käyttö: %s: [--dir /polku/missä/tally-hakemisto] [--user käyttäjätunnus] [--"
+"reset][--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Tunnus Epäonnistuneita Viimeisin Koneelta\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Käyttäjätili on lukittu %u epäonnistuneen kirjautumisen vuoksi."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -260,45 +266,45 @@ msgstr[0] "(%d minuutti jäljellä avaamiseen)"
msgstr[1] "(%d minuuttia jäljellä avaamiseen)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minuuttia jäljellä avaamiseen)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " koneelta %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " päätteellä %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Viimeinen kirjautuminen:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Tervetuloa uudella käyttäjätilillä!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Viimeinen epäonnistunut kirjautuminen:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -311,21 +317,21 @@ msgstr[1] ""
"%d kertaa."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Edellisen onnistuneen kirjautumisen jälkeen kirjautuminen on epäonnistunut "
"%d kertaa."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Liian monta kirjautumista käyttäjälle '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Sinulle ei ole postia."
+msgid "You do not have any new mail."
+msgstr "Sinulle ei ole uutta postia."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -369,12 +375,12 @@ msgstr "Luodaan hakemisto ”%s”."
msgid "Unable to create and initialize directory '%s'."
msgstr "Hakemistoa ”%s” ei voida luoda eikä alustaa."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Salasana on jo käytetty. Valitse toinen."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Salasana on jo käytetty."
@@ -404,17 +410,17 @@ msgstr "taso:"
msgid "This is not a valid security context."
msgstr "Ei kelvollinen tietoturvaympäristö."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Kelvollista sisältöä %s:lle ei pystytty saamaan."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Tietoturvaympäristö %s asetettiin."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Avaimenluontiympäristö %s asetettiin."
@@ -434,7 +440,7 @@ msgstr "pam_set_item() kutsu epäonnistui\n"
msgid "login: failure forking: %m"
msgstr "sisäänkirjautuminen: virhe haarautumisessa: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Pääsy sallittu (edellinen kirjautuminen %ld sekuntia sitten)."
@@ -467,35 +473,38 @@ msgstr[1] "Varoitus: salasanasi vanhentuu %d päivän kuluttua."
msgid "Warning: your password will expire in %d days."
msgstr "Varoitus: salasanasi vanhentuu %d päivän kuluttua."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS-salasanaa ei voitu vaihtaa."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Et antanut salasanaa."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Salasanaa ei vaihdettu."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Sinun on valittava lyhyempi salasana."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Sinun tulee valita pidempi salasana."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Vaihdetaan käyttäjän %s salasana."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Sinun täytyy odottaa kauemmin vaihtaaksesi salasanasi."
+#~ msgid "You have no mail."
+#~ msgstr "Sinulle ei ole postia."
+
#~ msgid "is the same as the old one"
#~ msgstr "on sama kuin vanha"
@@ -562,9 +571,6 @@ msgstr "Sinun täytyy odottaa kauemmin vaihtaaksesi salasanasi."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Ei voida palauttaa kaikkia käyttäjiä ei-nolliksi\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Tunnus Epäonnistuneita Viimeisin Koneelta\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index 38e112b1..ecd8f482 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index bb105af9..72c62ca3 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -17,7 +17,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-08-18 09:04+0000\n"
"Last-Translator: Jérôme Fenal <jfenal@free.fr>\n"
"Language-Team: French <https://translate.fedoraproject.org/projects/linux-"
@@ -29,48 +29,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.7.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Mot de passe : "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Mot de passe %s actuel : "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Mot de passe actuel : "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nouveau %s mot de passe : "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nouveau mot de passe : "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Retapez le nouveau %s mot de passe : "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Retapez le nouveau mot de passe : "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Les mots de passe ne correspondent pas."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Retapez %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Le changement de mot de passe a été annulé."
@@ -219,49 +219,55 @@ msgstr "L’application doit à nouveau appeler libpam"
msgid "Unknown PAM error"
msgstr "Erreur PAM inconnue"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Temps bientôt écoulé...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Votre temps est épuisé !\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "conversation erronnée (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s échec : code de sortie %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s échec : signal capté %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s échec : statut 0x inconnu%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Utilisation : %s [--dir /chemin/vers/dossier-tally] [--user nom "
"d’utilisateur] [--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Connexion Échecs Dernier échec De\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Le compte est temporairement verrouillé dû aux %u connexions échouées."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -269,45 +275,45 @@ msgstr[0] "(%d minute restante pour déverrouiller)"
msgstr[1] "(%d minutes restantes pour déverrouiller)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minutes restantes pour déverrouiller)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %A %e %B %Y à %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " de %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " sur %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Dernière connexion :%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Bienvenue sur votre nouveau compte !"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Dernière connexion échoué : %s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -320,21 +326,22 @@ msgstr[1] ""
"réussie."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Il y a eu %d tentatives de connexion échouées depuis la dernière connexion "
"réussie."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Trop de connexions pour « %s »."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Vous n’avez pas de message."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Vous avez un nouveau message."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -378,12 +385,12 @@ msgstr "Création du répertoire « %s »."
msgid "Unable to create and initialize directory '%s'."
msgstr "Impossible de créer et d’initialiser le répertoire « %s »."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Mot de passe déjà utilisé. Choisissez-en un autre."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Mot de passe déjà utilisé."
@@ -413,17 +420,17 @@ msgstr "niveau :"
msgid "This is not a valid security context."
msgstr "Ceci n’est pas un contexte de sécurité valide."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Impossible d’obtenir un contexte valide pour %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Le contexte de sécurité %s a été attribué."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Le contexte de création de clés %s a été attribué."
@@ -443,7 +450,7 @@ msgstr "échec de pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login : échec du clonage : %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "L’accès a été accordé (dernier accès il y a %ld secondes)."
@@ -480,37 +487,40 @@ msgstr[1] "Attention : votre mot de passe expirera dans %d jours."
msgid "Warning: your password will expire in %d days."
msgstr "Attention : votre mot de passe expirera dans %d jours."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Le mot de passe NIS n’a pas pu être changé."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Aucun mot de passe n’a été fourni."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Le mot de passe n’a pas été modifié."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Vous devez choisir un mot de passe plus court."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Vous devez choisir un mot de passe plus long."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Changement du mot de passe pour %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr ""
"Vous devez attendre plus longtemps afin de pouvoir changer votre mot de "
"passe."
+#~ msgid "You have no mail."
+#~ msgstr "Vous n’avez pas de message."
+
#~ msgid "is the same as the old one"
#~ msgstr "est identique à l’ancien"
@@ -577,9 +587,6 @@ msgstr ""
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s : Impossible de réinitialiser tous les utilisateurs à non-zéro\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Connexion Échecs Dernier échec De\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ga.po b/po/ga.po
index c4bc3632..92e66585 100644
--- a/po/ga.po
+++ b/po/ga.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2013-09-10 02:14-0400\n"
"Last-Translator: leftmostcat <leftmostcat@gmail.com>\n"
"Language-Team: Irish (http://www.transifex.com/projects/p/fedora/language/"
@@ -23,49 +23,49 @@ msgstr ""
"4);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Focal faire: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "Focal faire %s nua: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "Focal faire nua: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Focal faire %s nua: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Focal faire nua: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Iontráil focal faire %s nua arís: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Iontráil focal faire nua arís: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Tá brón orm, ní ionann na focail fhaire."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Iontráil %s arís"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Tobscoireadh athrú focail faire."
@@ -210,49 +210,55 @@ msgstr "Ní mór don fheidhmchlár libpam a ghlaoch arís"
msgid "Unknown PAM error"
msgstr "Earráid PAM anaithnid"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Tá am ag imeacht...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Tá brón orm, tá do chuid ama imithe!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "comhrá earráideach (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "Theip %s: cód scortha %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "Theip %s: fuarthas comhartha %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "Theip %s: stádas anaithnid 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file ainm-comhad-le-fréamh] [--user úsáideoir] [--reset[=u]]\n"
"[--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Logáil isteach Teipeanna Teip is déanaí Ó\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Cuireadh an cuntas faoi ghlas mar gheall ar %u logáil isteach teipthe"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -263,45 +269,45 @@ msgstr[3] ""
msgstr[4] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %e %b %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " ó %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " ar %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Logáil isteach is déanaí:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Fáilte go dtí do chuntas nua!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Logáil isteach teipthe is déanaí:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -323,21 +329,21 @@ msgstr[4] ""
"d'éirigh leis."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a\n"
"d'éirigh leis."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "An iomarca logálacha isteach do '%s'."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Tá post nua agat."
#: modules/pam_mail/pam_mail.c:292
@@ -382,12 +388,12 @@ msgstr "Comhadlann '%s' á cruthú."
msgid "Unable to create and initialize directory '%s'."
msgstr "Ní féidir comhadlann '%s' a chruthú agus a thúsú."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Úsáidtear an focal faire cheana. Roghnaigh ceann eile."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Úsáidtear an focal faire cheana."
@@ -418,17 +424,17 @@ msgstr "leibhéal:"
msgid "This is not a valid security context."
msgstr "Ní comhthéacs bailí slándála é"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "Sannadh Comhthéacs Slándála %s"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "Sannadh Comhthéacs Chruthú Eochracha %s"
@@ -448,7 +454,7 @@ msgstr "theip ar pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "logáil isteach: theip ar dhéanamh foirc: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Bronnadh rochtain (bhí an rochtain is déanaí %ld soicind ó shin)."
@@ -490,39 +496,43 @@ msgstr[4] "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá"
msgid "Warning: your password will expire in %d days."
msgstr "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Níorbh fhéidir focal faire NIS a athrú."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Níor soláthraíodh aon fhocal faire"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "Níorbh fhéidir focal faire NIS a athrú."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Ní mór duit pasfhocal níos giorra a roghnú."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Caithfidh tú focal faire níos faide a roghnú"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Focal faire %s á athrú."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Caithfidh tú fanacht níos faide chun d'fhocal faire a athrú"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "Tá post nua agat."
+
#~ msgid "is the same as the old one"
#~ msgstr "tá sé díreach cosúil leis an seancheann"
@@ -590,9 +600,6 @@ msgstr "Caithfidh tú fanacht níos faide chun d'fhocal faire a athrú"
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Ní féidir gach úsáideoir a athrú go neamhnialasach\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Logáil isteach Teipeanna Teip is déanaí Ó\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/gl.po b/po/gl.po
index 66b62600..da8239ce 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Debes escoller un contrasinal máis curto."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Debes escoller un contrasinal máis curto."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Debes escoller un contrasinal máis curto."
diff --git a/po/gu.po b/po/gu.po
index b7480c0c..cb76b114 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2013-04-14 08:16-0400\n"
"Last-Translator: sweta <swkothar@redhat.com>\n"
"Language-Team: Gujarati <trans-gu@lists.fedoraproject.org>\n"
@@ -23,49 +23,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "પાસવર્ડ: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "નવો %s પાસવર્ડ: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "નવો પાસવર્ડ: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "નવો %s પાસવર્ડ: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "નવો પાસવર્ડ: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "નવો %s પાસવર્ડ ફરી લખો: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "નવો પાસવર્ડ ફરી લખો: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "માફ કરજો, પાસવર્ડો બંધબેસતા નથી."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s ને પુન:ટાઇપ કરો"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "પાસવર્ડ બદલાવનો અંત આવેલ છે."
@@ -206,48 +206,54 @@ msgstr "કાર્યક્રમને libpam ફરીથી બોલાવ
msgid "Unknown PAM error"
msgstr "અજ્ઞાત PAM ભૂલ"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...સમય ચાલ્યો જઈ રહ્યો છે...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...માફ કરજો, તમારો સમય સમાપ્ત થયો!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ક્ષતિયુક્ત વાર્તાલાપ (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s નિષ્ફળ: બહાર નીકળ્યાનો કોડ %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s નિષ્ફળ: મળેલ સંકેત %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s નિષ્ફળ: અજ્ઞાત પરિસ્થિતિ 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "પ્રવેશ એ તે માંથી તાજેતરની નિષ્ફળતાને નિષ્ફળ કરે છે\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u પ્રવેશો ને નિષ્ફળ કરે છે તે દરમ્યાન ખાતાને તાળુ મારેલ છે"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -255,45 +261,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s તરફથી"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s પર"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "છેલ્લો પ્રવેશ:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "તમારા નવા ખાતામાં તમારું સ્વાગત છે!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "છેલ્લો નિષ્ફળ થયેલ પ્રવેશ:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -302,19 +308,19 @@ msgstr[0] "છેલ્લે સફળ પ્રવેશ સુધી પ્
msgstr[1] "છેલ્લે સફળ પ્રવેશ સુધી પ્રવેશનો પ્રયત્નો કરવામાં %d નિષ્ફળ થયેલ હતુ."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "છેલ્લે સફળ પ્રવેશ સુધી પ્રવેશનાં પ્રયત્નો કરવામાં %d નિષ્ફળ થયેલ હતુ."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s' માટે ઘણા બધા પ્રવેશો."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "તમારી પાસે નવો મેઈલ છે."
#: modules/pam_mail/pam_mail.c:292
@@ -359,12 +365,12 @@ msgstr "ડિરેક્ટરી '%s' બનાવી રહ્યા છી
msgid "Unable to create and initialize directory '%s'."
msgstr "ડિરેક્ટરી '%s' ને શરૂ કરવામાં અને બનાવવામાં અસમર્થ."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "પાસવર્ડ પહેલાથી જ વપરાઈ ગયેલ છે. બીજો પસંદ કરો."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "પાસવર્ડને વાપરી દેવામાં આવ્યો છે."
@@ -395,17 +401,17 @@ msgstr "સ્તર:"
msgid "This is not a valid security context."
msgstr "માન્ય સુરક્ષા સંદર્ભ નથી"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "સુરક્ષા સંદર્ભ %s સોંપાયેલ"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "કી બનાવટ સંદર્ભ %s સોંપાયેલ"
@@ -425,7 +431,7 @@ msgstr "pam_set_item() કરવામાં નિષ્ફળ\n"
msgid "login: failure forking: %m"
msgstr "પ્રવેશ: ફોર્કમાં નિષ્ફળ: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "પ્રવેશની મંજૂરી આપેલ છે (છેલ્લો પ્રવેશ એ %ld સેકંડો પહેલા હતો)."
@@ -461,39 +467,43 @@ msgstr[1] "ચેતવણી: તમારો પાસવર્ડ %d દિ
msgid "Warning: your password will expire in %d days."
msgstr "ચેતવણી: તમારો પાસવર્ડ %d દિવસોમાં નિવૃત્ત થઈ જશે"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS પાસવર્ડ બદલી શક્યા નહિં."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "કોઈ પાસવર્ડ પૂરો પડાયેલ નથી"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS પાસવર્ડ બદલી શક્યા નહિં."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "તમારે ટૂંકા પાસવર્ડને પસંદ કરવો આવશ્યક છે."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "તમારે લાંબો પાસવર્ડ જ પસંદ કરવો જોઈએ"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s માટે પાસવર્ડ બદલવાનું."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "તમારો પાસવર્ડ બદલવા માટે તમારે લાંબો સમય રાહ જોવી જ પડશે"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "તમારી પાસે નવો મેઈલ છે."
+
#~ msgid "is the same as the old one"
#~ msgstr "એ જૂના જેવો જ છે"
@@ -560,9 +570,6 @@ msgstr "તમારો પાસવર્ડ બદલવા માટે ત
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: બધા વપરાશકર્તાઓને બિન-શૂન્યમાં પુનઃસુયોજિત કરી શકતા નથી\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "પ્રવેશ એ તે માંથી તાજેતરની નિષ્ફળતાને નિષ્ફળ કરે છે\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/he.gmo b/po/he.gmo
index 58240d59..a2c76f7d 100644
--- a/po/he.gmo
+++ b/po/he.gmo
Binary files differ
diff --git a/po/he.po b/po/he.po
index d3a21438..3528108c 100644
--- a/po/he.po
+++ b/po/he.po
@@ -4,15 +4,15 @@
#
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# Yaron Shahrabani <sh.yaron@gmail.com>, 2020.
+# Yaron Shahrabani <sh.yaron@gmail.com>, 2020, 2023.
# Dmitry V. Levin <ldv@altlinux.org>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-07-22 00:54+0000\n"
-"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2023-02-17 14:20+0000\n"
+"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <https://translate.fedoraproject.org/projects/linux-"
"pam/master/he/>\n"
"Language: he\n"
@@ -20,50 +20,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.15.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "ססמה: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "ססמת %s נוכחית: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "ססמה נוכחית: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "ססמת %s חדשה: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "ססמה חדשה: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "להקליד שוב ססמת %s חדשה: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "נא להקליד ססמה חדשה שוב: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "סליחה, הססמאות לא תואמות."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "להקליד את %s מחדש"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "שינוי ססמה בוטל."
@@ -203,94 +203,101 @@ msgstr "היישום צריך לקרוא ל־libpam שוב"
msgid "Unknown PAM error"
msgstr "שגיאת PAM לא מוכרת"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...הזמן עומד להיגמר...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...סליחה, זמנך עבר!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "דיון שגוי (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s נכשל: קוד היציאה %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s נכשל: נתפס האות %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s נכשל: מצב לא ידוע 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "כניסה כשלים כשל אחרון מאת\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "החשבון ננעל בעקבות %u ניסיונות התחברות שנכשלו."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] "(נותרו %d דקה לשחרור)"
+msgstr[0] "(נותרה דקה לשחרור)"
msgstr[1] "(נותרו %d דקות לשחרור)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(נותרו %d דקות לשחרור)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " מהמארח %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " על גבי %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "כניסה אחרונה:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "ברוך בואך לחשבונך החדש!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "כניסה כושלת אחרונה:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -299,18 +306,18 @@ msgstr[0] "היה ניסיון התחברות %d שנכשל מאז ההתחבר
msgstr[1] "היו %d ניסיונות התחברות שנכשלו מאז ההתחברות האחרונה שהצליחה."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "היו %d ניסיונות התחברות שנכשלו מאז ההתחברות האחרונה שהצליחה."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "יותר מדי פעילויות כניסה עבור ‚%s’."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "אין לך דואר."
#: modules/pam_mail/pam_mail.c:292
@@ -355,12 +362,12 @@ msgstr "התיקייה ‚%s’ נוצרת."
msgid "Unable to create and initialize directory '%s'."
msgstr "לא ניתן ליצור ולאתחל את התיקייה ‚%s’."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "כבר נעשה שימוש בססמה. נא לבחור באחרת."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "כבר נעשה שימוש בססמה הזאת."
@@ -390,17 +397,17 @@ msgstr "רמה:"
msgid "This is not a valid security context."
msgstr "זה לא הקשר אבטחה תקני."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "לא ניתן לקבל הקשר תקני עבור %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "הקשר האבטחה %s הוקצה."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "הקשר יצירת המפתח %s הוקצה."
@@ -420,7 +427,7 @@ msgstr "pam_set_item()‎ נכשל\n"
msgid "login: failure forking: %m"
msgstr "כניסה: פיצול נכשל: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "הוענקה גישה (הכניסה האחרונה הייתה לפני %ld שניות)."
@@ -453,32 +460,32 @@ msgstr[1] "אזהרה: הססמה שלך תפוג תוך %d ימים."
msgid "Warning: your password will expire in %d days."
msgstr "אזהרה: הססמה שלך תפוג תוך %d ימים."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "לא היה ניתן לשנות ססמת NIS."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "לא סופקה ססמה."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "הססמה לא הוחלפה."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "עליך לבחור סיסמה קצרה יותר."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "עליך לבחור ססמה ארוכה יותר."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "הססמה עבור %s מוחלפת."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "עליך להמתין זמן רב יותר כדי להחליף את ססמתך."
@@ -547,9 +554,6 @@ msgstr "עליך להמתין זמן רב יותר כדי להחליף את סס
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: אין אפשרות לאפס את כל המשתמשים למספר שאינו אפס\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "כניסה כשלים כשל אחרון מאת\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/hi.po b/po/hi.po
index 10e8fbd7..996fba12 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-03-06 23:59+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Hindi <https://translate.fedoraproject.org/projects/linux-pam/"
@@ -24,49 +24,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 3.11.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "शब्दकूट: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "नया %s password: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "नया password: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "नया %s password: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "नया password: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "नया %s password फिर टाइप करें: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "नया password फिर टाइप करें: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "क्षमा करें, शब्दकूट नहीं मिलते हैं."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "फिर टाइप करें %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "कूटशब्द परिवर्तन छोड़ा गया."
@@ -207,48 +207,54 @@ msgstr "अनुप्रयोग के libpam फिर आह्वान
msgid "Unknown PAM error"
msgstr "अनजान PAM त्रुटि"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...समय समाप्त हो रहा है...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...क्षमा करें, आपका समय समाप्त हो गया!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "अनियमित बातचीत (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s विफल: निकास कोड %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s विफल: संकेत घेरा %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s विफल: अनजान स्थिति 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Failures Latest failure From\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "खाता %u विफल लॉगिन के कारण लॉक"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -256,45 +262,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s से"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s पर"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "अंतिम लॉगिन:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "नए खाता में आपका स्वागत है!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "अंतिम लॉगिन विफल:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -303,19 +309,19 @@ msgstr[0] "%d विफल लॉगिन प्रयास था अंत
msgstr[1] "%d विफल लॉगिन प्रयास थे अंतिम सफल लॉगिन के बाद."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "%d विफल लॉगिन प्रयास थे अंतिम सफल लॉगिन के बाद."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s' के लिए बहुत लॉगिन."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "आपके लिए नया मेल है."
#: modules/pam_mail/pam_mail.c:292
@@ -360,12 +366,12 @@ msgstr "निर्देशिका '%s' बना रहा है."
msgid "Unable to create and initialize directory '%s'."
msgstr "निर्देशिका '%s' बनाने और आरंभ करने में असमर्थ."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "शब्दकूट को पहले ही बदला जा चुका है. दूसरा चुनें."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "शब्दकूट प्रयोग हो चूका है. दूसरा चुनें "
@@ -396,17 +402,17 @@ msgstr "स्तर: "
msgid "This is not a valid security context."
msgstr "एक वैध सुरक्षा संदर्भ नहीं"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "सुरक्षा संदर्भ %s नियत"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "कुंजी निर्माण संदर्भ %s नियत"
@@ -426,7 +432,7 @@ msgstr "pam_set_item() में विफल\n"
msgid "login: failure forking: %m"
msgstr "लॉगिन: विफल फोर्किंग: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "पहुँच दिया गया (last access was %ld seconds ago)."
@@ -462,39 +468,43 @@ msgstr[1] "चेतावनी: आपका शब्दकूट %d दि
msgid "Warning: your password will expire in %d days."
msgstr "चेतावनी: आपका शब्दकूट %d दिनों में समाप्त हो जायेगा"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS शब्दकूट बदला नहीं जा सका."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "कोई कूटशब्द नहीं दिया गया है"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS शब्दकूट बदला नहीं जा सका."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "आपको एक छोटा पासवर्ड चुनना होगा।"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "आपको जरूर एक लंबा शब्दकूट चुनना चाहिए"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s के लिए कूटशब्द बदल रहा है"
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "आपको अपना शब्दकूट बदलने के लिए लंबी प्रतीक्षा करनी होगी"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "आपके लिए नया मेल है."
+
#~ msgid "is the same as the old one"
#~ msgstr "पुराने की तरह समान है"
@@ -561,9 +571,6 @@ msgstr "आपको अपना शब्दकूट बदलने के
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: सभी उपयोक्ता को गैर शून्य में फिर सेट नहीं कर सकता है\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Failures Latest failure From\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/hr.gmo b/po/hr.gmo
index 19824625..8f153ef3 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 575c0165..a160c11b 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -4,484 +4,500 @@
#
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# Gogo Gogsi <linux.hr@protonmail.com>, 2021, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2011-11-30 06:56-0500\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Croatian (http://www.transifex.com/projects/p/fedora/language/"
-"hr/)\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-12-25 09:20+0000\n"
+"Last-Translator: Gogo Gogsi <linux.hr@protonmail.com>\n"
+"Language-Team: Croatian <https://translate.fedoraproject.org/projects/linux-"
+"pam/master/hr/>\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Zanata 3.8.3\n"
+"X-Generator: Weblate 4.15\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr ""
+msgstr "Lozinka: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
-msgstr ""
+msgstr "Trenutna %s lozinka: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr ""
+msgstr "Trenutna lozinka: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
-msgstr ""
+msgstr "Nova %s lozinka: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
-msgstr ""
+msgstr "Nova lozinka: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
-msgstr ""
+msgstr "Ponovno upišite novu %s lozinku: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
-msgstr ""
+msgstr "Ponovno upišite novu lozinku: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
-msgstr ""
+msgstr "Nažalost, lozinke se ne podudaraju."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
-msgstr ""
+msgstr "Ponovno upišite %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
-msgstr ""
+msgstr "Promjena lozinke je prekinuta."
#: libpam/pam_item.c:311
msgid "login:"
-msgstr ""
+msgstr "prijava:"
#: libpam/pam_strerror.c:40
msgid "Success"
-msgstr ""
+msgstr "Uspješno"
#: libpam/pam_strerror.c:42
msgid "Critical error - immediate abort"
-msgstr ""
+msgstr "Kritična greška - trenutan prekid"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
-msgstr ""
+msgstr "Greška pri učitavanju modula"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr ""
+msgstr "Simbol nije pronađen"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
-msgstr ""
+msgstr "Greška u modulu usluge"
#: libpam/pam_strerror.c:50
msgid "System error"
-msgstr ""
+msgstr "Greška sustava"
#: libpam/pam_strerror.c:52
msgid "Memory buffer error"
-msgstr ""
+msgstr "Greška međuspremnika memorije"
#: libpam/pam_strerror.c:54
msgid "Permission denied"
-msgstr ""
+msgstr "Pristup odbijen"
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
-msgstr ""
+msgstr "Greška ovjere"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
-msgstr ""
+msgstr "Nedovoljne ovlasti za pristup podacima ovjere"
#: libpam/pam_strerror.c:60
msgid "Authentication service cannot retrieve authentication info"
-msgstr ""
+msgstr "Usluga ovjere ne može dohvatiti informacije ovjere"
#: libpam/pam_strerror.c:62
msgid "User not known to the underlying authentication module"
-msgstr ""
+msgstr "Korisnik nije poznat temeljnom modulu ovjere"
#: libpam/pam_strerror.c:64
msgid "Have exhausted maximum number of retries for service"
-msgstr ""
+msgstr "Iskorišten najveći dopušteni broj pokušaja za uslugu"
#: libpam/pam_strerror.c:66
msgid "Authentication token is no longer valid; new one required"
-msgstr ""
+msgstr "Token ovjere više nije valjan, potreban je novi"
#: libpam/pam_strerror.c:68
msgid "User account has expired"
-msgstr ""
+msgstr "Korisnički račun je istekao"
#: libpam/pam_strerror.c:70
msgid "Cannot make/remove an entry for the specified session"
-msgstr ""
+msgstr "Nemoguće stvoriti/ukloniti stavku za odabranu sesiju"
#: libpam/pam_strerror.c:72
msgid "Authentication service cannot retrieve user credentials"
-msgstr ""
+msgstr "Usluga ovjere ne može dohvatiti korisničke podatke"
#: libpam/pam_strerror.c:74
msgid "User credentials expired"
-msgstr ""
+msgstr "Korisnički podaci su istekli"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
-msgstr ""
+msgstr "Greška pri postavljanju korisničkih podataka"
#: libpam/pam_strerror.c:78
msgid "No module specific data is present"
-msgstr ""
+msgstr "Podaci određeni za module nisu prisutni"
#: libpam/pam_strerror.c:80
msgid "Bad item passed to pam_*_item()"
-msgstr ""
+msgstr "Loša stavka je proslijeđena prema pam_*_item()"
#: libpam/pam_strerror.c:82
msgid "Conversation error"
-msgstr ""
+msgstr "Greška razgovora"
#: libpam/pam_strerror.c:84
msgid "Authentication token manipulation error"
-msgstr ""
+msgstr "Manipulacijska greška tokena ovjere"
#: libpam/pam_strerror.c:86
msgid "Authentication information cannot be recovered"
-msgstr ""
+msgstr "Nemoguće je vratiti informacije ovjere"
#: libpam/pam_strerror.c:88
msgid "Authentication token lock busy"
-msgstr ""
+msgstr "Zauzeto zaključavanje tokena ovjere"
#: libpam/pam_strerror.c:90
msgid "Authentication token aging disabled"
-msgstr ""
+msgstr "Zastarijevanje tokena ovjere onemogućeno"
#: libpam/pam_strerror.c:92
msgid "Failed preliminary check by password service"
-msgstr ""
+msgstr "Preliminarna provjera od strane usluge lozinke nije uspjela"
#: libpam/pam_strerror.c:94
msgid "The return value should be ignored by PAM dispatch"
-msgstr ""
+msgstr "Povratnu vrijednost bi PAM dispačer trebao zanemariti"
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
-msgstr ""
+msgstr "Modul nije poznat"
#: libpam/pam_strerror.c:98
msgid "Authentication token expired"
-msgstr ""
+msgstr "Modul ovjere je istekao"
#: libpam/pam_strerror.c:100
msgid "Conversation is waiting for event"
-msgstr ""
+msgstr "Razgovor čeka za događaj"
#: libpam/pam_strerror.c:102
msgid "Application needs to call libpam again"
-msgstr ""
+msgstr "Aplikacija treba ponovno pozvati libpam"
#: libpam/pam_strerror.c:105
msgid "Unknown PAM error"
-msgstr ""
+msgstr "Nepoznata PAM greška"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
-msgstr ""
+msgstr "...Vrijeme istječe...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
-msgstr ""
+msgstr "...Nažalost, vaše je vrijeme isteklo!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
-msgstr ""
+msgstr "pogrešan razgovor (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
-msgstr ""
+msgstr "%s neuspjelo: izlazni kôd %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
-msgstr ""
+msgstr "%s neuspjelo: uhvaćen signal %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
-msgstr ""
+msgstr "%s neuspjelo: nepoznati status 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
+"Upotreba: %s [--dir /putanja/do/tally-direktorija] [--user korisničko ime] "
+"[--reset] [--legacy-output]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Prijava Neuspjesi Posljedni neuspjeh Od\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
-msgstr ""
+msgstr "Račun je zaključan zbog %u neuspjelih prijava."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "(%d minuta preostala za prijavu)"
+msgstr[1] "(%d minute preostale za prijavu)"
+msgstr[2] "(%d minuta preostale za prijavu)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+msgstr "(%d minuta preostalo za otključavanje)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
-msgstr ""
+msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
-msgstr ""
+msgstr " od %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
-msgstr ""
+msgstr " na %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
-msgstr ""
+msgstr "Posljednja prijava:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
-msgstr ""
+msgstr "Dobrodošli u vaš novi račun!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
-msgstr ""
+msgstr "Posljednja neuspjela prijava:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
"There were %d failed login attempts since the last successful login."
msgstr[0] ""
+"Nakon posljednje uspješne prijave bio je %d neuspjeli pokušaj prijave."
msgstr[1] ""
+"Nakon posljednje uspješne prijave bila su %d neuspjela pokušaja prijave."
msgstr[2] ""
+"Nakon posljednje uspješne prijave bilo je %d neuspjelih pokušaja prijave."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
+"Nakon posljednje uspješne prijave, bilo je %d neuspjelih pokušaja prijave."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
-msgstr ""
+msgstr "Previše prijava za '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr ""
+msgid "You do not have any new mail."
+msgstr "Nemate novu e-poštu."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
-msgstr ""
+msgstr "Imate novu e-poštu."
#: modules/pam_mail/pam_mail.c:295
msgid "You have old mail."
-msgstr ""
+msgstr "Imate staru e-poštu."
#: modules/pam_mail/pam_mail.c:299
msgid "You have mail."
-msgstr ""
+msgstr "Imate e-poštu."
#: modules/pam_mail/pam_mail.c:306
#, c-format
msgid "You have no mail in folder %s."
-msgstr ""
+msgstr "Nemate e-poštu u mapi %s."
#: modules/pam_mail/pam_mail.c:310
#, c-format
msgid "You have new mail in folder %s."
-msgstr ""
+msgstr "Imate novu e-poštu u mapi %s."
#: modules/pam_mail/pam_mail.c:314
#, c-format
msgid "You have old mail in folder %s."
-msgstr ""
+msgstr "Imate staru e-poštu u mapi %s."
#: modules/pam_mail/pam_mail.c:319
#, c-format
msgid "You have mail in folder %s."
-msgstr ""
+msgstr "Imate e-poštu u mapi %s."
#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr ""
+msgstr "Stvaranje direktorija '%s'."
#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
-msgstr ""
+msgstr "Stvaranje i pokretanje direktorija '%s' nije uspjelo."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
-msgstr ""
+msgstr "Lozinka je već korištena. Odaberite neku drugu."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
-msgstr ""
+msgstr "Lozinka se već korsiti."
#: modules/pam_selinux/pam_selinux.c:172
#, c-format
msgid "The default security context is %s."
-msgstr ""
+msgstr "Zadani sigurnosni sadržaj je %s."
#: modules/pam_selinux/pam_selinux.c:176
msgid "Would you like to enter a different role or level?"
-msgstr ""
+msgstr "Želite li unijeti drugu namjenu ili razinu?"
#: modules/pam_selinux/pam_selinux.c:189
msgid "role:"
-msgstr ""
+msgstr "namjena:"
#: modules/pam_selinux/pam_selinux.c:193
#, c-format
msgid "There is no default type for role %s."
-msgstr ""
+msgstr "Nema zadane vrste za namjenu %s."
#: modules/pam_selinux/pam_selinux.c:225
msgid "level:"
-msgstr ""
+msgstr "razina:"
#: modules/pam_selinux/pam_selinux.c:259
msgid "This is not a valid security context."
-msgstr ""
+msgstr "Ovo nije zadani sigurnosni sadržaj."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
-msgstr ""
+msgstr "Valjani sadržaj za %s ne može se dobiti."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
-msgstr ""
+msgstr "Sigurnosni sadržaj za %s nije dodijeljen."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
-msgstr ""
+msgstr "Sadržaj stvaranja ključa %s je dodijeljen."
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
msgid "failed to initialize PAM\n"
-msgstr ""
+msgstr "neuspjelo pokretanje PAM-a\n"
#: modules/pam_selinux/pam_selinux_check.c:105
#, c-format
msgid "failed to pam_set_item()\n"
-msgstr ""
+msgstr "neuspjelo pam_set_item()\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr ""
+msgstr "prijava: greška pri račvanju: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
-msgstr ""
+msgstr "Pristup je dopušten (Posljednja prijava je bila prije %ld sekunde)."
#: modules/pam_unix/pam_unix_acct.c:230 modules/pam_unix/pam_unix_acct.c:252
msgid "Your account has expired; please contact your system administrator."
-msgstr ""
+msgstr "Vaš račun je istekao; kontaktirajte svojeg administratora sustava."
#: modules/pam_unix/pam_unix_acct.c:238
msgid ""
"You are required to change your password immediately (administrator "
"enforced)."
msgstr ""
+"Od vas je zatraženo da odmah promijenite svoju lozinku (zahtjev od strane "
+"administratora)."
#: modules/pam_unix/pam_unix_acct.c:244
msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
+"Od vas je zatraženo da odmah promijenite svoju lozinku (lozinka je istekla)."
#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Upozorenje: vaša lozinka će isteći za %d dan."
+msgstr[1] "Upozorenje: vaša lozinka će isteći za %d dana."
+msgstr[2] "Upozorenje: vaša lozinka će isteći za %d dana."
#. TRANSLATORS: only used if dngettext is not supported
#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
msgid "Warning: your password will expire in %d days."
-msgstr ""
+msgstr "Upozorenje: vaša lozinka će isteći za %d dana."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
-msgstr ""
+msgstr "NIS lozinku nije moguće promijeniti."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
-msgstr ""
+msgstr "Lozinka nije navedena."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
-msgstr ""
+msgstr "Lozinka nije promijenjena."
-#: modules/pam_unix/pam_unix_passwd.c:581
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
-msgstr "Morate odabrati kraću zaporku."
+msgstr "Morate odabrati kraću lozinku."
-#: modules/pam_unix/pam_unix_passwd.c:585
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
-msgstr "Morate odabrati kraću zaporku."
+msgstr "Morate odabrati dužu lozinku."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
-msgstr ""
+msgstr "Promjena lozinke za %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
-msgstr "Morate odabrati kraću zaporku."
+msgstr "Morate pričekati duže za promjenu lozinke."
+
+#~ msgid "You have no mail."
+#~ msgstr "Nemate e-poštu."
diff --git a/po/hu.po b/po/hu.po
index c04e34e4..3dd6ded9 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-02-10 19:40+0000\n"
"Last-Translator: Balázs Meskó <meskobalazs@mailbox.org>\n"
"Language-Team: Hungarian <https://translate.fedoraproject.org/projects/linux-"
@@ -26,48 +26,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.4.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Jelszó: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Jelenlegi %s jelszó: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Jelenlegi jelszó: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Új %s jelszó: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Új jelszó: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Ismét az új %s jelszó: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Ismét az új jelszó: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Sajnálom, de a jelszavak nem egyeznek."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Ismét %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Jelszó változtatás elvetve."
@@ -210,48 +210,54 @@ msgstr "Az alkalmazásnak újra meg kell hívnia a libpam modult"
msgid "Unknown PAM error"
msgstr "Ismeretlen PAM hiba"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Fogy az idő...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Sajnos lejárt az idő!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "hibás beszélgetés (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s hiba: kilépő kód %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s hiba: %d%s jelzés érzékelve"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s hiba: 0x%x ismeretlen állapot"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-fájlnév] [--user használó] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Belépés Hibák Utolsó hibák Innen\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Felhasználói azonosító zárolva, többszöri, %u sikertelen belépés miatt"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -259,45 +265,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %Y. %b %e, %a %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " innen: %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ", %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Utolsó belépés:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Üdvözöljük az új felhasználói azonosítójával!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Utolsó sikertelen belépés:%s %s %s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -306,19 +312,19 @@ msgstr[0] "%d sikertelen belépés kísérlet volt az utolsó sikeres belépés
msgstr[1] "%d sikertelen belépés kísérlet volt az utolsó sikeres belépés óta."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "%d sikertelen belépés kísérlet volt az utolsó sikeres belépés óta."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "Túl sok bejelentkezés \"%s\" részéről."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Új levele érkezett."
#: modules/pam_mail/pam_mail.c:292
@@ -363,12 +369,12 @@ msgstr "\"%s\" mappa létrehozása."
msgid "Unable to create and initialize directory '%s'."
msgstr "„%s” mappa nem hozható létre és állítható be."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "A jelszót már használta. Válasszon másikat."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "A jelszót már használta. Válasszon másikat."
@@ -399,17 +405,17 @@ msgstr "szint:"
msgid "This is not a valid security context."
msgstr "Nem érvényes biztonsági környezet"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "%s biztonsági környezet hozzárendelve"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "%s kulcskészítő környezet hozzárendelve"
@@ -429,7 +435,7 @@ msgstr "pam_set_item() meghiúsult\n"
msgid "login: failure forking: %m"
msgstr "bejelentkezés: elágazás hiba: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Hozzáférés megadva (utolsó hozzáférés %ld másodperce volt)."
@@ -468,39 +474,43 @@ msgstr[1] "Figyelmeztetés: a jelszava %d nap múlva lejár"
msgid "Warning: your password will expire in %d days."
msgstr "Figyelmeztetés: a jelszava %d nap múlva lejár"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS jelszót nem sikerült módosítani."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Nincs jelszó megadva"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS jelszót nem sikerült módosítani."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Egy rövidebb jelszót kell választania."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Válasszon hosszabb jelszót"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s jelszavának megváltoztatása."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Tovább kell várnia míg megváltoztathatja a jelszavát"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "Új levele érkezett."
+
#~ msgid "is the same as the old one"
#~ msgstr "ugyanaz, mint a régi"
@@ -567,9 +577,6 @@ msgstr "Tovább kell várnia míg megváltoztathatja a jelszavát"
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Nem állítható vissza minden felhasználó nem-nullára\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Belépés Hibák Utolsó hibák Innen\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ia.po b/po/ia.po
index d985f46e..bdfdb04e 100644
--- a/po/ia.po
+++ b/po/ia.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2012-12-17 05:00-0500\n"
"Last-Translator: Nik Kalach <nik.kalach@inbox.ru>\n"
"Language-Team: Interlingua <trans-ia@lists.fedoraproject.org>\n"
@@ -21,49 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Contrasigno: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "Nove %s contrasigno: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "Nove contrasigno: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nove %s contrasigno: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nove contrasigno: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Retypa nove %s contrasigno: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Retypa nove contrasigno: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Le contrasignos non es equal."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Retypa %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Cambiamento de contrasigno abortate."
@@ -208,48 +208,54 @@ msgstr "Le application debe appellar a libpam de nove"
msgid "Unknown PAM error"
msgstr "Error incognite de PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Le tempore es perimente...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Le tempore ha perimite!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "conversation erronee (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s fallite: codice de exito %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s fallite: signal capturate %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s fallite: stato incognite 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file percurso-integre] [--user usator] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Conto Fallimentos Ultime fallimento De\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Le conto es blocate a causa de %u insuccessos al authentication"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -257,45 +263,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " de %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " via %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Ultime connexion:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Benvenite al nove conto!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Ultime connexion fallite:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -306,20 +312,20 @@ msgstr[1] ""
"Il esseva %d insuccessos de initiar le session desde le ultime connexion."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Il esseva %d insuccessos a initiar le session desde le ultime connexion."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "Troppo de connexiones pro '%s'."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Il ha nove currero."
#: modules/pam_mail/pam_mail.c:292
@@ -364,12 +370,12 @@ msgstr "Creation del directorio '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Impossibile de crear e de initiar le directorio '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Le contrasigno jam se ha utilisate. Selige un altere."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Le contrasigno se ha jam usate."
@@ -400,17 +406,17 @@ msgstr "nivello:"
msgid "This is not a valid security context."
msgstr "Contexto de securitate incorrecte"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "Contexto de securitate %s attribuite"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "Contexto de creation de clave %s attribuite"
@@ -430,7 +436,7 @@ msgstr "error in pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "apertura de session: insuccesso de autoclonage: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Accesso permittite (le ultime accesso eveniva ante %ld secundas)."
@@ -466,40 +472,44 @@ msgstr[1] "Advertimento: le contrasigno perimera in %d dies"
msgid "Warning: your password will expire in %d days."
msgstr "Advertimento: le contrasigno perimera in %d dies"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Le contrasigno NIS non pote esser cambiate."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Necun contrasigno fornite"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "Le contrasigno NIS non pote esser cambiate."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Selige un contrasigno plus longe"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Selige un contrasigno plus longe"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Cambiamento del contrasigno pro %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Attende ancora pro cambiar le contrasigno"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "Il ha nove currero."
+
#~ msgid "is the same as the old one"
#~ msgstr "nove contrasigno es equl al previe"
@@ -567,9 +577,6 @@ msgstr "Attende ancora pro cambiar le contrasigno"
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Impossibile de reinitiar tote le usatores a non-zero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Conto Fallimentos Ultime fallimento De\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/id.po b/po/id.po
index 824d6b36..2645507e 100644
--- a/po/id.po
+++ b/po/id.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2013-04-22 01:07-0400\n"
"Last-Translator: sentabi\n"
"Language-Team: Indonesian <trans-id@lists.fedoraproject.org>\n"
@@ -20,50 +20,50 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Sandi:"
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "Sandi:"
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, fuzzy, c-format
msgid "New %s password: "
msgstr "Sandi:"
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
#, fuzzy
msgid "New password: "
msgstr "Sandi:"
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Maaf, sandi yang anda masukkan tidak sama."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Ketik ulang %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Pergantian sandi digagalkan."
@@ -204,92 +204,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+msgstr ""
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -297,19 +303,19 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Anda menerima surel baru."
#: modules/pam_mail/pam_mail.c:292
@@ -354,12 +360,12 @@ msgstr "Membuat direktori '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Tidak dapat membuat direktori '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Sandi sudah digunakan sebelumnya. Pilih sandi yang lain."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Sandi sudah digunakan."
@@ -390,17 +396,17 @@ msgstr "Level:"
msgid "This is not a valid security context."
msgstr "Konteks sekuriti tidak benar."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -420,7 +426,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -452,39 +458,43 @@ msgstr[0] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Sandi sudah digunakan."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "Sandi sudah digunakan."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Anda harus memilih kata sandi yang lebih pendek."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Anda harus memilih kata sandi yang lebih pendek."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Anda harus memilih kata sandi yang lebih pendek."
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "Anda menerima surel baru."
+
#~ msgid "contains too long of a monotonic character sequence"
#~ msgstr "terlalu panjang karakter berurutan"
diff --git a/po/is.po b/po/is.po
index 93c4e5c8..f7dc1d6f 100644
--- a/po/is.po
+++ b/po/is.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/fedora/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Þú verður að velja styttri lykilorð."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Þú verður að velja styttri lykilorð."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Þú verður að velja styttri lykilorð."
diff --git a/po/it.gmo b/po/it.gmo
index c9451815..56e4e6f7 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 456fd6fb..ddbcb065 100644
--- a/po/it.po
+++ b/po/it.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-07-22 00:54+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Italian <https://translate.fedoraproject.org/projects/linux-"
@@ -27,48 +27,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.7.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Password: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Password attuale %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Password attuale: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nuova password %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nuova password: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Reimmettere la nuova password %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Reimmettere la nuova password: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Le password non corrispondono."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Reimmettere %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Modifica della password terminata."
@@ -212,48 +212,54 @@ msgstr "L'applicazione richiede una nuova chiamata a libpam"
msgid "Unknown PAM error"
msgstr "Errore PAM sconosciuto"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Il tempo sta per scadere...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Tempo scaduto!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "conversazione errata (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s non riuscita: codice d'uscita %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s non riuscita: intercettato il segnale %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s non riuscita: stato sconosciuto 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Uso: %s [--dir /path/to/tally-directory] [--user nomeutente] [--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Accesso Errori Ultimi errori Da\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Account bloccato a causa di %u accessi non riusciti."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -261,45 +267,45 @@ msgstr[0] "(%d minuto rimanenti per sbloccare)"
msgstr[1] "(%d minuti rimanenti per sbloccare)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minuti rimanenti per sbloccare)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %e %b %Y %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " da %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " su %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Ultimo accesso:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Benvenuti nel nuovo account!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Ultimo accesso non riuscito:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -310,20 +316,21 @@ msgstr[1] ""
"Dall'ultimo accesso si sono verificati %d tentativi non riusciti di accesso."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Dall'ultimo accesso si sono verificati %d tentativi non riusciti di accesso."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Sono stati effettuati troppi accessi per «%s»."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Non ci sono email."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Ci sono nuove email."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -367,12 +374,12 @@ msgstr "Creazione della directory «%s»."
msgid "Unable to create and initialize directory '%s'."
msgstr "Impossibile creare e inizializzare la directory «%s»."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Password già utilizzata, sceglierne un'altra."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "La password è stata già utilizzata."
@@ -402,17 +409,17 @@ msgstr "livello:"
msgid "This is not a valid security context."
msgstr "Non è un contesto di sicurezza valido."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Impossibile ottenere un contesto valido per %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Contesto di sicurezza %s assegnato."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Contesto di creazione chiave %s assegnato."
@@ -432,7 +439,7 @@ msgstr "Impossibile eseguire pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: fork non riuscita: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Accesso permesso (l'ultimo accesso risale a %ld secondi fa)."
@@ -467,35 +474,38 @@ msgstr[1] "Avviso: la password scadrà tra %d giorni."
msgid "Warning: your password will expire in %d days."
msgstr "Avviso: la password scadrà tra %d giorni."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Impossibile modificare la password NIS."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Nessuna password fornita."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "La password non è stata modificata."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Scegliere una password più corta."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Scegliere una password più lunga."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Cambio password per %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Attendere ancora per cambiare la password."
+#~ msgid "You have no mail."
+#~ msgstr "Non ci sono email."
+
#~ msgid "is the same as the old one"
#~ msgstr "è la stessa di quella precedente"
@@ -562,9 +572,6 @@ msgstr "Attendere ancora per cambiare la password."
#~ msgstr ""
#~ "%s: impossibile ripristinare tutti gli utenti a valori diversi da zero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Accesso Errori Ultimi errori Da\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index bcd952a5..da496eba 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 519a61ce..b29260f9 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -9,13 +9,14 @@
# Tomoyuki KATO <tomo@dream.daynight.jp>, 2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# Tomohiro KATO <tomop@teamgedoh.net>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2020-03-06 23:59+0000\n"
-"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2021-12-08 21:16+0000\n"
+"Last-Translator: Tomohiro KATO <tomop@teamgedoh.net>\n"
"Language-Team: Japanese <https://translate.fedoraproject.org/projects/linux-"
"pam/master/ja/>\n"
"Language: ja\n"
@@ -23,54 +24,52 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 3.11.2\n"
+"X-Generator: Weblate 4.9.1\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr "パスワード:"
+msgstr "パスワード: "
-#: libpam/pam_get_authtok.c:41
-#, fuzzy, c-format
+#: libpam/pam_get_authtok.c:42
+#, c-format
msgid "Current %s password: "
-msgstr "新しい%sパスワード:"
+msgstr "現在の%sパスワード: "
-#: libpam/pam_get_authtok.c:42
-#, fuzzy
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr "新しい パスワード:"
+msgstr "現在のパスワード: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
-msgstr "新しい%sパスワード:"
+msgstr "新しい%sパスワード: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
-msgstr "新しい パスワード:"
+msgstr "新しいパスワード: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
-msgstr "新しい%sパスワードを再入力してください:"
+msgstr "新しい%sパスワードを再入力してください: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
-msgstr "新しい パスワードを再入力してください:"
+msgstr "新しいパスワードを再入力してください: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "パスワードが一致しません。"
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s を再入力して下さい"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
-#, fuzzy
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
-msgstr "パスワードの変更は放棄されました"
+msgstr "パスワード変更を中断しました。"
#: libpam/pam_item.c:311
msgid "login:"
@@ -82,7 +81,7 @@ msgstr "成功"
#: libpam/pam_strerror.c:42
msgid "Critical error - immediate abort"
-msgstr "致命的エラー - 直ちに中止してください"
+msgstr "致命的エラー - 即時中止"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
@@ -90,7 +89,7 @@ msgstr "モジュールのロードに失敗しました"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr "記号が見つかりません"
+msgstr "シンボルが見つかりません"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
@@ -106,7 +105,7 @@ msgstr "メモリーバッファエラー"
#: libpam/pam_strerror.c:54
msgid "Permission denied"
-msgstr "拒否されたパーミッション"
+msgstr "許可がありません"
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
@@ -114,7 +113,7 @@ msgstr "認証失敗"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
-msgstr "認証データにアクセスする資格認定がありません"
+msgstr "認証データにアクセスするには資格情報が不充分です"
#: libpam/pam_strerror.c:60
msgid "Authentication service cannot retrieve authentication info"
@@ -134,11 +133,11 @@ msgstr "認証トークンはもはや有効ではありません。新しい認
#: libpam/pam_strerror.c:68
msgid "User account has expired"
-msgstr "ユーザーアカウントの有効期限が切れました"
+msgstr "ユーザーアカウントは失効しました"
#: libpam/pam_strerror.c:70
msgid "Cannot make/remove an entry for the specified session"
-msgstr "指定したセッションに対するエントリを作成/削除できません"
+msgstr "指定したセッションに対するエントリーを作成/削除できません"
#: libpam/pam_strerror.c:72
msgid "Authentication service cannot retrieve user credentials"
@@ -146,7 +145,7 @@ msgstr "認証サービスがユーザー資格認定を検索できません"
#: libpam/pam_strerror.c:74
msgid "User credentials expired"
-msgstr "ユーザー資格認定の有効期限切れ"
+msgstr "ユーザー資格認定の失効"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
@@ -208,113 +207,119 @@ msgstr "アプリケーションはlibpamを再び呼び出す必要がありま
msgid "Unknown PAM error"
msgstr "不明な PAM エラー"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...時間が切れかかっています...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...時間切れです。\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "誤った会話(%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s 失敗: 終了コード %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s 失敗: シグナルをキャッチ %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s 失敗: 不明な状態 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+"使用法: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "ログイン 失敗。最後の失敗は 以下で発生\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
+#, c-format
msgid "The account is locked due to %u failed logins."
-msgstr "%u のログイン失敗の理由で アカウントはロックされました"
+msgstr "%u 回のログイン失敗によりアカウントはロックされました。"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] ""
+msgstr[0] "(ロック解除まで %d 分)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+msgstr "(ロック解除まで残り %d 分)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %Y/%m/%d (%a) %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
-msgstr " %.*sから開始"
+msgstr " ホスト:%.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
-msgstr " 日時 %.*s"
+msgstr " 端末:%.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "最終ログイン:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
-msgstr "新しいアカウントへようこそ。"
+msgstr "新しいアカウントへようこそ!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "最後の失敗ログイン:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
"There were %d failed login attempts since the last successful login."
-msgstr[0] "最後の正しいログインの後に %d 回の失敗ログインの試行があります"
+msgstr[0] "最後の正しいログインの後に %d 回のログイン試行失敗があります。"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
-msgstr "最後の正しいログインの後に %d 回の失敗ログインの試行があります。"
+msgstr "最後の正しいログインの後に %d 回のログインの試行失敗があります。"
-#: modules/pam_limits/pam_limits.c:1164
-#, fuzzy, c-format
+#: modules/pam_limits/pam_limits.c:1269
+#, c-format
msgid "There were too many logins for '%s'."
-msgstr "'%s'のログイン数が多すぎます。"
+msgstr "'%s'のログイン回数が多すぎます。"
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "新しいメールがあります。"
#: modules/pam_mail/pam_mail.c:292
@@ -352,27 +357,27 @@ msgstr "フォルダ%sにメールがあります。"
#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr "ディレクトリ '%s' を作成中"
+msgstr "ディレクトリ '%s' を作成しています。"
#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
-msgstr "ディレクトリ %s を作成して初期化できません。"
+msgstr "ディレクトリ %s の作成・初期化ができません。"
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
"パスワードはすでに使用されています。 別のパスワードを選択してください。"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "パスワードはすでに使用されています。"
#: modules/pam_selinux/pam_selinux.c:172
-#, fuzzy, c-format
+#, c-format
msgid "The default security context is %s."
-msgstr "デフォルトセキュリティコンテキスト%s\n"
+msgstr "デフォルトセキュリティコンテキストは %s です。"
#: modules/pam_selinux/pam_selinux.c:176
msgid "Would you like to enter a different role or level?"
@@ -383,33 +388,32 @@ msgid "role:"
msgstr "ロール:"
#: modules/pam_selinux/pam_selinux.c:193
-#, fuzzy, c-format
+#, c-format
msgid "There is no default type for role %s."
-msgstr "ロール %s にはデフォルトタイプがありません\n"
+msgstr "ロール %s にはデフォルトタイプがありません。"
#: modules/pam_selinux/pam_selinux.c:225
msgid "level:"
msgstr "レベル:"
#: modules/pam_selinux/pam_selinux.c:259
-#, fuzzy
msgid "This is not a valid security context."
-msgstr "有効なセキュリティコンテキストでありません"
+msgstr "有効なセキュリティコンテキストではありません。"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
-msgstr ""
+msgstr "%s の有効なセキュリティコンテキストを取得できません。"
-#: modules/pam_selinux/pam_selinux.c:640
-#, fuzzy, c-format
+#: modules/pam_selinux/pam_selinux.c:639
+#, c-format
msgid "Security context %s has been assigned."
-msgstr "割り当てられたセキュリティコンテキスト%s"
+msgstr "セキュリティコンテキスト %s が割り当てられました。"
-#: modules/pam_selinux/pam_selinux.c:656
-#, fuzzy, c-format
+#: modules/pam_selinux/pam_selinux.c:655
+#, c-format
msgid "Key creation context %s has been assigned."
-msgstr "キー作成コンテキスト %s が割り当てられました"
+msgstr "キー作成コンテキスト %s が割り当てられました。"
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
@@ -424,76 +428,71 @@ msgstr "pam_set_item()に失敗しました\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr "ログイン: いまいましい失敗: %m"
+msgstr "ログイン: fork失敗: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
-#, fuzzy, c-format
+#: modules/pam_timestamp/pam_timestamp.c:382
+#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
-msgstr "アクセスを許可 (最後のアクセスは %ld 秒前でした)"
+msgstr "アクセスが許可されました(最後のアクセスは %ld 秒前)。"
#: modules/pam_unix/pam_unix_acct.c:230 modules/pam_unix/pam_unix_acct.c:252
-#, fuzzy
msgid "Your account has expired; please contact your system administrator."
-msgstr ""
-"アカウントの有効期限が切れました。システム管理者にお問い合わせください。"
+msgstr "アカウントは失効しています。システム管理者にお問い合わせください。"
#: modules/pam_unix/pam_unix_acct.c:238
-#, fuzzy
msgid ""
"You are required to change your password immediately (administrator "
"enforced)."
-msgstr "パスワードを直ちに変更する必要があります(強制されたルート)"
+msgstr "パスワードを直ちに変更する必要があります(管理者による強制)。"
#: modules/pam_unix/pam_unix_acct.c:244
-#, fuzzy
msgid ""
"You are required to change your password immediately (password expired)."
-msgstr "パスワードを直ちに変更する必要があります(古いパスワード)"
+msgstr "パスワードを直ちに変更する必要があります(パスワード失効)。"
#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
-#, fuzzy, c-format
+#, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
-msgstr[0] "警告: パスワードは%d日で有効期限が切れます。"
+msgstr[0] "警告: パスワードは %d 日で失効します。"
#. TRANSLATORS: only used if dngettext is not supported
#: modules/pam_unix/pam_unix_acct.c:281
-#, fuzzy, c-format
+#, c-format
msgid "Warning: your password will expire in %d days."
-msgstr "警告: パスワードは %d 日で有効期限が切れます。"
+msgstr "警告: パスワードは %d 日で失効します。"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS パスワードを変更できませんでした。"
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
-msgstr "パスワードが与えられていません"
+msgstr "パスワードが与えられていません。"
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
-msgstr "NIS パスワードを変更できませんでした。"
+msgstr "パスワードを変更できませんでした。"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
-msgstr "もっと短いパスワードを選択する必要があります。"
+msgstr "より短いパスワードを選択する必要があります。"
-#: modules/pam_unix/pam_unix_passwd.c:585
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
-msgstr "長いパスワードを選択する必要があります"
+msgstr "より長いパスワードを選択する必要があります。"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
-msgstr "%s 用にパスワードを変更中"
+msgstr "%s 用のパスワードを変更しています。"
-#: modules/pam_unix/pam_unix_passwd.c:722
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
-msgstr "パスワードを変更するには長く待つ必要があります"
+msgstr "パスワードを変更するにはより長い時間の経過が必要です。"
+
+#~ msgid "You have no mail."
+#~ msgstr "メールはありません。"
#~ msgid "is the same as the old one"
#~ msgstr "パスワードが古いものと同じです。"
@@ -561,9 +560,6 @@ msgstr "パスワードを変更するには長く待つ必要があります"
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: すべてのユーザーを非ゼロにリセットできません\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "ログイン 失敗。最後の失敗は 以下で発生\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ka.gmo b/po/ka.gmo
index f07f3347..93a49d32 100644
--- a/po/ka.gmo
+++ b/po/ka.gmo
Binary files differ
diff --git a/po/ka.po b/po/ka.po
index 8a30db24..9876465a 100644
--- a/po/ka.po
+++ b/po/ka.po
@@ -5,68 +5,67 @@
# Translators:
# George Machitidze <giomac@gmail.com>, 2013
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2013-01-26 10:08-0500\n"
-"Last-Translator: George Machitidze <giomac@gmail.com>\n"
-"Language-Team: Georgian (http://www.transifex.com/projects/p/fedora/language/"
-"ka/)\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-11-13 09:19+0000\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
+"Language-Team: Georgian <https://translate.fedoraproject.org/projects/linux-"
+"pam/master/ka/>\n"
"Language: ka\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Zanata 3.8.3\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr "პაროლი:"
+msgstr "პაროლი: "
-#: libpam/pam_get_authtok.c:41
-#, fuzzy, c-format
+#: libpam/pam_get_authtok.c:42
+#, c-format
msgid "Current %s password: "
-msgstr "ახალი %s პაროლი: "
+msgstr "%s-ის ახალი პაროლი: "
-#: libpam/pam_get_authtok.c:42
-#, fuzzy
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr "ახალი პაროლი: "
+msgstr "მიმდინარე პაროლი: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
-msgstr "ახალი %s პაროლი: "
+msgstr "%s-ის ახალი პაროლი: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "ახალი პაროლი: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
-msgstr "გაიმეორეთ ახალი %s პაროლი: "
+msgstr "გაიმეორეთ %s-ის ახალი პაროლი: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "გაიმეორეთ ახალი პაროლი: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
-msgstr ""
+msgstr "პაროლები არ ემთხვევა."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "ხელახლა შეიყვანეთ %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
-#, fuzzy
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
-msgstr "პაროლი უკვე იყო გამოყენებული."
+msgstr "პაროლის შეცვლის პროცედურა გაუქმდა."
#: libpam/pam_item.c:311
msgid "login:"
@@ -78,7 +77,7 @@ msgstr "წარმატებული"
#: libpam/pam_strerror.c:42
msgid "Critical error - immediate abort"
-msgstr ""
+msgstr "კრიტიკული შეცდომა - დაუყოვნებელი გაუქმება"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
@@ -106,83 +105,83 @@ msgstr "წვდომა უარყოფილია"
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
-msgstr "ავთენტიფიკაციის შეცდომა"
+msgstr "ავთენტიკაციის შეცდომა"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
-msgstr ""
+msgstr "ავთენტიკაციის მონაცემებთან წვდომისათვის არასაკმარისი უფლებები გაქვთ"
#: libpam/pam_strerror.c:60
msgid "Authentication service cannot retrieve authentication info"
-msgstr ""
+msgstr "ავთენტიკაციის სერვისს არ შეუძლია ავთენტიკაციის ინფორმაციის მიღება"
#: libpam/pam_strerror.c:62
msgid "User not known to the underlying authentication module"
-msgstr ""
+msgstr "მომდევნო ავთენტიკაციის მოდულისთვის მომხმარებელი უცნობია"
#: libpam/pam_strerror.c:64
msgid "Have exhausted maximum number of retries for service"
-msgstr ""
+msgstr "სერვისის გაშვების ცდების მაქსიმალური რაოდენობა გახარჯულია"
#: libpam/pam_strerror.c:66
msgid "Authentication token is no longer valid; new one required"
-msgstr ""
+msgstr "ავთენტიკაციის კოდი აღარ მუშაობს. გჭირდებათ ახალი"
#: libpam/pam_strerror.c:68
msgid "User account has expired"
-msgstr ""
+msgstr "მომხმარებლის ვადა გასულია"
#: libpam/pam_strerror.c:70
msgid "Cannot make/remove an entry for the specified session"
-msgstr ""
+msgstr "მითითებული სესიის ჩანაწერის შექმნის/წაშლის შეცდომა"
#: libpam/pam_strerror.c:72
msgid "Authentication service cannot retrieve user credentials"
-msgstr ""
+msgstr "ავთენტიკაციის სერვისს არ შეუძლია მომხმარებლისა და პაროლის მიღება"
#: libpam/pam_strerror.c:74
msgid "User credentials expired"
-msgstr ""
+msgstr "მომხმარებელი ან პაროლი ვადაგასულია"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
-msgstr ""
+msgstr "მომხმარებლის ან პაროლის დაყენების შეცდომა"
#: libpam/pam_strerror.c:78
msgid "No module specific data is present"
-msgstr ""
+msgstr "მოდულის საკუთარი მონაცემები არ არსებობს"
#: libpam/pam_strerror.c:80
msgid "Bad item passed to pam_*_item()"
-msgstr ""
+msgstr "pam_*_item()-ს არასწორი ელემენტი გადაეცა"
#: libpam/pam_strerror.c:82
msgid "Conversation error"
-msgstr ""
+msgstr "საუბრის შეცდომა"
#: libpam/pam_strerror.c:84
msgid "Authentication token manipulation error"
-msgstr ""
+msgstr "ავთენტიკაციის კოდის მანიპულირების შეცდომა"
#: libpam/pam_strerror.c:86
msgid "Authentication information cannot be recovered"
-msgstr ""
+msgstr "ავთენტიკაციის ინფორმაციის აღდგენის შეცდომა"
#: libpam/pam_strerror.c:88
msgid "Authentication token lock busy"
-msgstr ""
+msgstr "ავთენტიკაციის კოდის ბლოკი დაკავებულია"
#: libpam/pam_strerror.c:90
msgid "Authentication token aging disabled"
-msgstr ""
+msgstr "ავთენტიკაციის კოდის ვადის გასვლა გამორთულია"
#: libpam/pam_strerror.c:92
msgid "Failed preliminary check by password service"
-msgstr ""
+msgstr "პაროლის წინასწარი შემოწმების შეცდომა"
#: libpam/pam_strerror.c:94
msgid "The return value should be ignored by PAM dispatch"
-msgstr ""
+msgstr "დაბრუნებული ნიშვნელობა იგნორირებული უნდა იყოს PAM dispatch-ის მიერ"
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
@@ -190,127 +189,138 @@ msgstr "მოდული უცნობია"
#: libpam/pam_strerror.c:98
msgid "Authentication token expired"
-msgstr ""
+msgstr "ავთენტიკაციის კოდი ვადაგასულია"
#: libpam/pam_strerror.c:100
msgid "Conversation is waiting for event"
-msgstr ""
+msgstr "საუბარი მოვლენას ელოდება"
#: libpam/pam_strerror.c:102
msgid "Application needs to call libpam again"
-msgstr ""
+msgstr "აპლიკაციას libpam-ის თავიდან გაშვება სჭირდება"
#: libpam/pam_strerror.c:105
msgid "Unknown PAM error"
msgstr "PAM-ის უცნობი შეცდომა"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...დრო გადის...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
-msgstr ""
+msgstr "...უკაცრავად, თქვენი დრო გავიდა!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
-msgstr ""
+msgstr "შეცდომითი საუბარი (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
-msgstr ""
+msgstr "%s-ის შეცდომა: გამოსვლის კოდი %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
-msgstr ""
+msgstr "%s-ის შეცდომა: გადაჭერილი სიგნალი %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
-msgstr ""
+msgstr "%s-ის შეცდომა: უცნობიბ სტატუსი 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
+"გამოყენება: %s [--dir /ბილიკი/tally-ის-საქაღალდემდე] [--user მომხმარებელი] "
+"[--reset] [--legacy-output]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "მომხმარებელი შეცდომები ბოლოშეცდომა საიდან\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
-msgstr ""
+msgstr "ანგარიში დაბლოკილია %u არასწორი ცდის შემდეგ."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] ""
+msgstr[0] "(განბლოკვმდე დარჩენილია %d წთ)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+msgstr "(განბლოკვამდე დარჩენილია %d წთ)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
-msgstr ""
+msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
-msgstr ""
+msgstr " %.*s-დან"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
-msgstr ""
+msgstr " %.*s-ზე"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
-msgstr ""
+msgstr "ბოლო შესვლა: %s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
-msgstr ""
+msgstr "კეთილი იყოს თქვენი მობრძაება ახალ ანგარიშში!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
-msgstr ""
+msgstr "ბოლო წარუმატებელი ცდა: %s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
"There were %d failed login attempts since the last successful login."
msgstr[0] ""
+"ბოლო წარმატებული შემოსვლის შემდეგ დაფიქსირებულია შემოსვლის %d წარუმატებელი "
+"ცდა."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
+"ბოლო წარმატებული შემოსვლის შემდეგ დაფიქსირებულია შემოსვლის %d წარუმატებელი "
+"ცდა."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
-msgstr ""
+msgstr "მომხმარებელი %s გამოიყენებოდა მეტისმეტად ხშირად."
#: modules/pam_mail/pam_mail.c:289
-#, fuzzy
-msgid "You have no mail."
-msgstr "თქვენ გაქვთ ახალი წერილი."
+msgid "You do not have any new mail."
+msgstr "ახალი ელფოსტა არ მოგსვლიათ."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -318,31 +328,31 @@ msgstr "თქვენ გაქვთ ახალი წერილი."
#: modules/pam_mail/pam_mail.c:295
msgid "You have old mail."
-msgstr ""
+msgstr "თქვენ გაქვთ ძველი წერილი."
#: modules/pam_mail/pam_mail.c:299
msgid "You have mail."
-msgstr ""
+msgstr "თქვენ გაქვთ ფოსტა."
#: modules/pam_mail/pam_mail.c:306
#, c-format
msgid "You have no mail in folder %s."
-msgstr ""
+msgstr "საქაღალდეში %s ფოსტა არაა."
#: modules/pam_mail/pam_mail.c:310
#, c-format
msgid "You have new mail in folder %s."
-msgstr ""
+msgstr "საქაღალდეში %s გაქვთ ახალი ელ-ფოსტა."
#: modules/pam_mail/pam_mail.c:314
#, c-format
msgid "You have old mail in folder %s."
-msgstr ""
+msgstr "საქაღალდეში %s ძველი ფოსტა გაქვთ."
#: modules/pam_mail/pam_mail.c:319
#, c-format
msgid "You have mail in folder %s."
-msgstr ""
+msgstr "საქაღალდეში %s გაქვთ ფოსტა."
#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
@@ -352,25 +362,25 @@ msgstr "'%s' დირექტორიის შექმნა."
#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
-msgstr ""
+msgstr "საქაღალდის (%s) შექმნისა და ინიციალიზაციის შეცდომა."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
-msgstr ""
+msgstr "პაროლი უკვე იყო გამოყენებული. სხვა სცადეთ."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "პაროლი უკვე იყო გამოყენებული."
#: modules/pam_selinux/pam_selinux.c:172
#, c-format
msgid "The default security context is %s."
-msgstr ""
+msgstr "უსაფრთხოების ნაგულისხმევი კონტექსტია %s."
#: modules/pam_selinux/pam_selinux.c:176
msgid "Would you like to enter a different role or level?"
-msgstr ""
+msgstr "გნებავთ სხვა როლის ან დონის შეყვანა?"
#: modules/pam_selinux/pam_selinux.c:189
msgid "role:"
@@ -379,7 +389,7 @@ msgstr "როლი:"
#: modules/pam_selinux/pam_selinux.c:193
#, c-format
msgid "There is no default type for role %s."
-msgstr ""
+msgstr "როლისთვის %s ნაგულისხმევი ტიპი არ არსებობს."
#: modules/pam_selinux/pam_selinux.c:225
msgid "level:"
@@ -387,103 +397,102 @@ msgstr "დონე:"
#: modules/pam_selinux/pam_selinux.c:259
msgid "This is not a valid security context."
-msgstr ""
+msgstr "უსაფრთხოების არასწორი კონტექსტი."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
-msgstr ""
+msgstr "%s-ის სწორი კონტექსტის მიღების შეცდომა."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
-msgstr ""
+msgstr "უსაფრთხოების კონტექსტი %s ახლა მიმაგრებულია."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
-msgstr ""
+msgstr "გასაღების შექმნის კონტექსტი %s ახალ მიმაგრებულია."
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
msgid "failed to initialize PAM\n"
-msgstr ""
+msgstr "PAM-ის ინიციალიზაციის შეცდომა\n"
#: modules/pam_selinux/pam_selinux_check.c:105
#, c-format
msgid "failed to pam_set_item()\n"
-msgstr ""
+msgstr "pam_set_tem()-ის შეცდომა\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr ""
+msgstr "შესვლა: %m-ის ახალი ასლის გაშვების შეცდომა"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
-msgstr ""
+msgstr "წვდომა მიღებულია (ბოლო წვდომა %ld წამის წინ)."
#: modules/pam_unix/pam_unix_acct.c:230 modules/pam_unix/pam_unix_acct.c:252
msgid "Your account has expired; please contact your system administrator."
-msgstr ""
+msgstr "ანგარიში ვადაგასულია; დაუკავშირდით თქვენს სისტემურ ადმინისტრატორს."
#: modules/pam_unix/pam_unix_acct.c:238
msgid ""
"You are required to change your password immediately (administrator "
"enforced)."
msgstr ""
+"საჭიროა თქვენი პაროლი ახლავე შეცვალოთ (მითითებულია ადმინისტრატორის მიერ)."
#: modules/pam_unix/pam_unix_acct.c:244
msgid ""
"You are required to change your password immediately (password expired)."
-msgstr ""
+msgstr "საჭიროა თქვენი პაროლის დაუყოვნებლივ შეცვლა (პაროლი ვადაგასულია)."
#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
-msgstr[0] ""
+msgstr[0] "გაფრთხილება: თქვენს პაროლს ვადა %d დღეში გაუვა."
#. TRANSLATORS: only used if dngettext is not supported
#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
msgid "Warning: your password will expire in %d days."
-msgstr ""
+msgstr "გაფრთხილება: თქვენს პაროლს ვადა %d დღეში გაუვა."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
-msgstr ""
+msgstr "NIS პაროლის შეცვლა შეუძლებელია."
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
-msgstr "პაროლი არ იქნა მითითებული"
+msgstr "პაროლი არ იქნა მითითებული."
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
-msgstr "პაროლი უკვე იყო გამოყენებული."
+msgstr "პაროლი არ შეცვლილა."
-#: modules/pam_unix/pam_unix_passwd.c:581
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
-msgstr "თქვენ უნდა აირჩიოთ მოკლე პაროლი."
+msgstr "უნდა აირჩიოთ უფრო მოკლე პაროლი."
-#: modules/pam_unix/pam_unix_passwd.c:585
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
-msgstr "თქვენ უნდა აირჩიოთ მოკლე პაროლი."
+msgstr "თქვენ უნდა აირჩიოთ უფრო გრძელი პაროლი."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
-msgstr ""
+msgstr "%s-ის პაროლის შეცვლა."
-#: modules/pam_unix/pam_unix_passwd.c:722
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
-msgstr "თქვენ უნდა აირჩიოთ მოკლე პაროლი."
+msgstr "პაროლის შესაცვლელად კიდევ უნდა მოითმინოთ."
+
+#~ msgid "You have no mail."
+#~ msgstr "თქვენ გაქვთ ახალი წერილი."
#~ msgid "is too similar to the old one"
#~ msgstr "ძალიან გავს ძველს"
diff --git a/po/kk.gmo b/po/kk.gmo
index 1fab8163..39279e14 100644
--- a/po/kk.gmo
+++ b/po/kk.gmo
Binary files differ
diff --git a/po/kk.po b/po/kk.po
index 816c617f..8c956af0 100644
--- a/po/kk.po
+++ b/po/kk.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Baurzhan Muftakhidinov <baurthefirst@gmail.com>, 2012, 2020.
+# Baurzhan Muftakhidinov <baurthefirst@gmail.com>, 2012, 2020, 2022.
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Dmitry V. Levin <ldv@altlinux.org>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2020-06-24 09:40+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-12-07 16:19+0000\n"
"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
"Language-Team: Kazakh <https://translate.fedoraproject.org/projects/linux-"
"pam/master/kk/>\n"
@@ -20,50 +20,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.1.1\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Пароль: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "%s үшін ағымдағы пароль: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Ағымдағы пароль: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "%s үшін жаңа пароль: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "үшін жаңа пароль: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "%s үшін жаңа парольді қайта енгізіңіз: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "үшін жаңа парольді қайта енгізіңіз: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Кешіріңіз, парольдер өзара сәйкес емес."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s қайта енгізіңіз"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Парольді өзгертуден бас тартылды."
@@ -205,94 +205,100 @@ msgstr "Бағдарлама libpam-ды қайтадан шақыруы кер
msgid "Unknown PAM error"
msgstr "Белгісіз PAM қатесі"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Уақытыңыз бітіп барады...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Кешіріңіз, сіздің уақытыңыз бітті!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "қате сұхбат (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s қатесі: шығу коды %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s қатесі: алынған сигнал %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s қатесі: белгісіз қалып-күйі 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Қолданылуы: %s: [--dir /tally-бумасына/дейінгі/жол] [--user пайдаланушы] [--"
-"reset]\n"
+"reset] [--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Пайдаланушы аты Сәтсіз кіру саны Соңғы қате Қайдан\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Тіркелгі %u рет қате кіру талабы салдарынан бұғатталды."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
-#, fuzzy, c-format
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
+#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] "(бұғатты шешуге дейін %d минут қалды)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(бұғатты шешуге дейін %d минут қалды)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " қайдан: %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " қайда: %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Соңғы рет жүйеге кіру:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Жаңа тіркелгңізіге қош келдіңіз!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Соңғы сәтсіз жүйеге кіру талабы:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -300,18 +306,18 @@ msgid_plural ""
msgstr[0] "Соңғы сәтті жүйеге кіру реттен кейін %d қате талап болған."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Соңғы сәтті жүйеге кіру реттен кейін %d қате талап болған."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "\"%s\" үшін жүйеге кіру талап саны тым көп."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Сізде жаңа пошта жоқ."
#: modules/pam_mail/pam_mail.c:292
@@ -356,12 +362,12 @@ msgstr "'%s' бумасын жасау."
msgid "Unable to create and initialize directory '%s'."
msgstr "'%s' бумасын жасау мүмкін емес."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Пароль осыған дейін қолданған. Басқасын таңдаңыз."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Пароль осыған дейін қолданылған."
@@ -391,17 +397,17 @@ msgstr "деңгейі:"
msgid "This is not a valid security context."
msgstr "Дұрыс қауіпсіздік контексті емес."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "%s үшін жарамды контекстті алу мүмкін емес."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "%s қауіпсіздік контексті тағайындалды."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "%s кілттерді жасау қауіпсіздік контексті тағайындалды."
@@ -421,7 +427,7 @@ msgstr "pam_set_item() орындау мүмкін емес\n"
msgid "login: failure forking: %m"
msgstr "login: үрдісті бастау мүмкін емес: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Рұқсат расталған (соңғы қатынау %ld секунд бұрын болған)."
@@ -453,35 +459,38 @@ msgstr[0] "Ескерту: сіздің пароліңіздің мерзімі
msgid "Warning: your password will expire in %d days."
msgstr "Ескерту: сіздің пароліңіздің мерзімі %d күнде бітеді."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS паролін өзгерту мүмкін емес."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Пароль көрсетілмеді."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Пароль өзгертілмеді."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Сіз қысқа парольді таңдауыңыз керек."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Сізге ұзынырақ парольді таңдау керек."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s үшін парольді өзгерту."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Пароліңізді өзгерті үшін біраз күтуіңіз керек."
+#~ msgid "You have no mail."
+#~ msgstr "Сізде жаңа пошта жоқ."
+
#~ msgid "is the same as the old one"
#~ msgstr "алдыңғысына сәйкес болып тұр"
@@ -548,9 +557,6 @@ msgstr "Пароліңізді өзгерті үшін біраз күтуіңі
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Барлық пайдаланушыларды нөлдік емес мәнге тастау мүмкін емес\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Пайдаланушы аты Сәтсіз кіру саны Соңғы қате Қайдан\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/km.po b/po/km.po
index 4561f654..adc400d9 100644
--- a/po/km.po
+++ b/po/km.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-29 07:00-0500\n"
"Last-Translator: Tomáš Mráz <tmraz@fedoraproject.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,49 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "ពាក្យសម្ងាត់ ៖ "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "ពាក្យ​សម្ងាត់ %s ថ្មី ៖"
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "ពាក្យ​សម្ងាត់ ថ្មី ៖"
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "ពាក្យ​សម្ងាត់ %s ថ្មី ៖"
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "ពាក្យ​សម្ងាត់ ថ្មី ៖"
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "វាយ​ពាក្យ​សម្ងាត់ %s ថ្មី​ឡើង​វិញ ៖"
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "វាយ​ពាក្យ​សម្ងាត់ ថ្មី​ឡើង​វិញ ៖"
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "សូម​ទោស ពាក្យ​សម្ងាត់​មិន​ដូច​គ្នា​ឡើយ ។"
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។"
@@ -204,93 +204,99 @@ msgstr "កម្មវិធី​ត្រូវ​តែ​ហៅ libpam ម
msgid "Unknown PAM error"
msgstr "មិន​ស្គាល់​កំហុស PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...អស់​ពេល...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...សូម​ទោស អ្នក​អស់​ពេល​ហើយ !\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "សន្ទនាច្រឡំ (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s ៖ [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " ពី %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " លើ %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "ចូល​ចុងក្រោយ ៖%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "សូម​ស្វាគមន៍​មក​កាន់​គណនី​ថ្មី​របស់​អ្នក !"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -298,19 +304,19 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "មាន​ការ​ចូល​ច្រើន​ពេក​សម្រាប់ '%s' ។"
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "អ្នក​មាន​សំបុត្រ​ថ្មី ។"
#: modules/pam_mail/pam_mail.c:292
@@ -355,12 +361,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។"
@@ -392,17 +398,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr "មិន​មែន​ជា​បរិបទ​សុវត្ថិភាព​ត្រឹមត្រូវ​មួយឡើយ"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "បរិបទ​សុវត្ថិភាព %s បាន​ផ្ដល់​តម្លៃ​"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "បរិបទ​សុវត្ថិភាព %s បាន​ផ្ដល់​តម្លៃ​"
@@ -422,7 +428,7 @@ msgstr "បាន​បរាជ័យ pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "ចូល ៖ ចម្លង​ខ្លួន​ឯង​មិន​បាន​ជោគជ័យ ៖ %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -457,39 +463,43 @@ msgstr[0] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "មិន​អាច​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់ NIS បាន​ឡើយ ។"
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "មិន​បាន​ផ្ដល់​ពាក្យសម្ងាត់"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "មិន​អាច​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់ NIS បាន​ឡើយ ។"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "អ្នកត្រូវតែជ្រើសរើសពាក្យសម្ងាត់ខ្លី។"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "អ្នក​ត្រូវ​តែ​ជ្រើស​ពាក្យសម្ងាត់​វែង​ជាង​នេះ"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "អ្នក​ត្រូវ​តែ​រង់ចាំ​បន្តិច ដើម្បី​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់​អ្នក"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "អ្នក​មាន​សំបុត្រ​ថ្មី ។"
+
#~ msgid "is the same as the old one"
#~ msgstr "ដូច​គ្នា​នឹង​ពាក្យ​សម្ងាត់​ចាស់"
diff --git a/po/kn.po b/po/kn.po
index 03422c9e..145c9e44 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2013-04-15 04:49-0400\n"
"Last-Translator: shanky <prasad.mvs@gmail.com>\n"
"Language-Team: Kannada (http://www.transifex.com/projects/p/fedora/language/"
@@ -23,49 +23,49 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "ಗುಪ್ತಪದ: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "ಹೊಸ %sಗುಪ್ತಪದ: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "ಹೊಸ ಗುಪ್ತಪದ: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "ಹೊಸ %sಗುಪ್ತಪದ: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "ಹೊಸ ಗುಪ್ತಪದ: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "ಹೊಸ %sಗುಪ್ತಪದವನ್ನು ಪುನರ್ ಟೈಪಿಸಿ: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "ಹೊಸ ಗುಪ್ತಪದವನ್ನು ಪುನರ್ ಟೈಪಿಸಿ: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "ಕ್ಷಮಿಸಿ, ಗುಪ್ತಪದಗಳು ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s ಅನ್ನು ಮರಳಿ ನಮೂದಿಸಿ"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "ಗುಪ್ತಪದ ಬದಲಾವಣೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಲಾಗಿದೆ."
@@ -206,93 +206,99 @@ msgstr "ಅನ್ವಯವು libpam ಅನ್ನು ಪುನಃ ಕರೆಯ
msgid "Unknown PAM error"
msgstr "ಗೊತ್ತಿರದ PAM ದೋಷ"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...ಸಮಯ ಸರಿಯುತ್ತಿದೆ...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಸಮಯ ಮುಗಿಯಿತು!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ದೋಷಪೂರಿತ ಸಂವಾದ (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s ವಿಫಲಗೊಂಡಿದೆ: ನಿರ್ಗಮಿಸಲು ಸಂಜ್ಞೆ %d "
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s ವಿಫಲಗೊಂಡಿದೆ: ಹಿಡಿಯಲಾದ ಸೂಚನೆ %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s ವಿಫಲಗೊಂಡಿದೆ: ಗೊತ್ತಿರದ ಸ್ಥಿತಿ 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "ಪ್ರವೇಶ ವಿಫಲತೆಗಳು ಇತ್ತೀಚಿನ ವಿಫಲತೆ ಇಂದ\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "ವಿಫಲಗೊಂಡ %u ಪ್ರವೇಶಗಳಿಂದಾಗಿ ಖಾತೆಯನ್ನು ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s ನಿಂದ"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s ನಲ್ಲಿ"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "ಕೊನೆಯ ಲಾಗಿನ್:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "ನಿಮ್ಮ ಹೊಸ ಖಾತೆಗೆ ಸುಸ್ವಾಗತ!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "ಕೊನೆಯ ಲಾಗಿನ್:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -300,19 +306,19 @@ msgid_plural ""
msgstr[0] "ಕೊನೆಯ ಬಾರಿಯ ಯಶಸ್ವಿ ಪ್ರವೇಶದ ನಂತರ %d ವಿಫಲಗೊಂಡ ಪ್ರಯತ್ನಗಳಿವೆ."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "ಕೊನೆಯ ಬಾರಿಯ ಯಶಸ್ವಿ ಪ್ರವೇಶದ ನಂತರ %d ಪ್ರವೇಶದ ಪ್ರಯತ್ನಗಳು ವಿಫಲಗೊಂಡಿದೆ."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s'ಗಾಗಿ ಬಹಳಷ್ಟು ಲಾಗಿನ್ನುಗಳು."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "ನಿಮಗಾಗಿ ಹೊಸ ಮೈಲ್ ಇದೆ."
#: modules/pam_mail/pam_mail.c:292
@@ -357,12 +363,12 @@ msgstr "ಕೋಶ '%s' ಅನ್ನು ರಚಿಸಲಾಗುತ್ತಿದ
msgid "Unable to create and initialize directory '%s'."
msgstr "ಕೋಶ '%s' ಅನ್ನು ರಚಿಸಲು ಹಾಗು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "ಗುಪ್ತಪದವು ಈಗಾಗಲೆ ಬಳಸಲ್ಪಟ್ಟಿದೆ. ಬೇರೊಂದನ್ನು ಬಳಸಿ."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "ಗುಪ್ತಪದವನ್ನು ಈಗಾಗಲೆ ಬಳಸಲಾಗಿದೆ."
@@ -393,17 +399,17 @@ msgstr "ಮಟ್ಟ:"
msgid "This is not a valid security context."
msgstr "ಸಮಂಜಸವಾದ ಸುರಕ್ಷತಾ ಸನ್ನಿವೇಶ ಅಲ್ಲ"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "ಸುರಕ್ಷತಾ ಸನ್ನಿವೇಶ %s ವನ್ನು ನಿಯೋಜಿಸಲಾಗಿದೆ"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "ಕೀಲಿ ನಿರ್ಮಾಣ ಸನ್ನಿವೇಶ %s ವನ್ನು ನಿಯೋಜಿಸಲಾಗಿದೆ"
@@ -423,7 +429,7 @@ msgstr "pam_set_item() ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ\n"
msgid "login: failure forking: %m"
msgstr "ಲಾಗಿನ್: ಫೋರ್ಕಿಂಗ್ ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ:%m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -460,39 +466,43 @@ msgstr[0] "ಎಚ್ಚರಿಕೆ: ನಿಮ್ಮ ಗುಪ್ತಪದದ
msgid "Warning: your password will expire in %d days."
msgstr "ಎಚ್ಚರಿಕೆ: %d ದಿನಗಳಲ್ಲಿ ನಿಮ್ಮ ಗುಪ್ತಪದದ ಅವಧಿ ಅಂತ್ಯಗೊಳ್ಳುತ್ತದೆ"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ್ಲ."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "ಯಾವುದೇ ಗುಪ್ತಪದ ನೀಡಲಾಗಿಲ್ಲ"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ್ಲ."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "ನೀವು ಕಡಿಮೆ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಆರಿಸಬೇಕು."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "ನೀವು ಒಂದು ಉದ್ದವಾದ ಗುಪ್ತಪದವನ್ನು ಆರಿಸಬೇಕು"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s ಗಾಗಿ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲು ನೀವು ಬಹಳ ಸಮಯ ಕಾಯಬೇಕು"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "ನಿಮಗಾಗಿ ಹೊಸ ಮೈಲ್ ಇದೆ."
+
#~ msgid "is the same as the old one"
#~ msgstr "ಇದು ಹಳೆಯದರ ಹಾಗೆಯೇ ಇದೆ"
@@ -559,9 +569,6 @@ msgstr "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿ
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: ಎಲ್ಲಾ ಬಳಕೆದಾರರನ್ನು ಶೂನ್ಯವಲ್ಲದುದಕ್ಕೆ ಪುನರ್ ಸಂಯೋಜಿಸಲು ಆಗುವುದಿಲ್ಲ\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "ಪ್ರವೇಶ ವಿಫಲತೆಗಳು ಇತ್ತೀಚಿನ ವಿಫಲತೆ ಇಂದ\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ko.gmo b/po/ko.gmo
index ef20d46d..be272149 100644
--- a/po/ko.gmo
+++ b/po/ko.gmo
Binary files differ
diff --git a/po/ko.po b/po/ko.po
index ffb77f86..60694014 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -8,14 +8,15 @@
# eukim <eukim@redhat.com>, 2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# simmon <simmon@nplob.com>, 2021.
-# Seong-ho Cho <darkcircle.0426@gmail.com>, 2021.
+# Seong-ho Cho <darkcircle.0426@gmail.com>, 2021, 2022, 2023.
+# 김인수 <simmon@nplob.com>, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-07-24 10:04+0000\n"
-"Last-Translator: simmon <simmon@nplob.com>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2023-04-23 04:20+0000\n"
+"Last-Translator: 김인수 <simmon@nplob.com>\n"
"Language-Team: Korean <https://translate.fedoraproject.org/projects/linux-"
"pam/master/ko/>\n"
"Language: ko\n"
@@ -23,52 +24,52 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.15.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "암호: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
-msgstr "현재 %s 암호: "
+msgstr "현재 %s 사용자 비밀번호: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr "현재 암호: "
+msgstr "현재 비밀번호: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
-msgstr "새 %s 암호: "
+msgstr "신규 %s 사용자 비밀번호: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
-msgstr "새 암호: "
+msgstr "신규 비밀번호: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
-msgstr "새 %s 암호 다시 입력: "
+msgstr "신규 %s 비밀번호 재 입력: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
-msgstr "새 암호 다시 입력: "
+msgstr "신규 비밀번호 재 입력: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
-msgstr "죄송합니다. 암호가 일치하지 않습니다."
+msgstr "죄송하지만, 비밀번호가 일치하지 않습니다."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
-msgstr "%s 다시 입력"
+msgstr "%s을(를) 다시 입력하세요"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
-msgstr "암호 변경을 취소했습니다."
+msgstr "비밀번호 변경을 취소했습니다."
#: libpam/pam_item.c:311
msgid "login:"
@@ -88,7 +89,7 @@ msgstr "모듈 불러오기 실패"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr "기호를 찾을 수 없음"
+msgstr "심볼을 찾을 수 없음"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
@@ -112,7 +113,7 @@ msgstr "인증 실패"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
-msgstr "인증 데이터 접근에 불충분한 인증 정보"
+msgstr "인증 자료 접근에 불충분한 인증 정보"
#: libpam/pam_strerror.c:60
msgid "Authentication service cannot retrieve authentication info"
@@ -120,31 +121,31 @@ msgstr "인증 서비스에서 인증 정보를 가져올 수 없습니다"
#: libpam/pam_strerror.c:62
msgid "User not known to the underlying authentication module"
-msgstr "기본 인증 모듈에서 사용자를 알 수 없음"
+msgstr "기본 인증 모듈에서 알 수 없는 사용자"
#: libpam/pam_strerror.c:64
msgid "Have exhausted maximum number of retries for service"
-msgstr "서비스를 최대로 재시도함"
+msgstr "서비스 재시도 최대 횟수를 넘었습니다"
#: libpam/pam_strerror.c:66
msgid "Authentication token is no longer valid; new one required"
-msgstr "더 이상 인증 토큰이 유효하지 않습니다. 새로운 인증 토큰이 필요합니다"
+msgstr "인증 토큰이 더 이상 올바르지 않습니다. 새 인증 토큰이 필요합니다"
#: libpam/pam_strerror.c:68
msgid "User account has expired"
-msgstr "사용자 계정 만료"
+msgstr "사용자 계정 유효 기간이 지남"
#: libpam/pam_strerror.c:70
msgid "Cannot make/remove an entry for the specified session"
-msgstr "특정 세션에 대해 항목을 생성/삭제할 수 없음"
+msgstr "지정된 세션을 위한 항목을 생성/제거 할 수 없습니다"
#: libpam/pam_strerror.c:72
msgid "Authentication service cannot retrieve user credentials"
-msgstr "인증 서비스에서 사용자 인증을 읽을 수 없음"
+msgstr "인증 서비스에서 사용자 인증 정보를 가져올 수 없습니다"
#: libpam/pam_strerror.c:74
msgid "User credentials expired"
-msgstr "사용자 인증 만료"
+msgstr "사용자 인증 유효 기간이 지났습니다"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
@@ -152,39 +153,39 @@ msgstr "사용자 인증 설정 실패"
#: libpam/pam_strerror.c:78
msgid "No module specific data is present"
-msgstr "특정 모듈 데이터가 없음"
+msgstr "모듈에 해당하는 데이터가 없습니다"
#: libpam/pam_strerror.c:80
msgid "Bad item passed to pam_*_item()"
-msgstr "pam_*_item()에 잘못된 항목 전달"
+msgstr "pam_*_item()에 잘못된 항목을 전달했습니다"
#: libpam/pam_strerror.c:82
msgid "Conversation error"
-msgstr "인증 대화 오류"
+msgstr "대화 오류"
#: libpam/pam_strerror.c:84
msgid "Authentication token manipulation error"
-msgstr "인증 토근 수정 오류"
+msgstr "인증 토큰 처리 오류"
#: libpam/pam_strerror.c:86
msgid "Authentication information cannot be recovered"
-msgstr "인증 정보를 복구할 수 없음"
+msgstr "인증 정보를 복구할 수 없습니다"
#: libpam/pam_strerror.c:88
msgid "Authentication token lock busy"
-msgstr "인증 토큰 잠금 장치 사용중"
+msgstr "인증 토큰 잠금 사용 중"
#: libpam/pam_strerror.c:90
msgid "Authentication token aging disabled"
-msgstr "인증 토큰 기한이 비활성화됩니다"
+msgstr "인증 토큰 기한 사용 안함"
#: libpam/pam_strerror.c:92
msgid "Failed preliminary check by password service"
-msgstr "암호 서비스에서 사전 확인 실패"
+msgstr "비밀번호 서비스에서 사전 검사 실패"
#: libpam/pam_strerror.c:94
msgid "The return value should be ignored by PAM dispatch"
-msgstr "복귀 값은 PAM 디스패치에 의해 무시됩니다"
+msgstr "PAM 정보 전송시 반환 값은 무시해야 합니다"
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
@@ -192,187 +193,194 @@ msgstr "모듈을 알 수 없음"
#: libpam/pam_strerror.c:98
msgid "Authentication token expired"
-msgstr "인증 토큰 만료"
+msgstr "인증 토큰 유효 기간이 지남"
#: libpam/pam_strerror.c:100
msgid "Conversation is waiting for event"
-msgstr "이벤트를 위해 인증 대화를 기다리는 중 입니다"
+msgstr "이벤트 처리 과정을 기다리는 중입니다"
#: libpam/pam_strerror.c:102
msgid "Application needs to call libpam again"
-msgstr "libpam을 다시 불러오려면 응용 프로그램이 필요함"
+msgstr "프로그램에서 libpam을 다시 불러와야 합니다"
#: libpam/pam_strerror.c:105
msgid "Unknown PAM error"
msgstr "알 수 없는 PAM 오류"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
-msgstr "..시간 초과...\n"
+msgstr "...시간이 촉박합니다...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
-msgstr "...죄송합니다. 시간이 초과되었습니다!\n"
+msgstr "...미안합니다, 시간이 다 되었습니다!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
-msgstr "잘못된 인증 대화 (%d)\n"
+msgstr "잘못된 인증 처리과정 (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s 실패: 종료 코드 %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
-msgstr "%s 실패: 신호 발견 %d%s"
+msgstr "%s 실패함: 시그널 발생 %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
-msgstr "%s 실패: 알 수 없는 상태 0x%x"
+msgstr "%s 실패함: 알 수 없는 상태 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-"사용법: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"사용법: %s [--dir /path/to/tally-directory] [--user <사용자이름>] [--reset] "
+"[--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "로그인 실패횟수 최근 실패 접근 호스트\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
-msgstr "계정이 %u 로그인 실패로 인해 계정이 잠김 상태가 됩니다."
+msgstr "로그인에 %u번 실패하여 계정이 잠겼습니다."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] "(해제시까지 %d 분 남았습니다)"
+msgstr[0] "(잠금 해제까지 %d분 남았습니다)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr "(해제시까지 %d 분 남았습니다)"
+msgstr "(잠금 해제까지 %d분 남았습니다)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
-msgstr " %a %b %e %H:%M:%S %Z %Y"
+msgstr " %Y년 %b %e일 (%a) %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
-msgstr " %.*s에서 시작"
+msgstr " %.*s에서"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
-msgstr " 일시 %.*s"
+msgstr " %.*s에"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "마지막 로그인:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
-msgstr "새로운 계정을 사용해 주셔서 감사합니다!"
+msgstr "새 계정에 오신 것을 환영합니다!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "마지막 실패한 로그인:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
"There were %d failed login attempts since the last successful login."
-msgstr[0] "마지막 로그인 후 %d 번의 로그인 시도가 실패하였습니다."
+msgstr[0] "마지막 로그인 후 로그인 시도를 %d번 실패했습니다."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
-msgstr "마지막 성공적인 로그인 이후에 %d번의 실패한 로그인 시도가 있었습니다."
+msgstr "마지막 로그인 후 로그인 시도를 %d번 실패했습니다."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
-msgstr "'%s' 대해 너무 많은 로그인 시도가 있었습니다."
+msgstr "'%s' 계정에 너무 많이 로그인했습니다."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "새로운 전자우편이 없습니다."
+msgid "You do not have any new mail."
+msgstr "새 전자메일이 없습니다."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
-msgstr "새로운 메일이 있습니다."
+msgstr "새 전자메일이 있습니다."
#: modules/pam_mail/pam_mail.c:295
msgid "You have old mail."
-msgstr "오래된 메일이 있습니다."
+msgstr "오래된 전자메일이 있습니다."
#: modules/pam_mail/pam_mail.c:299
msgid "You have mail."
-msgstr "메일이 있습니다."
+msgstr "전자메일이 있습니다."
#: modules/pam_mail/pam_mail.c:306
#, c-format
msgid "You have no mail in folder %s."
-msgstr "%s 폴더에 메일이 없습니다."
+msgstr "%s 폴더에 전자메일이 없습니다."
#: modules/pam_mail/pam_mail.c:310
#, c-format
msgid "You have new mail in folder %s."
-msgstr "%s에 새로운 메일이 있습니다."
+msgstr "%s 폴더에 신규 전자메일이 있습니다."
#: modules/pam_mail/pam_mail.c:314
#, c-format
msgid "You have old mail in folder %s."
-msgstr "%s 폴더에 오래된 메일이 있습니다."
+msgstr "%s 폴더에 오래된 전자메일이 있습니다."
#: modules/pam_mail/pam_mail.c:319
#, c-format
msgid "You have mail in folder %s."
-msgstr "%s 폴더에 메일이 있습니다."
+msgstr "%s 폴더에 전자메일이 있습니다."
#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr "'%s' 디렉토리 생성 중."
+msgstr "디렉토리 '%s'를 생성 중."
#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
-msgstr "'%s' 디렉토리를 생성 및 초기화 할 수 없습니다."
+msgstr "디렉토리 '%s'를 생성하고 초기화 할 수 없음."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
-msgstr "이미 사용되고 있는 암호입니다. 다른 암호를 선택해 주십시오."
+msgstr "이미 사용하고 있는 비밀번호입니다. 다른 것을 사용하세요."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
-msgstr "이미 사용되고 있는 암호입니다."
+msgstr "이미 사용하고 있는 비밀번호입니다."
#: modules/pam_selinux/pam_selinux.c:172
#, c-format
msgid "The default security context is %s."
-msgstr "기본 보안 내용은 %s 입니다."
+msgstr "기본 보안 컨텍스트는 %s 입니다."
#: modules/pam_selinux/pam_selinux.c:176
msgid "Would you like to enter a different role or level?"
-msgstr "다른 역할 또는 레벨을 입력하시겠습니까?"
+msgstr "다른 역할 또는 수준을 입력하시겠습니까?"
#: modules/pam_selinux/pam_selinux.c:189
msgid "role:"
@@ -381,7 +389,7 @@ msgstr "역할:"
#: modules/pam_selinux/pam_selinux.c:193
#, c-format
msgid "There is no default type for role %s."
-msgstr "역할 %s 에 대한 기본값 유형이 없습니다."
+msgstr "%s 역할의 기본값 형식이 없습니다."
#: modules/pam_selinux/pam_selinux.c:225
msgid "level:"
@@ -389,22 +397,22 @@ msgstr "수준:"
#: modules/pam_selinux/pam_selinux.c:259
msgid "This is not a valid security context."
-msgstr "유효한 보안 내용이 없습니다."
+msgstr "적절한 보안 컨텍스트가 아닙니다."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
-msgstr "%s를 위한 유효한 내용을 가져올 수 없습니다."
+msgstr "%s의 적절한 컨텍스트를 가져올 수 없습니다."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
-msgstr "보안 내용 %s이 할당되었습니다."
+msgstr "%s 보안 컨텍스트를 할당했습니다."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
-msgstr "키 생성 내용 %s 할당되었습니다."
+msgstr "%s 키 생성 컨텍스트를 할당했습니다."
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
@@ -419,68 +427,71 @@ msgstr "pam_set_item() 실패\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr "로그인: 포크 작업(forking) 실패: %m"
+msgstr "로그인: 포크 작업 실패: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
-msgstr "접근이 허용되었습니다 (마지막 접근이 %ld 초 전 이었습니다)."
+msgstr "접근을 허용합니다 (마지막 접근: %ld 초 전)."
#: modules/pam_unix/pam_unix_acct.c:230 modules/pam_unix/pam_unix_acct.c:252
msgid "Your account has expired; please contact your system administrator."
-msgstr "계정이 만료되었습니다; 시스템 관리자에게 알려 주십시오."
+msgstr "계정 유효 기간이 지났습니다. 시스템 관리자에게 문의하십시오."
#: modules/pam_unix/pam_unix_acct.c:238
msgid ""
"You are required to change your password immediately (administrator "
"enforced)."
-msgstr "암호를 빨리 변경해 주십시오 (관리자가 강제합니다)."
+msgstr "비밀번호를 즉시 바꾸어야 합니다 (관리자 강제 사항)."
#: modules/pam_unix/pam_unix_acct.c:244
msgid ""
"You are required to change your password immediately (password expired)."
-msgstr "암호를 긴급히 변경해 주십시오 (암호 기한이 끝났습니다)."
+msgstr "비밀번호를 즉시 바꾸어야 합니다 (암호 기간 만료)."
#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
-msgstr[0] "경고: 암호 기한이 %d 일 이내로 끝납니다."
+msgstr[0] "경고: 비밀번호는 %d일 후 유효 기간이 끝납니다."
#. TRANSLATORS: only used if dngettext is not supported
#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
msgid "Warning: your password will expire in %d days."
-msgstr "경고: 암호 기한이 %d 일 이내로 끝납니다."
+msgstr "경고: 비밀번호는 %d일 후 유효 기간이 끝납니다."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
-msgstr "NIS 암호는 변경할 수 없습니다."
+msgstr "NIS 비밀번호는 변경 할 수 없습니다."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
-msgstr "암호를 입력하지 않았습니다."
+msgstr "비밀번호를 입력하지 않았습니다."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
-msgstr "암호를 바꾸지 않았습니다."
+msgstr "비밀번호를 변경하지 않았습니다."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
-msgstr "더 짧은 암호를 입력해야합니다."
+msgstr "더 짧은 비밀번호를 설정해야 합니다."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
-msgstr "더 긴 비밀번호를 선택해 주세요."
+msgstr "더 긴 비밀번호를 설정해야 합니다."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
-msgstr "%s의 암호를 바꿉니다."
+msgstr "%s를 위한 비밀번호 변경하기."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
-msgstr "암호를 바꾸려면 더 오래 기다려야합니다."
+msgstr "자신의 비밀번호를 변경하려면 조금 더 기다려야 합니다."
+
+#~ msgid "You have no mail."
+#~ msgstr "전자메일이 없습니다."
#~ msgid "is the same as the old one"
#~ msgstr "이전 암호와 같음"
@@ -548,9 +559,6 @@ msgstr "암호를 바꾸려면 더 오래 기다려야합니다."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: 모든 사용자를 영이 아닌 값으로 설정할 수 없음\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "로그인 실패 마지막 실패 다음에서 발생\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/kw_GB.po b/po/kw_GB.po
index dadd947b..bbf32b3c 100644
--- a/po/kw_GB.po
+++ b/po/kw_GB.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM 1.2.1\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Cornish (United Kingdom)\n"
@@ -19,48 +19,48 @@ msgstr ""
"3\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -200,47 +200,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -250,45 +256,45 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -452,31 +458,31 @@ msgstr[3] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr ""
diff --git a/po/ky.po b/po/ky.po
index ed8ee848..56cd0e91 100644
--- a/po/ky.po
+++ b/po/ky.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Kirgyz (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,92 +201,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -294,18 +300,18 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -350,12 +356,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -385,17 +391,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -415,7 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -447,34 +453,34 @@ msgstr[0] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Сиз кыска сөздү тандоо керек."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Сиз кыска сөздү тандоо керек."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Сиз кыска сөздү тандоо керек."
diff --git a/po/lt.po b/po/lt.po
index 1d021983..e2783422 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Lithuanian (http://www.transifex.com/projects/p/fedora/"
@@ -21,48 +21,48 @@ msgstr ""
"%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -202,47 +202,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -251,45 +257,45 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -299,18 +305,18 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -355,12 +361,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -390,17 +396,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -420,7 +426,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -454,34 +460,34 @@ msgstr[2] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Turite pasirinkti trumpesnį slaptažodį."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Turite pasirinkti trumpesnį slaptažodį."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Turite pasirinkti trumpesnį slaptažodį."
diff --git a/po/lv.po b/po/lv.po
index 16d8add1..28a578a4 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/fedora/language/"
@@ -21,48 +21,48 @@ msgstr ""
"2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -202,47 +202,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -251,45 +257,45 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -299,18 +305,18 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -355,12 +361,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -390,17 +396,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -420,7 +426,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -454,34 +460,34 @@ msgstr[2] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Jums jāizvēlas īsāka parole."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Jums jāizvēlas īsāka parole."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Jums jāizvēlas īsāka parole."
diff --git a/po/mk.po b/po/mk.po
index 8b195b78..b7b2480d 100644
--- a/po/mk.po
+++ b/po/mk.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/fedora/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Мора да изберете пократка лозинка."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Мора да изберете пократка лозинка."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Мора да изберете пократка лозинка."
diff --git a/po/ml.po b/po/ml.po
index b7f4d877..98cde618 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2013-04-15 01:55-0400\n"
"Last-Translator: Ani Peter <apeter@redhat.com>\n"
"Language-Team: Malayalam <discuss@lists.smc.org.in>\n"
@@ -20,49 +20,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "അടയാളവാക്ക്: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "പുതിയ %s അടയാളവാക്ക്: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "പുതിയ അടയാളവാക്ക്: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "പുതിയ %s അടയാളവാക്ക്: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "പുതിയ അടയാളവാക്ക്: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "വീണ്ടും %s അടയാളവാക്ക് ടൈപ്പ് ചെയ്യുക: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "വീണ്ടും അടയാളവാക്ക് ടൈപ്പ് ചെയ്യുക: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "ക്ഷമിക്കണം, അടയാളവാക്കുകള്‍ തമ്മില്‍ ചേരുന്നില്ല."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s വീണ്ടും ടൈപ്പ് ചെയ്യുക"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "അടയാളവാക്ക് മാറ്റം വരുത്തുന്നതു് നിര്‍ത്തിയിരിക്കുന്നു."
@@ -203,48 +203,54 @@ msgstr "പ്രയോഗങ്ങള്‍ക്ക് വീണ്ടും l
msgid "Unknown PAM error"
msgstr "അപരിചിതമായ PAM പിശക്"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...സമയപരിധി അവസാനിക്കുന്നു...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...ക്ഷമിക്കണം, നിങ്ങളുടെ സമയം കഴിഞ്ഞിരിക്കുന്നു!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "തെറ്റായ സംവാദം (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s പരാ‍ജയപ്പെട്ടു: %d എന്ന കോഡില്‍ നിന്നും പുറത്ത് കടക്കുക"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s പരാ‍ജയപ്പെട്ടു: %d%s സിഗ്നല്‍ ലഭ്യമായിരിക്കുന്നു"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s പരാ‍ജയപ്പെട്ടു: അപരിചിതമായ 0x%x നിലവാരം"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Failures Latest failure From\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u പരാജയപ്പെട്ട ലോഗിനുകള്‍ കാരണം അക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നു"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -252,45 +258,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s-ല്‍ നിന്നും"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s-ല്‍"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "അവസാനം ലോഗിന്‍ ചെയ്തത്:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "നിങ്ങളുടെ പുതിയ അക്കൌണ്ടിലേക്ക് സ്വാഗതം!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "അവസാനം ലോഗിന്‍ ചെയ്തതു് പരാജയപ്പെട്ടു:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -299,19 +305,19 @@ msgstr[0] "ശരിയായി അവസാനം ലോഗിന്‍ ചെ
msgstr[1] "ശരിയായി അവസാനം ലോഗിന്‍ ചെയ്ത ശേഷം %d തവണ ലോഗിന്‍ പരാജയപ്പെട്ടു."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "ശരിയായി അവസാനം ലോഗിന്‍ ചെയ്ത ശേഷം %d തവണ ലോഗിന്‍ പരാജയപ്പെട്ടു."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s'-ന് അനവധി ലോഗിനുകള്‍."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "നിങ്ങള്‍ക്ക് പുതിയ മെയില്‍ ഉണ്ട്."
#: modules/pam_mail/pam_mail.c:292
@@ -356,12 +362,12 @@ msgstr "'%s' ഡയറക്ടറി ഉണ്ടാക്കുന്നു."
msgid "Unable to create and initialize directory '%s'."
msgstr "%s ഡയറക്ടറി ഉണ്ടാക്കുവാനും ആരംഭിക്കുവാനും സാധ്യമായില്ല."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "അടയാളവാക്ക് നിലവില്‍ ഉപയോഗിത്തിലുള്ളതാണ്. മറ്റൊന്ന് നല്‍കുക."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "രഹസ്യവാക്ക് നിലവില്‍ ഉപയോഗിച്ചിരിയ്ക്കുന്നു."
@@ -392,17 +398,17 @@ msgstr "നില: "
msgid "This is not a valid security context."
msgstr "ശരിയായ സെക്യൂരിറ്റി കോണ്‍ടെക്സ്റ്റ് അല്ല"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "%s എന്ന സെക്യൂരിറ്റി കോണ്‍ടെക്സ്റ്റ് നല്‍കിയിരിക്കുന്നു"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "കീ ഉണ്ടാക്കുന്നതിനുള്ള കോണ്‍ടെക്സ്റ്റ് ആയ %s നല്‍കിയിരിക്കുന്നു"
@@ -422,7 +428,7 @@ msgstr "pam_set_item() ചെയ്യുന്നതില്‍ പരാജ
msgid "login: failure forking: %m"
msgstr "login: ഫോര്‍ക്ക് ചെയ്യുന്നതില്‍ പരാജയം: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "അനുവാദം നല്‍കിയിരിക്കുന്നു (ഒടുവില്‍ പ്രവേശിച്ചതു് %ld സെക്കന്‍ഡുകള്‍ക്കു് മുമ്പാണു്)."
@@ -460,39 +466,43 @@ msgstr[1] "മുന്നറിയിപ്പ്: നിങ്ങളുടെ
msgid "Warning: your password will expire in %d days."
msgstr "മുന്നറിയിപ്പ്: നിങ്ങളുടെ അടയാളവാക്കിന്റെ കാലാവധി %d ദിവസത്തിനുള്ളില്‍ അവസാനിക്കുന്നു"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS അടയാളവാക്ക് മാറ്റുവാന്‍ സാധ്യമാകുന്നില്ല."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "അടയാളവാക്ക് നല്‍കിയിട്ടില്ല"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS അടയാളവാക്ക് മാറ്റുവാന്‍ സാധ്യമാകുന്നില്ല."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "നിങ്ങൾ ഒരു ഹ്രസ്വ പാസ്‌വേഡ് തിരഞ്ഞെടുക്കണം."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "ഇതിലും വലിയ അടയാളവാക്ക് തിരഞ്ഞെടുക്കുക"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s-നുളള അടയാളവാക്ക് മാറ്റുന്നു."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "നിങ്ങളുടെ അടയാളവാക്ക് മാറ്റുന്നതിനായി ഇനിയും കാത്തിരിക്കേണ്ടതാണ്."
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "നിങ്ങള്‍ക്ക് പുതിയ മെയില്‍ ഉണ്ട്."
+
#~ msgid "is the same as the old one"
#~ msgstr "പഴയത് പോലെ തന്നെയാകുന്നതു്"
@@ -559,9 +569,6 @@ msgstr "നിങ്ങളുടെ അടയാളവാക്ക് മാറ
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: എല്ലാ ഉപയോക്താക്കള്‍ക്കും പൂജ്യം അല്ലാതെ ക്രമികരിക്കുവാന്‍ സാധ്യമല്ല\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Failures Latest failure From\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/mn.po b/po/mn.po
index 9cd6e7a2..2211d1b1 100644
--- a/po/mn.po
+++ b/po/mn.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Mongolian (http://www.transifex.com/projects/p/fedora/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Та богино нууц үг сонгох ёстой."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Та богино нууц үг сонгох ёстой."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Та богино нууц үг сонгох ёстой."
diff --git a/po/mr.po b/po/mr.po
index bfd9845a..d723d158 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2013-05-03 03:46-0400\n"
"Last-Translator: sandeeps <sshedmak@redhat.com>\n"
"Language-Team: Marathi (http://www.transifex.com/projects/p/fedora/language/"
@@ -22,49 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "गुप्तशब्द: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "नवीन गुप्तशब्द %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "नवीन गुप्तशब्द: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "नवीन गुप्तशब्द %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "नवीन गुप्तशब्द: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "नवीन गुप्तशब्द %s पुन्हा टाइप करा: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "नवीन गुप्तशब्द पुन्हा टाइप करा: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "माफ करा, गुप्तशब्द जुळत नाही."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s पुन्हा प्रविष्ट करा"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "परवलीचा शब्द रद्द केले."
@@ -205,48 +205,54 @@ msgstr "अनुप्रयोगास libpam ची आवश्चकता
msgid "Unknown PAM error"
msgstr "अपरिचीत PAM त्रुटी"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...वेळ फारच कमी आहे...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...माफ करा, तुमची वेळ समाप्त झाली आहे!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "सदोषीत संवाद (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s अपयशी: एक्जीट कोड %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s अपयशी: संकेत %d%s प्राप्त झाले"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s अपयशी: अपरिचीत स्थिती 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file रूटेड-फाइलनाव] [--user वापरकर्त्याचे नाव] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "प्रवेश अपयशी अलिकडील अपयश पासून\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u अपयशी प्रवेश मुळे खाते कुलूपबंद केले"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -254,45 +260,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s पासून"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s वरील"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "शेवटचे दाखलन:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "नवीन खात्यावर स्वागत आहे!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "शेवटचे अपयशी दाखलन:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -301,19 +307,19 @@ msgstr[0] "शेवटचे यशस्वी प्रवेश पासू
msgstr[1] "शेवटचे यशस्वी प्रवेश पासून %d अपयशी प्रवेश प्रयत्न आढळले गेले."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "शेवटचे यशस्वी प्रवेश पासून %d अपयशी प्रवेश प्रयत्न आढळले."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s' करीता एकापेक्षा जास्त प्रवेश."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "नवीन मेल प्राप्त झाले."
#: modules/pam_mail/pam_mail.c:292
@@ -358,12 +364,12 @@ msgstr "संचयीका '%s' बनवित आहे."
msgid "Unable to create and initialize directory '%s'."
msgstr "डिरेक्ट्री '%s' बनवण्यास व प्रारंभ करण्यास अशक्य."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "ह्या गुप्तशब्दचा आधीच वापर झाला आहे. दुसरा निवडा."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "पासवर्ड आधिपासूनच वापरले आहे."
@@ -394,17 +400,17 @@ msgstr "स्तर:"
msgid "This is not a valid security context."
msgstr "वैध सुरक्षा संदर्भ नाही"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "सुरक्षा संदर्भ %s लागू केले गेले"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "कि निर्माण संदर्भ %s लागू केले गेले"
@@ -424,7 +430,7 @@ msgstr "pam_set_item() कार्यान्वीत करण्यास
msgid "login: failure forking: %m"
msgstr "दाखलन: विभाजन अपयशी: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "प्रवेश स्वीकारले (शेवटचा प्रवेश %ld सेकंद पूर्वी आढळला)."
@@ -460,39 +466,43 @@ msgstr[1] "सावधानता: तुमचे गुप्तशब्द
msgid "Warning: your password will expire in %d days."
msgstr "सावधानता: तुमचे गुप्तशब्द %d दिवसात कालबाह्य होईल"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS गुप्तशब्द बदलविले जाऊ शकत नाही."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "गुप्तशब्द दिलेला नाही"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS गुप्तशब्द बदलविले जाऊ शकत नाही."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "आपण लहान संकेतशब्द निवडणे आवश्यक आहे."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "तुम्ही मोठा गुप्तशब्द निवडला पाहीजे"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s करीता गुप्तशब्द बदलवित आहे."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "तुमचा गुप्तशब्द बदलण्यासाठी तुम्हाला बराच वेळ वाट पहावी लागेल"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "नवीन मेल प्राप्त झाले."
+
#~ msgid "is the same as the old one"
#~ msgstr "प्रविष्ट केलेले जुण्या प्रमाणेच आहे"
@@ -559,9 +569,6 @@ msgstr "तुमचा गुप्तशब्द बदलण्यासा
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: सर्व वापरकर्ता विना-शून्य असे पुन्हस्थापन करू शकत नाही\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "प्रवेश अपयशी अलिकडील अपयश पासून\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ms.po b/po/ms.po
index 12be3f01..8f166f6d 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-29 07:01-0500\n"
"Last-Translator: Tomáš Mráz <tmraz@fedoraproject.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -20,51 +20,51 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "(semasa) katalaluan UNIX:"
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "(semasa) katalaluan UNIX:"
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, fuzzy, c-format
msgid "New %s password: "
msgstr "(semasa) katalaluan UNIX:"
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
#, fuzzy
msgid "New password: "
msgstr "(semasa) katalaluan UNIX:"
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, fuzzy, c-format
msgid "Retype new %s password: "
msgstr "(semasa) katalaluan UNIX:"
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
#, fuzzy
msgid "Retype new password: "
msgstr "(semasa) katalaluan UNIX:"
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -204,92 +204,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -297,18 +303,18 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -353,12 +359,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -388,17 +394,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -418,7 +424,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[0] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Anda mesti memilih kata laluan yang lebih pendek."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Anda mesti memilih kata laluan yang lebih pendek."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Menukar katalaluan untuk %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Anda mesti memilih kata laluan yang lebih pendek."
diff --git a/po/my.po b/po/my.po
index c43e4cc1..0037e64b 100644
--- a/po/my.po
+++ b/po/my.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Burmese (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,92 +201,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -294,18 +300,18 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -350,12 +356,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -385,17 +391,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -415,7 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -447,34 +453,34 @@ msgstr[0] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "သင်တစ်ဦးပိုမိုတိုတောင်းသောစကားဝှက်ကိုရွေးချယ်ရပါမည်။"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "သင်တစ်ဦးပိုမိုတိုတောင်းသောစကားဝှက်ကိုရွေးချယ်ရပါမည်။"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "သင်တစ်ဦးပိုမိုတိုတောင်းသောစကားဝှက်ကိုရွေးချယ်ရပါမည်။"
diff --git a/po/nb.gmo b/po/nb.gmo
index 352b336a..bfb5fc6d 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 960f0a9c..e965ce3a 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-05-17 18:48+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Norwegian Bokmål <https://translate.fedoraproject.org/"
@@ -24,48 +24,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.4\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Passord: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Nåværende %s-passord: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Nåværende passord: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nytt %s-passord: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nytt passord: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Bekreft nytt %s-passord: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Bekreft nytt passord: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Beklager, ikke samsvar mellom passord."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Skriv %s på nytt"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Bytte av passord avbrutt."
@@ -205,47 +205,53 @@ msgstr "Programmet må spørre libpam på nytt"
msgid "Unknown PAM error"
msgstr "Ukjent PAM-feil"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Tiden er i ferd med utløpe..\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Beklager, tiden er utløpt!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "mislykket dialog (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s feilet: sluttkode %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s feilet: fikk signal %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s feilet: ukjent status 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr "Bruk: %s [--dir /sti/til/tally-mappe] [--user brukernavn] [--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Brukernavn Feil Siste feil Fra\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Konto låst som følge av %u mislykkede innlogginger."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, fuzzy, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -253,45 +259,45 @@ msgstr[0] "(%d minutter igjen til å låse opp)"
msgstr[1] "(%d minutter igjen til å låse opp)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minutter igjen til å låse opp)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " fra %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " på %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Siste innlogging:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Velkommen til din nye konto!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Siste feilede innlogging:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -302,20 +308,21 @@ msgstr[1] ""
"Det har vært %d feilede innloggingsforsøk siden siste innlogging uten feil."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Det har vært %d feilede innloggingsforsøk siden siste innlogging uten feil."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "For mange innlogginger for «%s»."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Du har ikke fått noen e-post."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Du har fått ny e-post."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -359,12 +366,12 @@ msgstr "Oppretter katalog «%s»."
msgid "Unable to create and initialize directory '%s'."
msgstr "Kan ikke lage og initiere katalog «%s»."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Passordet er allerede benyttet. Velg et annet."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Passordet har allerede vært brukt."
@@ -394,17 +401,17 @@ msgstr "nivå:"
msgid "This is not a valid security context."
msgstr "Dette er ikke en gyldig sikkerhetskontekst."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Kunne ikke innhente gyldig kontekst for %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Sikkerhetskontekst «%s» tilordnet."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Kontekst «%s» for oppretting av nøkkel tilordnet."
@@ -424,7 +431,7 @@ msgstr "kunne ikke pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: feil under forgrening: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Tilgang innvilget (siste tilgang var for %ld sekunder siden)."
@@ -457,35 +464,38 @@ msgstr[1] "Advarsel: Passordet ditt utløper om %d dager."
msgid "Warning: your password will expire in %d days."
msgstr "Advarsel: Passordet ditt utløper om %d dager."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS-passord kunne ikke endres."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Inget passord har blitt angitt."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Passordet kunne ikke endres."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Du må velge et kortere passord."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Du må velge et lengre passord."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Endrer passord for %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Du må vente lenger før du kan endre passordet ditt."
+#~ msgid "You have no mail."
+#~ msgstr "Du har ikke fått noen e-post."
+
#~ msgid "is the same as the old one"
#~ msgstr "er det samme som det gamle"
@@ -551,9 +561,6 @@ msgstr "Du må vente lenger før du kan endre passordet ditt."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Kan ikke tilbakestille alle brukere til non-zero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Brukernavn Feil Siste feil Fra\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ne.po b/po/ne.po
index d51c49e4..675f9079 100644
--- a/po/ne.po
+++ b/po/ne.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Nepali (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "तपाईंले छोटो पासवर्ड छान्नु पर्छ।"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "तपाईंले छोटो पासवर्ड छान्नु पर्छ।"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "तपाईंले छोटो पासवर्ड छान्नु पर्छ।"
diff --git a/po/nl.gmo b/po/nl.gmo
index 74968c62..81f85a05 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 9e5f0aee..401d7001 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-07-22 00:54+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Dutch <https://translate.fedoraproject.org/projects/linux-pam/"
@@ -28,48 +28,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.7.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Wachtwoord: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Huidig %s wachtwoord: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Huidig wachtwoord: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nieuw %s wachtwoord: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nieuw wachtwoord: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Nieuw %s wachtwoord herhalen: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Nieuw wachtwoord herhalen: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Sorry, wachtwoorden komen niet overeen."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Voer %s opnieuw in"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Wachtwoord wijzigen is afgebroken."
@@ -210,49 +210,55 @@ msgstr "Toepassing moet libpam nogmaals aanroepen"
msgid "Unknown PAM error"
msgstr "Onbekende PAM-fout"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "…De tijd raakt op…\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "…Sorry, uw tijd is verlopen!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "foutieve conversatie (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s is mislukt: afsluitcode %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s is mislukt: signaal %d%s ontvangen"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s is mislukt: onbekende status 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Gebruik: %s [--dir /pad/naar/tally-directory] [--user gebruikersnaam] [--"
"reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Aanmelding Mislukte Laatst mislukte Van\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Het account is vergrendeld wegens %u mislukte aanmeldingen."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -260,45 +266,45 @@ msgstr[0] "(nog %d minuut om te ontgrendelen)"
msgstr[1] "(nog %d minuten om te ontgrendelen)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(nog %d minuten om te ontgrendelen)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %e %b %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " van %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " op %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Laatste aanmelding:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Welkom bij je nieuwe account!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Laatste mislukte aanmeldpoging:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -309,20 +315,21 @@ msgstr[1] ""
"Er waren %d mislukte aanmeldpogingen sinds de laatste succesvolle aanmelding."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Er waren %d mislukte aanmeldpogingen sinds de laatste succesvolle aanmelding."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Te veel aanmeldingen voor '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Je hebt geen e-mail."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Je hebt nieuwe e-mail."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -366,12 +373,12 @@ msgstr "Aanmaken van map '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Niet in staat om map '%s' aan te maken."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Wachtwoord is al eens gebruikt. Kies een ander wachtwoord."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Wachtwoord is al eens gebruikt."
@@ -401,17 +408,17 @@ msgstr "niveau:"
msgid "This is not a valid security context."
msgstr "Dit is geen geldige beveiligingscontext."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Een geldige context voor %s kon niet worden verkregen."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Beveiligingscontext %s is toegewezen."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Sleutelaanmaakcontext %s is toegewezen."
@@ -431,7 +438,7 @@ msgstr "pam_set_item() is mislukt\n"
msgid "login: failure forking: %m"
msgstr "aanmelding: beginnen van nieuw proces mislukt: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Toegang is verleend (laatste toegang was %ld seconden geleden)."
@@ -465,35 +472,38 @@ msgstr[1] "Waarschuwing: je wachtwoord zal binnen %d dagen verlopen."
msgid "Warning: your password will expire in %d days."
msgstr "Waarschuwing: je wachtwoord zal binnen %d dagen verlopen."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS-wachtwoord kon niet worden gewijzigd."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Geen wachtwoord opgegeven."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Het wachtwoord is niet gewijzigd."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Je moet een korter wachtwoord kiezen."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Je moet een langer wachtwoord kiezen."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Veranderen van wachtwoord voor %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Je moet langer wachten om je wachtwoord te wijzigen."
+#~ msgid "You have no mail."
+#~ msgstr "Je hebt geen e-mail."
+
#~ msgid "is the same as the old one"
#~ msgstr "is hetzelfde als het oude"
@@ -560,9 +570,6 @@ msgstr "Je moet langer wachten om je wachtwoord te wijzigen."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: kan niet alle gebruikers terugzetten naar non-zero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Aanmelding Mislukte Laatst mislukte Van\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/nn.gmo b/po/nn.gmo
index 1ae25512..53862251 100644
--- a/po/nn.gmo
+++ b/po/nn.gmo
Binary files differ
diff --git a/po/nn.po b/po/nn.po
index 1302c3a7..d6ad55bd 100644
--- a/po/nn.po
+++ b/po/nn.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-01-18 22:36+0000\n"
"Last-Translator: Andreas-Johann Ø Ulvestad <aj@aju.no>\n"
"Language-Team: Norwegian Nynorsk <https://translate.fedoraproject.org/"
@@ -21,48 +21,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.4.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Passord: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Noverande %s-passord: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Noverande passord: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nytt %s-passord: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nytt passord: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Stadfest nytt %s-passord: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Stadfest nytt passord: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Beklagar, passorda er ikkje like."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Skriv %s på nytt"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Skifte av passord vart avbrote."
@@ -202,47 +202,53 @@ msgstr "Programmet må spørre libpam på ny"
msgid "Unknown PAM error"
msgstr "Ukjend PAM-feil"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Tida held på å gå ut...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Beklagar, tida er gått ut\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "mislykka dialog (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s feila: sluttkode %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s feila: fekk signal %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s feila: ukjend status 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr "Bruk: %s [--dir /sti/til/tally-mappe] [--user brukarnamn] [--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Konto er låst som følgje av %u mislukka innloggingar."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, fuzzy, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -250,45 +256,45 @@ msgstr[0] "(%d minutt står att for å låse opp)"
msgstr[1] "(%d minutt står att for å låse opp)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minutt står att for å låse opp)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " frå %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " på %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Siste innlogging:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Velkommen til din nye konto!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Siste feila innlogging:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -299,20 +305,21 @@ msgstr[1] ""
"Det har vore %d feila innloggingsforsøk utan feil sidan førre innlogging."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Det har vore %d feila innloggingsforsøk sidan sist innlogging utan feil."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "For mange innlogginga for «%s»."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Du har ikkje fått nokon e-post."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Du har fått ny e-post."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -356,12 +363,12 @@ msgstr "Opprettar kataloge «%s»."
msgid "Unable to create and initialize directory '%s'."
msgstr "Kan ikkje lage og initiere katalog «%s»."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Passord er allereie nytta. Vel eit anna."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Passordet har allereie vore brukt."
@@ -391,17 +398,17 @@ msgstr "nivå:"
msgid "This is not a valid security context."
msgstr "Dette er ikkje gyldig sikkerheitskontekst."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Kunne ikkje innhente gyldig kontekst for %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Sikkerheitskontekst «%s» tilordna."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Kontekst «%s» for oppretting av nøkkel er tilordna."
@@ -421,7 +428,7 @@ msgstr "kunne ikkje pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: feil under forgreining: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Tilgang innvilga (siste tilgang var for %ld sekund sidan)."
@@ -454,31 +461,34 @@ msgstr[1] "Advarsel: Passordet ditt utløper om %d dagar."
msgid "Warning: your password will expire in %d days."
msgstr "Varsel: Passordet ditt går ut om %d dagar."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS-passord kunne ikkje bli endra."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Inga passord er blitt angjeve."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Passordet kunne ikkje bli endra."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Du må velje eit kortare passord."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Du må velje eit kortare passord."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Skiftar passord for %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Du må vente lengre før du kan skifte passordet ditt."
+
+#~ msgid "You have no mail."
+#~ msgstr "Du har ikkje fått nokon e-post."
diff --git a/po/or.gmo b/po/or.gmo
index d5ff1f18..fef87521 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 5a408f73..471ddaa0 100644
--- a/po/or.po
+++ b/po/or.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-04-13 22:40+0000\n"
"Last-Translator: Ankit Behera <proneon267@gmail.com>\n"
"Language-Team: Odia <https://translate.fedoraproject.org/projects/linux-pam/"
@@ -24,48 +24,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.11.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "ପ୍ରବେଶ ସଙ୍କେତ: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "ସାମ୍ପ୍ରତିକ %s ପ୍ରବେଶ ସଙ୍କେତ: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "ସାମ୍ପ୍ରତିକ ପ୍ରବେଶ ସଙ୍କେତ: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "ନୂତନ %s ପ୍ରବେଶ ସଙ୍କେତ: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "ନୂତନ ପ୍ରବେଶ ସଙ୍କେତ: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "ନୂତନ %s ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "ନୂତନ ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "କ୍ଷମା କରିବେ, ପ୍ରବେଶ ସଙ୍କେତ ମିଶୁ ନାହିଁ।"
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%sକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "ପ୍ରବେଶ ସଙ୍କେତ ପରିବର୍ତ୍ତନକୁ ପ୍ରତ୍ୟାଖାନ କରାଯାଇଛି।"
@@ -205,48 +205,54 @@ msgstr "ପ୍ରୟୋଗ libpam କୁ ପୁନର୍ବାର ଆହ୍ବ
msgid "Unknown PAM error"
msgstr "ଅଜଣା PAM ତୃଟି"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...ସମୟ ସମାପ୍ତ ହେଉଛି...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...କ୍ଷମା କରିବେ, ଆପଣଙ୍କ ସମୟ ସମାପ୍ତ ହୋଇଯାଇଛି!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ତୃଟିପୂର୍ଣ୍ଣ କଥୋପକଥନ (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s ବିଫଳ: %d ସଙ୍କେତରୁ ପ୍ରସ୍ଥାନ କରୁଅଛି"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s ବିଫଳ: %d%s ସଙ୍କେତ ପାଇଲା"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s ବିଫଳ: ଅଜଣା ଅବସ୍ଥିତି 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "ଲଗଇନ ବିଫଳତାର ନୂତନତମ ବିଫଳତା ରୁ\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u ବିଫଳତା ଲଗଇନ କାରଣରୁ ଖାତା ଅପରିବର୍ତ୍ତନଶୀଳ ହୋଇଯାଇଛି।"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -254,45 +260,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s ରୁ"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s ରେ"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "ଅନ୍ତିମ ଲଗଇନ:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "ଆପଣଙ୍କ ନୂତନ ଖାତାରେ ଆପଣଙ୍କ ସ୍ବାଗତ!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "ଅନ୍ତିମ ବିଫଳ ଲଗଇନ:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -301,19 +307,20 @@ msgstr[0] "ଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟ
msgstr[1] "ଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟି ବିଫଳ ଲଗଇନ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି।"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "ଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟି ବିଫଳ ଲଗଇନ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି।"
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s' ପାଇଁ ଅତ୍ଯଧିକ ସଂଖ୍ଯକ ଲଗଇନ ହୋଇଛି।"
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "ଆପଣଙ୍କର କୌଣସି ଚିଠି ନାହିଁ।"
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "ଆପଣଙ୍କ ପାଇଁ ଗୋଟିଏ ନୂଆ ଚିଠି ଆସିଛି।"
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -357,12 +364,12 @@ msgstr "ଡ଼ିରେକ୍ଟୋରୀ '%s' ନିର୍ମାଣ କରୁ
msgid "Unable to create and initialize directory '%s'."
msgstr "ଡ଼ିରେକ୍ଟୋରୀ '%s'କୁ ନିର୍ମାଣ ଏବଂ ପ୍ରାରମ୍ଭ କରିବାରେ ଅସମର୍ଥ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "ପ୍ରବେଶ ସଙ୍କେତଟି ପୂର୍ବରୁ ବ୍ଯବହୃତ ହେଉଛି। ଅନ୍ଯ ଗୋଟିଏ ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରନ୍ତୁ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "ପ୍ରବେଶ ସଙ୍କେତକୁ ପୂର୍ବରୁ ବ୍ୟବହାର କରାଯାଇଛି।"
@@ -392,17 +399,17 @@ msgstr "ସ୍ତର:"
msgid "This is not a valid security context."
msgstr "ଏହା ଗୋଟିଏ ବୈଧ ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ ନୁହେଁ।"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "%s ପାଇଁ ଏକ ବୈଧ ପ୍ରସଙ୍ଗ ହାସଲ ହୋଇ ପାରିଲା ନାହିଁ।"
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "%s ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ ନ୍ଯସ୍ତ କରାଯାଇଛି।"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "କୀ ନିର୍ମାଣ ପ୍ରସଙ୍ଗ %s ନ୍ଯସ୍ତ କରାଯାଇଛି।"
@@ -422,7 +429,7 @@ msgstr "pam_set_item() କରିବାରେ ବିଫଳ\n"
msgid "login: failure forking: %m"
msgstr "ଲଗଇନ: fork କରିବାରେ ବିଫଳ: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "ପ୍ରବେଶ ଗ୍ରହଣୀୟ ହୋଇଛି (ପୂର୍ବ ପ୍ରବେଶ ହୋଇଥିଲା %ld ସେକଣ୍ଡ ପୂର୍ବରୁ)।"
@@ -456,35 +463,38 @@ msgstr[1] "ଚେତାବନୀ: ଆପଣଙ୍କ ପ୍ରବେଶ ସଙ
msgid "Warning: your password will expire in %d days."
msgstr "ଚେତାବନୀ: ଆପଣଙ୍କ ପ୍ରବେଶ ସଙ୍କେତ %d ଦିନରେ ଅକାମି ହୋଇଯିବ।"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଇ ହେଲା ନାହିଁ।"
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "କୌଣସି ପ୍ରବେଶ ସଙ୍କେତ ପ୍ରଦାନ କରାଯାଇ ନାହିଁ।"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "ପ୍ରବେଶ ସଙ୍କେତକୁ ପରିବର୍ତ୍ତନ କରା ଯାଇ ନାହିଁ।"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "ଆପଣ ଗୋଟିଏ ଛୋଟ ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରିବା ଉଚିତ।"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "ଆପଣ ଗୋଟିଏ ଲମ୍ବା ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରିବା ଉଚିତ।"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s ପାଇଁ ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଉଛି."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଇବା ପାଇଁ ଆପଣ ଅଧିକ ସମୟ ଅପେକ୍ଷା କରିବା ଉଚିତ।"
+#~ msgid "You have no mail."
+#~ msgstr "ଆପଣଙ୍କର କୌଣସି ଚିଠି ନାହିଁ।"
+
#~ msgid "is the same as the old one"
#~ msgstr "ପୁରୁଣା ପ୍ରବେଶ ସଙ୍କେତ ସହିତ ଏହା ସମାନ ଅଟେ"
@@ -550,9 +560,6 @@ msgstr "ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଇବା ପା
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: ସମସ୍ତ ଚାଳକ ମାନଙ୍କୁ ଶୂନ୍ଯ ବିହୀନ ଭାବରେ ପୁନର୍ବାର ବିନ୍ଯାସ କରିପାରିବ ନାହିଁ\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "ଲଗଇନ ବିଫଳତାର ନୂତନତମ ବିଫଳତା ରୁ\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/pa.gmo b/po/pa.gmo
index 37a5b5c3..858fbcd9 100644
--- a/po/pa.gmo
+++ b/po/pa.gmo
Binary files differ
diff --git a/po/pa.po b/po/pa.po
index c057de70..8ba68814 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -7,13 +7,13 @@
# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005
# Jaswinder Singh <jsingh@redhat.com>, 2009,2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# A S Alam <amanpreet.alam@gmail.com>, 2020.
+# A S Alam <amanpreet.alam@gmail.com>, 2020, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2020-07-19 18:29+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2023-03-14 02:20+0000\n"
"Last-Translator: A S Alam <amanpreet.alam@gmail.com>\n"
"Language-Team: Punjabi <https://translate.fedoraproject.org/projects/linux-"
"pam/master/pa/>\n"
@@ -22,50 +22,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 4.1.1\n"
+"X-Generator: Weblate 4.15.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "ਪਾਸਵਰਡ: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "ਮੌਜੂਦਾ %s ਪਾਸਵਰਡ: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "ਮੌਜੂਦਾ ਪਾਸਵਰਡ: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "ਨਵਾਂ %s ਪਾਸਵਰਡ: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "ਨਵਾਂ ਪਾਸਵਰਡ: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "ਨਵਾਂ %s ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "ਨਵਾਂ ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "ਅਫ਼ਸੋਸ, ਪਰ ਪਾਸਵਰਡ ਆਪਸ ‘ਚ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।"
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "ਮੁੜ-ਲਿਖੋ %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "ਪਾਸਵਰਡ ਤਬਦੀਲੀ ਅਧੂਰੀ ਛੱਡੀ ਗਈ।"
@@ -205,93 +205,101 @@ msgstr "ਕਾਰਜ ਲਈ ਫਿਰ libpam ਨੂੰ ਕਾਲ ਕਰਨ ਦ
msgid "Unknown PAM error"
msgstr "ਅਣਜਾਣ PAM ਗਲਤੀ"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਰਿਹਾ ਹੈ...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...ਅਫਸੋਸ, ਤੁਹਾਡਾ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ਗਲਤ ਗੱਲ (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s ਫੇਲ ਹੋਇਆ: ਕੋਡ %d ਨਾਲ ਬੰਦ ਹੋ ਗਿਆ"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s ਫੇਲ ਹੋ ਗਿਆ: ਸਿਗਨਲ %d%s ਮਿਲਿਆ"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s ਫੇਲ ਹੋਇਆ: ਅਣਪਛਾਤੀ ਸਥਿਤੀ 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
-msgstr "ਵਰਤੋਂ: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+msgstr ""
+"ਵਰਤੋੰ: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "ਲਾਗਇਨ ਫੇਲ੍ਹ ਸਭ ਤੋੰ ਆਖਰੀ ਫੇਲ੍ਹ ਇਸ ਤੋੰ\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u ਫੇਲ੍ਹ ਹੋਏ ਲਾਗਇਨਾਂ ਕਰਕੇ ਖਾਤਾ ਲਾਕ ਕੀਤਾ ਹੈ।"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
-#, fuzzy, c-format
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
+#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] "(ਅਣਲਾਕ ਕਰਨ ਲਈ %d ਮਿੰਟ ਬਚੇ ਹਨ)"
msgstr[1] "(ਅਣਲਾਕ ਕਰਨ ਲਈ %d ਮਿੰਟ ਬਚੇ ਹਨ)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(ਅਣਲਾਕ ਕਰਨ ਲਈ %d ਮਿੰਟ ਬਚੇ ਹਨ)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s ਤੋਂ"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s ਉੱਤੇ"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "ਪਿਛਲਾ ਲਾਗਇਨ:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "ਤੁਹਾਡੇ ਨਵੇਂ ਖਾਤੇ ਵਿੱਚ ਜੀ ਆਇਆਂ ਨੂੰ!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "ਆਖਰੀ ਫੇਲ ਹੋਇਆ ਲਾਗਇਨ:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -300,19 +308,19 @@ msgstr[0] "ਪਿਛਲੇ ਕਾਮਯਾਬ ਲਾਗਇਨ ਤੋਂ ਬਾ
msgstr[1] "ਪਿਛਲੇ ਕਾਮਯਾਬ ਲਾਗਇਨ ਤੋਂ ਬਾਅਦ %d ਫੇਲ੍ਹ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਸਨ।"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "ਪਿਛਲੇ ਕਾਮਯਾਬ ਲਾਗਇਨ ਤੋਂ ਬਾਅਦ %d ਫੇਲ੍ਹ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਸਨ।"
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s' ਲਈ ਬਹੁਤ ਸਾਰੇ ਲਾਗਇਨ ਕੀਤੇ ਗਏ ਸਨ।"
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "ਤੁਹਾਡੇ ਲਈ ਕੋਈ ਮੇਲ ਨਹੀਂ ਹੈ।"
+msgid "You do not have any new mail."
+msgstr "ਤੁਹਾਡੇ ਲਈ ਕੋਈ ਨਵੀੰ ਈਮੇਲ ਨਹੀਂ ਹੈ।"
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -356,12 +364,12 @@ msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਬਣਾਈ ਜਾ ਰਹੀ ਹੈ।
msgid "Unable to create and initialize directory '%s'."
msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਨੂੰ ਬਣਾਉਣ ਅਤੇ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਅਸਮਰਥ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "ਪਾਸਵਰਡ ਪਹਿਲਾਂ ਵੀ ਵਰਤਿਆ ਗਿਆ ਹੈ। ਵੱਖਰਾ ਚੁਣੋ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "ਪਾਸਵਰਡ ਪਹਿਲਾਂ ਹੀ ਵਰਤਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।"
@@ -391,17 +399,17 @@ msgstr "ਲੈਵਲ:"
msgid "This is not a valid security context."
msgstr "ਇਹ ਠੀਕ ਸੁਰੱਖਿਆ ਪਰਸੰਗ ਨਹੀਂ ਹੈ।"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "%s ਲਈ ਢੁੱਕਵਾਂ ਪਰਸੰਗ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "ਸੁਰੱਖਿਆ ਪਰਸੰਗ %s ਦਿੱਤਾ ਨਹੀਂ ਜਾ ਸਕਿਆ।"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "ਕੁੰਜੀ ਬਣਾਉਣ ਪਰਸੰਗ %s ਦਿੱਤਾ ਗਿਆ ਹੈ।"
@@ -421,7 +429,7 @@ msgstr "pam_set_item() ਲਈ ਫੇਲ\n"
msgid "login: failure forking: %m"
msgstr "ਲਾਗਇਨ: ਫੋਰਕਿੰਗ ਫੇਲ: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "ਪਹੁੰਚ ਲਈ ਇਜਾਜ਼ਤ ਦਿੱਤੀ ਗਈ (ਪਿਛਲੀ ਪਹੁੰਚ %ld ਸਕਿੰਟ ਪਹਿਲਾਂ ਸੀ)।"
@@ -454,35 +462,38 @@ msgstr[1] "ਚੇਤਾਵਨੀ: ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦੀ
msgid "Warning: your password will expire in %d days."
msgstr "ਚੇਤਾਵਨੀ: ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨਾਂ ‘ਚ ਪੁੱਗ ਜਾਵੇਗੀ।"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS ਪਾਸਵਰਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।"
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "ਕੋਈ ਪਾਸਵਰਡ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ।"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "ਪਾਸਵਰਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਗਿਆ।"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "ਤੁਹਾਨੂੰ ਇੱਕ ਛੋਟਾ ਪਾਸਵਰਡ ਚੁਣਨਾ ਚਾਹੀਦਾ ਹੈ."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "ਤੁਹਾਨੂੰ ਲੰਮਾ ਪਾਸਵਰਡ ਚੁਣਨਾ ਪਵੇਗਾ।"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s ਲਈ ਪਾਸਵਰਡ ਤਬਦੀਲ ਕਰ ਰਿਹਾ ਹੈ।"
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "ਤੁਹਾਨੂੰ ਆਪਣੇ ਪਾਸਵਰਡ ਨੂੰ ਬਦਲਣ ਲਈ ਲੰਮੀ ਉਡੀਕ ਕਰਨੀ ਪਵੇਗੀ।"
+#~ msgid "You have no mail."
+#~ msgstr "ਤੁਹਾਡੇ ਲਈ ਕੋਈ ਮੇਲ ਨਹੀਂ ਹੈ।"
+
#~ msgid "is the same as the old one"
#~ msgstr "ਪੁਰਾਣੇ ਵਰਗਾ ਹੈ"
@@ -548,9 +559,6 @@ msgstr "ਤੁਹਾਨੂੰ ਆਪਣੇ ਪਾਸਵਰਡ ਨੂੰ ਬਦ
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਗ਼ੈਰ-ਸਿਫ਼ਰ ਲਈ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "ਲਾਗਇਨ ਫੇਲ੍ਹ ਆਖਰੀ ਹੋਏ ਫੇਲ੍ਹ ਇਸ ਤੋਂ\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index b2cf4b63..6616c186 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 42b0c427..d6346bb5 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -3,17 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Piotr Drąg <piotrdrag@gmail.com>, 2008,2012, 2020, 2021.
+# Piotr Drąg <piotrdrag@gmail.com>, 2008,2012, 2020, 2021, 2022.
# Stanisław Małolepszy <smalolepszy@aviary.pl>, 2006
# Wojciech Kapusta <wojciech@aviary.pl>, 2006
-# Piotr Drąg <piotrdrag@gmail.com>, 2016. #zanata, 2020, 2021.
+# Piotr Drąg <piotrdrag@gmail.com>, 2016. #zanata, 2020, 2021, 2022.
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-07-21 15:47+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-11-13 11:41+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <https://translate.fedoraproject.org/projects/linux-"
"pam/master/pl/>\n"
@@ -23,50 +23,50 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Hasło: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Obecne hasło %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Obecne hasło: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nowe hasło %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nowe hasło: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Proszę ponownie wpisać nowe hasło %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Proszę ponownie wpisać nowe hasło: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Hasła się nie zgadzają."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Proszę ponownie wpisać %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Przerwano zmianę hasła."
@@ -206,49 +206,55 @@ msgstr "Aplikacja musi jeszcze raz wywołać libpam"
msgid "Unknown PAM error"
msgstr "Nieznany błąd PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "…czas mija…\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "…czas minął.\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "błędna rozmowa (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s się nie powiodło: kod wyjścia %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s się nie powiodło: otrzymano sygnał %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s się nie powiodło: nieznany stan 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Użycie: %s [--dir /ścieżka/do/katalogu-tally] [--user nazwa-użytkownika] [--"
-"reset]\n"
+"reset] [--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Niepowodzenia Ostatnie niepowodzenie Z\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Konto zostało zablokowane z powodu %u nieudanych logowań."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -257,45 +263,45 @@ msgstr[1] "(pozostały %d minuty do odblokowania)"
msgstr[2] "(pozostało %d minut do odblokowania)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(pozostało %d min do odblokowania)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a, %-d %b %Y, %H∶%M∶%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " z %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " na %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Ostatnie logowanie:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Witaj na swoim nowym koncie!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Ostatnie nieudane logowanie:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -308,20 +314,20 @@ msgstr[2] ""
"Nastąpiło %d nieudanych prób zalogowania od ostatniego udanego logowania."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Nastąpiło %d nieudanych prób zalogowania od ostatniego udanego logowania."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Za dużo prób zalogowania na „%s”."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Brak wiadomości."
+msgid "You do not have any new mail."
+msgstr "Nie ma nowych wiadomości."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -365,12 +371,12 @@ msgstr "Tworzenie katalogu „%s”."
msgid "Unable to create and initialize directory '%s'."
msgstr "Nie można utworzyć i zainicjować katalogu „%s”."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Hasło było już używane. Należy wybrać inne."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Hasło było już używane."
@@ -400,17 +406,17 @@ msgstr "poziom:"
msgid "This is not a valid security context."
msgstr "Nieprawidłowy kontekst zabezpieczeń."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Nie można uzyskać prawidłowego kontekstu dla %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Przypisano kontekst zabezpieczeń %s."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Przypisano kontekst tworzenia klucza %s."
@@ -430,7 +436,7 @@ msgstr "„pam_set_item()” się nie powiodło\n"
msgid "login: failure forking: %m"
msgstr "login: rozdzielenie się nie powiodło: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Udzielono dostęp (ostatni dostęp %ld s temu)."
@@ -465,35 +471,38 @@ msgstr[2] "Ostrzeżenie: hasło wygaśnie za %d dni."
msgid "Warning: your password will expire in %d days."
msgstr "Ostrzeżenie: hasło wygaśnie za %d dni."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Nie można zmienić hasła NIS."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Nie podano hasła."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Hasło nie zostało zmienione."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Należy wybrać krótsze hasło."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Należy wybrać dłuższe hasło."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Zmienianie hasła dla %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Należy poczekać dłużej na zmianę hasła."
+#~ msgid "You have no mail."
+#~ msgstr "Brak wiadomości."
+
#~ msgid "is the same as the old one"
#~ msgstr "jest identyczne z poprzednim"
@@ -560,9 +569,6 @@ msgstr "Należy poczekać dłużej na zmianę hasła."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: nie można przywrócić wszystkich użytkowników\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Niepowodzenia Ostatnie niepowodzenie Z\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/pt.gmo b/po/pt.gmo
index 81d4cc71..78e7db37 100644
--- a/po/pt.gmo
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
index 556b5c7d..b04dfde9 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-07-22 00:54+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Portuguese <https://translate.fedoraproject.org/projects/"
@@ -26,48 +26,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 4.7.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Palavra-passe: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Palavra-passe %s atual: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Palavra-passe atual: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nova palavra-passe %s : "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nova palavra-passe: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Digite novamente a nova palavra-passe %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Digite novamente a nova palavra-passe: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Desculpe, as palavras-passe não coincidem."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Digite novamente %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "A alteração da palavra-passe foi abortada."
@@ -208,49 +208,55 @@ msgstr "A aplicação necessita de invocar o libpam novamente"
msgid "Unknown PAM error"
msgstr "Erro PAM desconhecido"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...O tempo está a esgotar-se...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Desculpe, o seu tempo expirou!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "conversação errónea (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s falhou: código de saída %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s falhou: sinal capturado %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s falhou: estado desconhecido 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Utilização: %s [--dir / path/to/tally-directory] [--user nome de utilizador] "
"[--reset]]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Sessão Falhas Última falha De\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Conta bloqueada devido a %u inícios de sessão falhados."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -258,45 +264,45 @@ msgstr[0] "(%d minuto restante para desbloquear)"
msgstr[1] "(%d minutos restante para desbloquear)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(Minutos restantes para desbloquear: %d)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " a partir de %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " em %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Último início de sessão:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Bem vindo à sua nova conta!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Último início de sessão falhado:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -309,21 +315,22 @@ msgstr[1] ""
"sessão com sucesso."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Houve %d tentativas falhadas de início de sessão desde o último início de "
"sessão com sucesso."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Demasiados inícios de sessão para '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Não tem correio electrónico."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Tem correio electrónico novo."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -367,12 +374,12 @@ msgstr "A criar directório '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Não foi possível criar e inicializar o directório '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "A senha já foi utilizada anteriormente. Escolha outra."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "A senha já foi utilizada anteriormente."
@@ -402,17 +409,17 @@ msgstr "nível:"
msgid "This is not a valid security context."
msgstr "Não é um contexto de segurança válido."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Não foi possível obter um contexto de segurança válido para %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Contexto de Segurança %s Atribuído."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Contexto de Segurança de Chaves %s Atribuído."
@@ -432,7 +439,7 @@ msgstr "falha em pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "início de sessão: falha no 'forking': %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Acesso permitido (último acesso foi à %ld segundos atrás)."
@@ -468,35 +475,38 @@ msgstr[1] "Aviso: a sua senha expira em %d dias."
msgid "Warning: your password will expire in %d days."
msgstr "Aviso: a sua palavra passe expira em %d dias."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "A senha NIS não pode ser alterada."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Não foi fornecida uma senha."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "A senha não foi alterada."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Você deve escolher uma senha mais curta."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Deve escolher uma senha mais longa."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "A alterar senha para %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Tem de esperar mais antes de poder alterar a sua senha."
+#~ msgid "You have no mail."
+#~ msgstr "Não tem correio electrónico."
+
#~ msgid "is the same as the old one"
#~ msgstr "é igual à anterior"
@@ -564,9 +574,6 @@ msgstr "Tem de esperar mais antes de poder alterar a sua senha."
#~ msgstr ""
#~ "%s: Não foi possível reiniciar todos os utilizadores para não zero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Sessão Falhas Última falha De\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 524bfe9e..7c3e06a3 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index bdfcb16c..454ec9c7 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-07-22 00:54+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate.fedoraproject.org/"
@@ -27,48 +27,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.7.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Senha: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Atual %s senha: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Atual senha: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nova %s senha: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nova senha: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Redigite a nova %s senha: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Redigite a nova senha: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "As senhas não são iguais."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Redigite %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "A alteração de senha foi abortada."
@@ -208,49 +208,55 @@ msgstr "O aplicativo precisa chamar libpam novamente"
msgid "Unknown PAM error"
msgstr "Erro desconhecido no PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...O tempo está acabando...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Desculpe, seu tempo está aumentando!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "conversação errônea (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s falhou: código de saída %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s falhou: detectou sinal %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s falhou: status desconhecido 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Uso: %s [--dir /caminho/para/diretório-tally] [--user nome-utilizador] [--"
"reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Falhas Último falha De\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Conta bloqueada devido a %u falhas de login."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -258,45 +264,45 @@ msgstr[0] "(%d minuto restante para desbloquear)"
msgstr[1] "(%d minutos restante para desbloquear)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(minutos restantes para desbloquear: %d)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " de %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " em %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Último login:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Bem-vindo à sua nova conta!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Falha no último login:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -305,19 +311,20 @@ msgstr[0] "Houve %d falhas de login desde o último login bem sucedido."
msgstr[1] "Houveram %d falhas de login desde o último login bem sucedido."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Houveram %d falhas de login desde o último login bem sucedido."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Há logins demais para '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Não há mensagens."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Há novas mensagens."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -361,12 +368,12 @@ msgstr "Criando o diretório '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Impossível criar e inicializar o diretório \"%s\"."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "A senha já foi usada. Escolha outra."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "A senha já foi usada."
@@ -396,17 +403,17 @@ msgstr "nível:"
msgid "This is not a valid security context."
msgstr "Não é um contexto de segurança válido."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Impossível obter um contexto válido para %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Contexto de segurança %s atribuído."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Contexto de criação de chave %s atribuído."
@@ -426,7 +433,7 @@ msgstr "falha em pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: falha na bifurcação: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Acesso concedido (o último acesso foi a %ld segundos atrás)."
@@ -459,35 +466,38 @@ msgstr[1] "Aviso: sua senha irá expirar em %d dias."
msgid "Warning: your password will expire in %d days."
msgstr "Aviso: sua senha irá expirar em %d dias."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "A senha NIS não pôde ser mudada."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Nenhuma senha informada."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Senha inalterada."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Você deve escolher uma senha mais curta."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Escolha uma senha mais longa."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Mudando senha para %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Aguarde mais tempo para mudar a senha."
+#~ msgid "You have no mail."
+#~ msgstr "Não há mensagens."
+
#~ msgid "is the same as the old one"
#~ msgstr "é igual à antiga senha"
@@ -554,9 +564,6 @@ msgstr "Aguarde mais tempo para mudar a senha."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Impossível redefinir todos os usuários para não-zero\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Falhas Último falha De\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ro.gmo b/po/ro.gmo
index e2cc3fdb..8fa14e9e 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index b2c88993..c09c3179 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,13 +5,14 @@
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Vlad <milovlad@outlook.com>, 2020.
+# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2020-12-26 18:36+0000\n"
-"Last-Translator: Vlad <milovlad@outlook.com>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2023-04-09 22:51+0000\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <https://translate.fedoraproject.org/projects/linux-"
"pam/master/ro/>\n"
"Language: ro\n"
@@ -20,52 +21,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.15.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr "Parolă: "
+msgstr "Parola: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Parolă curentă %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Parolă curentă: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Parolă nouă %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Parolă nouă: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
-msgstr "Rescrie parola nouă %s: "
+msgstr "Rescrieți parola nouă %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
-msgstr "Rescrie parola nouă: "
+msgstr "Rescrieți parola nouă: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Parolele nu se potrivesc."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
-msgstr "Rescrie %s"
+msgstr "Rescrieți %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
-msgstr "Schimbarea parolei a eșuat."
+msgstr "Schimbarea parolei a fost anulată."
#: libpam/pam_item.c:311
msgid "login:"
@@ -81,7 +82,7 @@ msgstr "Eroare critică - abandonare imediată"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
-msgstr "Încercare eșuată de a încărca un modul"
+msgstr "Încărcarea modulului a eșuat"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
@@ -118,7 +119,7 @@ msgstr ""
#: libpam/pam_strerror.c:62
msgid "User not known to the underlying authentication module"
-msgstr "Modulul de autentificare nu cunoaște utilizatorul"
+msgstr "Utilizator necunoscut de modulul de autentificare subiacent"
#: libpam/pam_strerror.c:64
msgid "Have exhausted maximum number of retries for service"
@@ -147,7 +148,7 @@ msgstr "Acreditările utilizatorului au expirat"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
-msgstr "Eșec in setarea acreditărilor pentru utilizator"
+msgstr "Eșec la definirea acreditărilor pentru utilizator"
#: libpam/pam_strerror.c:78
msgid "No module specific data is present"
@@ -175,7 +176,7 @@ msgstr "Blocarea informației de autentificare este rezervată"
#: libpam/pam_strerror.c:90
msgid "Authentication token aging disabled"
-msgstr "Informația de autentificare nu poate expira"
+msgstr "Perioada de validitate a informației de autentificare este dezactivată"
#: libpam/pam_strerror.c:92
msgid "Failed preliminary check by password service"
@@ -183,7 +184,7 @@ msgstr "Eroare la verificarea preliminară făcută de către serviciul de parol
#: libpam/pam_strerror.c:94
msgid "The return value should be ignored by PAM dispatch"
-msgstr "Valoarea retunată poate fi ignorată de PAM"
+msgstr "Valoarea de returnare trebuie să fie ignorată de către expeditorul PAM"
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
@@ -195,7 +196,7 @@ msgstr "Informația de autentificare a expirat"
#: libpam/pam_strerror.c:100
msgid "Conversation is waiting for event"
-msgstr "Conversația asteaptă după un eveniment"
+msgstr "Conversația așteaptă după un eveniment"
#: libpam/pam_strerror.c:102
msgid "Application needs to call libpam again"
@@ -205,174 +206,181 @@ msgstr "Aplicația trebuie să cheme din nou libpam"
msgid "Unknown PAM error"
msgstr "Eroare PAM necunoscută"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Timpul se scurge...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Timpul a expirat!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "conversație eronată (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
-msgstr "%s a eșuat: codul de terminare %d"
+msgstr "%s a eșuat: codul de ieșire %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s a eșuat: semnalul captat %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s a eșuat: stare necunoscută 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-"Utilizare: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Utilizare: %s [--dir /ruta/la/directorul-tally] [--user nume_utilizator] [--"
+"reset] [--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Autentificare Eșuări Ultima eșuare De la\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
-msgstr "Contul este blocat deoarece %u nu a reușit să se autentifice."
+msgstr "Contul este blocat din cauza a %u autentificări eșuate."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
-#, fuzzy, c-format
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
+#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] "(%d minute rămase până la deblocare)"
+msgstr[0] "(un minut rămas până la deblocare)"
msgstr[1] "(%d minute rămase până la deblocare)"
-msgstr[2] "(%d minute rămase până la deblocare)"
+msgstr[2] "(%d de minute rămase până la deblocare)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minute rămase până la deblocare)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
-msgstr " %a %b %e %H:%M:%S %Z %Y"
+msgstr " %A %e %B %Y la %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " de la %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " pe %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Ultima autentificare:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Bun venit în noul cont!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Ultima autentificare eșuată:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
"There were %d failed login attempts since the last successful login."
msgstr[0] ""
-"A mai fost %d încercare nereușită de autentificare de la ultima "
+"A avut loc %d încercare nereușită de autentificare de la ultima "
"autentificare reușită."
msgstr[1] ""
-"Au mai fost %d încercări nereușite de autentificare de la ultima "
+"Au avut loc %d încercări nereușite de autentificare de la ultima "
"autentificare reușită."
msgstr[2] ""
-"Au mai fost %d încercări nereușite de autentificare de la ultima "
+"Au avut loc %d de încercări nereușite de autentificare de la ultima "
"autentificare reușită."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-"Au mai fost %d încercări nereușite de autentificare de la ultima "
+"Au avut loc %d încercări nereușite de autentificare de la ultima "
"autentificare reușită."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
-msgstr "Sunt prea multe autentificări pentru '%s'."
+msgstr "Sunt prea multe autentificări pentru „%s”."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Nu ai mesaje."
+msgid "You do not have any new mail."
+msgstr "Nu aveți niciun mesaj nou."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
-msgstr "Ai un mesaj nou."
+msgstr "Aveți un mesaj nou."
#: modules/pam_mail/pam_mail.c:295
msgid "You have old mail."
-msgstr "Ai un mesaj vechi."
+msgstr "Aveți un mesaj vechi."
#: modules/pam_mail/pam_mail.c:299
msgid "You have mail."
-msgstr "Ai un mesaj."
+msgstr "Aveți un mesaj."
#: modules/pam_mail/pam_mail.c:306
#, c-format
msgid "You have no mail in folder %s."
-msgstr "Nu ai mesaje în directorul %s."
+msgstr "Nu aveți mesaje în directorul %s."
#: modules/pam_mail/pam_mail.c:310
#, c-format
msgid "You have new mail in folder %s."
-msgstr "Ai un mesaj nou în directorul %s."
+msgstr "Aveți un mesaj nou în directorul %s."
#: modules/pam_mail/pam_mail.c:314
#, c-format
msgid "You have old mail in folder %s."
-msgstr "Ai un mesaj vechi în directorul %s."
+msgstr "Aveți un mesaj vechi în directorul %s."
#: modules/pam_mail/pam_mail.c:319
#, c-format
msgid "You have mail in folder %s."
-msgstr "Ai un mesaj în directorul %s."
+msgstr "Aveți un mesaj în directorul %s."
#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr "Crează directorul '%s'."
+msgstr "Se creează directorul „%s”."
#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
-msgstr "Nu se poate crea și inițializa directorul '%s'."
+msgstr "Nu se poate crea și inițializa directorul „%s”."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
-msgstr "Parola a fost deja utilizată. Alege alta."
+msgstr "Parola a fost deja utilizată. Alegeți alta."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Parola a fost deja utilizată."
@@ -383,7 +391,7 @@ msgstr "Contextul implicit de securitate este %s."
#: modules/pam_selinux/pam_selinux.c:176
msgid "Would you like to enter a different role or level?"
-msgstr "Vrei să introduci un rol sau nivel diferit?"
+msgstr "Vreți să introduceți un rol sau nivel diferit?"
#: modules/pam_selinux/pam_selinux.c:189
msgid "role:"
@@ -402,17 +410,17 @@ msgstr "nivel:"
msgid "This is not a valid security context."
msgstr "Nu există un context valid de securitate."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
-msgstr "Nu a putut fi obținut un context valid pentru %s."
+msgstr "Nu s-a putut obține un context valid pentru %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Contextul de securitate %s a fost asignat."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Cheia pentru crearea contextului %s a fost asignată."
@@ -432,65 +440,69 @@ msgstr "eroare la pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "autentificare: eroare la bifurcare %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Accesul a fost permis (ultimul acces a fost acum %ld secunde)."
#: modules/pam_unix/pam_unix_acct.c:230 modules/pam_unix/pam_unix_acct.c:252
msgid "Your account has expired; please contact your system administrator."
-msgstr "Contul tău a expirat; te rog să contactezi administratorul de sistem."
+msgstr "Contul dvs. a expirat; contactați administratorul de sistem."
#: modules/pam_unix/pam_unix_acct.c:238
msgid ""
"You are required to change your password immediately (administrator "
"enforced)."
-msgstr "Trebuie să schimbi imediat parola (impus de către administrator)."
+msgstr ""
+"Vi se cere să vă schimbați parola imediat (cerință impusă de administrator)."
#: modules/pam_unix/pam_unix_acct.c:244
msgid ""
"You are required to change your password immediately (password expired)."
-msgstr "Trebuie să schimbi imediat parola (parola a expirat)."
+msgstr "Vi se cere să vă schimbați parola imediat (parola a expirat)."
#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
-msgstr[0] "Atenție: parola ta va expira în %d zi."
-msgstr[1] "Atenție: parola ta va expira în %d zile."
-msgstr[2] "Atenție: parola ta va expira în %d zile."
+msgstr[0] "Atenție: parola dvs. va expira în %d zi."
+msgstr[1] "Atenție: parola dvs. va expira în %d zile."
+msgstr[2] "Atenție: parola dvs. va expira în %d de zile."
#. TRANSLATORS: only used if dngettext is not supported
#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
msgid "Warning: your password will expire in %d days."
-msgstr "Atenție: parola ta va expira în %d zile."
+msgstr "Atenție: parola dvs. va expira în %d zile."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Parola pentru NIS nu poate fi schimbată."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Nu a fost introdusă nicio parolă."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Parola nu a fost schimbată."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
-msgstr "Trebuie să alegi o parolă mai scurtă."
+msgstr "Trebuie să alegeți o parolă mai scurtă."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
-msgstr "Trebuie să alegi o parolă mai lungă."
+msgstr "Trebuie să alegeți o parolă mai lungă."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
-msgstr "Schimbare parolă pentru %s."
+msgstr "Se schimbă parola pentru %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
-msgstr "Trebuie să aștepti mai mult până vei putea schimba parola."
+msgstr "Trebuie să așteptați mai mult până veți putea schimba parola."
+
+#~ msgid "You have no mail."
+#~ msgstr "Nu ai mesaje."
diff --git a/po/ru.gmo b/po/ru.gmo
index 13395fb8..aacfa1b2 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index ef0d1b2b..9812e7c7 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2021-07-21 13:19+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Russian <https://translate.fedoraproject.org/projects/linux-"
@@ -26,48 +26,48 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.7.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Пароль: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Текущий пароль %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Текущий пароль: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Новый пароль %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Новый пароль: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Повторите ввод нового пароля %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Повторите ввод нового пароля: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Извините, но пароли не совпадают."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Повторите ввод %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Изменение пароля отменено."
@@ -209,51 +209,57 @@ msgstr "Приложение должно повторно вызвать libpam
msgid "Unknown PAM error"
msgstr "Неизвестная ошибка PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Время истекает...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Извините, ваше время истекло!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ошибочный диалог (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "Сбой %s. Код выхода: %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "Сбой %s. Получен сигнал %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "Сбой %s. Неизвестный статус 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Использование: %s: [--dir /путь/к/каталогу-tally] [--user имя_пользователя] "
-"[--reset]\n"
+"[--reset] [--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Учетная запись Сбои Последний сбой С\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
"Учетная запись заблокирована как следствие неудачных попыток входа (всего -- "
"%u)."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -262,45 +268,45 @@ msgstr[1] "(осталось %d минуты до разблокировки)"
msgstr[2] "(осталось %d минут до разблокировки)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(осталось %d мин. до разблокировки)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " с %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " на %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Последний вход в систему:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Добро пожаловать в новую учетную запись!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Последняя неудачная попытка входа в систему:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -310,18 +316,18 @@ msgstr[1] "Число неудачных попыток со времени по
msgstr[2] "Число неудачных попыток со времени последнего входа: %d."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Число неудачных попыток со времени последнего входа: %d."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Слишком много регистраций в системе для «%s»."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Почты нет."
#: modules/pam_mail/pam_mail.c:292
@@ -366,12 +372,12 @@ msgstr "Создание каталога %s."
msgid "Unable to create and initialize directory '%s'."
msgstr "Не удалось создать и инициализировать каталог %s."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Этот пароль уже был использован. Выберите другой."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Этот пароль уже использовался."
@@ -401,17 +407,17 @@ msgstr "уровень:"
msgid "This is not a valid security context."
msgstr "Неверный контекст безопасности."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Не удалось получить корректный контекст для %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Контекст безопасности %s назначен."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Контекст %s, используемый при создании ключей, назначен."
@@ -431,7 +437,7 @@ msgstr "не удалось выполнить pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "регистрация: сбой при создании нового процесса: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Доступ предоставлен (последнее обращение было %ld сек. назад)."
@@ -467,32 +473,32 @@ msgstr[2] "Предупреждение: срок действия пароля
msgid "Warning: your password will expire in %d days."
msgstr "Предупреждение: срок действия пароля истекает через %d дн(я)(ей)."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Пароль NIS изменить нельзя."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Пароль не указан."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Пароль не изменен."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Вы должны выбрать более короткий пароль."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Выберите пароль большей длины."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Смена пароля для %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "До смены пароля должно пройти больше времени."
@@ -563,9 +569,6 @@ msgstr "До смены пароля должно пройти больше вр
#~ msgstr ""
#~ "%s: не удается выполнить сброс всех пользователей в ненулевое значение\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Учетная запись Сбои Последний сбой С\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/si.po b/po/si.po
index 3bfb4679..31eee970 100644
--- a/po/si.po
+++ b/po/si.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-03-06 23:59+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Sinhala <https://translate.fedoraproject.org/projects/linux-"
@@ -22,49 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 3.11.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "රහස්පදය: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "නව %s රහස්පදය: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "නව රහස්පදය: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "නව %s රහස්පදය: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "නව රහස්පදය: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "නව %s රහස්පදය නැවත ඇතුළත් කරන්න: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "නව රහස්පදය නැවත ඇතුළත් කරන්න: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "සමාවෙන්න, රහස්පද ගැලපෙන්නේ නැත."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න."
@@ -205,48 +205,54 @@ msgstr "යෙදුමට පැරණි libpam ඇමතීමට අවශ
msgid "Unknown PAM error"
msgstr "නොදන්නා PAM දෝෂය"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...කාල සීමාව ඉක්මවා ඇත...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...සමාවන්න, ොබගේ කාලය ඉක්ම විය!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "වැරදි සගත පරිවර්තනයක්(%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s අසමත් විය: ඉවතිවීමෙ කේතය %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s අසමත් විය: සංඥාව අල්ලා ගන්නා ලදි%d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s අසමත් විය: නොදන්නා තත්වය 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -254,45 +260,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s වෙතින්"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s වෙනිදා"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "අවසාන පිවිසුම:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "ඔබගේ නව ගිණුමට සාදරයෙන් පිළිගනිමු!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -301,19 +307,19 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s' සඳහා බොහෝ පිවිසුම් ගණනක් ඇත."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "ඔබට අලුත් තැපැල් ඇත."
#: modules/pam_mail/pam_mail.c:292
@@ -358,12 +364,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න."
@@ -395,17 +401,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr "නිරවද්‍ය ආරක්‍ෂක ප්‍රකරණයක් නොවේ"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "%s ආරක්‍ෂක ප්‍රකරණය යොදවා ඇත"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "%s ආරක්‍ෂක ප්‍රකරණය යොදවා ඇත"
@@ -425,7 +431,7 @@ msgstr "pam_set_item() අසමත් විය\n"
msgid "login: failure forking: %m"
msgstr "පිවිසුම: ෆොර්කින් බිදවැටීමක්: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -461,39 +467,43 @@ msgstr[1] "අවවාදයි: ඔබගේ රහස්පදය දින %
msgid "Warning: your password will expire in %d days."
msgstr "අවවාදයි: ඔබගේ රහස්පදය දින %d කින් කල්ඉකුත් වේ"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS රහස්පදය වෙනස් කළ නොහැක."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "රහස්පදය සපයා නැත"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS රහස්පදය වෙනස් කළ නොහැක."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "ඔබ කෙටි මුරපදයක් තෝරා ගත යුතුය."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "ඔබ විසින් දිගු රහස්පදයක් තෝරාගත යුතුම වේ"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "ඔබගේ රහස්පදය වෙනස් කිරීමට බොහෝ වෙලාවක් රැදී සිටීය යුතුම වේ"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "ඔබට අලුත් තැපැල් ඇත."
+
#~ msgid "is the same as the old one"
#~ msgstr "එය පැරණි රහස්පදය හා සමාන වේ"
diff --git a/po/sk.gmo b/po/sk.gmo
index f027bfba..0d79190d 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 38a3e05f..41710228 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,15 +8,15 @@
# feonsu <feonsu@gmail.com>, 2008
# Pavol Šimo <palo.simo@gmail.com>, 2009
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# Ondrej Sulek <feonsu@gmail.com>, 2020.
+# Ondrej Sulek <feonsu@gmail.com>, 2020, 2021.
# Dmitry V. Levin <ldv@altlinux.org>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2020-07-05 23:52+0000\n"
-"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2021-10-08 04:19+0000\n"
+"Last-Translator: Ondrej Sulek <feonsu@gmail.com>\n"
"Language-Team: Slovak <https://translate.fedoraproject.org/projects/linux-"
"pam/master/sk/>\n"
"Language: sk\n"
@@ -24,50 +24,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.1.1\n"
+"X-Generator: Weblate 4.8\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Heslo: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Aktuálne %s heslo: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Aktuálne heslo: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nové %s heslo: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nové heslo: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Opakujte nové %s heslo: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Opakujte nové heslo: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Prepáčte, heslá sa nezhodujú."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Opakujte %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Zmena hesla zrušená."
@@ -207,96 +207,102 @@ msgstr "Aplikácia musí znovu zavolať libpam"
msgid "Unknown PAM error"
msgstr "Neznáme chyba PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Odpočet bol spustený...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Prepáčte, váš čas vypršal!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "chybná konverzácia (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s zlyhalo: výstupný kód %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s zlyhalo: dostal signál %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s zlyhalo: neznámy stav 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Použitie: %s [--dir /cesta/k/zhodujú-directory] [--user pouzivatelske_meno] "
"[--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Zlyhaní Ostatné zlyhanie Z\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Účet uzamknutý z dôvodu %u neúspešných prihlásení."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
-#, fuzzy, c-format
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
+#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
-msgstr[0] "(odomknutie zostáva %d minút)"
-msgstr[1] "(odomknutie zostáva %d minút)"
-msgstr[2] "(odomknutie zostáva %d minút)"
+msgstr[0] "(na odomknutie zostáva %d minúta)"
+msgstr[1] "(na odomknutie zostáva %d minúty)"
+msgstr[2] "(na odomknutie zostáva %d minút)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(odomknutie zostáva %d minút)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %d.%m.%Y %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " z %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " na %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Posledné prihlásenie:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Vitajte vo vašom novom účte!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Posledné neúspešné prihlásenie:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -312,21 +318,22 @@ msgstr[2] ""
"prihlásenie."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Od posledného úspešného prihlásenia došlo k %d neúspešným pokusom o "
"prihlásenie."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Príliš veľa prihlásení pre '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Nemáte žiadnu poštu."
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "Máte novú poštu."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -370,12 +377,12 @@ msgstr "Vytváranie priečinka '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Nedá sa vytvoriť a inicializovať priečinok '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Heslo už bolo použité. Zvoľte si iné."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Heslo už bolo použité."
@@ -405,17 +412,17 @@ msgstr "úroveň:"
msgid "This is not a valid security context."
msgstr "Neplatný kontext zabezpečenia."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Nie je možné získať platný kontext pre %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Kontext zabezpečenia %s pridelený."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Kontext zabezpečenia pre vytváranie kľúčov %s pridelený."
@@ -435,7 +442,7 @@ msgstr "chyba pri pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: chyba forku: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Prístup povolený (posledný prístup pred %ld sekundami)."
@@ -470,35 +477,38 @@ msgstr[2] "Upozornenie: vaše heslo vyprší za %d dní."
msgid "Warning: your password will expire in %d days."
msgstr "Upozornenie: vaše heslo vyprší za %d dní."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Nie je možné zmeniť NIS heslo."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Heslo nezadané."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Heslo nebolo zmenené."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Musíte zvoliť kratšie heslo."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Musíte si zvoliť dlhšie heslo."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Zmena hesla pre %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Na zmenu svojho hesla musíte počkať dlhšie."
+#~ msgid "You have no mail."
+#~ msgstr "Nemáte žiadnu poštu."
+
#~ msgid "is the same as the old one"
#~ msgstr "je rovnaké ako predchádzajúce"
@@ -565,9 +575,6 @@ msgstr "Na zmenu svojho hesla musíte počkať dlhšie."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Nedá sa resetovať všetkých používateľov nenulovo\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Zlyhaní Ostatné zlyhanie Z\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/sl.gmo b/po/sl.gmo
index 529d6055..5b6cf6a5 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index e472a4b9..8d338145 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -4,65 +4,66 @@
#
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# Martin Srebotnjak <miles@filmsi.net>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2011-11-30 06:56-0500\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Slovenian (http://www.transifex.com/projects/p/fedora/"
-"language/sl/)\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2023-02-20 19:20+0000\n"
+"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
+"Language-Team: Slovenian <https://translate.fedoraproject.org/projects/linux-"
+"pam/master/sl/>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
-"%100==4 ? 2 : 3);\n"
-"X-Generator: Zanata 3.8.3\n"
+"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
+"%100==4 ? 2 : 3;\n"
+"X-Generator: Weblate 4.15.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr ""
+msgstr "Geslo: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
-msgstr ""
+msgstr "Trenutno geslo %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr ""
+msgstr "Trenutno geslo: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
-msgstr ""
+msgstr "Novo geslo %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
-msgstr ""
+msgstr "Novo geslo: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
-msgstr ""
+msgstr "Žal se gesli ne ujemata."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -84,7 +85,7 @@ msgstr ""
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr ""
+msgstr "Simbola ni mogoče najti"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
@@ -104,7 +105,7 @@ msgstr ""
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
-msgstr ""
+msgstr "Napaka overjanja"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
@@ -128,7 +129,7 @@ msgstr ""
#: libpam/pam_strerror.c:68
msgid "User account has expired"
-msgstr ""
+msgstr "Uporabniški račun je potekel"
#: libpam/pam_strerror.c:70
msgid "Cannot make/remove an entry for the specified session"
@@ -156,7 +157,7 @@ msgstr ""
#: libpam/pam_strerror.c:82
msgid "Conversation error"
-msgstr ""
+msgstr "Napaka pogovora"
#: libpam/pam_strerror.c:84
msgid "Authentication token manipulation error"
@@ -184,7 +185,7 @@ msgstr ""
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
-msgstr ""
+msgstr "Modul ni znan"
#: libpam/pam_strerror.c:98
msgid "Authentication token expired"
@@ -200,49 +201,55 @@ msgstr ""
#: libpam/pam_strerror.c:105
msgid "Unknown PAM error"
-msgstr ""
+msgstr "Neznana napaka PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
-msgstr ""
+msgstr "... Čas se izteka ...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+msgstr ""
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -252,45 +259,45 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
-msgstr ""
+msgstr "Zadnja prijava:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -301,18 +308,18 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -357,12 +364,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -392,17 +399,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -422,7 +429,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -457,34 +464,32 @@ msgstr[3] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
-msgstr ""
+msgstr "Gesla NIS ni bilo možno spremeniti."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Izbrati morate krajše geslo."
-#: modules/pam_unix/pam_unix_passwd.c:585
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
-msgstr "Izbrati morate krajše geslo."
+msgstr "Izbrati morate daljše geslo."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Izbrati morate krajše geslo."
diff --git a/po/sq.po b/po/sq.po
index b4756d26..c7b7cedd 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Ju duhet të zgjidhni një fjalëkalim më të shkurtër."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Ju duhet të zgjidhni një fjalëkalim më të shkurtër."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Ju duhet të zgjidhni një fjalëkalim më të shkurtër."
diff --git a/po/sr.po b/po/sr.po
index 1e97611a..c4b856f1 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2014-11-16 06:51-0500\n"
"Last-Translator: Momcilo Medic <medicmomcilo@gmail.com>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/linux-pam/"
@@ -26,49 +26,49 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Лозинка: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "Нова %s лозинка: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "Нова лозинка: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Нова %s лозинка: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Нова лозинка: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Поново унесите нову %s лозинку: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Поново унесите нову лозинку: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Извините, лозинке се не подударају."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Поново унесите %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Промена лозинке је прекинута."
@@ -209,49 +209,55 @@ msgstr "Програм мора поново да позове libpam"
msgid "Unknown PAM error"
msgstr "Непозната PAM грешка"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Истиче време...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Извините, време вам је истекло!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "разговор пун грешака (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s неуспех: излазни код %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s неуспех: ухваћен сигнал %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s неуспех: непознат статус 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file коренски-називдатотеке] [--user корисничкоиме] [--reset[=n]] [--"
"quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Пријава Неуспеси Последњи неуспех Са\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Налог је закључан због %u неуспелих пријава"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -260,45 +266,45 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %e. %b %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " са %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " на %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Последња пријава:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Добро дошли на ваш нови налог!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Последња неуспешна пријава:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -308,19 +314,19 @@ msgstr[1] "Било је %d неуспела покушаја пријаве о
msgstr[2] "Било је %d неуспелих покушаја пријаве од последње успешне пријаве."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Било је %d неуспелих покушаја пријаве од последње успешне пријаве."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "Превише пријава за „%s“."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Имате нову пошту."
#: modules/pam_mail/pam_mail.c:292
@@ -365,12 +371,12 @@ msgstr "Правим директоријум „%s“."
msgid "Unable to create and initialize directory '%s'."
msgstr "Не могу да направим директоријум „%s“."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Лозинка је већ у употреби. Изаберите другу."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Шифра је већ била у употреби."
@@ -401,17 +407,17 @@ msgstr "ниво:"
msgid "This is not a valid security context."
msgstr "Неисправан безбедносни контекст"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "Безбедносни контекст %s је додељен"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "Контекст прављења кључа %s је додељен"
@@ -431,7 +437,7 @@ msgstr "неуспешно извршавање функције pam_set_item()\
msgid "login: failure forking: %m"
msgstr "пријава: грешка при гранању: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Приступ је одобрен (последњи приступ је био пре %ld секунди)."
@@ -468,39 +474,43 @@ msgstr[2] "Упозорење: ваша лозинка ће истећи кро
msgid "Warning: your password will expire in %d days."
msgstr "Упозорење: ваша лозинка ће истећи кроз %d дана"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS лозинка не може бити промењена."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Није понуђена лозинка"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS лозинка не може бити промењена."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Морате одабрати краћу лозинку."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Морате изабрати дужу лозинку"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Мењам лозинку за %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Морате дуже сачекати на промену лозинке"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "Имате нову пошту."
+
#~ msgid "is the same as the old one"
#~ msgstr "иста је као и стара"
@@ -568,9 +578,6 @@ msgstr "Морате дуже сачекати на промену лозинк
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: не могу да повратим све кориснике на број различит од нуле\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Пријава Неуспеси Последњи неуспех Са\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/sr@latin.po b/po/sr@latin.po
index e68f4260..c44ba4a6 100644
--- a/po/sr@latin.po
+++ b/po/sr@latin.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:59-0500\n"
"Last-Translator: Tomáš Mráz <tmraz@fedoraproject.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -24,49 +24,49 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Lozinka: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "Nova %s lozinka: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "Nova lozinka: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nova %s lozinka: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nova lozinka: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Ponovo unesite novu %s lozinku: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Ponovo unesite novu lozinku: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Izvinite, lozinke se ne podudaraju."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Ponovo unesite %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Promena lozinke je prekinuta."
@@ -207,49 +207,55 @@ msgstr "Program mora ponovo da pozove libpam"
msgid "Unknown PAM error"
msgstr "Nepoznata PAM greška"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Ističe vreme...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Izvinite, vreme vam je isteklo!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "razgovor pun grešaka (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s neuspeh: izlazni kod %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s neuspeh: uhvaćen signal %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s neuspeh: nepoznat status 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file korenski-nazivdatoteke] [--user korisničkoime] [--reset[=n]] [--"
"quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Prijava Neuspesi Poslednji neuspeh Sa\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Nalog je zaključan zbog %u neuspelih prijava"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -258,45 +264,45 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %e. %b %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " sa %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " na %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Poslednja prijava:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Dobro došli na vaš novi nalog!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Poslednja neuspešna prijava:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -306,19 +312,19 @@ msgstr[1] "Bilo je %d neuspela pokušaja prijave od poslednje uspešne prijave."
msgstr[2] "Bilo je %d neuspelih pokušaja prijave od poslednje uspešne prijave."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "Bilo je %d neuspelih pokušaja prijave od poslednje uspešne prijave."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "Previše prijava za „%s“."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Imate novu poštu."
#: modules/pam_mail/pam_mail.c:292
@@ -363,12 +369,12 @@ msgstr "Pravim direktorijum „%s“."
msgid "Unable to create and initialize directory '%s'."
msgstr "Ne mogu da napravim direktorijum „%s“."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Lozinka je već u upotrebi. Izaberite drugu."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "Lozinka je već u upotrebi. Izaberite drugu."
@@ -400,17 +406,17 @@ msgstr "nivo:"
msgid "This is not a valid security context."
msgstr "Neispravan bezbednosni kontekst"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "Bezbednosni kontekst %s je dodeljen"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "Kontekst pravljenja ključa %s je dodeljen"
@@ -430,7 +436,7 @@ msgstr "neuspešno izvršavanje funkcije pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "prijava: greška pri grananju: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Pristup je odobren (poslednji pristup je bio pre %ld sekundi)."
@@ -467,40 +473,44 @@ msgstr[2] "Upozorenje: vaša lozinka će isteći kroz %d dana"
msgid "Warning: your password will expire in %d days."
msgstr "Upozorenje: vaša lozinka će isteći kroz %d dana"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS lozinka ne može biti promenjena."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Nije ponuđena lozinka"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS lozinka ne može biti promenjena."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Morate izabrati dužu lozinku"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Morate izabrati dužu lozinku"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Menjam lozinku za %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Morate duže sačekati na promenu lozinke"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "Imate novu poštu."
+
#~ msgid "is the same as the old one"
#~ msgstr "ista je kao i stara"
@@ -566,9 +576,6 @@ msgstr "Morate duže sačekati na promenu lozinke"
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: ne mogu da povratim sve korisnike na broj različit od nule\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Prijava Neuspesi Poslednji neuspeh Sa\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index a113ec7c..25a52d01 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 35a52cee..73755c91 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,13 +9,14 @@
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Andreas Henriksson <andreas+fedora@fatal.se>, 2020.
# Dmitry V. Levin <ldv@altlinux.org>, 2021.
+# Luna Jernberg <bittin@reimu.nl>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-07-22 00:54+0000\n"
-"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-11-15 18:19+0000\n"
+"Last-Translator: Luna Jernberg <bittin@reimu.nl>\n"
"Language-Team: Swedish <https://translate.fedoraproject.org/projects/linux-"
"pam/master/sv/>\n"
"Language: sv\n"
@@ -23,50 +24,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Lösenord: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Nuvarande %s lösenord: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Nuvarande lösenord: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Nytt %s lösenord: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Nytt lösenord: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Ange nytt %s lösenord igen: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Ange nytt lösenord igen: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Tyvärr, lösenorden stämmer inte överens."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Ange %s igen"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Ändring av lösenordet avbröts."
@@ -206,49 +207,55 @@ msgstr "Programmet behöver anropa libpam igen"
msgid "Unknown PAM error"
msgstr "Okänt PAM-fel"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Tiden håller på att ta slut...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Tyvärr, din tid är ute!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "felaktig konversation (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s misslyckades: slutstatus %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s misslyckades: fångade signalen %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s misslyckades: okänd status 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Användning: %s [--dir /sökväg/till/tally-katalog] [--user användarnamn] [--"
-"reset]\n"
+"reset] [--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Inloggning Misslyck Senaste fel Från\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Kontot är låst på grund av %u misslyckade inloggningar."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -256,45 +263,45 @@ msgstr[0] "(%d minut kvar till upplåsning)"
msgstr[1] "(%d minuter kvar till upplåsning)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d minuter kvar till upplåsning)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %e %b %Y %H.%M.%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " från %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " på %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Senaste inloggning:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Välkommen till ditt nya konto!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Senaste misslyckade inloggning:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -307,21 +314,21 @@ msgstr[1] ""
"inloggning."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Det har skett %d misslyckade inloggningsförsök sedan senaste korrekta "
"inloggning."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "För många inloggningar för '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Du har inga brev."
+msgid "You do not have any new mail."
+msgstr "Du har inga nya brev."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -365,12 +372,12 @@ msgstr "Skapar katalogen '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Kunde inte skapa och initiera katalogen '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Lösenordet har redan används. Välj ett annat."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Lösenordet har redan använts."
@@ -400,17 +407,17 @@ msgstr "nivå:"
msgid "This is not a valid security context."
msgstr "Inte en giltig säkerhetskontext."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "En giltig kontext för %s kunde inte erhållas."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Säkerhetskontext %s tilldelad."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Nyckelskapandekontext %s tilldelad."
@@ -430,7 +437,7 @@ msgstr "pam_set_item() misslyckades\n"
msgid "login: failure forking: %m"
msgstr "inloggning: fel vid grening: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Åtkomst godkänd (senaste åtkomst var %ld sekunder sedan)."
@@ -463,35 +470,38 @@ msgstr[1] "Varning: ditt lösenord går ut om %d dagar."
msgid "Warning: your password will expire in %d days."
msgstr "Varning: ditt lösenord går ut om %d dagar."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS-lösenord kunde inte ändras."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Inget lösenord angavs."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Lösenordet har inte ändrats."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Du måste välja ett kortare lösenord."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Du måste välja ett längre lösenord."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Ändrar lösenord för %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Du måste vänta längre innan du kan ändra lösenord."
+#~ msgid "You have no mail."
+#~ msgstr "Du har inga brev."
+
#~ msgid "is the same as the old one"
#~ msgstr "är samma som det gamla"
@@ -558,9 +568,6 @@ msgstr "Du måste vänta längre innan du kan ändra lösenord."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Kan inte ställa om alla användare till nollskilt värde\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Inloggning Misslyck Senaste fel Från\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ta.po b/po/ta.po
index 04ae62ed..4234df5c 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-03-06 23:59+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Tamil <https://translate.fedoraproject.org/projects/linux-pam/"
@@ -25,49 +25,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.11.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "கடவுச்சொல்:"
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "புதிய %s password: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "புதிய password: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "புதிய %s password: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "புதிய password: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "புதிய %s password மீண்டும் உள்ளிடவும்: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "புதிய password மீண்டும் உள்ளிடவும்: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "கடவுச்சொல் பொருந்தவில்லை."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%sஐ மறு தட்டச்சு செய்"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "கடவுச்சொல் மாற்றம் கைவிடப்பட்டது."
@@ -208,48 +208,54 @@ msgstr "பயன்பாடு libpam ஐ மீண்டும் அழை
msgid "Unknown PAM error"
msgstr "தெரியாத PAM பிழை"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "... நேரம் போய் கொண்டிருக்கிறது...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "... உங்கள் நேரம் முடிந்தது!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "பிழையான உரையாடல் (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s செயலிழக்கப்பட்டது: வெளியேறும் குறியீடு %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s செயலிழக்கப்பட்டது: சிக்னல் %d%s பிடிக்கப்பட்டது"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s செயலிழக்கப்பட்டது: தெரியாத நிலை 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "புகுபதிவு கடைசி தோல்வி தோல்வியடைந்தது இங்கிருந்து\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u தோல்வி புகுபதிவுகளால் கணக்கு பூட்டப்பட்டுள்ளது"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -257,45 +263,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s இலிருந்து"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s இல்"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "கடைசி புகுபதிவு:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "உங்கள் புதிய கணக்கு வரவேற்கப்படுகிறீர்கள்!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "கடைசி தோல்வியடைந்த புகுபதிவு:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -304,19 +310,19 @@ msgstr[0] "கடைசி புகுபதிவிலிருந்து %
msgstr[1] "கடைசி புகுபதிவிலிருந்து %d புகுபதிவு முயற்சிகள் தோல்வியடைந்தன."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "கடைசி புகுபதிவிலிருந்து %d புகுபதிவு முயற்சி தோல்வியடைந்தன."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s'க்கு பல புகுபதிவுகள் உள்ளன."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "உங்களுக்கு புதிய அஞ்சல் உள்ளது."
#: modules/pam_mail/pam_mail.c:292
@@ -361,12 +367,12 @@ msgstr "அடைவு '%s'ஐ உருவாக்குகிறது."
msgid "Unable to create and initialize directory '%s'."
msgstr "அடைவு '%s'ஐ உருவாக்க மற்றும் துவக்க முடியவில்லை."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டது. வேறொன்றை பயன்படுத்தவும்."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டுள்ளது."
@@ -397,17 +403,17 @@ msgstr "நிலை:"
msgid "This is not a valid security context."
msgstr "இது சரியான பாதுகாப்பு சூழல் இல்லை"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "பாதுகாப்பு சூழல் %s ஒதுக்கப்பட்டது"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "விசை உருவாக்க சூழல் %s ஒதுக்கப்பட்டுள்ளது"
@@ -427,7 +433,7 @@ msgstr "pam_set_item() செயலிழக்கப்பட்டது\n"
msgid "login: failure forking: %m"
msgstr "login: failure forking: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "அணுகல் வழங்கப்பட்டது (கடைசி அணுகல் %ld விநாடிகளுக்கு முன்)."
@@ -463,39 +469,43 @@ msgstr[1] "எச்சரிக்கை: கடவுச்சொல் %d ந
msgid "Warning: your password will expire in %d days."
msgstr "எச்சரிக்கை: கடவுச்சொல் %d நாட்களில் முடிவுறும்"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS கடவுச்சொல்லை மாற்ற முடியாது."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "கடவுச்சொல் கொடுக்கப்படவில்லை"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS கடவுச்சொல்லை மாற்ற முடியாது."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "குறுகிய கடவுச்சொல்லை நீங்கள் தேர்வு செய்ய வேண்டும்."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "நீங்கள் நீண்ட கடவுச்சொல்லை தேர்ந்தெடுக்க வேண்டும்"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%sக்கு கடவுச்சொல்லை மாற்றுகிறது."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "உங்கள் கடவுச்சொல்லை மாற்ற சிறிது காத்திருக்க வேண்டும்"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "உங்களுக்கு புதிய அஞ்சல் உள்ளது."
+
#~ msgid "is the same as the old one"
#~ msgstr "இது பழையதைப் போல உள்ளது"
@@ -562,9 +572,6 @@ msgstr "உங்கள் கடவுச்சொல்லை மாற்ற
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: பூஜ்ஜியமில்லாததற்கு அனைத்து பயனர்களையும் மறு அமைக்க முடியவில்லை\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "புகுபதிவு கடைசி தோல்வி தோல்வியடைந்தது இங்கிருந்து\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/te.po b/po/te.po
index 34c09966..14848f8e 100644
--- a/po/te.po
+++ b/po/te.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2013-04-30 07:58-0400\n"
"Last-Translator: sudheesh001 <sudheesh1995@outlook.com>\n"
"Language-Team: Telugu (http://www.transifex.com/projects/p/fedora/language/"
@@ -22,49 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "సంకేతపదము: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "కొత్త %s సంకేతపదము: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "కొత్త సంకేతపదము: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "కొత్త %s సంకేతపదము: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "కొత్త సంకేతపదము: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "కొత్త %s సంకేతపదమును మరలాటైపుచేయుము: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "కొత్త సంకేతపదమును మరలాటైపుచేయుము: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "క్షమించాలి, సంకేతపదము సరిపోలలేదు."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "తిరిగిటైపుచేయి %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "సంకేతపదము మార్పు తప్పించబడింది"
@@ -205,48 +205,54 @@ msgstr "libpamను అనువర్తనము మరలా కాల్‌
msgid "Unknown PAM error"
msgstr "తెలియని PAM దోషము"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...సమయం అయిపోతోంది...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...క్షమించాలి, మీ సమయం అయిపోయింది!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "తప్పుడు సంభాషణలు (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s విఫలమైంది: బహిష్కరణ కోడ్ %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s విఫలమైంది: సంకేతము %d%s పొదింది"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s విఫలమైంది: తెలియని స్థితి 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "లాగిన్ విఫలమైంది సరికొత్త వైఫల్యం దీనినుండి\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u లాగిన్‌ల వైఫల్యం కారణంగా ఖాతా లాక్అయింది"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -254,45 +260,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s నుండి"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s పైన"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "చివరి లాగిన్:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "మీ కొత్త ఖాతాకు స్వాగతము!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "చివరిగా విఫలమైన లాగిన్:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -301,19 +307,19 @@ msgstr[0] "చివరి సమర్ధవంతపు లాగిన్‌
msgstr[1] "చివరి సమర్ధవంతపు లాగిన్‌నుండి ఆక్కడ %d విఫల లాగిన్ ప్రయత్నాలు వున్నాయి."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "చివరి సమర్ధవంతపు లాగిన్‌నుండి ఆక్కడ %d విఫల లాగిన్ ప్రయత్నాలు వున్నాయి."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "'%s' కొరకు మరీయెక్కువ లాగిన్‌లు"
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "మీరు కొత్త మెయిల్ కలిగివున్నారు."
#: modules/pam_mail/pam_mail.c:292
@@ -358,12 +364,12 @@ msgstr "డెరెక్టరీ '%s' సృష్టించుట."
msgid "Unable to create and initialize directory '%s'."
msgstr "డైరెక్టరీ %sను సృష్టించలేక పోయింది మరియు సిద్దీకరించలేక పోయింది."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "సంకేతపదము యిప్పటికే వుపయోగించబడింది. మరియొకదానిని యెంచుకొనుము."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "సంకేతపదము యిప్పటికే వుపయోగించబడింది."
@@ -394,17 +400,17 @@ msgstr "స్థాయి:"
msgid "This is not a valid security context."
msgstr "విలువైన రక్షణ సందర్భముకాదు"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "రక్షణ సందర్భము %s అప్పగించబడింది"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "కీ సృష్టీకరణ సందర్భము %s అప్పగించబడింది"
@@ -424,7 +430,7 @@ msgstr "pam_set_item() విఫలమైంది\n"
msgid "login: failure forking: %m"
msgstr "login: failure forking: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "యాక్సిస్ యివ్వబడింది (చివరిగా యాక్సిస్ చేసినది %ld సెకనుల క్రితం)."
@@ -460,39 +466,43 @@ msgstr[1] "హెచ్చరిక: మీ సంకేతపదము %d ర
msgid "Warning: your password will expire in %d days."
msgstr "హెచ్చరిక: మీ సంకేతపదము %d రోజులలో కాలముతీరుతుంది"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS సంకేతపదము మార్చబడ లేకపోయింది."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "ఎటువంటి సంకేతపదము యివ్వలేదు"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS సంకేతపదము మార్చబడ లేకపోయింది."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "మీరు తప్పనిసరిగా తక్కువ పాస్‌వర్డ్‌ను ఎంచుకోవాలి."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "మీరు తప్పక పొడవాటి సంకేతపదమును యెంచుకొనవలెను."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s కొరకు సంకేతపదమును మార్చుతోంది"
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "మీ సంకేతపదమును మార్చుటకు మీరు ఎక్కువసేపు వేచివుండాలి"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "మీరు కొత్త మెయిల్ కలిగివున్నారు."
+
#~ msgid "is the same as the old one"
#~ msgstr "ఇది పాతదేనా"
@@ -559,9 +569,6 @@ msgstr "మీ సంకేతపదమును మార్చుటకు మ
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: వినియోగదారులనందరిని సున్నా-కానిదానికి తిరిగివుంచలేము\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "లాగిన్ విఫలమైంది సరికొత్త వైఫల్యం దీనినుండి\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/tg.po b/po/tg.po
index 7107cfca..74469205 100644
--- a/po/tg.po
+++ b/po/tg.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Tajik (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,47 +201,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -249,45 +255,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -296,18 +302,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -352,12 +358,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -387,17 +393,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -417,7 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -450,34 +456,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "Шумо бояд гузарвожаи кӯтоҳтарро интихоб кунед."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Шумо бояд гузарвожаи кӯтоҳтарро интихоб кунед."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Шумо бояд гузарвожаи кӯтоҳтарро интихоб кунед."
diff --git a/po/th.po b/po/th.po
index 80cd6b02..88302178 100644
--- a/po/th.po
+++ b/po/th.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Thai (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,48 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -201,92 +201,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -294,18 +300,18 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -350,12 +356,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -385,17 +391,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -415,7 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -447,34 +453,34 @@ msgstr[0] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "คุณต้องเลือกรหัสผ่านที่สั้นกว่า"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "คุณต้องเลือกรหัสผ่านที่สั้นกว่า"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "คุณต้องเลือกรหัสผ่านที่สั้นกว่า"
diff --git a/po/tr.gmo b/po/tr.gmo
index fbe099cd..68112291 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 45d154b7..9cb78938 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -10,13 +10,14 @@
# Selim Şumlu <selim@sum.lu>, 2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Oğuz Ersen <oguzersen@protonmail.com>, 2020, 2021.
+# Oğuz Ersen <oguz@ersen.moe>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-07-22 00:28+0000\n"
-"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-11-13 09:19+0000\n"
+"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
"Language-Team: Turkish <https://translate.fedoraproject.org/projects/linux-"
"pam/master/tr/>\n"
"Language: tr\n"
@@ -24,50 +25,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n>1);\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Parola: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Mevcut %s parolası: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Mevcut parola: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Yeni %s parolası: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Yeni parola: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Yeni %s parolasını tekrar girin: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Yeni parolayı tekrar girin: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Üzgünüm, parolalar birbirine uymuyor."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "%s'i tekrar girin"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Parola değişikliği iptal edildi."
@@ -207,49 +208,55 @@ msgstr "Uygulamanın libpam kütüphanesini yeniden çağırması gerekiyor"
msgid "Unknown PAM error"
msgstr "Bilinmeyen PAM hatası"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Zaman geçiyor...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Üzgünüm, süreniz doldu!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "hatalı etkileşim (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s başarısız: çıkış kodu %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s başarısız: %d%s sinyali yakalandı"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s başarısız: bilinmeyen durum 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Kullanım: %s [--dir KayıtlarınTutulduğuDizininYolu] [--user KullanıcıAdı] [--"
-"reset]\n"
+"reset] [--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Giriş Hatalar Son hata Kim\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "%u başarısız oturum açma nedeniyle hesap kilitlendi."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -257,45 +264,45 @@ msgstr[0] "(kilidi açmak için %d dakika kaldı)"
msgstr[1] "(kilidi açmak için %d dakika kaldı)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(kilidi açmak için %d dakika kaldı)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %e %b %Y %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " %.*s makinesinden"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " %.*s üzerinde"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Son giriş:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Yeni hesabınıza hoş geldiniz!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Son başarısız giriş:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -304,20 +311,20 @@ msgstr[0] "Son başarılı girişten bu yana %d başarısız giriş denemesi yap
msgstr[1] "Son başarılı girişten bu yana %d başarısız giriş denemesi yapıldı."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Son başarılı girişten itibaren %d başarısız kimlik doğrulama girişimi oldu."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "%s için çok fazla giriş var."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "E-postanız yok."
+msgid "You do not have any new mail."
+msgstr "Yeni iletiniz yok."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -361,12 +368,12 @@ msgstr "%s dizini oluşturuluyor."
msgid "Unable to create and initialize directory '%s'."
msgstr "%s dizini oluşturulamadı."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Parola kullanımda. Lütfen başka bir parola seçin."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Parola önceden kullanılmıştır."
@@ -396,17 +403,17 @@ msgstr "seviye:"
msgid "This is not a valid security context."
msgstr "Bu geçerli bir güvenlik bağlamı değil."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "%s için geçerli bir bağlam alınamadı."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "%s güvenlik bağlamı atandı."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "%s anahtar oluşturma bağlamı atandı."
@@ -426,7 +433,7 @@ msgstr "pam_set_item() çalıştırılamadı\n"
msgid "login: failure forking: %m"
msgstr "giriş: çatallama yapılamadı: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Erişim izni verildi (son erişim %ld saniye önce)."
@@ -461,35 +468,38 @@ msgstr[1] "Uyarı: parolanızın süresi %d gün içinde dolacak."
msgid "Warning: your password will expire in %d days."
msgstr "Uyarı: parolanızın süresi %d gün içinde dolacak."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS parolası değiştirilemedi."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Parola belirtilmedi."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Parola değiştirilmedi."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Daha kısa bir şifre seçmelisiniz."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Daha uzun bir parola seçmelisiniz."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "%s kullanıcısının parolası değiştiriliyor."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Parolanızı değiştirmek için daha uzun süre beklemelisiniz."
+#~ msgid "You have no mail."
+#~ msgstr "E-postanız yok."
+
#~ msgid "is the same as the old one"
#~ msgstr "eskisi ile aynı"
@@ -556,9 +566,6 @@ msgstr "Parolanızı değiştirmek için daha uzun süre beklemelisiniz."
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Tüm kullanıcılara sıfır olmayan bir değer atanamadı\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Giriş Hatalar Son hata Kim\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index 9c69aa08..c47b6301 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 0dd79230..b5dd5628 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -4,15 +4,15 @@
#
# Translators:
# Ivan Petrouchtchak <ivanpetrouchtchak@yahoo.com>, 2006
-# Yuri Chornoivan <yurchor@ukr.net>, 2010,2012, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2010,2012, 2020, 2021, 2022.
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# Yuri Chornoivan <yurchor@ukr.net>, 2016. #zanata, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2016. #zanata, 2020, 2021, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-07-22 00:28+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-11-13 09:19+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/linux-"
"pam/master/uk/>\n"
@@ -22,50 +22,50 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Пароль: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "Поточний пароль %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "Поточний пароль: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Новий пароль %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Новий пароль: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Повторіть новий пароль %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Повторіть новий пароль: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Вибачте, паролі не збігаються."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Повторне введення %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Зміну пароля перервано."
@@ -205,49 +205,55 @@ msgstr "Програмі потрібно знов викликати libpam"
msgid "Unknown PAM error"
msgstr "Невідома помилка PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Час закінчується...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Вибачте, ваш час закінчився!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "помилкова розмова (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "Помилка %s: коди виходу %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "Помилка %s: отримано сигнал %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "Помилка %s: невідомий стан 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"Користування: %s [--dir /шлях/до/каталогу/tally] [--user ім'я користувача] "
-"[--reset]\n"
+"[--reset] [--legacy-output]\n"
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Користувач Помилок Остання помилка З\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Обліковий запис заблоковано через %u помилок під час спроби входу."
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -256,45 +262,45 @@ msgstr[1] "(лишилося %d хвилини до розблокування)"
msgstr[2] "(лишилося %d хвилин до розблокування)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(лишилося %d хвилин до розблокування)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " з %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " на %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Останній вхід: %s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Ласкаво просимо до вашого нового запису!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Останній невдалий вхід: %s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -310,21 +316,21 @@ msgstr[2] ""
"завершилися помилками."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Після останнього успішного входу було виконано %d спроби входу, які "
"завершилися помилками."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "Забагато входів в для «%s»."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "Нових повідомлень немає."
+msgid "You do not have any new mail."
+msgstr "У вас немає нової пошти."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -368,12 +374,12 @@ msgstr "Створення каталогу «%s»."
msgid "Unable to create and initialize directory '%s'."
msgstr "Не вдалося створити і ініціалізувати каталог «%s»."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Цей пароль вже використано. Виберіть інший."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Пароль вже використовувався."
@@ -403,17 +409,17 @@ msgstr "рівень:"
msgid "This is not a valid security context."
msgstr "Цей контекст безпеки є некоректним."
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "Не вдалося отримати коректний контекст для %s."
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Призначено контекст безпеки %s."
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Призначено контекст створення ключів %s."
@@ -433,7 +439,7 @@ msgstr "помилка pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "вхід: помилка розгалуження: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Надано доступ (остання спроба доступу сталася %ld секунд тому)."
@@ -470,35 +476,38 @@ msgstr[2] "Попередження: строк дії вашого пароля
msgid "Warning: your password will expire in %d days."
msgstr "Попередження: строк дії вашого пароля буде вичерпано за %d днів."
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Не вдалося змінити пароль NIS."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "Не було надано жодного пароля."
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "Пароль не було змінено."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Необхідно вибрати коротший пароль."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "Вам слід вибрати довший пароль."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Зміна пароля %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "Ви слід ще трохи зачекати, щоб змінити ваш пароль."
+#~ msgid "You have no mail."
+#~ msgstr "Нових повідомлень немає."
+
#~ msgid "is the same as the old one"
#~ msgstr "такий самий, як і старий"
@@ -566,9 +575,6 @@ msgstr "Ви слід ще трохи зачекати, щоб змінити в
#~ msgstr ""
#~ "%s: не вдається відновити ненульове значення для всіх користувачів\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Користувач Помилок Остання помилка З\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/ur.po b/po/ur.po
index 2cb1caa4..de669f87 100644
--- a/po/ur.po
+++ b/po/ur.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2011-11-30 06:56-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Urdu <trans-urdu@lists.fedoraproject.org>\n"
@@ -19,48 +19,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -200,47 +200,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -248,45 +254,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -295,18 +301,18 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -351,12 +357,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -386,17 +392,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -416,7 +422,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -449,34 +455,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "آپ کو ایک چھوٹا پاس ورڈ منتخب کرنا ہوگا."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "آپ کو ایک چھوٹا پاس ورڈ منتخب کرنا ہوگا."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "آپ کو ایک چھوٹا پاس ورڈ منتخب کرنا ہوگا."
diff --git a/po/vi.po b/po/vi.po
index db2839f8..ade38100 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2012-11-30 06:03-0500\n"
"Last-Translator: mattheu_9x <mattheu.9x@gmail.com>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/fedora/"
@@ -21,49 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Mật khẩu : "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "Mật khẩu %s mới: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "Mật khẩu mới: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "Mật khẩu %s mới: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "Mật khẩu mới: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Nhập lại mật khẩu %s mới: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Nhập lại mật khẩu mới: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Xin lỗi, mật khẩu không khớp."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "Nhập lại %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Hủy bỏ việc thay đổi mật khẩu."
@@ -204,94 +204,100 @@ msgstr "Ứng dụng cần gọi libpam lần nữa"
msgid "Unknown PAM error"
msgstr "Không biết lỗi PAM"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Thời gian đang dần hết...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Xin lỗi, đã hết thời gian!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "hội thoại sai (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s thất bại: lối ra mã %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s thất bại: bắt tín hiệu %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s thất bại: không rõ tình trạng 0x%x"
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [- tập bắt rễ-filename] [- người sử dụng tên người dùng] [- đặt lại [= "
"n]] [- yên tĩnh]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Đang nhập Thất bại Thất bại cuốie Từ \n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, fuzzy, c-format
msgid "The account is locked due to %u failed logins."
msgstr "Tài khoản bị khóa do đăng nhập %u không thành công"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " từ %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " trên %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Lần đăng nhập:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Chào mừng bạn đến tài khoản mới của bạn!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "Lần đăng nhập thất bại trước:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -300,20 +306,20 @@ msgstr[0] ""
"Đã có %d lần đăng nhập thất bại kể từ lần đăng nhập thành công trước đó."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
"Có %d lần đăng nhập không thành công kể từ lần đăng nhập thành công trước."
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "Quá nhiều lần đăng nhập cho '%s'."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Bạn có thư mới."
#: modules/pam_mail/pam_mail.c:292
@@ -358,12 +364,12 @@ msgstr "Tạo thư mục '%s'."
msgid "Unable to create and initialize directory '%s'."
msgstr "Không thể khởi tạo thư mục '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Mật khẩu đã được dùng. Hãy chọn mật khẩu khác."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "Mật khẩu đã được dùng. Hãy chọn mật khẩu khác."
@@ -395,17 +401,17 @@ msgstr "trình độ:"
msgid "This is not a valid security context."
msgstr "Không phải là một bối cảnh an ninh hợp lệ"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "Bối cảnh an ninh %s Giao"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "Sáng tạo Context phím %s Giao"
@@ -425,7 +431,7 @@ msgstr "không pam_set_item ()\n"
msgid "login: failure forking: %m"
msgstr "đăng nhập: thất bại forking: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Được phép truy cập (lần truy cập trước %ld giây trước)"
@@ -461,39 +467,43 @@ msgstr[0] "Cảnh báo: mật khẩu của bạn sẽ hết hạn trong %d ngày
msgid "Warning: your password will expire in %d days."
msgstr "Cảnh báo: mật khẩu của bạn sẽ hết hạn trong %d ngày"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "NIS mật khẩu không thể được thay đổi."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Không có mật khẩu được cung cấp"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "NIS mật khẩu không thể được thay đổi."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Bạn phải chọn một mật khẩu ngắn hơn."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Bạn phải chọn mật khẩu dài hơn"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "Thay đổi mật khẩu cho %s."
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Bạn phải đợi thêm nữa, để thay đổi mật khẩu"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "Bạn có thư mới."
+
#~ msgid "is the same as the old one"
#~ msgstr "là giống như cũ"
@@ -562,9 +572,6 @@ msgstr "Bạn phải đợi thêm nữa, để thay đổi mật khẩu"
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: Không thể thiết lập lại tất cả các người dùng khác không\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Đang nhập Thất bại Thất bại cuốie Từ \n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/yo.po b/po/yo.po
index 52e753ee..158675b8 100644
--- a/po/yo.po
+++ b/po/yo.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM 1.2.1\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Yoruba\n"
@@ -18,48 +18,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr ""
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -199,47 +199,53 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -247,45 +253,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -293,18 +299,18 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -349,12 +355,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -384,17 +390,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -414,7 +420,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -447,34 +453,34 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "O gbọdọ yan ọrọigbaniwọle kukuru."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "O gbọdọ yan ọrọigbaniwọle kukuru."
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "O gbọdọ yan ọrọigbaniwọle kukuru."
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 8b45db8b..9cab7d7d 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 4f8e0405..3563f908 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -11,13 +11,15 @@
# Dmitry V. Levin <ldv@altlinux.org>, 2020.
# Charles Lee <lchopn@gmail.com>, 2020.
# Chenbo Pan <panchenbo@uniontech.com>, 2021.
+# pan chenbo <panchenbo@uniontech.com>, 2021.
+# Dingzhong Chen <wsxy162@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2021-08-02 02:19+0000\n"
-"Last-Translator: Chenbo Pan <panchenbo@uniontech.com>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2022-05-03 08:43+0000\n"
+"Last-Translator: Dingzhong Chen <wsxy162@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/"
"projects/linux-pam/master/zh_CN/>\n"
"Language: zh_CN\n"
@@ -25,50 +27,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.1.1\n"
+"X-Generator: Weblate 4.12.1\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "密码: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "当前的 %s 密码: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "当前的密码: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "新的 %s 密码: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "新的密码: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "重新输入新的 %s 密码: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "重新输入新的密码: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "抱歉,密码不匹配。"
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "重新输入 %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "密码更改已取消。"
@@ -82,7 +84,7 @@ msgstr "成功"
#: libpam/pam_strerror.c:42
msgid "Critical error - immediate abort"
-msgstr "严重错误 - 立即中止"
+msgstr "严重错误——立即中止"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
@@ -106,31 +108,31 @@ msgstr "内存缓冲区错误"
#: libpam/pam_strerror.c:54
msgid "Permission denied"
-msgstr "拒绝权限"
+msgstr "权限被拒绝"
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
-msgstr "鉴定故障"
+msgstr "身份验证失败"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
-msgstr "没有足够的身份凭证以访问鉴定数据"
+msgstr "没有足够的凭据可以访问身份验证数据"
#: libpam/pam_strerror.c:60
msgid "Authentication service cannot retrieve authentication info"
-msgstr "鉴定服务无法检索到鉴定信息"
+msgstr "身份验证服务无法检索神身份验证信息"
#: libpam/pam_strerror.c:62
msgid "User not known to the underlying authentication module"
-msgstr "底层的鉴定模块无法识别用户"
+msgstr "底层的身份验证模块无法识别用户"
#: libpam/pam_strerror.c:64
msgid "Have exhausted maximum number of retries for service"
-msgstr "已经超出服务重试的最多次数"
+msgstr "已经超出服务的最多重试次数"
#: libpam/pam_strerror.c:66
msgid "Authentication token is no longer valid; new one required"
-msgstr "鉴定令牌不再有效;需要新的鉴定令牌"
+msgstr "身份验证令牌不再有效;需要新的令牌"
#: libpam/pam_strerror.c:68
msgid "User account has expired"
@@ -138,19 +140,19 @@ msgstr "用户帐户已失效"
#: libpam/pam_strerror.c:70
msgid "Cannot make/remove an entry for the specified session"
-msgstr "无法为指定的会话创建/移除项"
+msgstr "无法为指定的会话创建/移除条目"
#: libpam/pam_strerror.c:72
msgid "Authentication service cannot retrieve user credentials"
-msgstr "鉴定服务无法检索到用户身份凭证"
+msgstr "身份验证服务无法检索到用户凭据"
#: libpam/pam_strerror.c:74
msgid "User credentials expired"
-msgstr "用户身份凭证失效"
+msgstr "用户凭据已失效"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
-msgstr "设置用户身份凭证时出现故障"
+msgstr "设置用户凭据失败"
#: libpam/pam_strerror.c:78
msgid "No module specific data is present"
@@ -166,27 +168,27 @@ msgstr "转换错误"
#: libpam/pam_strerror.c:84
msgid "Authentication token manipulation error"
-msgstr "鉴定令牌操作错误"
+msgstr "身份验证令牌操作错误"
#: libpam/pam_strerror.c:86
msgid "Authentication information cannot be recovered"
-msgstr "无法恢复鉴定信息"
+msgstr "无法恢复身份验证信息"
#: libpam/pam_strerror.c:88
msgid "Authentication token lock busy"
-msgstr "鉴定令牌锁忙碌"
+msgstr "身份验证令牌正被锁定"
#: libpam/pam_strerror.c:90
msgid "Authentication token aging disabled"
-msgstr "已禁用鉴定令牌过期处理"
+msgstr "已禁用身份验证令牌期限"
#: libpam/pam_strerror.c:92
msgid "Failed preliminary check by password service"
-msgstr "密码服务初步检查失败"
+msgstr "由密码服务初步检查失败"
#: libpam/pam_strerror.c:94
msgid "The return value should be ignored by PAM dispatch"
-msgstr "返回值应该被 PAM dispatch 忽略"
+msgstr "返回值应被 PAM 调度忽略"
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
@@ -194,7 +196,7 @@ msgstr "模块未知"
#: libpam/pam_strerror.c:98
msgid "Authentication token expired"
-msgstr "鉴定令牌失效"
+msgstr "身份验证令牌失效"
#: libpam/pam_strerror.c:100
msgid "Conversation is waiting for event"
@@ -208,113 +210,119 @@ msgstr "应用程序需要再次调用 libpam"
msgid "Unknown PAM error"
msgstr "未知的 PAM 错误"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...时间即将耗尽...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...对不起,您的时间已经耗尽!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "有错误的转换 (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s 失败:退出代码 %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
-msgstr "%s 失败:捕获的信号 %d%s"
+msgstr "%s 失败:捕获信号 %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
-msgstr "%s 失败:未知的状态 0x%x"
+msgstr "%s 失败:未知状态 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
-msgstr ""
-"用法:%s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+msgstr "用法:%s [--dir /tally/目录的/路径] [--user 用户名] [--reset]\n"
+
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Failures Latest failure From\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "由于 %u 次登录失败,此帐户已锁定。"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
-#, fuzzy, c-format
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
+#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] "(%d 分钟后解锁)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d 分钟后解锁)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
-msgstr " %a %b %e %H:%M:%S %Z %Y"
+msgstr " %x %A %H:%M:%S %Z"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " 从 %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
-msgstr " %.*s 上"
+msgstr " 于 %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "上一次登录:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "欢迎使用新帐户!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "最后一次失败的登录:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
"There were %d failed login attempts since the last successful login."
-msgstr[0] "自上次成功登录以来,有%d 次失败的登录尝试。"
+msgstr[0] "自上次成功登录以来,有 %d 次失败的登录尝试。"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
-msgstr "自上次成功登录以来,有%d 次失败的登录尝试。"
+msgstr "自上次成功登录以来,有 %d 次失败的登录尝试。"
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
-msgstr "'%s' 的登录次数过多。"
+msgstr "“%s”的登录次数过多。"
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "您没有新邮件。"
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "您有新邮件。"
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -351,19 +359,19 @@ msgstr "您在文件夹 %s 中有邮件。"
#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr "创建目录 '%s'。"
+msgstr "正在创建目录“%s”。"
#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
-msgstr "无法创建和初始化目录 '%s'。"
+msgstr "无法创建和初始化目录“%s”。"
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "密码已使用。请选择其他密码。"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "密码已被使用。"
@@ -393,17 +401,17 @@ msgstr "级别:"
msgid "This is not a valid security context."
msgstr "这不是一个有效的安全上下文。"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
-msgstr "无法取得 %s 的有效上下文。"
+msgstr "无法取得对 %s 有效的上下文。"
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
-msgstr "安全上下文 %s 已指派。"
+msgstr "安全上下文 %s 已分配。"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "密钥生成上下文 %s 已分配。"
@@ -421,9 +429,9 @@ msgstr "未能 pam_set_item()\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr "登录:故障派生:%m"
+msgstr "登录:派生失败:%m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "访问已被准许(上次访问是 %ld 秒之前)。"
@@ -455,35 +463,38 @@ msgstr[0] "警告:您的密码将在 %d 天后过期。"
msgid "Warning: your password will expire in %d days."
msgstr "警告:您的密码将在 %d 天后过期。"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "无法更改 NIS 密码。"
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "未提供密码。"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "密码未被更改。"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "您必须选择较短的密码。"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
-msgstr "您必须选择一个更长的密码。"
+msgstr "您必须选择更长的密码。"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
-msgstr "为 %s 更改 STRESS 密码。"
+msgstr "更改 %s 的密码。"
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "您必须等待更长时间以更改密码。"
+#~ msgid "You have no mail."
+#~ msgstr "您没有邮件。"
+
#~ msgid "is the same as the old one"
#~ msgstr "与旧密码相同"
@@ -548,9 +559,6 @@ msgstr "您必须等待更长时间以更改密码。"
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: 无法将所有用户重设置为非零\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Failures Latest failure From\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo
index c90b23a6..a15fdf07 100644
--- a/po/zh_HK.gmo
+++ b/po/zh_HK.gmo
Binary files differ
diff --git a/po/zh_HK.po b/po/zh_HK.po
index 2a378108..212e024f 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -4,63 +4,65 @@
#
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# chong gao <zhuzaifangxuele@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
-"PO-Revision-Date: 2011-11-30 06:56-0500\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Chinese (Hong Kong) <chinese@lists.fedoraproject.org>\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
+"PO-Revision-Date: 2021-09-09 03:04+0000\n"
+"Last-Translator: chong gao <zhuzaifangxuele@gmail.com>\n"
+"Language-Team: Chinese (Hong Kong) <https://translate.fedoraproject.org/"
+"projects/linux-pam/master/zh_HK/>\n"
"Language: zh_HK\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Zanata 3.8.3\n"
+"X-Generator: Weblate 4.8\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr ""
+msgstr "密碼: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr ""
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr ""
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr ""
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr ""
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr ""
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr ""
@@ -200,92 +202,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr ""
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr ""
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+msgstr ""
+
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr ""
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr ""
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr ""
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr ""
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -293,18 +301,18 @@ msgid_plural ""
msgstr[0] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr ""
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr ""
#: modules/pam_mail/pam_mail.c:292
@@ -349,12 +357,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -384,17 +392,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -414,7 +422,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -446,34 +454,34 @@ msgstr[0] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
#, fuzzy
msgid "You must choose a shorter password."
msgstr "您必須選擇較短的密碼。"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "您必須選擇較短的密碼。"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "您必須選擇較短的密碼。"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index 40d376af..58fd3558 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index bff84bfd..f3abf98b 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-05-24 12:40+0000\n"
"Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://translate.fedoraproject.org/"
@@ -23,48 +23,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.0.4\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "密碼: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
msgstr "目前的 %s 密碼: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
msgstr "目前密碼: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "新 %s 密碼: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "新 密碼: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "再次輸入新的 %s 密碼: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "再次輸入新的 密碼: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "抱歉,密碼不符合。"
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr "重新輸入 %s"
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "已中止密碼變更作業。"
@@ -204,93 +204,99 @@ msgstr "應用程式需要再次呼叫 libpam"
msgid "Unknown PAM error"
msgstr "未知的 PAM 錯誤"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...時間已經超過...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...抱歉,您的時間已到!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "錯誤的交談 (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s 失敗:退出編碼 %d"
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr "%s 失敗:捕捉到信號 %d%s"
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr "%s 失敗:不明狀態 0x%x"
-#: modules/pam_faillock/main.c:103
-#, c-format
+#: modules/pam_faillock/main.c:130
+#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"用法:%s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, fuzzy, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "Login Failures Latest failure From\n"
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr "因為 %u 次登入皆失敗,帳號已鎖定。"
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, fuzzy, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
msgstr[0] "(%d 分鐘後解鎖)"
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr "(%d 分鐘後解鎖)"
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " 從 %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " 在 %.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "上一次登入:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "歡迎使用您的新帳號!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr "上一次失敗的登入:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -298,19 +304,20 @@ msgid_plural ""
msgstr[0] "自上次成功登入後,有 %d 次試圖登入但失敗的紀錄。"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr "自從上次成功登入後有 %d 次嘗試登入失敗。"
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
msgstr "登入 '%s' 太多次。"
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr "您沒有新郵件。"
+#, fuzzy
+msgid "You do not have any new mail."
+msgstr "您有新的郵件。"
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -354,12 +361,12 @@ msgstr "建立目錄「%s」。"
msgid "Unable to create and initialize directory '%s'."
msgstr "無法建立和初始化「%s」目錄。"
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "密碼已經由其他使用者使用。請選擇其他密碼。"
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "密碼已被使用過。"
@@ -389,17 +396,17 @@ msgstr "層級:"
msgid "This is not a valid security context."
msgstr "此非有效的安全性情境。"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr "無法取得 %s 的有效情境。"
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "已指定 %s 安全情境。"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "已指定 %s 金鑰建立情境。"
@@ -419,7 +426,7 @@ msgstr "pam_set_item() 失敗\n"
msgid "login: failure forking: %m"
msgstr "登入:失敗的分叉:%m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "已賦予存取權限(最後一次存取為 %ld 秒前)。"
@@ -451,35 +458,38 @@ msgstr[0] "警告:您的密碼將在 %d 天後過期。"
msgid "Warning: your password will expire in %d days."
msgstr "警告:您的密碼將在 %d 天後過期。"
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "無法變更 NIS 密碼。"
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
msgid "No password has been supplied."
msgstr "未提供密碼。"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
msgid "The password has not been changed."
msgstr "未變更密碼。"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "您必須選擇較短的密碼。"
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
msgstr "您的密碼必須更長。"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr "正在更改 %s 的 STRESS 密碼。"
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
msgstr "請您稍等一陣子後再變更密碼。"
+#~ msgid "You have no mail."
+#~ msgstr "您沒有新郵件。"
+
#~ msgid "is the same as the old one"
#~ msgstr "與舊的密碼相同"
@@ -545,9 +555,6 @@ msgstr "請您稍等一陣子後再變更密碼。"
#~ msgid "%s: Can't reset all users to non-zero\n"
#~ msgstr "%s: 無法將所有使用者重新設定為非零\n"
-#~ msgid "Login Failures Latest failure From\n"
-#~ msgstr "Login Failures Latest failure From\n"
-
#~ msgid ""
#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
#~ " [-u username] [--user username]\n"
diff --git a/po/zu.po b/po/zu.po
index 023f065a..797c3fed 100644
--- a/po/zu.po
+++ b/po/zu.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Linux-PAM\n"
"Report-Msgid-Bugs-To: https://github.com/linux-pam/linux-pam/issues\n"
-"POT-Creation-Date: 2021-07-20 20:00+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: 2020-03-06 23:59+0000\n"
"Last-Translator: Dmitry V. Levin <ldv@altlinux.org>\n"
"Language-Team: Zulu <https://translate.fedoraproject.org/projects/linux-pam/"
@@ -21,49 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 3.11.2\n"
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:181
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
msgstr "Iphasiwedi: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, fuzzy, c-format
msgid "Current %s password: "
msgstr "%s iphasiwedi entsha: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
#, fuzzy
msgid "Current password: "
msgstr "iphasiwedi entsha: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
msgstr "%s iphasiwedi entsha: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
msgstr "iphasiwedi entsha: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
msgstr "Thayipha kabusha %s iphasiwedi entsha: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
msgstr "Thayipha kabusha iphasiwedi entsha: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
msgstr "Uxolo, amaphasiwedi awahambelani."
-#: libpam/pam_get_authtok.c:142 libpam/pam_get_authtok.c:240
+#: libpam/pam_get_authtok.c:143 libpam/pam_get_authtok.c:245
#, c-format
msgid "Retype %s"
msgstr ""
-#: libpam/pam_get_authtok.c:178 libpam/pam_get_authtok.c:258
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
#, fuzzy
msgid "Password change has been aborted."
msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye."
@@ -204,48 +204,54 @@ msgstr "Uhlelo ludinga ukubiza i-libpam futhi"
msgid "Unknown PAM error"
msgstr "Iphutha le-PAM elingaziwa"
-#: libpam_misc/misc_conv.c:33
+#: libpam_misc/misc_conv.c:34
msgid "...Time is running out...\n"
msgstr "...Isikhathi siyaphela...\n"
-#: libpam_misc/misc_conv.c:34
+#: libpam_misc/misc_conv.c:35
msgid "...Sorry, your time is up!\n"
msgstr "...Uxolo, isikhathi sakho sesiphelile!\n"
-#: libpam_misc/misc_conv.c:348
+#: libpam_misc/misc_conv.c:349
#, c-format
msgid "erroneous conversation (%d)\n"
msgstr "ingxoxo enephutha (%d)\n"
-#: modules/pam_exec/pam_exec.c:279
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:289
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:299
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:103
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
msgstr ""
"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-#: modules/pam_faillock/pam_faillock.c:618
+#: modules/pam_faillock/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr ""
+
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:627
-#: modules/pam_faillock/pam_faillock.c:633
+#: modules/pam_faillock/pam_faillock.c:413
+#: modules/pam_faillock/pam_faillock.c:419
#, c-format
msgid "(%d minute left to unlock)"
msgid_plural "(%d minutes left to unlock)"
@@ -253,45 +259,45 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported.
-#: modules/pam_faillock/pam_faillock.c:636
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
msgstr ""
#. TRANSLATORS: "strftime options for date of last login"
-#: modules/pam_lastlog/pam_lastlog.c:318 modules/pam_lastlog/pam_lastlog.c:579
+#: modules/pam_lastlog/pam_lastlog.c:326 modules/pam_lastlog/pam_lastlog.c:595
msgid " %a %b %e %H:%M:%S %Z %Y"
msgstr " %a %b %e %H:%M:%S %Z %Y"
#. TRANSLATORS: " from <host>"
-#: modules/pam_lastlog/pam_lastlog.c:327 modules/pam_lastlog/pam_lastlog.c:588
+#: modules/pam_lastlog/pam_lastlog.c:335 modules/pam_lastlog/pam_lastlog.c:604
#, c-format
msgid " from %.*s"
msgstr " kusukela %.*s"
#. TRANSLATORS: " on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:339 modules/pam_lastlog/pam_lastlog.c:600
+#: modules/pam_lastlog/pam_lastlog.c:347 modules/pam_lastlog/pam_lastlog.c:616
#, c-format
msgid " on %.*s"
msgstr " ku-%.*s"
#. TRANSLATORS: "Last login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:349
+#: modules/pam_lastlog/pam_lastlog.c:357
#, c-format
msgid "Last login:%s%s%s"
msgstr "Ukungena kokugcina:%s%s%s"
-#: modules/pam_lastlog/pam_lastlog.c:355
+#: modules/pam_lastlog/pam_lastlog.c:363
msgid "Welcome to your new account!"
msgstr "Uyamukelwa kwi-akhawunti yakho entsha!"
#. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
-#: modules/pam_lastlog/pam_lastlog.c:610
+#: modules/pam_lastlog/pam_lastlog.c:626
#, c-format
msgid "Last failed login:%s%s%s"
msgstr ""
-#: modules/pam_lastlog/pam_lastlog.c:619 modules/pam_lastlog/pam_lastlog.c:626
+#: modules/pam_lastlog/pam_lastlog.c:635 modules/pam_lastlog/pam_lastlog.c:642
#, c-format
msgid "There was %d failed login attempt since the last successful login."
msgid_plural ""
@@ -300,19 +306,19 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_lastlog/pam_lastlog.c:631
+#: modules/pam_lastlog/pam_lastlog.c:647
#, c-format
msgid "There were %d failed login attempts since the last successful login."
msgstr ""
-#: modules/pam_limits/pam_limits.c:1164
+#: modules/pam_limits/pam_limits.c:1269
#, fuzzy, c-format
msgid "There were too many logins for '%s'."
msgstr "Kuningi kakhulu ukungena kwi- '%s' osekwenziwe."
#: modules/pam_mail/pam_mail.c:289
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Unemeyili entsha."
#: modules/pam_mail/pam_mail.c:292
@@ -357,12 +363,12 @@ msgstr ""
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:371
-#: modules/pam_unix/pam_unix_passwd.c:589
+#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_unix/pam_unix_passwd.c:580
msgid "Password has been already used. Choose another."
msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye."
-#: modules/pam_pwhistory/pam_pwhistory.c:378
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye."
@@ -394,17 +400,17 @@ msgstr ""
msgid "This is not a valid security context."
msgstr "Akuyona indawo yokuphepha esemthethweni"
-#: modules/pam_selinux/pam_selinux.c:509
+#: modules/pam_selinux/pam_selinux.c:508
#, c-format
msgid "A valid context for %s could not be obtained."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:640
+#: modules/pam_selinux/pam_selinux.c:639
#, fuzzy, c-format
msgid "Security context %s has been assigned."
msgstr "Indawo %s Yokuphepha Yabelwe"
-#: modules/pam_selinux/pam_selinux.c:656
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "Indawo %s Yokuphepha Yabelwe"
@@ -424,7 +430,7 @@ msgstr "Ihlulekile ukwenza i-pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "ngena: Ihlulekile ukuhlukanisa: %m"
-#: modules/pam_timestamp/pam_timestamp.c:361
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -465,39 +471,43 @@ msgstr[1] ""
msgid "Warning: your password will expire in %d days."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:465
+#: modules/pam_unix/pam_unix_passwd.c:456
msgid "NIS password could not be changed."
msgstr "Iphasiwedi ye-NIS ayivumanga ukushintshwa."
-#: modules/pam_unix/pam_unix_passwd.c:563
+#: modules/pam_unix/pam_unix_passwd.c:554
#, fuzzy
msgid "No password has been supplied."
msgstr "Ayikho iphasiwedi enikeziwe"
-#: modules/pam_unix/pam_unix_passwd.c:564
+#: modules/pam_unix/pam_unix_passwd.c:555
#, fuzzy
msgid "The password has not been changed."
msgstr "Iphasiwedi ye-NIS ayivumanga ukushintshwa."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Kumele ukhethe iphasiwedi emifushane."
-#: modules/pam_unix/pam_unix_passwd.c:585
+#: modules/pam_unix/pam_unix_passwd.c:576
#, fuzzy
msgid "You must choose a longer password."
msgstr "Kumelwe ukhethe iphasiwedi ethe ukuba yinjana"
-#: modules/pam_unix/pam_unix_passwd.c:692
+#: modules/pam_unix/pam_unix_passwd.c:683
#, c-format
msgid "Changing password for %s."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:722
+#: modules/pam_unix/pam_unix_passwd.c:713
#, fuzzy
msgid "You must wait longer to change your password."
msgstr "Kumelwe ulinde isikhashana ukuze ushintshe iphasiwedi yakho"
+#, fuzzy
+#~ msgid "You have no mail."
+#~ msgstr "Unemeyili entsha."
+
#~ msgid "is the same as the old one"
#~ msgstr "iyafana nendala"
diff --git a/tests/Makefile.in b/tests/Makefile.in
index e143b4bb..bc0f56fe 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -522,6 +522,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -534,11 +535,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -570,12 +573,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -598,6 +603,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -608,12 +614,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
diff --git a/xtests/Makefile.am b/xtests/Makefile.am
index 70f8441e..acf97469 100644
--- a/xtests/Makefile.am
+++ b/xtests/Makefile.am
@@ -25,6 +25,7 @@ EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \
tst-pam_succeed_if1.pamd tst-pam_succeed_if1.sh \
group.conf tst-pam_group1.pamd tst-pam_group1.sh \
tst-pam_authfail.pamd tst-pam_authsucceed.pamd \
+ tst-pam_shells.pamd shells.conf tst-pam_shells.sh \
tst-pam_substack1.pamd tst-pam_substack1a.pamd tst-pam_substack1.sh \
tst-pam_substack2.pamd tst-pam_substack2a.pamd tst-pam_substack2.sh \
tst-pam_substack3.pamd tst-pam_substack3a.pamd tst-pam_substack3.sh \
@@ -43,7 +44,8 @@ XTESTS = tst-pam_dispatch1 tst-pam_dispatch2 tst-pam_dispatch3 \
tst-pam_access1 tst-pam_access2 tst-pam_access3 \
tst-pam_access4 tst-pam_limits1 tst-pam_succeed_if1 \
tst-pam_group1 tst-pam_authfail tst-pam_authsucceed \
- tst-pam_pwhistory1 tst-pam_time1 tst-pam_motd
+ tst-pam_pwhistory1 tst-pam_time1 tst-pam_motd \
+ tst-pam_shells
NOSRCTESTS = tst-pam_substack1 tst-pam_substack2 tst-pam_substack3 \
tst-pam_substack4 tst-pam_substack5 tst-pam_assemble_line1
diff --git a/xtests/Makefile.in b/xtests/Makefile.in
index 4f69baee..e82d05a9 100644
--- a/xtests/Makefile.in
+++ b/xtests/Makefile.in
@@ -126,7 +126,7 @@ am__EXEEXT_1 = tst-pam_dispatch1$(EXEEXT) tst-pam_dispatch2$(EXEEXT) \
tst-pam_succeed_if1$(EXEEXT) tst-pam_group1$(EXEEXT) \
tst-pam_authfail$(EXEEXT) tst-pam_authsucceed$(EXEEXT) \
tst-pam_pwhistory1$(EXEEXT) tst-pam_time1$(EXEEXT) \
- tst-pam_motd$(EXEEXT)
+ tst-pam_motd$(EXEEXT) tst-pam_shells$(EXEEXT)
tst_pam_access1_SOURCES = tst-pam_access1.c
tst_pam_access1_OBJECTS = tst-pam_access1.$(OBJEXT)
tst_pam_access1_LDADD = $(LDADD)
@@ -206,6 +206,11 @@ tst_pam_pwhistory1_OBJECTS = tst-pam_pwhistory1.$(OBJEXT)
tst_pam_pwhistory1_LDADD = $(LDADD)
tst_pam_pwhistory1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
$(top_builddir)/libpam_misc/libpam_misc.la
+tst_pam_shells_SOURCES = tst-pam_shells.c
+tst_pam_shells_OBJECTS = tst-pam_shells.$(OBJEXT)
+tst_pam_shells_LDADD = $(LDADD)
+tst_pam_shells_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
+ $(top_builddir)/libpam_misc/libpam_misc.la
tst_pam_succeed_if1_SOURCES = tst-pam_succeed_if1.c
tst_pam_succeed_if1_OBJECTS = tst-pam_succeed_if1.$(OBJEXT)
tst_pam_succeed_if1_LDADD = $(LDADD)
@@ -262,6 +267,7 @@ am__depfiles_remade = ./$(DEPDIR)/tst-pam_access1.Po \
./$(DEPDIR)/tst-pam_dispatch5.Po ./$(DEPDIR)/tst-pam_group1.Po \
./$(DEPDIR)/tst-pam_limits1.Po ./$(DEPDIR)/tst-pam_motd.Po \
./$(DEPDIR)/tst-pam_pwhistory1.Po \
+ ./$(DEPDIR)/tst-pam_shells.Po \
./$(DEPDIR)/tst-pam_succeed_if1.Po \
./$(DEPDIR)/tst-pam_time1.Po ./$(DEPDIR)/tst-pam_unix1.Po \
./$(DEPDIR)/tst-pam_unix2.Po ./$(DEPDIR)/tst-pam_unix3.Po \
@@ -290,15 +296,17 @@ SOURCES = tst-pam_access1.c tst-pam_access2.c tst-pam_access3.c \
tst-pam_dispatch1.c tst-pam_dispatch2.c tst-pam_dispatch3.c \
tst-pam_dispatch4.c tst-pam_dispatch5.c tst-pam_group1.c \
tst-pam_limits1.c tst-pam_motd.c tst-pam_pwhistory1.c \
- tst-pam_succeed_if1.c tst-pam_time1.c tst-pam_unix1.c \
- tst-pam_unix2.c tst-pam_unix3.c tst-pam_unix4.c
+ tst-pam_shells.c tst-pam_succeed_if1.c tst-pam_time1.c \
+ tst-pam_unix1.c tst-pam_unix2.c tst-pam_unix3.c \
+ tst-pam_unix4.c
DIST_SOURCES = tst-pam_access1.c tst-pam_access2.c tst-pam_access3.c \
tst-pam_access4.c tst-pam_authfail.c tst-pam_authsucceed.c \
tst-pam_dispatch1.c tst-pam_dispatch2.c tst-pam_dispatch3.c \
tst-pam_dispatch4.c tst-pam_dispatch5.c tst-pam_group1.c \
tst-pam_limits1.c tst-pam_motd.c tst-pam_pwhistory1.c \
- tst-pam_succeed_if1.c tst-pam_time1.c tst-pam_unix1.c \
- tst-pam_unix2.c tst-pam_unix3.c tst-pam_unix4.c
+ tst-pam_shells.c tst-pam_succeed_if1.c tst-pam_time1.c \
+ tst-pam_unix1.c tst-pam_unix2.c tst-pam_unix3.c \
+ tst-pam_unix4.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -351,6 +359,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -363,11 +372,13 @@ EXEEXT = @EXEEXT@
EXE_CFLAGS = @EXE_CFLAGS@
EXE_LDFLAGS = @EXE_LDFLAGS@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FO2PDF = @FO2PDF@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
+HTML_STYLESHEET = @HTML_STYLESHEET@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -399,12 +410,14 @@ LIBSELINUX = @LIBSELINUX@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
+LOGIND_CFLAGS = @LOGIND_CFLAGS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_STYLESHEET = @MAN_STYLESHEET@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -427,6 +440,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -437,12 +451,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-STRINGPARAM_HMAC = @STRINGPARAM_HMAC@
+STRINGPARAM_PROFILECONDITIONS = @STRINGPARAM_PROFILECONDITIONS@
STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
TIRPC_CFLAGS = @TIRPC_CFLAGS@
TIRPC_LIBS = @TIRPC_LIBS@
+TXT_STYLESHEET = @TXT_STYLESHEET@
USE_NLS = @USE_NLS@
+VENDOR_SCONFIGDIR = @VENDOR_SCONFIGDIR@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
@@ -531,6 +549,7 @@ EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \
tst-pam_succeed_if1.pamd tst-pam_succeed_if1.sh \
group.conf tst-pam_group1.pamd tst-pam_group1.sh \
tst-pam_authfail.pamd tst-pam_authsucceed.pamd \
+ tst-pam_shells.pamd shells.conf tst-pam_shells.sh \
tst-pam_substack1.pamd tst-pam_substack1a.pamd tst-pam_substack1.sh \
tst-pam_substack2.pamd tst-pam_substack2a.pamd tst-pam_substack2.sh \
tst-pam_substack3.pamd tst-pam_substack3a.pamd tst-pam_substack3.sh \
@@ -549,7 +568,8 @@ XTESTS = tst-pam_dispatch1 tst-pam_dispatch2 tst-pam_dispatch3 \
tst-pam_access1 tst-pam_access2 tst-pam_access3 \
tst-pam_access4 tst-pam_limits1 tst-pam_succeed_if1 \
tst-pam_group1 tst-pam_authfail tst-pam_authsucceed \
- tst-pam_pwhistory1 tst-pam_time1 tst-pam_motd
+ tst-pam_pwhistory1 tst-pam_time1 tst-pam_motd \
+ tst-pam_shells
NOSRCTESTS = tst-pam_substack1 tst-pam_substack2 tst-pam_substack3 \
tst-pam_substack4 tst-pam_substack5 tst-pam_assemble_line1
@@ -648,6 +668,10 @@ tst-pam_pwhistory1$(EXEEXT): $(tst_pam_pwhistory1_OBJECTS) $(tst_pam_pwhistory1_
@rm -f tst-pam_pwhistory1$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tst_pam_pwhistory1_OBJECTS) $(tst_pam_pwhistory1_LDADD) $(LIBS)
+tst-pam_shells$(EXEEXT): $(tst_pam_shells_OBJECTS) $(tst_pam_shells_DEPENDENCIES) $(EXTRA_tst_pam_shells_DEPENDENCIES)
+ @rm -f tst-pam_shells$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tst_pam_shells_OBJECTS) $(tst_pam_shells_LDADD) $(LIBS)
+
tst-pam_succeed_if1$(EXEEXT): $(tst_pam_succeed_if1_OBJECTS) $(tst_pam_succeed_if1_DEPENDENCIES) $(EXTRA_tst_pam_succeed_if1_DEPENDENCIES)
@rm -f tst-pam_succeed_if1$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tst_pam_succeed_if1_OBJECTS) $(tst_pam_succeed_if1_LDADD) $(LIBS)
@@ -693,6 +717,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_limits1.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_motd.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_pwhistory1.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_shells.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_succeed_if1.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_time1.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_unix1.Po@am__quote@ # am--include-marker
@@ -873,6 +898,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/tst-pam_limits1.Po
-rm -f ./$(DEPDIR)/tst-pam_motd.Po
-rm -f ./$(DEPDIR)/tst-pam_pwhistory1.Po
+ -rm -f ./$(DEPDIR)/tst-pam_shells.Po
-rm -f ./$(DEPDIR)/tst-pam_succeed_if1.Po
-rm -f ./$(DEPDIR)/tst-pam_time1.Po
-rm -f ./$(DEPDIR)/tst-pam_unix1.Po
@@ -939,6 +965,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/tst-pam_limits1.Po
-rm -f ./$(DEPDIR)/tst-pam_motd.Po
-rm -f ./$(DEPDIR)/tst-pam_pwhistory1.Po
+ -rm -f ./$(DEPDIR)/tst-pam_shells.Po
-rm -f ./$(DEPDIR)/tst-pam_succeed_if1.Po
-rm -f ./$(DEPDIR)/tst-pam_time1.Po
-rm -f ./$(DEPDIR)/tst-pam_unix1.Po
diff --git a/xtests/run-xtests.sh b/xtests/run-xtests.sh
index 14f585d9..e580e0ab 100755
--- a/xtests/run-xtests.sh
+++ b/xtests/run-xtests.sh
@@ -18,10 +18,16 @@ all=0
mkdir -p /etc/security
for config in access.conf group.conf time.conf limits.conf ; do
- cp /etc/security/$config /etc/security/$config-pam-xtests
+ [ -f "/etc/security/$config" ] &&
+ mv /etc/security/$config /etc/security/$config-pam-xtests
install -m 644 "${SRCDIR}"/$config /etc/security/$config
done
-mv /etc/security/opasswd /etc/security/opasswd-pam-xtests
+[ -f /etc/shells ] &&
+ mv /etc/shells /etc/shells-pam-xtests
+install -m 644 "${SRCDIR}"/shells.conf /etc/shells
+
+[ -f /etc/security/opasswd ] &&
+ mv /etc/security/opasswd /etc/security/opasswd-pam-xtests
for testname in $XTESTS ; do
for cfg in "${SRCDIR}"/$testname*.pamd ; do
@@ -47,11 +53,18 @@ for testname in $XTESTS ; do
all=`expr $all + 1`
rm -f /etc/pam.d/$testname*
done
-mv /etc/security/access.conf-pam-xtests /etc/security/access.conf
-mv /etc/security/group.conf-pam-xtests /etc/security/group.conf
-mv /etc/security/time.conf-pam-xtests /etc/security/time.conf
-mv /etc/security/limits.conf-pam-xtests /etc/security/limits.conf
-mv /etc/security/opasswd-pam-xtests /etc/security/opasswd
+
+for config in access.conf group.conf time.conf limits.conf opasswd ; do
+ if [ -f "/etc/security/$config-pam-xtests" ]; then
+ mv /etc/security/$config-pam-xtests /etc/security/$config
+ else
+ rm -f /etc/security/$config
+ fi
+done
+
+[ -f "/etc/shells-pam-xtests" ] &&
+ mv /etc/shells-pam-xtests /etc/shells
+
if test "$failed" -ne 0; then
echo "==================="
echo "$failed of $all tests failed"
diff --git a/xtests/shells.conf b/xtests/shells.conf
new file mode 100644
index 00000000..74776e68
--- /dev/null
+++ b/xtests/shells.conf
@@ -0,0 +1,3 @@
+/bin/ash
+/bin/testbash
+/bin/csh
diff --git a/xtests/tst-pam_shells.c b/xtests/tst-pam_shells.c
new file mode 100644
index 00000000..b6ba938e
--- /dev/null
+++ b/xtests/tst-pam_shells.c
@@ -0,0 +1,68 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, and the entire permission notice in its entirety,
+ * including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions. (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ test case:
+
+ shells.conf:
+ /bin/testbash
+
+*/
+
+#include "test_assert.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <security/pam_appl.h>
+
+static struct pam_conv conv;
+
+int
+main(void)
+{
+ pam_handle_t *pamh = NULL;
+ int retval;
+
+ // /bin/testbash is defined in shell definition file(s)
+ ASSERT_EQ(PAM_SUCCESS, pam_start("tst-pam_shells", "tstpamshells", &conv, &pamh));
+ ASSERT_EQ(PAM_SUCCESS, retval=pam_authenticate (pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end (pamh,retval));
+
+ // /bin/testnoshell is not defined in shell definition file(s)
+ ASSERT_EQ(PAM_SUCCESS, pam_start("tst-pam_shells", "tstnoshell", &conv, &pamh));
+ ASSERT_EQ(PAM_AUTH_ERR, retval=pam_authenticate (pamh, 0));
+ ASSERT_EQ(PAM_SUCCESS, pam_end (pamh,retval));
+
+ return 0;
+}
diff --git a/xtests/tst-pam_shells.pamd b/xtests/tst-pam_shells.pamd
new file mode 100644
index 00000000..6ad4f319
--- /dev/null
+++ b/xtests/tst-pam_shells.pamd
@@ -0,0 +1,2 @@
+#%PAM-1.0
+auth required pam_shells.so
diff --git a/xtests/tst-pam_shells.sh b/xtests/tst-pam_shells.sh
new file mode 100755
index 00000000..5093f689
--- /dev/null
+++ b/xtests/tst-pam_shells.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+/usr/sbin/groupadd tstpamshells1
+/usr/sbin/useradd -s /bin/testbash -G tstpamshells1 -p '!!' tstpamshells
+/usr/sbin/useradd -s /bin/testnoshell -G tstpamshells1 -p '!!' tstnoshell
+./tst-pam_shells
+RET=$?
+/usr/sbin/userdel -r tstpamshells 2> /dev/null
+/usr/sbin/userdel -r tstnoshell 2> /dev/null
+/usr/sbin/groupdel tstpamshells1 2> /dev/null
+exit $RET