aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3075
-rw-r--r--Make.xml.rules.in18
-rw-r--r--Makefile.am6
-rw-r--r--Makefile.in68
-rw-r--r--NEWS64
-rw-r--r--README2
-rw-r--r--aclocal.m462
-rwxr-xr-xbuild-aux/compile6
-rwxr-xr-xbuild-aux/config.guess1443
-rwxr-xr-xbuild-aux/config.sub714
-rwxr-xr-xbuild-aux/depcomp2
-rwxr-xr-xbuild-aux/install-sh161
-rw-r--r--build-aux/ltmain.sh66
-rwxr-xr-xbuild-aux/missing2
-rwxr-xr-xbuild-aux/test-driver10
-rwxr-xr-xbuild-aux/ylwrap2
-rw-r--r--conf/Makefile.in41
-rw-r--r--conf/pam.conf5
-rw-r--r--conf/pam_conv1/Makefile.am2
-rw-r--r--conf/pam_conv1/Makefile.in48
-rw-r--r--conf/pam_conv1/pam_conv_y.c977
-rw-r--r--conf/pam_conv1/pam_conv_y.h37
-rw-r--r--conf/pam_conv1/pam_conv_y.y3
-rw-r--r--config.h.in53
-rwxr-xr-xconfigure3929
-rw-r--r--configure.ac381
-rw-r--r--debian/README.source15
-rw-r--r--debian/changelog279
-rw-r--r--debian/clean2
-rw-r--r--debian/compat1
-rw-r--r--debian/control21
-rw-r--r--debian/copyright252
-rw-r--r--debian/libpam-cracklib.install2
-rw-r--r--debian/libpam-cracklib.manpages1
-rw-r--r--debian/libpam-cracklib.postinst9
-rw-r--r--debian/libpam-cracklib.prerm9
-rw-r--r--debian/libpam-doc.docs1
-rw-r--r--debian/libpam-modules-bin.install5
-rw-r--r--debian/libpam-modules-bin.lintian-overrides2
-rw-r--r--debian/libpam-modules-bin.manpages4
-rw-r--r--debian/libpam-modules.lintian-overrides17
-rw-r--r--debian/libpam-modules.manpages1
-rw-r--r--debian/libpam-modules.postinst19
-rw-r--r--debian/libpam-modules.preinst32
-rw-r--r--debian/libpam-modules.templates19
-rw-r--r--debian/libpam-runtime.lintian-overrides10
-rw-r--r--debian/libpam-runtime.manpages2
-rw-r--r--debian/libpam-runtime.postinst20
-rw-r--r--debian/libpam-runtime.postrm8
-rw-r--r--debian/libpam-runtime.prerm17
-rwxr-xr-xdebian/libpam0g-dev.install4
-rw-r--r--debian/libpam0g-dev.install.in2
-rwxr-xr-xdebian/libpam0g-dev.links4
-rw-r--r--debian/libpam0g-dev.links.in3
-rw-r--r--debian/libpam0g.lintian-overrides5
-rw-r--r--debian/libpam0g.postinst60
-rw-r--r--debian/libpam0g.symbols2
-rw-r--r--debian/libpam0g.templates2
-rw-r--r--debian/local/Debian-PAM-MiniPolicy6
-rw-r--r--debian/local/common-password16
-rw-r--r--debian/local/common-session3
-rw-r--r--debian/local/pam-auth-update53
-rw-r--r--debian/local/pam-auth-update.87
-rw-r--r--debian/not-installed8
-rw-r--r--debian/pam-configs/cracklib9
-rw-r--r--debian/pam-configs/unix4
-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/036_pam_wheel_getlogin_considered_harmful145
-rw-r--r--debian/patches-applied/PAM-manpage-section1801
-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-applied/pam_unix_fix_sgid_shadow_auth.patch25
-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)158
-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_harmful148
-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)30
-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_opendir34
-rw-r--r--debian/patches/pam_unix_dont_trust_chkpwd_caller.patch (renamed from debian/patches-applied/pam_unix_dont_trust_chkpwd_caller.patch)19
-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/bg.po63
-rw-r--r--debian/po/ca.po72
-rw-r--r--debian/po/cs.po62
-rw-r--r--debian/po/da.po50
-rw-r--r--debian/po/de.po81
-rw-r--r--debian/po/es.po50
-rw-r--r--debian/po/eu.po50
-rw-r--r--debian/po/fi.po50
-rw-r--r--debian/po/fr.po112
-rw-r--r--debian/po/gl.po50
-rw-r--r--debian/po/it.po50
-rw-r--r--debian/po/ja.po50
-rw-r--r--debian/po/nl.po75
-rw-r--r--debian/po/pl.po50
-rw-r--r--debian/po/pt.po63
-rw-r--r--debian/po/pt_BR.po63
-rw-r--r--debian/po/ro.po79
-rw-r--r--debian/po/ru.po122
-rw-r--r--debian/po/sk.po78
-rw-r--r--debian/po/sv.po53
-rw-r--r--debian/po/templates.pot48
-rw-r--r--debian/po/tr.po148
-rw-r--r--debian/po/vi.po50
-rw-r--r--debian/po/zh_CN.po104
-rwxr-xr-xdebian/rules41
-rw-r--r--debian/source.lintian-overrides3
-rw-r--r--debian/source/lintian-overrides2
-rwxr-xr-xdebian/template-md5sum51
-rw-r--r--debian/tests/control7
-rw-r--r--debian/tests/pam-auth-update38
-rw-r--r--debian/tests/pam-test10
-rw-r--r--debian/tests/pam-test.py33
-rw-r--r--debian/upstream/metadata4
-rw-r--r--debian/upstream/signing-key.asc138
-rw-r--r--debian/watch6
-rw-r--r--doc/Makefile.am2
-rw-r--r--doc/Makefile.in43
-rw-r--r--doc/adg/Linux-PAM_ADG.xml199
-rw-r--r--doc/adg/Makefile.am12
-rw-r--r--doc/adg/Makefile.in53
-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.in64
-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.xml32
-rw-r--r--doc/man/pam.conf.573
-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.312
-rw-r--r--doc/man/pam_end.3.xml23
-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.in53
-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.xml233
-rw-r--r--doc/sag/Makefile.am13
-rw-r--r--doc/sag/Makefile.in53
-rw-r--r--doc/sag/pam_access.xml52
-rw-r--r--doc/sag/pam_cracklib.xml34
-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_tally.xml38
-rw-r--r--doc/sag/pam_tally2.xml46
-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.in46
-rw-r--r--doc/specs/parse_y.c1029
-rw-r--r--doc/specs/parse_y.h45
-rw-r--r--examples/Makefile.am2
-rw-r--r--examples/Makefile.in62
-rw-r--r--examples/tty_conv.c177
-rw-r--r--examples/xsh.c2
-rw-r--r--libpam/Makefile.am7
-rw-r--r--libpam/Makefile.in112
-rw-r--r--libpam/include/pam_cc_compat.h20
-rw-r--r--libpam/include/pam_inline.h111
-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.h16
-rw-r--r--libpam/libpam.map5
-rw-r--r--libpam/pam.pc.in11
-rw-r--r--libpam/pam_dispatch.c1
-rw-r--r--libpam/pam_dynamic.c84
-rw-r--r--libpam/pam_end.c32
-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_check_user.c92
-rw-r--r--libpam/pam_modutil_getlogin.c50
-rw-r--r--libpam/pam_modutil_priv.c17
-rw-r--r--libpam/pam_modutil_sanitize.c73
-rw-r--r--libpam/pam_start.c3
-rw-r--r--libpam/pam_vprompt.c6
-rw-r--r--libpam_misc/Makefile.am4
-rw-r--r--libpam_misc/Makefile.in92
-rw-r--r--libpam_misc/help_env.c5
-rw-r--r--libpam_misc/misc_conv.c19
-rw-r--r--libpam_misc/pam_misc.pc.in11
-rw-r--r--libpamc/Makefile.am4
-rw-r--r--libpamc/Makefile.in99
-rw-r--r--libpamc/include/security/pam_client.h3
-rw-r--r--libpamc/pamc.pc.in11
-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.in41
-rw-r--r--m4/attribute.m416
-rw-r--r--m4/japhar_grep_cflags.m447
-rw-r--r--m4/jh_path_xml_catalog.m44
-rw-r--r--m4/ld-O1.m437
-rw-r--r--m4/ld-as-needed.m437
-rw-r--r--m4/ld-no-undefined.m437
-rw-r--r--m4/ld-z-now.m416
-rw-r--r--m4/libprelude.m429
-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.m438
-rw-r--r--m4/warnings.m485
-rw-r--r--modules/Makefile.am21
-rw-r--r--modules/Makefile.in68
-rw-r--r--modules/pam_access/Makefile.am7
-rw-r--r--modules/pam_access/Makefile.in50
-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.c276
-rw-r--r--modules/pam_cracklib/Makefile.am33
-rw-r--r--modules/pam_cracklib/Makefile.in1148
-rw-r--r--modules/pam_cracklib/README254
-rw-r--r--modules/pam_cracklib/README.xml41
-rw-r--r--modules/pam_cracklib/pam_cracklib.8363
-rw-r--r--modules/pam_cracklib/pam_cracklib.8.xml592
-rw-r--r--modules/pam_cracklib/pam_cracklib.c899
-rwxr-xr-xmodules/pam_cracklib/tst-pam_cracklib2
-rw-r--r--modules/pam_debug/Makefile.am4
-rw-r--r--modules/pam_debug/Makefile.in47
-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.in47
-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.in47
-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.in105
-rw-r--r--modules/pam_env/README37
-rw-r--r--modules/pam_env/README.xml34
-rw-r--r--modules/pam_env/environment.52
-rw-r--r--modules/pam_env/pam_env.824
-rw-r--r--modules/pam_env/pam_env.8.xml117
-rw-r--r--modules/pam_env/pam_env.c771
-rw-r--r--modules/pam_env/pam_env.conf.512
-rw-r--r--modules/pam_env/pam_env.conf.5.xml43
-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.in47
-rw-r--r--modules/pam_exec/README5
-rw-r--r--modules/pam_exec/README.xml32
-rw-r--r--modules/pam_exec/pam_exec.829
-rw-r--r--modules/pam_exec/pam_exec.8.xml77
-rw-r--r--modules/pam_exec/pam_exec.c50
-rw-r--r--modules/pam_faildelay/Makefile.am4
-rw-r--r--modules/pam_faildelay/Makefile.in47
-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.am19
-rw-r--r--modules/pam_faillock/Makefile.in140
-rw-r--r--modules/pam_faillock/README6
-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.c17
-rw-r--r--modules/pam_faillock/faillock.conf.539
-rw-r--r--modules/pam_faillock/faillock.conf.5.xml65
-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.c165
-rw-r--r--modules/pam_faillock/pam_faillock.821
-rw-r--r--modules/pam_faillock/pam_faillock.8.xml98
-rw-r--r--modules/pam_faillock/pam_faillock.c307
-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.in47
-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/pam_filter.c2
-rw-r--r--modules/pam_filter/upperLOWER/Makefile.am4
-rw-r--r--modules/pam_filter/upperLOWER/Makefile.in45
-rw-r--r--modules/pam_ftp/Makefile.am4
-rw-r--r--modules/pam_ftp/Makefile.in47
-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.c6
-rw-r--r--modules/pam_group/Makefile.am6
-rw-r--r--modules/pam_group/Makefile.in49
-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.in55
-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.in47
-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.in47
-rw-r--r--modules/pam_lastlog/README2
-rw-r--r--modules/pam_lastlog/README.xml32
-rw-r--r--modules/pam_lastlog/pam_lastlog.832
-rw-r--r--modules/pam_lastlog/pam_lastlog.8.xml79
-rw-r--r--modules/pam_lastlog/pam_lastlog.c58
-rw-r--r--modules/pam_limits/Makefile.am8
-rw-r--r--modules/pam_limits/Makefile.in51
-rw-r--r--modules/pam_limits/README13
-rw-r--r--modules/pam_limits/README.xml32
-rw-r--r--modules/pam_limits/limits.conf11
-rw-r--r--modules/pam_limits/limits.conf.570
-rw-r--r--modules/pam_limits/limits.conf.5.xml116
-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.c293
-rw-r--r--modules/pam_listfile/Makefile.am4
-rw-r--r--modules/pam_listfile/Makefile.in47
-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.in47
-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_localuser/pam_localuser.c86
-rw-r--r--modules/pam_loginuid/Makefile.am4
-rw-r--r--modules/pam_loginuid/Makefile.in47
-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_loginuid/pam_loginuid.c2
-rw-r--r--modules/pam_mail/Makefile.am4
-rw-r--r--modules/pam_mail/Makefile.in47
-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.am6
-rw-r--r--modules/pam_mkhomedir/Makefile.in81
-rw-r--r--modules/pam_mkhomedir/README.xml29
-rw-r--r--modules/pam_mkhomedir/mkhomedir_helper.815
-rw-r--r--modules/pam_mkhomedir/mkhomedir_helper.8.xml34
-rw-r--r--modules/pam_mkhomedir/mkhomedir_helper.c44
-rw-r--r--modules/pam_mkhomedir/pam_mkhomedir.825
-rw-r--r--modules/pam_mkhomedir/pam_mkhomedir.8.xml62
-rw-r--r--modules/pam_mkhomedir/pam_mkhomedir.c49
-rw-r--r--modules/pam_motd/Makefile.am4
-rw-r--r--modules/pam_motd/Makefile.in47
-rw-r--r--modules/pam_motd/README5
-rw-r--r--modules/pam_motd/README.xml32
-rw-r--r--modules/pam_motd/pam_motd.814
-rw-r--r--modules/pam_motd/pam_motd.8.xml46
-rw-r--r--modules/pam_motd/pam_motd.c146
-rw-r--r--modules/pam_namespace/Makefile.am8
-rw-r--r--modules/pam_namespace/Makefile.in51
-rw-r--r--modules/pam_namespace/README13
-rw-r--r--modules/pam_namespace/README.xml37
-rw-r--r--modules/pam_namespace/md5.c52
-rw-r--r--modules/pam_namespace/md5.h10
-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.862
-rw-r--r--modules/pam_namespace/pam_namespace.8.xml152
-rw-r--r--modules/pam_namespace/pam_namespace.c217
-rw-r--r--modules/pam_namespace/pam_namespace.h19
-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.in47
-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.in47
-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.am37
-rw-r--r--modules/pam_pwhistory/Makefile.in384
-rw-r--r--modules/pam_pwhistory/README26
-rw-r--r--modules/pam_pwhistory/README.xml32
-rw-r--r--modules/pam_pwhistory/opasswd.c146
-rw-r--r--modules/pam_pwhistory/opasswd.h31
-rw-r--r--modules/pam_pwhistory/pam_pwhistory.857
-rw-r--r--modules/pam_pwhistory/pam_pwhistory.8.xml123
-rw-r--r--modules/pam_pwhistory/pam_pwhistory.c243
-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.854
-rw-r--r--modules/pam_pwhistory/pwhistory_helper.8.xml65
-rw-r--r--modules/pam_pwhistory/pwhistory_helper.c121
-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.in47
-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.in47
-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.c21
-rw-r--r--modules/pam_securetty/Makefile.am4
-rw-r--r--modules/pam_securetty/Makefile.in47
-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_securetty/pam_securetty.c6
-rw-r--r--modules/pam_selinux/Makefile.am4
-rw-r--r--modules/pam_selinux/Makefile.in47
-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.c24
-rw-r--r--modules/pam_sepermit/Makefile.am10
-rw-r--r--modules/pam_sepermit/Makefile.in99
-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.conf2
-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.in47
-rw-r--r--modules/pam_setquota/README6
-rw-r--r--modules/pam_setquota/README.xml32
-rw-r--r--modules/pam_setquota/pam_setquota.832
-rw-r--r--modules/pam_setquota/pam_setquota.8.xml74
-rw-r--r--modules/pam_setquota/pam_setquota.c4
-rw-r--r--modules/pam_shells/Makefile.am8
-rw-r--r--modules/pam_shells/Makefile.in55
-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.am16
-rw-r--r--modules/pam_stress/Makefile.in139
-rw-r--r--modules/pam_stress/README93
-rw-r--r--modules/pam_stress/README.xml19
-rw-r--r--modules/pam_stress/pam_stress.8190
-rw-r--r--modules/pam_stress/pam_stress.8.xml353
-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.in47
-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_tally/Makefile.am39
-rw-r--r--modules/pam_tally/Makefile.in1221
-rw-r--r--modules/pam_tally/README145
-rw-r--r--modules/pam_tally/README.xml41
-rw-r--r--modules/pam_tally/faillog.h55
-rw-r--r--modules/pam_tally/pam_tally.8256
-rw-r--r--modules/pam_tally/pam_tally.8.xml459
-rw-r--r--modules/pam_tally/pam_tally.c853
-rw-r--r--modules/pam_tally/pam_tally_app.c6
-rwxr-xr-xmodules/pam_tally/tst-pam_tally2
-rw-r--r--modules/pam_tally2/Makefile.am43
-rw-r--r--modules/pam_tally2/Makefile.in1227
-rw-r--r--modules/pam_tally2/README156
-rw-r--r--modules/pam_tally2/README.xml46
-rw-r--r--modules/pam_tally2/pam_tally2.8244
-rw-r--r--modules/pam_tally2/pam_tally2.8.xml450
-rw-r--r--modules/pam_tally2/pam_tally2.c1035
-rw-r--r--modules/pam_tally2/pam_tally2_app.c6
-rw-r--r--modules/pam_tally2/tallylog.h52
-rwxr-xr-xmodules/pam_tally2/tst-pam_tally22
-rw-r--r--modules/pam_time/Makefile.am11
-rw-r--r--modules/pam_time/Makefile.in99
-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.am28
-rw-r--r--modules/pam_timestamp/Makefile.in109
-rw-r--r--modules/pam_timestamp/README3
-rw-r--r--modules/pam_timestamp/README.xml35
-rw-r--r--modules/pam_timestamp/hmac_openssl_wrapper.c382
-rw-r--r--modules/pam_timestamp/hmac_openssl_wrapper.h57
-rw-r--r--modules/pam_timestamp/hmacsha1.c16
-rw-r--r--modules/pam_timestamp/pam_timestamp.816
-rw-r--r--modules/pam_timestamp/pam_timestamp.8.xml56
-rw-r--r--modules/pam_timestamp/pam_timestamp.c102
-rw-r--r--modules/pam_timestamp/pam_timestamp_check.816
-rw-r--r--modules/pam_timestamp/pam_timestamp_check.8.xml47
-rw-r--r--modules/pam_timestamp/sha1.c21
-rw-r--r--modules/pam_timestamp/sha1.h5
-rw-r--r--modules/pam_tty_audit/Makefile.in44
-rw-r--r--modules/pam_tty_audit/README2
-rw-r--r--modules/pam_tty_audit/README.xml30
-rw-r--r--modules/pam_tty_audit/pam_tty_audit.818
-rw-r--r--modules/pam_tty_audit/pam_tty_audit.8.xml49
-rw-r--r--modules/pam_umask/Makefile.am4
-rw-r--r--modules/pam_umask/Makefile.in47
-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_umask/pam_umask.c18
-rw-r--r--modules/pam_unix/Makefile.am19
-rw-r--r--modules/pam_unix/Makefile.in73
-rw-r--r--modules/pam_unix/README6
-rw-r--r--modules/pam_unix/README.xml32
-rw-r--r--modules/pam_unix/bigcrypt.c23
-rw-r--r--modules/pam_unix/lckpwdf.-c10
-rw-r--r--modules/pam_unix/md5.c59
-rw-r--r--modules/pam_unix/md5.h10
-rw-r--r--modules/pam_unix/md5_crypt.c4
-rw-r--r--modules/pam_unix/pam_unix.862
-rw-r--r--modules/pam_unix/pam_unix.8.xml95
-rw-r--r--modules/pam_unix/pam_unix_acct.c6
-rw-r--r--modules/pam_unix/pam_unix_passwd.c19
-rw-r--r--modules/pam_unix/passverify.c194
-rw-r--r--modules/pam_unix/passverify.h6
-rw-r--r--modules/pam_unix/support.c52
-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.c9
-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.c18
-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.in47
-rw-r--r--modules/pam_userdb/README3
-rw-r--r--modules/pam_userdb/README.xml32
-rw-r--r--modules/pam_userdb/pam_userdb.828
-rw-r--r--modules/pam_userdb/pam_userdb.8.xml70
-rw-r--r--modules/pam_userdb/pam_userdb.c67
-rw-r--r--modules/pam_usertype/Makefile.am4
-rw-r--r--modules/pam_usertype/Makefile.in47
-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.c18
-rw-r--r--modules/pam_warn/Makefile.am4
-rw-r--r--modules/pam_warn/Makefile.in47
-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.in47
-rw-r--r--modules/pam_wheel/README6
-rw-r--r--modules/pam_wheel/README.xml32
-rw-r--r--modules/pam_wheel/pam_wheel.822
-rw-r--r--modules/pam_wheel/pam_wheel.8.xml65
-rw-r--r--modules/pam_wheel/pam_wheel.c61
-rw-r--r--modules/pam_xauth/Makefile.am4
-rw-r--r--modules/pam_xauth/Makefile.in47
-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.c38
-rw-r--r--pgp.keys.asc284
-rw-r--r--po/Linux-PAM.pot245
-rw-r--r--po/POTFILES.in195
-rw-r--r--po/af.po243
-rw-r--r--po/am.po243
-rw-r--r--po/ar.gmobin7955 -> 6560 bytes
-rw-r--r--po/ar.po321
-rw-r--r--po/as.gmobin13006 -> 10333 bytes
-rw-r--r--po/as.po336
-rw-r--r--po/az.po245
-rw-r--r--po/be.po245
-rw-r--r--po/bg.gmobin11504 -> 12272 bytes
-rw-r--r--po/bg.po407
-rw-r--r--po/bn.gmobin13587 -> 10846 bytes
-rw-r--r--po/bn.po338
-rw-r--r--po/bn_IN.gmobin13591 -> 10850 bytes
-rw-r--r--po/bn_IN.po338
-rw-r--r--po/bs.po244
-rw-r--r--po/ca.gmobin12189 -> 10174 bytes
-rw-r--r--po/ca.po347
-rw-r--r--po/cs.gmobin12016 -> 10207 bytes
-rw-r--r--po/cs.po344
-rw-r--r--po/cy.po245
-rw-r--r--po/da.gmobin11797 -> 9630 bytes
-rw-r--r--po/da.po341
-rw-r--r--po/de.gmobin11986 -> 10373 bytes
-rw-r--r--po/de.po351
-rw-r--r--po/de_CH.po243
-rw-r--r--po/el.po243
-rw-r--r--po/eo.gmobin494 -> 3778 bytes
-rw-r--r--po/eo.po351
-rw-r--r--po/es.gmobin9682 -> 8677 bytes
-rw-r--r--po/es.po381
-rw-r--r--po/et.gmobin2764 -> 2320 bytes
-rw-r--r--po/et.po297
-rw-r--r--po/eu.gmobin1015 -> 968 bytes
-rw-r--r--po/eu.po246
-rw-r--r--po/fa.po242
-rw-r--r--po/fi.gmobin11031 -> 10236 bytes
-rw-r--r--po/fi.po381
-rw-r--r--po/fr.gmobin12820 -> 10455 bytes
-rw-r--r--po/fr.po344
-rw-r--r--po/ga.gmobin9758 -> 7693 bytes
-rw-r--r--po/ga.po341
-rw-r--r--po/gl.po243
-rw-r--r--po/gu.gmobin13074 -> 10377 bytes
-rw-r--r--po/gu.po336
-rw-r--r--po/he.gmobin2889 -> 11018 bytes
-rw-r--r--po/he.po515
-rw-r--r--po/hi.gmobin12447 -> 9833 bytes
-rw-r--r--po/hi.po336
-rw-r--r--po/hr.gmobin565 -> 10187 bytes
-rw-r--r--po/hr.po458
-rw-r--r--po/hu.gmobin9185 -> 7349 bytes
-rw-r--r--po/hu.po350
-rw-r--r--po/ia.gmobin9268 -> 7077 bytes
-rw-r--r--po/ia.po337
-rw-r--r--po/id.gmobin4136 -> 4025 bytes
-rw-r--r--po/id.po253
-rw-r--r--po/is.po243
-rw-r--r--po/it.gmobin11823 -> 9816 bytes
-rw-r--r--po/it.po346
-rw-r--r--po/ja.gmobin9940 -> 10715 bytes
-rw-r--r--po/ja.po450
-rw-r--r--po/ka.gmobin3293 -> 15501 bytes
-rw-r--r--po/ka.po447
-rw-r--r--po/kk.gmobin11518 -> 12812 bytes
-rw-r--r--po/kk.po415
-rw-r--r--po/km.gmobin10771 -> 8868 bytes
-rw-r--r--po/km.po304
-rw-r--r--po/kn.gmobin13861 -> 10850 bytes
-rw-r--r--po/kn.po335
-rw-r--r--po/ko.gmobin9240 -> 10589 bytes
-rw-r--r--po/ko.po533
-rw-r--r--po/kw_GB.po245
-rw-r--r--po/ky.po242
-rw-r--r--po/lt.po244
-rw-r--r--po/lv.po244
-rw-r--r--po/mk.po243
-rw-r--r--po/ml.gmobin15749 -> 12685 bytes
-rw-r--r--po/ml.po336
-rw-r--r--po/mn.po243
-rw-r--r--po/mr.gmobin13288 -> 10413 bytes
-rw-r--r--po/mr.po336
-rw-r--r--po/ms.po242
-rw-r--r--po/my.po242
-rw-r--r--po/nb.gmobin11581 -> 9290 bytes
-rw-r--r--po/nb.po335
-rw-r--r--po/ne.po243
-rw-r--r--po/nl.gmobin11750 -> 9796 bytes
-rw-r--r--po/nl.po348
-rw-r--r--po/nn.gmobin473 -> 9283 bytes
-rw-r--r--po/nn.po457
-rw-r--r--po/or.gmobin18696 -> 15419 bytes
-rw-r--r--po/or.po333
-rw-r--r--po/pa.gmobin12506 -> 14674 bytes
-rw-r--r--po/pa.po454
-rw-r--r--po/pl.gmobin12236 -> 10424 bytes
-rw-r--r--po/pl.po345
-rw-r--r--po/pt.gmobin12413 -> 10144 bytes
-rw-r--r--po/pt.po345
-rw-r--r--po/pt_BR.gmobin11561 -> 9570 bytes
-rw-r--r--po/pt_BR.po345
-rw-r--r--po/ro.gmobin534 -> 10688 bytes
-rw-r--r--po/ro.po463
-rw-r--r--po/ru.gmobin15994 -> 13446 bytes
-rw-r--r--po/ru.po340
-rw-r--r--po/si.gmobin10236 -> 8618 bytes
-rw-r--r--po/si.po305
-rw-r--r--po/sk.gmobin11788 -> 9855 bytes
-rw-r--r--po/sk.po350
-rw-r--r--po/sl.gmobin546 -> 1695 bytes
-rw-r--r--po/sl.po292
-rw-r--r--po/sq.po243
-rw-r--r--po/sr.gmobin11558 -> 9013 bytes
-rw-r--r--po/sr.po339
-rw-r--r--po/sr@latin.gmobin8742 -> 6926 bytes
-rw-r--r--po/sr@latin.po338
-rw-r--r--po/sv.gmobin11832 -> 10038 bytes
-rw-r--r--po/sv.po343
-rw-r--r--po/ta.gmobin13871 -> 10884 bytes
-rw-r--r--po/ta.po336
-rw-r--r--po/te.gmobin13868 -> 11038 bytes
-rw-r--r--po/te.po336
-rw-r--r--po/tg.po243
-rw-r--r--po/th.po242
-rw-r--r--po/tr.gmobin11983 -> 10133 bytes
-rw-r--r--po/tr.po344
-rw-r--r--po/uk.gmobin15849 -> 13484 bytes
-rw-r--r--po/uk.po347
-rw-r--r--po/ur.po243
-rw-r--r--po/vi.gmobin9369 -> 7349 bytes
-rw-r--r--po/vi.po339
-rw-r--r--po/yo.po243
-rw-r--r--po/zh_CN.gmobin8433 -> 8999 bytes
-rw-r--r--po/zh_CN.po473
-rw-r--r--po/zh_HK.gmobin476 -> 570 bytes
-rw-r--r--po/zh_HK.po254
-rw-r--r--po/zh_TW.gmobin11086 -> 8841 bytes
-rw-r--r--po/zh_TW.po334
-rw-r--r--po/zu.gmobin6904 -> 5759 bytes
-rw-r--r--po/zu.po309
-rw-r--r--tests/Makefile.in44
-rw-r--r--tests/tst-pam_end.c2
-rw-r--r--tests/tst-pam_fail_delay.c2
-rw-r--r--tests/tst-pam_get_item.c2
-rw-r--r--tests/tst-pam_getenvlist.c2
-rw-r--r--tests/tst-pam_set_data.c2
-rw-r--r--tests/tst-pam_set_item.c2
-rw-r--r--tests/tst-pam_start.c2
-rw-r--r--tests/tst-pam_start_confdir.c2
-rw-r--r--xtests/Makefile.am6
-rw-r--r--xtests/Makefile.in115
-rwxr-xr-xxtests/run-xtests.sh27
-rw-r--r--xtests/shells.conf3
-rw-r--r--xtests/tst-pam_cracklib1.c135
-rw-r--r--xtests/tst-pam_cracklib1.pamd2
-rw-r--r--xtests/tst-pam_cracklib2.c143
-rw-r--r--xtests/tst-pam_cracklib2.pamd2
-rw-r--r--xtests/tst-pam_shells.c68
-rw-r--r--xtests/tst-pam_shells.pamd2
-rwxr-xr-xxtests/tst-pam_shells.sh11
921 files changed, 40833 insertions, 41583 deletions
diff --git a/ChangeLog b/ChangeLog
index 78690bfd..daf343bf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,3078 @@
+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.
+ * modules/pam_pwhistory/pam_pwhistory.c: Replace "crypted password" with
+ "hashed password" in comment.
+ * modules/pam_unix/passverify.c (create_password_hash): Rename "crypted"
+ local variable to "hashed".
+
+2021-08-30 Fabrice Fontaine <fontaine.fabrice@gmail.com>
+
+ configure.ac: also search libcrypt through pkg-config.
+ libxcrypt provides a libcrypt.pc file so use it if available as this
+ will allow to retrieve the library path (e.g.
+ -L/home/buildroot/output/host//riscv64-buildroot-linux-musl/sysroot/usr/lib)
+ which is useful when cross-compiling and will avoid the following build
+ failure on buildroot:
+
+ /home/buildroot/autobuild/run/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/riscv64-buildroot-linux-musl/10.2.0/../../../../riscv64-buildroot-linux-musl/bin/ld: .libs/passverify.o: in function `.L30':
+ passverify.c:(.text+0x368): undefined reference to `crypt_checksalt'
+
+ Fixes:
+ - http://autobuild.buildroot.org/results/20b14e222b35c2d1269960075832b784ba81aa1a
+
+2021-08-19 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_unix: workaround the problem caused by libnss_systemd.
+ The getspnam(3) manual page says that errno shall be set to EACCES when
+ the caller does not have permission to access the shadow password file.
+ Unfortunately, this contract is broken when libnss_systemd is used in
+ the nss stack.
+
+ Workaround this problem by falling back to the helper invocation when
+ pam_modutil_getspnam returns NULL regardless of errno. As pam_unix
+ already behaves this way when selinux is enabled, it should be OK
+ for the case when selinux is not enabled, too.
+
+ * modules/pam_unix/passverify.c (get_account_info): When
+ pam_modutil_getspnam returns NULL, unconditionally fall back
+ to the helper invocation.
+
+ Complements: f220cace2053 ("Permit unix_chkpwd & pam_unix.so to run without being setuid-root")
+ Resolves: https://github.com/linux-pam/linux-pam/issues/379
+
+2021-08-18 Jérôme Fenal <jfenal@free.fr>
+
+ po: update translations using Weblate (French)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/fr/
+
+2021-08-02 panchenbo <panchenbo@uniontech.com>
+
+ po/zh_CN.po: fix pam_lastlog translation errors.
+ Closes: https://github.com/linux-pam/linux-pam/issues/383
+
+2021-07-24 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/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Swedish)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/sv/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Portuguese (Brazil))
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/pt_BR/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Portuguese (Brazil))
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/pt/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Dutch)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/nl/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Italian)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/it/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Hebrew)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/he/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Finnish)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/fi/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Danish)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/da/
+
+2021-07-22 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Catalan)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ca/
+
+2021-07-22 Yuri Chornoivan <yurchor@ukr.net>
+
+ po: update translations using Weblate (Ukrainian)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/uk/
+
+2021-07-22 OÄŸuz Ersen <oguzersen@protonmail.com>
+
+ po: update translations using Weblate (Turkish)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/tr/
+
+2021-07-21 Piotr DrÄ…g <piotrdrag@gmail.com>
+
+ po: update translations using Weblate (Polish)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/pl/
+
+2021-07-21 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (German)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/de/
+
+2021-07-21 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Russian)
+ Currently translated at 100.0% (100 of 100 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ru/
+
+2021-07-21 Seong-ho Cho <darkcircle.0426@gmail.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (99 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2021-07-20 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.
+
+ Prepare for 1.5.2 release.
+ * configure.ac (AC_INIT): Raise version to 1.5.2.
+ * NEWS: Update.
+
+ pam_faillock: remove confusing comment.
+ * modules/pam_faillock/pam_faillock.c (faillock_message): Remove the
+ comment that meant to help translators but actually confused xgettext.
+
+2021-07-09 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_filter: Close file after controlling tty.
+ Failing to check the descriptor value meant that there was a bug in the
+ attempt to close the controlling tty. Moreover, this would lead to a
+ file descriptor leak as pointed out by the static analyzer tool:
+
+ Error: RESOURCE_LEAK (CWE-772): [#def26]
+ Linux-PAM-1.5.1/modules/pam_filter/pam_filter.c:356: open_fn: Returning handle opened by "open". [Note: The source code implementation of the function has been overridden by a user model.]
+ Linux-PAM-1.5.1/modules/pam_filter/pam_filter.c:356: var_assign: Assigning: "t" = handle returned from "open("/dev/tty", 2)".
+ Linux-PAM-1.5.1/modules/pam_filter/pam_filter.c:357: off_by_one: Testing whether handle "t" is strictly greater than zero is suspicious. "t" leaks when it is zero.
+ Linux-PAM-1.5.1/modules/pam_filter/pam_filter.c:357: remediation: Did you intend to include equality with zero?
+ Linux-PAM-1.5.1/modules/pam_filter/pam_filter.c:367: leaked_handle: Handle variable "t" going out of scope leaks the handle.
+ 365| pam_syslog(pamh, LOG_ERR,
+ 366| "child cannot become new session: %m");
+ 367|-> return PAM_ABORT;
+ 368| }
+ 369|
+
+2021-06-29 Andrew G. Morgan <morgan@kernel.org>
+
+ Permit unix_chkpwd & pam_unix.so to run without being setuid-root.
+ Remove the hard-coding of the idea that the only way pam_unix.so can
+ read the shadow file is if it can, in some way, run setuid-root.
+ Linux capabilities only require cap_dac_override to read the /etc/shadow
+ file.
+
+ This change achieves two things: it opens a path for a linux-pam
+ application to run without being setuid-root; further, it allows
+ unix_chkpwd to run non-setuid-root if it is installed:
+
+ sudo setcap cap_dac_override=ep unix_chkpwd
+
+ If we wanted to link against libcap, we could install this binary with
+ cap_dac_override=p, and use cap_set_proc() to raise the effective bit
+ at runtime. However, some distributions already link unix_chkpwd
+ against libcap-ng for some, likely spurious, reason so "ep" is fine
+ for now.
+
+2021-06-15 Fabrice Fontaine <fontaine.fabrice@gmail.com>
+
+ configure.ac: fix build with libxcrypt and uclibc-ng.
+ Fix the following build failure with libxcrypt and uclibc-ng:
+
+ ld: unix_chkpwd-passverify.o: in function `verify_pwd_hash':
+ passverify.c:(.text+0xab4): undefined reference to `crypt_checksalt'
+
+ Fixes:
+ - http://autobuild.buildroot.org/results/65d68b7c9c7de1c7cb0f941ff9982f93a49a56f8
+
+2021-06-14 Mathieu Trossevin <mathieu.trossevin@gmail.com>
+
+ Add pkgconfig files for provided libraries.
+ * .gitignore: Add .pc files as they are generated by autoconf.
+ * configure.ac: Generate .pc files for libpam, libpam_misc and libpamc.
+ * libpam/Makefile.am: Install pam.pc.
+ * libpam/pam.pc.in: New file.
+ * libpam_misc/Makefile.am: Install pam_misc.pc
+ * libpam_misc/pam_misc.pc.in: New file.
+ * libpamc/Makefile.am: Install pamc.pc
+
+ This allow applications and PAM modules to automatically find libpam,
+ libpam_misc and libpamc if they are installed instead of having to
+ manually search for them.
+
+2021-06-14 Björn Esser <besser82@fedoraproject.org>
+
+ Remove support for legacy xcrypt.
+ Since many distributions are shipping a version of libxcrypt >= 4.0.0
+ as a replacement for glibc's libcrypt now, older versions of xcrypt,
+ which could be installed in parallel, are not relevant anymore.
+
+ * configure.ac (AC_CHECK_HEADERS): Remove xcrypt.h.
+ (AC_SEARCH_LIBS): Remove xcrypt.
+ (AC_CHECK_FUNCS): Remove crypt_gensalt_r.
+ (AC_DEFINE): Remove HAVE_LIBXCRYPT.
+ * modules/pam_pwhistory/opasswd.c [HAVE_LIBXCRYPT]: Remove.
+ * modules/pam_unix/bigcrypt.c [HAVE_LIBXCRYPT]: Likewise.
+ * modules/pam_userdb/pam_userdb.c [HAVE_LIBXCRYPT]: Likewise.
+ * modules/pam_unix/passverify.c [HAVE_LIBXCRYPT]: Likewise.
+ (create_password_hash) [HAVE_LIBXCRYPT]: Likewise.
+
+2021-06-14 Jeff Squyres <jsquyres@cisco.com>
+
+ pam_misc: set default length of misc_conv() buffer to 4096.
+
+ pam_misc: make length of misc_conv() configurable.
+ Add --with-misc-conv-bufsize=<number> option to configure to allow
+ a longer buffer size for libpam_misc's misc_conv() function (it still
+ defaults to 512 bytes).
+
+2021-06-14 Iker Pedrosa <ipedrosa@redhat.com>
+
+ pam_timestamp: replace hmac implementation.
+ sha1 is no longer recommended as a cryptographic algorithm for
+ authentication. Thus, the idea of this change is to replace the
+ implementation provided by hmacsha1 included in pam_timestamp module by
+ the one in the openssl library. This way, there's no need to maintain
+ the cryptographic algorithm implementation and it can be easily changed
+ with a single configuration change.
+
+ modules/pam_timestamp/hmac_openssl_wrapper.c: implement wrapper
+ functions around openssl's hmac implementation. Moreover, manage the key
+ generation and its read and write in a file. Include an option to
+ configure the cryptographic algorithm in login.defs file.
+ modules/pam_timestamp/hmac_openssl_wrapper.h: likewise.
+ modules/pam_timestamp/pam_timestamp.c: replace calls to functions
+ provided by hmacsha1 by functions provided by openssl's wrapper.
+ configure.ac: include openssl dependecy if it is enabled.
+ modules/pam_timestamp/Makefile.am: include new files and openssl library
+ to compilation.
+ ci/install-dependencies.sh: include openssl library to dependencies.
+ NEWS: add new item to next release.
+ Make.xml.rules.in: add stringparam profiling for hmac
+ doc/custom-man.xsl: change import docbook to one with profiling
+ modules/pam_timestamp/pam_timestamp.8.xml: add conditional paragraph to
+ indicate the value in /etc/login.defs that holds the value for the
+ encryption algorithm
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1947294
+
+2021-06-13 Dmitry V. Levin <ldv@altlinux.org>
+
+ .github: add gcc-11, clang-12, and clang-11 jobs.
+ * .github/workflows/ci.yml (gcc11-x86_64, gcc11-x86, gcc11-x32,
+ clang12-x86_64, clang11-x86_64): New jobs.
+
+2021-06-13 Dmitry V. Levin <ldv@altlinux.org>
+
+ tests: fix -Wmaybe-uninitialized warnings.
+ Fix the following class of compilation warnings reported by gcc 11:
+
+ tst-pam_end.c: In function ‘main’:
+ tst-pam_end.c:55:12: error: ‘conv’ may be used uninitialized [-Werror=maybe-uninitialized]
+ 55 | retval = pam_start (service, user, &conv, &pamh);
+ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ In file included from tst-pam_end.c:41:
+ ../libpam/include/security/pam_appl.h:23:1: note: by argument 3 of type ‘const struct pam_conv *’ to ‘pam_start’ declared here
+ 23 | pam_start(const char *service_name, const char *user,
+ | ^~~~~~~~~
+ tst-pam_end.c:49:19: note: ‘conv’ declared here
+ 49 | struct pam_conv conv;
+ | ^~~~
+
+ * tests/tst-pam_end.c (main): Initialize conv variable.
+ * tests/tst-pam_fail_delay.c: Likewise.
+ * tests/tst-pam_get_item.c: Likewise.
+ * tests/tst-pam_getenvlist.c: Likewise.
+ * tests/tst-pam_set_data.c: Likewise.
+ * tests/tst-pam_set_item.c: Likewise.
+ * tests/tst-pam_start.c: Likewise.
+ * tests/tst-pam_start_confdir.c: Likewise.
+
+2021-06-10 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_unix: do not use crypt_checksalt when checking for password expiration
+ According to Zack Weinberg, the intended meaning of
+ CRYPT_SALT_METHOD_LEGACY is "passwd(1) should not use this hashing
+ method", it is not supposed to mean "force a password change on next
+ login for any user with an existing stored hash using this method".
+
+ This reverts commit 4da9febc39b955892a30686e8396785b96bb8ba5.
+
+ * modules/pam_unix/passverify.c (check_shadow_expiry)
+ [CRYPT_CHECKSALT_AVAILABLE]: Remove.
+
+ Closes: https://github.com/linux-pam/linux-pam/issues/367
+
+2021-06-10 Patrick Schleizer <adrelanos@whonix.org>
+
+ pam_exec: implement quiet_log option.
+ * modules/pam_exec/pam_exec.c (call_exec): Implement quiet_log option.
+ * modules/pam_exec/pam_exec.8.xml: Document it.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/334
+
+2021-05-24 Jeff Squyres <jsquyres@cisco.com>
+
+ pam.conf: clarify default action for unspecified return codes.
+ Add short blurbs explaining that if a return code is not specified in
+ the "[value1=action1 value2=action2 ...]" form and "default=action" is
+ not specified, that return code's action defaults to "bad".
+
+2021-05-01 Hasan <aliyevH@hotmail.com>
+
+ man: fix spelling bug in pam_end.3.xml.
+ * doc/man/pam_end.3.xml: Fix repeated words.
+
+2021-04-25 simmon <simmon@nplob.com>
+
+ po: update translations using Weblate (Korean)
+ Currently translated at 100.0% (99 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ko/
+
+2021-04-25 Emilio Herrera <ehespinosa57@gmail.com>
+
+ po: update translations using Weblate (Spanish)
+ Currently translated at 81.8% (81 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/es/
+
+2021-04-22 Josef Moellers <jmoellers@suse.de>
+
+ pam_limits: "Unlimited" is not a valid value for RLIMIT_NOFILE.
+ Replace it with a value obtained from /proc/sys/fs/nr_open
+
+ * modules/pam_limits/limits.conf.5.xml: Document the replacement.
+ * modules/pam_limits/pam_limits.c: Replace unlimited RLIMIT_NOFILE
+ value with a value obtained from /proc/sys/fs/nr_open
+
+2021-04-21 Stanislav Zidek <szidek@redhat.com>
+
+ pam_userdb: Prevent garbage characters from db.
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1791965
+
+2021-04-12 Tomas Mraz <tmraz@fedoraproject.org>
+
+ misc_conv: Flush the terminal input after the password is read.
+ Fixes #347
+
+ * libpam_misc/misc_conv.c (read_string): Use TCSAFLUSH instead
+ of TCSADRAIN when resetting the terminal echo state
+
+2021-04-12 Tomas Mraz <tmraz@fedoraproject.org>
+
+ pam_access: clean up the remote host matching code.
+ * modules/pam_access/pam_access.c (from_match): Split out remote_match()
+ function and avoid calling it when matching against LOCAL keyword.
+ There is also no point in doing domain match against TTY or SERVICE.
+
+2021-03-25 chuanqin <chuanqing.qin@nokia-sbell.com>
+
+ pam_faillock: convert spaces to tab to keep code style.
+ convert spaces to tab which mixture use in modules/pam_faillock/main.c
+
+2021-03-08 theslimshaney <33791263+theslimshaney@users.noreply.github.com>
+
+ pam_env: fix example in pam_env.conf.5 for setting variable.
+
+2021-03-05 dshein-alt <76520100+dshein-alt@users.noreply.github.com>
+
+ pam_mkhomedir: use HOME_MODE or UMASK from /etc/login.defs.
+ Follow the example of useradd(8) and set the user home directory mode
+ to the value of HOME_MODE or UMASK configuration item from
+ /etc/login.defs when umask option is not specified.
+
+2021-02-13 Ricky Tigg <ricky.tigg@gmail.com>
+ Ricky Tigg <ricky.tigg@gmail.com>
+
+ po: update translations using Weblate (Finnish)
+ Currently translated at 100.0% (99 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/fi/
+
+2021-02-13 Balázs Meskó <meskobalazs@mailbox.org>
+ Balázs Meskó <meskobalazs@mailbox.org>
+
+ po: update translations using Weblate (Hungarian)
+ Currently translated at 77.7% (77 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/hu/
+
+2021-02-13 Carmen Bianca Bakker <carmen@carmenbianca.eu>
+ Carmen Bianca Bakker <carmen@carmenbianca.eu>
+
+ po: update translations using Weblate (Esperanto)
+ Currently translated at 43.4% (43 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/eo/
+
+2021-02-13 Weblate <noreply@weblate.org>
+ Weblate <noreply@weblate.org>
+
+ Update translation files.
+ Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/
+ Translation: linux-pam/master
+
+2021-01-27 Changqing Li <changqing.li@windriver.com>
+
+ configure.ac: add --with-systemdunitdir option.
+ * Add this option to support the following scenario:
+ prefix = '/usr'
+ servicedir = '/lib/systemd/system'
+
+ * The default behavior is changed:
+ If this option is not given, servicedir will be set to the value that is
+ obtained from systemd pkg-config file. If the value cannot be obtained,
+ servicedir will be set to the default value '$(prefix)/lib/systemd/system'.
+
+2021-01-27 Changqing Li <changqing.li@windriver.com>
+
+ faillock: create tallydir before creating tallyfile.
+ The default tallydir is "/var/run/faillock", and this default
+ tallydir may not exist.
+
+ Function open may fail as tallydir does not exist when creating
+ the tallyfile. Therefore, faillock will not work well.
+
+ Fix this problem by creating tallydir before creating tallyfile
+ when the tallydir does not exist.
+
+2021-01-27 Ludwig Nussel <ludwig.nussel@suse.de>
+
+ pam_securetty: don't complain about missing config.
+ Not shipping a config file should be perfectly valid for distros while
+ still having eg login pre-configured to honor securetty when present.
+ PAM itself doesn't ship any template either. So avoid spamming the log
+ file if /etc/securetty wasn't found.
+
+2021-01-25 Kolja <razzeee@gmail.com>
+
+ faillock: Use pluralization via dngettext or fallback.
+
+2021-01-18 Andreas-Johann Ø Ulvestad <aj@aju.no>
+ Andreas-Johann Ø Ulvestad <aj@aju.no>
+
+ po: update translations using Weblate (Norwegian Nynorsk)
+ Currently translated at 100.0% (99 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/nn/
+
+2021-01-18 Jan Kuparinen <copper_fin@hotmail.com>
+ Jan Kuparinen <copper_fin@hotmail.com>
+
+ po: update translations using Weblate (Finnish)
+ Currently translated at 100.0% (99 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/fi/
+
+2020-12-28 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_umask: fix handling of umask parameter.
+ Potential failures of strdup(3) were ignored, fix this by not using
+ strdup(3) at all.
+
+ * modules/pam_umask/pam_umask.c (struct options_t): Add const to umask
+ field, add login_umask field.
+ (parse_option): Do not use strdup.
+ (get_options): Assign pam_modutil_search_key return values
+ to options->login_umask.
+ (pam_sm_open_session): Free options.login_umask instead of
+ options.umask.
+
+2020-12-28 Sven Hartge <sven@svenhartge.de>
+
+ pam_setquota: Minor whitespace, spelling and mail address fixes.
+
+2020-12-26 Vlad <milovlad@outlook.com>
+ Vlad <milovlad@outlook.com>
+
+ po: update translations using Weblate (Romanian)
+ Currently translated at 100.0% (99 of 99 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ro/
+
+2020-12-23 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_mkhomedir: fix umask wording in documentation.
+ * modules/pam_mkhomedir/pam_mkhomedir.8.xml (umask): Fix wording.
+
+2020-12-20 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Bulgarian)
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/bg/
+
+2020-12-17 Issam E. Maghni <issam.e.maghni@mailbox.org>
+
+ configure: test -a|o is not POSIX.
+ Fixes `test: too many arguments` when building Linux-PAM using sbase.
+ This is due to a non-POSIX syntax test ... -a ... and test ... -o ....
+
+ > The XSI extensions specifying the -a and -o binary primaries and the
+ > '(' and ')' operators have been marked obsolescent.
+
+ See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html
+
+2020-12-08 Christian Göttsche <cgzones@googlemail.com>
+
+ pam_namespace: check for string_to_security_class failure.
+ Check for the unlikely case string_to_security_class() does not find the
+ associated SELinux security class.
+ This will only happen if the loaded SELinux policy does not define the
+ class "dir" (which no sane policy does) or querying the selinuxfs
+ fails.
+
+ Suggested by #309
+
+2020-12-08 Christian Göttsche <cgzones@googlemail.com>
+
+ pam_selinux: check for string_to_security_class failure.
+ Check for the unlikely case string_to_security_class() does not find the
+ associated SELinux security class.
+ This will only happen if the loaded SELinux policy does not define the
+ class "chr_file" (which no sane policy does) or querying the selinuxfs
+ fails.
+
+ Suggested by #309
+
+2020-12-07 Tomas Mraz <tmraz@fedoraproject.org>
+
+ Clarify the effect of 'done' in documentation.
+ The done action does not terminate the stack processing in case
+ there is a failing module with bad action up in the stack.
+
+ Fixes #307
+
+ * doc/man/pam.conf-syntax.xml: Clarify the effect of 'done'.
+
+2020-11-28 Dmitry V. Levin <ldv@altlinux.org>
+
+ .github: partially migrate from ubuntu-18.04 to ubuntu-20.04.
+ * .github/workflows/ci.yml (runs-on): Switch from ubuntu-latest to
+ ubuntu-20.04 for whitespace-errors and *-x86_64 jobs. Stick with
+ ubuntu-18.04 for *-x86 and *-x32 jobs until we figure out how to
+ obtain -lcrypt on ubuntu-20.04 for these architectures.
+
+2020-11-28 Dmitry V. Levin <ldv@altlinux.org>
+
+ ci: do not install libxcrypt-dev.
+ Apparently, both -lcrypt and -lxcrypt from ubuntu-18.04 already provide
+ crypt_r.
+
+ * ci/install-dependencies.sh (packages): Remove libxcrypt-dev.
+
+2020-11-24 Thomas M. DuBuisson <tommd@muse.dev>
+
+ pam_unix: fix memory leak on error path.
+ * modules/pam_unix/bigcrypt.c (bigcrypt) [HAVE_CRYPT_R]: Do not leak
+ cdata if crypt_r() fails.
+
+2020-11-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ maint: update release procedure.
+ * maint/README-release: Update.
+
+2020-11-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update .po and .pot files.
+ Regenerate po/Linux-PAM.pot and po/*.po using "make -C po update-po"
+ command. This removes translations of pam_cracklib, pam_tally, and
+ pam_tally2 modules that were removed in v1.5.0.
+
+ Complements: v1.5.0~10 "Remove deprecated pam_cracklib module"
+ Complements: v1.5.0~9 "Remove deprecated pam_tally and pam_tally2 modules"
+
+2020-11-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: cleanup POTFILES.in.
+ * po/POTFILES.in: Strip "./" prefix, sort the list.
+
+2020-11-24 Jan Kuparinen <copper_fin@hotmail.com>
+ Jan Kuparinen <copper_fin@hotmail.com>
+
+ po: update translations using Weblate (Finnish)
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/fi/
+
+2020-11-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ Prepare for 1.5.1 release.
+ * configure.ac (AC_INIT): Raise version to 1.5.1.
+
+ Fix various typos found using codespell tool.
+ * modules/pam_limits/limits.conf: Replace "overriden" with "overridden".
+ * modules/pam_mkhomedir/mkhomedir_helper.c (create_homedir): Replace
+ "preseves" with "preserves".
+ * modules/pam_setquota/pam_setquota.8.xml: Replace "specifed" with
+ "specified".
+ * modules/pam_setquota/pam_setquota.c (pam_sm_open_session): Replace
+ "fileystem" with "filesystem", "conditons" with "conditions".
+
+ Fix grammar: replace "an user" with "a user" everywhere.
+ * NEWS: Replace "an user" with "a user".
+ * modules/pam_faillock/pam_faillock.8.xml: Likewise.
+ * modules/pam_lastlog/pam_lastlog.8.xml: Likewise.
+ * modules/pam_limits/pam_limits.c: Likewise.
+ * modules/pam_sepermit/sepermit.conf: Likewise.
+ * modules/pam_tty_audit/pam_tty_audit.8.xml: Likewise.
+ * modules/pam_userdb/pam_userdb.c: Likewise.
+
+2020-11-24 Tomas Mraz <tmraz@fedoraproject.org>
+
+ pam_wheel: Use pam_modutil_user_in_group_uid_gid instead of reimplementation
+ The pam_modutil_user_in_group... functions use getgrouplist to check
+ the membership so they work also in setups with remote services which do
+ not provide group members in struct group.
+
+ Fixes #297
+
+ * modules/pam_wheel/pam_wheel.c (perform_check): Call pam_modutil_user_in_group_uid_gid
+ to do the group check.
+
+2020-11-24 Tomas Mraz <tmraz@fedoraproject.org>
+
+ Add NEWS entries for the 1.5.1 security fix release.
+
+2020-11-20 Tomas Mraz <tmraz@fedoraproject.org>
+
+ Second blank check with root for non-existent users must never return 1.
+ The commit af0faf66 ("pam_unix: avoid determining if user exists") introduced
+ a regression where the blank check could return 1 if root had an empty
+ password hash because in the second case the password hash of root was
+ used. We now always return 0 in this case.
+
+ The issue was found by Johannes Löthberg.
+
+ Fixes #284
+
+ * modules/pam_unix/support.c (_unix_blankpasswd): Make the loop
+ to cover the complete blank check so both existing and non existing
+ cases are identical except for the possible return value.
+
+2020-11-12 Tavian Barnes <tavianator@tavianator.com>
+
+ faillock: Add a nodelay option.
+ Fixes #295
+
+2020-11-10 Allison Karlitskaya <allison.karlitskaya@redhat.com>
+
+ libpam: add supplementary groups on priv drop.
+ Replace the setgroups(0, NULL) call in pam_modutil_drop_priv() with a
+ call to initgroups(). This makes sure that the user's supplementary
+ groups are also configured. Fall back to setgroups(0, NULL) in case the
+ initgroups() call fails.
+
+ This fixes the permission check in pam_motd: this feature was intended
+ to allow setting permissions on a motd file to prevent it from being
+ shown to users who are not a member of a particular group (for example,
+ wheel).
+
+ Closes #292
+
+2020-11-05 Tomas Mraz <tmraz@fedoraproject.org>
+
+ pam_env: deprecation notice of reading the user environment.
+ * modules/pam_env/pam_env.8.xml: Add the notice to the manual.
+ * modules/pam_env/pam_env.c (_pam_parse): Log deprecation warning
+ if user_readenv is set.
+
+2020-11-04 Andreas Schneider <asn@cryptomilk.org>
+
+ libpam: Fix memory leak on error path in _pam_start_internal()
+
+2020-11-04 Andreas Schneider <asn@cryptomilk.org>
+
+ libpam: Fix memory leak with pam_start_confdir()
+ Found with AddressSanitzer in pam_wrapper tests.
+
+ ==985738== 44 bytes in 4 blocks are definitely lost in loss record 18 of 18
+ ==985738== at 0x4839809: malloc (vg_replace_malloc.c:307)
+ ==985738== by 0x48957E1: _pam_strdup (pam_misc.c:129)
+ ==985738== by 0x489851B: _pam_start_internal (pam_start.c:85)
+ ==985738== by 0x4849C8C: libpam_pam_start_confdir (pam_wrapper.c:418)
+ ==985738== by 0x484AF94: pwrap_pam_start (pam_wrapper.c:1461)
+ ==985738== by 0x484AFEE: pam_start (pam_wrapper.c:1483)
+ ==985738== by 0x401723: setup_noconv (test_pam_wrapper.c:189)
+ ==985738== by 0x4889E82: ??? (in /usr/lib64/libcmocka.so.0.7.0)
+ ==985738== by 0x488A444: _cmocka_run_group_tests (in /usr/lib64/libcmocka.so.0.7.0)
+ ==985738== by 0x403EE5: main (test_pam_wrapper.c:1059)
+
+2020-11-04 Tomas Mraz <tmraz@fedoraproject.org>
+
+ pam_env: allow environment files without EOL at EOF.
+ Fixes #263
+
+ * modules/pam_env/pam_env.c (_assemble_line): Do not error out if at feof()
+
+2020-11-03 Dmitry V. Levin <ldv@altlinux.org>
+
+ Prepare for 1.5.0 release.
+ * configure.ac (AC_INIT): Raise version to 1.5.0.
+ * NEWS: Update.
+
+2020-11-03 ikerexxe <ipedrosa@redhat.com>
+
+ pam_ftp: fix potential memory leak.
+ modules/pam_ftp/pam_ftp.c: free anon_user before returning as it may be
+ still in use.
+
+ pam_faillock: fix unread store statement.
+ modules/pam_faillock/main.c: remove store statement since the value is
+ only read in the enclosing expression.
+
+ pam_dispatch: fix unread store statement.
+ libpam/pam_dispatch: remove store statement since the value is never
+ read.
+
+2020-10-29 Dmitry V. Levin <ldv@altlinux.org>
+
+ Remove deprecated pam_tally and pam_tally2 modules.
+ * ci/run-build-and-tests.sh (DISTCHECK_CONFIGURE_FLAGS): Remove
+ --enable-tally --enable-tally2.
+ * configure.ac: Remove --enable-tally and --enable-tally2 options.
+ (AM_CONDITIONAL): Remove COND_BUILD_PAM_TALLY and COND_BUILD_PAM_TALLY2.
+ (AC_CONFIG_FILES): Remove modules/pam_tally/Makefile and
+ modules/pam_tally2/Makefile.
+ * doc/sag/pam_tally.xml: Remove.
+ * doc/sag/pam_tally2.xml: Likewise.
+ * doc/sag/Linux-PAM_SAG.xml: Do not include pam_tally.xml and
+ pam_tally2.xml.
+ * modules/Makefile.am (MAYBE_PAM_TALLY, MAYBE_PAM_TALLY2): Remove.
+ (SUBDIRS): Remove MAYBE_PAM_TALLY and MAYBE_PAM_TALLY2.
+ * modules/pam_tally/.gitignore: Remove.
+ * modules/pam_tally/Makefile.am: Likewise.
+ * modules/pam_tally/README.xml: Likewise.
+ * modules/pam_tally/faillog.h: Likewise.
+ * modules/pam_tally/pam_tally.8.xml: Likewise.
+ * modules/pam_tally/pam_tally.c: Likewise.
+ * modules/pam_tally/pam_tally_app.c: Likewise.
+ * modules/pam_tally/tst-pam_tally: Likewise.
+ * modules/pam_tally2/.gitignore: Likewise.
+ * modules/pam_tally2/Makefile.am: Likewise.
+ * modules/pam_tally2/README.xml: Likewise.
+ * modules/pam_tally2/pam_tally2.8.xml: Likewise.
+ * modules/pam_tally2/pam_tally2.c: Likewise.
+ * modules/pam_tally2/pam_tally2_app.c: Likewise.
+ * modules/pam_tally2/tallylog.h: Likewise.
+ * modules/pam_tally2/tst-pam_tally2: Likewise.
+ * modules/pam_timestamp/pam_timestamp_check.8.xml: Fix typo by replacing
+ pam_tally with pam_timestamp.
+ * po/POTFILES.in: Remove ./modules/pam_tally/pam_tally_app.c,
+ ./modules/pam_tally/pam_tally.c, ./modules/pam_tally2/pam_tally2_app.c,
+ and ./modules/pam_tally2/pam_tally2.c.
+ * NEWS: Document this change.
+
+ Remove deprecated pam_cracklib module.
+ * ci/install-dependencies.sh: Remove libcrack2-dev.
+ * ci/run-build-and-tests.sh (DISTCHECK_CONFIGURE_FLAGS): Remove
+ --enable-cracklib=check.
+ * conf/pam.conf: Remove references to pam_cracklib.so.
+ * configure.ac: Remove --enable-cracklib option.
+ (AC_SUBST): Remove LIBCRACK.
+ (AM_CONDITIONAL): Remove COND_BUILD_PAM_CRACKLIB.
+ (AC_CONFIG_FILES): Remove modules/pam_cracklib/Makefile.
+ * doc/sag/pam_cracklib.xml: Remove.
+ * doc/sag/Linux-PAM_SAG.xml: Do not include pam_cracklib.xml.
+ * modules/Makefile.am (MAYBE_PAM_CRACKLIB): Remove.
+ (SUBDIRS): Remove MAYBE_PAM_CRACKLIB.
+ * modules/pam_cracklib/Makefile.am: Remove.
+ * modules/pam_cracklib/README.xml: Likewise.
+ * modules/pam_cracklib/pam_cracklib.8.xml: Likewise.
+ * modules/pam_cracklib/pam_cracklib.c: Likewise.
+ * modules/pam_cracklib/tst-pam_cracklib: Likewise.
+ * xtests/tst-pam_cracklib1.c: Likewise.
+ * xtests/tst-pam_cracklib1.pamd: Likewise.
+ * xtests/tst-pam_cracklib2.c: Likewise.
+ * xtests/tst-pam_cracklib2.pamd: Likewise.
+ * modules/pam_pwhistory/pam_pwhistory.8.xml: Replace pam_cracklib
+ in examples with pam_passwdqc.
+ * modules/pam_unix/pam_unix.8.xml: Likewise.
+ * po/POTFILES.in: Remove ./modules/pam_cracklib/pam_cracklib.c.
+ * xtests/.gitignore: Remove tst-pam_cracklib1 and tst-pam_cracklib2.
+ * xtests/Makefile.am (EXTRA_DIST): Remove tst-pam_cracklib1.pamd
+ and tst-pam_cracklib2.pamd.
+ (XTESTS): Remove tst-pam_cracklib1 and tst-pam_cracklib2.
+ * NEWS: Document this change.
+
+2020-10-27 DDoSolitary <DDoSolitary@gmail.com>
+
+ pam_env: fix a typo in doc of pam_env.conf.
+
+2020-10-25 Christian Göttsche <cgzones@googlemail.com>
+
+ Add missing format function attributes and enable -Wmissing-format-attribute
+ Exported functions already have these attributes, add them to other functions.
+ This enables compilers to find format specifier mismatches, like:
+
+ foo_print("Hello %d", "world")
+
+ * m4/warn_lang_flags.m4 (gl_WARN_ADD): Add -Wmissing-format-attribute.
+ * conf/pam_conv1/Makefile.am (AM_CFLAGS): Add -I$(top_srcdir)/libpam/include.
+ * conf/pam_conv1/pam_conv_y.y: Include <security/_pam_types.h>.
+ (yyerror): Add printf format attribute.
+ * modules/pam_pwhistory/opasswd.c (helper_log_err): Likewise.
+ * modules/pam_rootok/pam_rootok.c (log_callback): Likewise.
+ * modules/pam_tally/pam_tally.c (tally_log): Likewise.
+ * modules/pam_tally2/pam_tally2.c (tally_log): Likewise.
+ * modules/pam_unix/passverify.c (helper_log_err): Likewise.
+
+2020-10-21 Milo Casagrande <milo@milo.name>
+ Milo Casagrande <milo@milo.name>
+
+ po: update translations using Weblate (Italian)
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/it/
+
+2020-10-21 Yaron Shahrabani <sh.yaron@gmail.com>
+ Yaron Shahrabani <sh.yaron@gmail.com>
+
+ po: update translations using Weblate (Hebrew)
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/he/
+
+2020-10-21 ikerexxe <ipedrosa@redhat.com>
+
+ pam_motd: unset prompt value to drop privileges.
+ modules/pam_motd/pam_motd.c: set NULL value instead of "key user" for the
+ prompt when dropping privileges.
+
+2020-10-20 Tomas Mraz <tmraz@fedoraproject.org>
+
+ pam_modutil_sanitize_fds: Add explicit casts to avoid warnings.
+
+ Revert "libpam/pam_modutil_sanitize.c: optimize the way to close fds"
+ This reverts commit 1b087edc7f05237bf5eccc405704cd82b848e761.
+
+2020-10-14 ikerexxe <ipedrosa@redhat.com>
+
+ pam_motd: document file filtering.
+ modules/pam_motd/pam_motd.8.xml: document file filtering of motd
+ messages.
+ NEWS: annotate change.
+
+2020-10-14 ikerexxe <ipedrosa@redhat.com>
+
+ pam_motd: filter motd by user and group.
+ modules/pam_motd/pam_motd.c: filter motd by user and group owning the
+ proper files. This is achieved by changing the ids of the process
+ reading the files from root to the target user.
+
+ Resolves:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1861640
+
+2020-10-13 Mikhail Labiuk <m.labyuk@omprussia.ru>
+
+ pam_faillock: fix invalid error message.
+ args_parse function pass "conf=" argument to set_conf_opt() after handling by self.
+ set_conf_opt is not able to handle "conf" argument and write error:
+ sddm-helper[415]: pam_faillock(sddm:auth): Unknown option: conf
+
+2020-10-05 ikerexxe <ipedrosa@redhat.com>
+
+ pam_namespace: polyinstantiation refer to gdm doc.
+ modules/pam_namespace/pam_namespace.8.xml: delete obsolete information
+ about polyinstantiation and refer to gdm's documentation.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1861841
+
+2020-09-30 Anton D. Kachalov <rnouse@google.com>
+
+ Prevent SEGFAULT for unknown UID.
+ When running systemd service with DynamicUser being set, the dynamic UID
+ might be not mapped to user name (/etc/nsswitch.conf is not configured
+ with systemd nss module).
+
+ The getuidname() routine might return NULL and this is not checked by callee.
+
+2020-09-10 ikerexxe <ipedrosa@redhat.com>
+
+ pam_wheel: clarify use_uid option in man page.
+ modules/pam_wheel/pam_wheel.8.xml: indicate that use_uid option uses the
+ real uid of the calling process.
+
+2020-09-10 ikerexxe <ipedrosa@redhat.com>
+
+ pam_wheel: if getlogin fails fallback to PAM_RUSER.
+ modules/pam_wheel/pam_wheel.c: if getlogin fails to obtain the real user
+ ID, then try with PAM_RUSER.
+
+ Resolves:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1866866
+
+2020-09-10 ikerexxe <ipedrosa@redhat.com>
+
+ pam_wheel: improve coding style.
+ modules/pam_wheel/pam_wheel.c: improve indentation and explicitly state
+ condition statements
+
+2020-08-08 Dmitry V. Levin <ldv@altlinux.org>
+
+ configure: add --disable-unix option.
+ Some distributions do not build pam_unix, e.g. ALT uses pam_tcb instead.
+ Add a configure option to disable build of pam_unix so that those who
+ choose not to build pam_unix no longer have to edit modules/Makefile.am
+ file. The default is unchanged, i.e. build of pam_unix is enabled.
+
+ * configure.ac (AC_ARG_ENABLE): Add unix.
+ (AM_CONDITIONAL): Add COND_BUILD_PAM_UNIX.
+ * modules/Makefile.am [COND_BUILD_PAM_UNIX] (MAYBE_PAM_UNIX): Define.
+ (SUBDIRS): Replace pam_unix with $(COND_BUILD_PAM_UNIX).
+
+2020-08-07 Dmitry V. Levin <ldv@altlinux.org>
+
+ Build all installed executables with -Wl,-z,now if available.
+ This makes them built with full RELRO if -Wl,-z,relro is specified.
+
+ * m4/ld-z-now.m4: New file.
+ * m4/.gitignore: Add it to exclude list.
+ * configure.ac: Call PAM_LD_Z_NOW.
+ (EXE_LDFLAGS): Append $ZNOW_LDFLAGS.
+
+2020-08-07 Dmitry V. Levin <ldv@altlinux.org>
+
+ modules: build all helpers with proper CFLAGS and LDFLAGS.
+ This makes all installed executables built with @EXE_CFLAGS@ and
+ @EXE_LDFLAGS@.
+
+ * modules/pam_mkhomedir/Makefile.am (mkhomedir_helper_CFLAGS,
+ mkhomedir_helper_LDFLAGS): New variables.
+ * modules/pam_tally/Makefile.am (pam_tally_CFLAGS, pam_tally_LDFLAGS):
+ Likewise.
+ * modules/pam_tally2/Makefile.am (pam_tally2_CFLAGS,
+ pam_tally2_LDFLAGS): Likewise.
+
+2020-08-07 Dmitry V. Levin <ldv@altlinux.org>
+
+ build: rename PIE_* AC_SUBST variables to EXE_*
+ There are going to be other options added to CFLAGS and LDFLAGS
+ of executables made along with modules.
+
+ * configure.ac (EXE_CFLAGS, EXE_LDFLAGS): New variables initialized from
+ PIE_CFLAGS and PIE_LDFLAGS, respectively. AC_SUBST them instead of
+ PIE_CFLAGS and PIE_LDFLAGS. All users updated.
+
+2020-08-07 Dmitry V. Levin <ldv@altlinux.org>
+
+ m4: make libprelude-config diagnostics less noisy.
+ Before this change, every normal build of Linux-PAM used to contain
+ the following diagnostics:
+
+ checking for libprelude-config... no
+ checking for libprelude - version >= 0.9.0... no
+ *** The libprelude-config script installed by LIBPRELUDE could not be found
+ *** If LIBPRELUDE was installed in PREFIX, make sure PREFIX/bin is in
+ *** your path, or set the LIBPRELUDE_CONFIG environment variable to the
+ *** full path to libprelude-config.
+
+ Given that libprelude-config is rarely used nowadays,
+ the first two lines of diagnostics should be enough.
+
+ * m4/libprelude.m4 (AM_PATH_LIBPRELUDE): When libprelude-config
+ is not found, do not print the lengthy diagnostics unless
+ --with-libprelude-prefix was specified.
+
+2020-08-07 Dmitry V. Levin <ldv@altlinux.org>
+
+ configure.ac: rewrite --disable-pie and -fpie/pie check.
+ * configure.ac: Rewrite -fpie/pie check using AC_LINK_IFELSE to make
+ the code more readable. Add --enable-pie=check support and make it
+ the default, terminate if --enable-pie is specified but -fpie/pie
+ support is not available.
+
+ m4: rewrite ld --no-undefined check.
+ * m4/ld-no-undefined.m4: Rewrite using AC_LINK_IFELSE to create a more readable
+ autoconf macro.
+
+ m4: rewrite ld --as-needed check.
+ * m4/ld-as-needed.m4: Rewrite using AC_LINK_IFELSE to create a more readable
+ autoconf macro.
+
+ m4: rewrite ld -O1 check.
+ * m4/ld-O1.m4: Rewrite using AC_LINK_IFELSE to create a more readable
+ autoconf macro.
+
+2020-08-07 Dmitry V. Levin <ldv@altlinux.org>
+
+ m4: rewrite __attribute__((unused)) check.
+ Rewrite using AC_CACHE_CHECK to create a more readable autoconf macro.
+
+ * m4/attribute.m4: New file.
+ * m4/japhar_grep_cflags.m4: Remove.
+ * m4/.gitignore: Replace japhar_grep_cflags.m4 with attribute.m4.
+ * configure.ac: Replace AC_C___ATTRIBUTE__ with PAM_ATTRIBUTE_UNUSED.
+
+2020-08-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ build: add -Wcast-align=strict to WARN_CFLAGS.
+ This way -Wcast-align will be tested regardless of the target machine.
+
+ * m4/warn_lang_flags.m4: Add gl_WARN_ADD([-Wcast-align=strict]).
+
+2020-08-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ configure.ac: rewrite WARN_CFLAGS initialization.
+ As the old machinery was not prepared for adding compiler options
+ conditionally when the compiler supports them, replace it with
+ a new machinery that implements this.
+
+ * m4/warnings.m4: New file.
+ * m4/warn_lang_flags.m4: Likewise.
+ * m4/.gitignore: Add exclusions for them.
+ * m4/japhar_grep_cflags.m4 (JAPHAR_GREP_CFLAGS): Remove.
+ * configure.ac: Call pam_WARN_LANG_FLAGS. Remove all uses
+ of JAPHAR_GREP_CFLAGS.
+
+2020-08-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix -Wcast-align compilation warnings on arm.
+ Apparently, gcc is also not smart enough to infer the alignment
+ of structure fields, for details see
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89133
+
+ Use unions to avoid these casts altogether, this fixes compilation
+ warnings reported by gcc on arm, e.g.:
+
+ md5.c: In function 'MD5Update':
+ md5.c:92:35: error: cast increases required alignment of target type [-Werror=cast-align]
+ 92 | MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ | ^
+ md5.c:101:35: error: cast increases required alignment of target type [-Werror=cast-align]
+ 101 | MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ | ^
+ md5.c: In function 'MD5Final':
+ md5.c:136:35: error: cast increases required alignment of target type [-Werror=cast-align]
+ 136 | MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ | ^
+ md5.c:147:9: error: cast increases required alignment of target type [-Werror=cast-align]
+ 147 | memcpy((uint32 *)ctx->in + 14, ctx->bits, 2*sizeof(uint32));
+ | ^
+ md5.c:149:34: error: cast increases required alignment of target type [-Werror=cast-align]
+ 149 | MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ | ^
+
+ * modules/pam_namespace/md5.h (struct MD5Context): Replace "buf" and
+ "in" fields with unions. All users updated.
+ * modules/pam_unix/md5.h (struct MD5Context): Likewise.
+ * modules/pam_timestamp/sha1.h (struct sha1_context.pending): Replace
+ with a union. All users updated.
+
+ Complements: v1.4.0~195 ("Fix most of clang -Wcast-align compilation warnings")
+
+2020-08-05 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_namespace: fix big-endian check in md5 implementation.
+ * modules/pam_namespace/md5.c: Do not check against the list of
+ architectures that are known to be little-endian, instead check
+ for WORDS_BIGENDIAN macro defined by AC_C_BIGENDIAN autoconf macro
+ on big-endian platforms.
+
+2020-08-05 Christian Göttsche <cgzones@googlemail.com>
+
+ pam_namespace: skip context translation.
+ These retrieved contexts are just passed to libselinux functions and not
+ printed or otherwise made available to the outside, so a context
+ translation to human readable MCS/MLS labels is not needed.
+ (see man:setrans.conf(5))
+
+ pam_xauth: skip context translation.
+ The retrieved context is just passed to libselinux functions and not
+ printed or otherwise made available to the outside, so a context
+ translation to human readable MCS/MLS labels is not needed.
+ (see man:setrans.conf(5))
+
+ pam_xauth: replace deprecated security_context_t.
+ libselinux 3.1 deprecated the typedef security_context_t.
+ Use the underlaying type.
+
+ pam_unix: skip context translation.
+ These retrieved contexts are just passed to libselinux functions and not
+ printed or otherwise made available to the outside, so a context
+ translation to human readable MCS/MLS labels is not needed.
+ (see man:setrans.conf(5))
+
+ pam_unix: replace deprecated security_context_t.
+ libselinux 3.1 deprecated the typedef security_context_t.
+ Use the underlaying type.
+
+ pam_rootok: skip context translation.
+ The retrieved context is just passed to the libselinux function
+ 'selinux_check_access()', so a context translation to human readable
+ MCS/MLS labels is not needed. (see man:setrans.conf(5))
+
+ pam_rootok: replace deprecated security_context_t.
+ libselinux 3.1 deprecated the typedef security_context_t.
+ Use the underlaying type.
+
+ pam_namespace: replace deprecated matchpathcon.
+ The matchpathcon family is deprecated.
+ Use the selabel family.
+
+ pam_namespace: replace deprecated security_context_t.
+ libselinux 3.1 deprecated the typedef security_context_t.
+ Use the underlaying type.
+
+2020-08-03 Christian Göttsche <cgzones@googlemail.com>
+
+ autotools: enable warnings.
+
+2020-08-03 Christian Göttsche <cgzones@googlemail.com>
+
+ autotools: update deprecated macros.
+ see https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Obsolete-Macros.html
+
+ - update AC_HELP_STRING to AS_HELP_STRING
+ - update AC_TRY_COMPILE to AC_COMPILE_IFELSE
+ - update AC_TRY_RUN to AC_RUN_IFELSE
+ - update AC_TRY_LINK to AC_LINK_IFELSE
+
+2020-08-03 Issam Maghni <concatime@users.noreply.github.com>
+
+ configure.ac: fix typo in --with-kernel-overflow-uid= option to match its documentation
+
+2020-07-22 Tomas Mraz <tmraz@fedoraproject.org>
+
+ pam_unix: Add comment for the ignored PAM_AUTHTOK_ERR case.
+ * modules/pam_unix/pam_unix_acct.c (pam_sm_acct_mgmt): Add comment
+ about the reason for ignoring PAM_AUTHTOK_ERR.
+
+2020-07-22 Tomas Mraz <tmraz@fedoraproject.org>
+
+ Fix missing initialization of daysleft.
+ The daysleft otherwise stays uninitialized if there is no shadow entry.
+
+ Regression from commit f5adefa.
+
+ Fixes #255
+
+ * modules/pam_unix/pam_unix_acct.c (pam_sm_acct_mgmt): Initialize daysleft.
+
+2020-07-20 Charles Lee <lchopn@gmail.com>
+
+ po: update translations using Weblate (Chinese (Simplified))
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/zh_CN/
+
+2020-07-20 ikerexxe <ipedrosa@redhat.com>
+
+ pam_pwhistory: add helper to handle SELinux.
+ The purpose of the helper is to enable tighter confinement of login and
+ password changing services. The helper is thus called only when SELinux
+ is enabled on the system.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/247
+
+2020-07-19 A S Alam <amanpreet.alam@gmail.com>
+
+ po: update translations using Weblate (Punjabi)
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/pa/
+
+2020-07-15 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_inline.h: cleanup pam_read_passwords a bit.
+ * libpam/include/pam_inline.h (pam_read_passwords): Increment pptr once
+ instead of using pptr+1 several times. This change is not expected
+ to affect the code generated by the compiler as the latter is likely
+ to perform the optimization itself.
+
+2020-07-15 ikerexxe <ipedrosa@redhat.com>
+
+ Move read_passwords function from pam_unix to pam_inline.h.
+ [ldv: rewrote commit message]
+
+ * modules/pam_unix/passverify.h (read_passwords): Remove prototype.
+ * modules/pam_unix/passverify.c (read_passwords): Move ...
+ * libpam/include/pam_inline.h: ... here, rename to pam_read_passwords,
+ add static inline qualifiers.
+ Include <unistd.h> and <errno.h>.
+ * modules/pam_unix/unix_chkpwd.c: Include "pam_inline.h".
+ (main): Replace read_passwords with pam_read_passwords.
+ * modules/pam_unix/unix_update.c: Include "pam_inline.h".
+ (set_password): Replace read_passwords with pam_read_passwords.
+
+2020-07-15 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_unix: use PAM_MAX_RESP_SIZE instead of its alias MAXPASS.
+ * modules/pam_unix/passverify.h (MAXPASS): Remove.
+ * modules/pam_unix/passverify.c (read_passwords): Replace MAXPASS
+ with PAM_MAX_RESP_SIZE.
+ * modules/pam_unix/pam_unix_passwd.c (_pam_unix_approve_pass): Likewise.
+ * modules/pam_unix/support.c (_unix_verify_password): Likewise.
+ * modules/pam_unix/unix_chkpwd.c (main): Likewise.
+ * modules/pam_unix/unix_update.c (set_password): Likewise.
+
+2020-07-09 Lucas Ramage <ramage.lucas@protonmail.com>
+
+ pam_stress: create man page.
+ Resolves: https://github.com/linux-pam/linux-pam/issues/148
+
+ * modules/pam_stress/README: Remove.
+ * modules/pam_stress/README.xml: New file.
+ * modules/pam_stress/pam_stress.8.xml: Likewise.
+ * modules/pam_stress/Makefile.am (MAINTAINERCLEANFILES): Add
+ $(MANS) and README.
+ (EXTRA_DIST): Add $(XMLS).
+ (XMLS): Add README.xml and pam_stress.8.xml.
+ [HAVE_DOC] (dist_man_MANS): Add pam_stress.8.
+ [ENABLE_REGENERATE_MAN] (dist_noinst_DATA): Add README.
+ [ENABLE_REGENERATE_MAN]: Include $(top_srcdir)/Make.xml.rules.
+ * modules/pam_stress/.gitignore: Remove.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/184
+
+2020-07-05 Dmitry V. Levin <ldv@altlinux.org>
+
+ po: update translations using Weblate (Slovak)
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/sk/
+
+ po: update translations using Weblate (Portuguese (Brazil))
+
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/pt_BR/
+
+ po: update translations using Weblate (Dutch)
+
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/nl/
+
+ po: update translations using Weblate (Italian)
+
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/it/
+
+ po: update translations using Weblate (German)
+
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/de/
+
+ po: update translations using Weblate (Catalan)
+
+ Currently translated at 100.0% (122 of 122 strings).
+
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ca/
+
+2020-07-05 Yaron Shahrabani <sh.yaron@gmail.com>
+
+ Translated using Weblate (Hebrew)
+ Currently translated at 75.4% (92 of 122 strings)
+
+ Translation: linux-pam/master
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/he/
+
+ Translated using Weblate (Arabic)
+
+ Currently translated at 61.4% (75 of 122 strings)
+
+ Translation: linux-pam/master
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/ar/
+
+2020-07-02 Dmitry V. Levin <ldv@altlinux.org>
+
+ misc_conv: fix potential information leak on error path.
+ * libpam_misc/misc_conv.c (read_string): Clear the stack buffer from
+ data read earlier from stdin in case of a read error.
+
+2020-07-01 ikerexxe <ipedrosa@redhat.com>
+
+ pam_loginuid: fix unlikely negative 3rd argument of strncmp on error path
+ [ldv: rewrote commit message]
+
+ * modules/pam_loginuid/pam_loginuid.c (set_loginuid): Do not pass to
+ strncmp the return value of pam_modutil_read in an unlikely case when
+ the latter fails to read from /proc/self/uid_map.
+
+2020-07-01 ikerexxe <ipedrosa@redhat.com>
+
+ pam_namespace, pam_mkhomedir: fix unlikely descriptor leaks on error path
+ [ldv: rewrote commit message]
+
+ * modules/pam_mkhomedir/mkhomedir_helper.c (create_homedir): Close just
+ opened file descriptor "srcfd" in an unlikely case when it cannot be
+ fstat'ed.
+ * modules/pam_namespace/pam_namespace.c (create_instance): Close just
+ opened file descriptor "fd" in an unlikely case when it cannot be
+ fstat'ed.
+
+2020-07-01 ikerexxe <ipedrosa@redhat.com>
+
+ pam_rootok: fix use of va_list.
+ CPPCHECK_WARNING (CWE-843):
+ error[va_end_missing]: va_list 'ap' was opened but not closed by
+ va_end().
+
+ [ldv: According to POSIX documentation, each invocation of va_start()
+ must be matched by a corresponding invocation of va_end().
+
+ According to the GNU libc documentation, "with most C compilers,
+ calling 'va_end' does nothing. This is always true in the GNU C
+ compiler. But you might as well call 'va_end' just in case your
+ program is someday compiled with a peculiar compiler."
+
+ The main reason for applying this change is to pacify static analysis
+ tools like cppcheck that insist on strict POSIX conformance in this
+ respect.]
+
+2020-07-01 ikerexxe <ipedrosa@redhat.com>
+
+ misc_conv: fix potential stack buffer overflow.
+ [ldv: rewrote commit message]
+
+ * libpam_misc/misc_conv.c (read_string): Use _pam_overwrite_n instead
+ of _pam_overwrite to clear stack buffer "line" because the latter does
+ not have to be null-terminated.
+
+2020-07-01 Yaron Shahrabani <sh.yaron@gmail.com>
+
+ Translated using Weblate (Hebrew)
+ Currently translated at 60.6% (74 of 122 strings)
+
+ Translation: linux-pam/master
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/he/
+
+2020-06-30 Dmitry V. Levin <ldv@altlinux.org>
+
+ misc_conv: remove redundant check.
+ * libpam_misc/misc_conv.c (read_string): Remove redundant nc > 0
+ check as it has already been tested in the previous condition.
+
+2020-06-29 ikerexxe <ipedrosa@redhat.com>
+
+ pam_limits: clarify configuration file.
+ Resolves: https://github.com/linux-pam/linux-pam/pull/249
+
+2020-06-26 Dmitry V. Levin <ldv@altlinux.org>
+
+ .gitignore: move doc-specific entries to doc/.gitignore.
+
+ .gitignore: move module-specific entries to modules/.gitignore.
+
+2020-06-26 ikerexxe <ipedrosa@redhat.com>
+
+ pam_namespace: add systemd service file to gitignore.
+ * modules/pam_namespace/.gitignore: Add pam_namespace.service.
+
+ Complements: v1.4.0~247 ("pam_namespace: secure tmp-inst directories")
+
+2020-06-26 ikerexxe <ipedrosa@redhat.com>
+
+ pam_faillock: add faillock executable to gitignore.
+ * modules/pam_faillock/.gitignore: Add faillock.
+
+ Complements: v1.4.0~76 ("pam_faillock: New module for locking after multiple auth failures")
+
+2020-06-25 ikerexxe <ipedrosa@redhat.com>
+
+ pam_env: clarify user_readenv option.
+
+2020-06-24 Baurzhan Muftakhidinov <baurthefirst@gmail.com>
+
+ Translated using Weblate (Kazakh)
+ Currently translated at 100.0% (122 of 122 strings)
+
+ Translation: linux-pam/master
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/kk/
+
+2020-06-24 Yaron Shahrabani <sh.yaron@gmail.com>
+
+ Translated using Weblate (Hebrew)
+ Currently translated at 44.2% (54 of 122 strings)
+
+ Translation: linux-pam/master
+ Translate-URL: https://translate.fedoraproject.org/projects/linux-pam/master/he/
+
+2020-06-22 Vito Caputo <vcaputo@pengaru.com>
+
+ modules/pam_limits: add support for nonewprivs.
+ Expose prctl(PR_SET_NO_NEW_PRIVS) as "nonewprivs" item.
+
+ The valid values are a boolean toggle 0/1 to keep semi-consistent
+ with the other numeric limits. It's slightly awkward as this is
+ an oddball relative to the other items in pam_limits but outside
+ of the item value itself this does seem at home in pam_limits.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/224
+ Resolves: https://github.com/linux-pam/linux-pam/pull/225
+
+2020-06-17 ikerexxe <ipedrosa@redhat.com>
+
+ pam_usertype: avoid determining if user exists.
+ Taking a look at the time for the password prompt to appear it was
+ possible to determine if a user existed in a system. Solved it by
+ matching the runtime until the password prompt was shown by always
+ checking the password hash for an existing and a non-existing user.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1629598
+
+2020-06-17 ikerexxe <ipedrosa@redhat.com>
+
+ pam_unix: avoid determining if user exists.
+ Taking a look at the time for the password prompt to appear it was
+ possible to determine if a user existed in a system. Solved it by
+ matching the runtime until the password prompt was shown by always
+ checking the password hash for an existing and a non-existing user.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1629598
+
+2020-06-17 ikerexxe <ipedrosa@redhat.com>
+
+ pam_faillock: change /run/faillock/$USER permissions to 0660.
+ Nowadays, /run/faillock/$USER files have user:root ownership and 0600
+ permissions. This forces the process that writes to these files to have
+ CAP_DAC_OVERRIDE capabilites. Just by changing the permissions to 0660
+ the capability can be removed, which leads to a more secure system.
+
+ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1661822
+
+2020-06-16 Dmitry V. Levin <ldv@altlinux.org>
+
+ pam_modutil_check_user_in_passwd: avoid timing attacks.
+ * libpam/pam_modutil_check_user.c (pam_modutil_check_user_in_passwd): Do
+ not exit the file reading loop when the user is found, continue reading
+ the file to avoid timing attacks.
+
+2020-06-15 Fabrice Fontaine <fontaine.fabrice@gmail.com>
+
+ pam_faillock: fix build on musl.
+ Use pam_modutil_check_user_in_passwd in pam_faillock.c instead of
+ fgetpwent_r which is not available on musl.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/236
+ Resolves: https://github.com/linux-pam/linux-pam/pull/237
+ Fixes: http://autobuild.buildroot.org/results/0432736ffee376dd84757469434a4bbcfdcdaf4b
+
+2020-06-15 Fabrice Fontaine <fontaine.fabrice@gmail.com>
+ Dmitry V. Levin <ldv@altlinux.org>
+
+ Move check_user_in_passwd from pam_localuser.c to pam_modutil.
+
+ * modules/pam_localuser/pam_localuser.c: Include
+ <security/pam_modutil.h>.
+ (pam_sm_authenticate): Replace check_user_in_passwd with
+ pam_modutil_check_user_in_passwd.
+ (check_user_in_passwd): Rename to pam_modutil_check_user_in_passwd,
+ move to ...
+ * libpam/pam_modutil_check_user.c: ... new file.
+ * libpam/Makefile.am (libpam_la_SOURCES): Add pam_modutil_check_user.c.
+ * libpam/include/security/pam_modutil.h
+ (pam_modutil_check_user_in_passwd): New function declaration.
+ * libpam/libpam.map (LIBPAM_MODUTIL_1.4.1): New interface.
+
+2020-06-15 Dmitry V. Levin <ldv@altlinux.org>
+
+ configure.ac: fix non-portable use of test builtin.
+ Portable code should not assume that test builtin supports == operator.
+
+ * configure.ac (opt_uidmin, opt_sysuidmin, opt_kerneloverflowuid): Fix
+ initialization.
+
+ Resolves: https://github.com/linux-pam/linux-pam/issues/241
+ Fixes: 926d7935e ("pam_usertype: new module to tell if uid is in login.defs ranges")
+
+2020-06-11 Fabrice Fontaine <fontaine.fabrice@gmail.com>
+
+ configure.ac: fix build failure when crypt() does not require libcrypt.
+ Since commit 522246d20e4cd92fadc2d760228cb7e78cbeb4c5, the build fails
+ if "none required" is returned by AC_SEARCH_LIBS for libcrypt.
+
+ Resolves: https://github.com/linux-pam/linux-pam/pull/235
+ Fixes: http://autobuild.buildroot.org/results/92b3dd7c984d2b843ac9aacacd69eec99f28743e
+ Fixes: v1.4.0~228 ("Use cached 'crypt' library result correctly")
+
+2020-06-04 Dmitry V. Levin <ldv@altlinux.org>
+
+ build: do not generate tarballs compressed with bzip2 and gzip.
+ There are tarballs compressed with xz, that should be enough.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Remove dist-bzip2, add no-dist-gzip.
+ (releasedocs): Do not create Linux-PAM-$(VERSION)-docs.tar.bz2
+ and Linux-PAM-$(VERSION)-docs.tar.gz.
+
2020-06-04 Dmitry V. Levin <ldv@altlinux.org>
maint: document release procedure.
diff --git a/Make.xml.rules.in b/Make.xml.rules.in
index daa1b97b..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@ --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.am b/Makefile.am
index 6571e2f7..deb25268 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,7 @@
# Copyright (c) 2005, 2006, 2007 Thorsten Kukuk <kukuk@thkukuk.de>
#
-AUTOMAKE_OPTIONS = 1.9 gnu dist-bzip2 dist-xz check-news
+AUTOMAKE_OPTIONS = 1.9 gnu dist-xz no-dist-gzip check-news
SUBDIRS = libpam tests libpamc libpam_misc modules po conf examples xtests
@@ -24,10 +24,6 @@ releasedocs:
rm -rf Linux-PAM-$(VERSION)
mkdir -p Linux-PAM-$(VERSION)/doc
make -C doc releasedocs
- tar zfc Linux-PAM-$(VERSION)-docs.tar.gz \
- Linux-PAM-$(VERSION)/doc
- tar jfc Linux-PAM-$(VERSION)-docs.tar.bz2 \
- Linux-PAM-$(VERSION)/doc
tar Jfc Linux-PAM-$(VERSION)-docs.tar.xz \
Linux-PAM-$(VERSION)/doc
rm -rf Linux-PAM-$(VERSION)
diff --git a/Makefile.in b/Makefile.in
index e9603c1a..f7e2c44b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -94,18 +94,21 @@ host_triplet = @host@
@HAVE_DOC_TRUE@am__append_1 = doc
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
@@ -151,8 +154,8 @@ am__recursive_targets = \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
cscope distdir distdir-am dist dist-all distcheck
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
- $(LISP)config.h.in
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
+ config.h.in
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
@@ -221,9 +224,11 @@ am__relativize = \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).tar.xz
GZIP_ENV = --best
-DIST_TARGETS = dist-xz dist-bzip2 dist-gzip
+DIST_ARCHIVES = $(distdir).tar.xz
+DIST_TARGETS = dist-xz
+# Exists only to be overridden by the user if desired.
+AM_DISTCHECK_DVI_TARGET = dvi
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
@@ -246,10 +251,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -259,12 +268,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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,7 +291,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -297,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@
@@ -325,8 +339,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -337,11 +350,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -386,7 +404,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -394,9 +411,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -406,11 +420,12 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.9 gnu dist-bzip2 dist-xz check-news
+AUTOMAKE_OPTIONS = 1.9 gnu dist-xz no-dist-gzip check-news
SUBDIRS = libpam tests libpamc libpam_misc modules po conf examples \
xtests $(am__append_1)
CLEANFILES = *~
@@ -666,6 +681,7 @@ distdir-am: $(DISTFILES)
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
$(am__post_remove_distdir)
+
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
$(am__post_remove_distdir)
@@ -677,6 +693,10 @@ dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__post_remove_distdir)
+dist-zstd: distdir
+ tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
+ $(am__post_remove_distdir)
+
dist-tarZ: distdir
@echo WARNING: "Support for distribution archives compressed with" \
"legacy program 'compress' is deprecated." >&2
@@ -719,6 +739,8 @@ distcheck: dist
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
+ *.tar.zst*) \
+ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
esac
chmod -R a-w $(distdir)
chmod u+w $(distdir)
@@ -734,7 +756,7 @@ distcheck: dist
$(DISTCHECK_CONFIGURE_FLAGS) \
--srcdir=../.. --prefix="$$dc_install_base" \
&& $(MAKE) $(AM_MAKEFLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
@@ -897,7 +919,7 @@ uninstall-am:
am--refresh check check-am clean clean-cscope clean-generic \
clean-libtool cscope cscopelist-am ctags ctags-am dist \
dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
- dist-tarZ dist-xz dist-zip distcheck distclean \
+ dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \
distclean-generic distclean-hdr distclean-libtool \
distclean-tags distcleancheck distdir distuninstallcheck dvi \
dvi-am html html-am info info-am install install-am \
@@ -921,10 +943,6 @@ releasedocs:
rm -rf Linux-PAM-$(VERSION)
mkdir -p Linux-PAM-$(VERSION)/doc
make -C doc releasedocs
- tar zfc Linux-PAM-$(VERSION)-docs.tar.gz \
- Linux-PAM-$(VERSION)/doc
- tar jfc Linux-PAM-$(VERSION)-docs.tar.bz2 \
- Linux-PAM-$(VERSION)/doc
tar Jfc Linux-PAM-$(VERSION)-docs.tar.xz \
Linux-PAM-$(VERSION)/doc
rm -rf Linux-PAM-$(VERSION)
diff --git a/NEWS b/NEWS
index e8c0de87..719b7194 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,69 @@
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.
+* pam_timestamp: changed hmac algorithm to call openssl instead of the bundled
+ sha1 implementation if selected, added option to select
+ the hash algorithm to use with HMAC.
+* Added pkgconfig files for provided libraries.
+* Added --with-systemdunitdir configure option to specify systemd unit
+ directory.
+* Added --with-misc-conv-bufsize configure option to specify the buffer size
+ in libpam_misc's misc_conv() function, raised the default value for this
+ parameter from 512 to 4096.
+* Multiple minor bug fixes, portability fixes, documentation improvements,
+ and translation updates.
+
+Release 1.5.1
+* pam_unix: fixed CVE-2020-27780 - authentication bypass when a user
+ doesn't exist and root password is blank
+* pam_faillock: added nodelay option to not set pam_fail_delay
+* pam_wheel: use pam_modutil_user_in_group to check for the group membership
+ with getgrouplist where it is available
+
+Release 1.5.0
+* Multiple minor bug fixes, portability fixes, and documentation improvements.
+* Extended libpam API with pam_modutil_check_user_in_passwd function.
+* configure: added --disable-unix option to disable build of pam_unix module.
+* pam_faillock: changed /run/faillock/$USER permissions from 0600 to 0660.
+* pam_limits: added support for nonewprivs item.
+* pam_motd: read motd files with target user credentials skipping unreadable ones.
+* pam_pwhistory: added a SELinux helper executable.
+* pam_unix, pam_usertype: implemented avoidance of certain timing attacks.
+* pam_wheel: implemented PAM_RUSER fallback for the case when getlogin fails.
+* Removed deprecated pam_cracklib module, use pam_passwdqc (from passwdqc project)
+ or pam_pwquality (from libpwquality project) instead.
+* Removed deprecated pam_tally and pam_tally2 modules, use pam_faillock instead.
+* pam_env: Reading of the user environment is deprecated and will be removed
+ at some point in the future.
+* libpam: pam_modutil_drop_priv() now correctly sets the target user's
+ supplementary groups, allowing pam_motd to filter messages accordingly
+
Release 1.4.0
* Multiple minor bug fixes and documentation improvements
* Fixed grammar of messages printed via pam_prompt
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/aclocal.m4 b/aclocal.m4
index 8ab8da24..1df70401 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.3 -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -296,7 +296,7 @@ AS_VAR_COPY([$1], [pkg_cv_][$1])
AS_VAR_IF([$1], [""], [$5], [$4])dnl
])dnl PKG_CHECK_VAR
-# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+# Copyright (C) 2002-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -311,7 +311,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.16'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.16.1], [],
+m4_if([$1], [1.16.3], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -327,14 +327,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.16.1])dnl
+[AM_AUTOMAKE_VERSION([1.16.3])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -386,7 +386,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+# Copyright (C) 1997-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -417,7 +417,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -608,7 +608,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -647,7 +647,9 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
done
if test $am_rc -ne 0; then
AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
- for automatic dependency tracking. Try re-running configure with the
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE="gmake" (or whatever is
+ necessary). You can also try re-running configure with the
'--disable-dependency-tracking' option to at least be able to build
the package (albeit without support for automatic dependency tracking).])
fi
@@ -674,7 +676,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -871,7 +873,7 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -892,7 +894,7 @@ if test x"${install_sh+set}" != xset; then
fi
AC_SUBST([install_sh])])
-# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+# Copyright (C) 2003-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -911,7 +913,7 @@ fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
-# Copyright (C) 1998-2018 Free Software Foundation, Inc.
+# Copyright (C) 1998-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -931,7 +933,7 @@ fi])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -974,7 +976,7 @@ AC_SUBST([am__quote])])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+# Copyright (C) 1997-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -995,12 +997,7 @@ AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl
if test x"${MISSING+set}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
- *)
- MISSING="\${SHELL} $am_aux_dir/missing" ;;
- esac
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
fi
# Use eval to expand $SHELL
if eval "$MISSING --is-lightweight"; then
@@ -1013,7 +1010,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1042,7 +1039,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1089,7 +1086,7 @@ AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1108,7 +1105,7 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1189,7 +1186,7 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file
])
-# Copyright (C) 2009-2018 Free Software Foundation, Inc.
+# Copyright (C) 2009-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1249,7 +1246,7 @@ AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1277,7 +1274,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+# Copyright (C) 2006-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1296,7 +1293,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+# Copyright (C) 2004-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1427,14 +1424,15 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+m4_include([m4/attribute.m4])
m4_include([m4/gettext.m4])
m4_include([m4/iconv.m4])
m4_include([m4/intlmacosx.m4])
-m4_include([m4/japhar_grep_cflags.m4])
m4_include([m4/jh_path_xml_catalog.m4])
m4_include([m4/ld-O1.m4])
m4_include([m4/ld-as-needed.m4])
m4_include([m4/ld-no-undefined.m4])
+m4_include([m4/ld-z-now.m4])
m4_include([m4/lib-ld.m4])
m4_include([m4/lib-link.m4])
m4_include([m4/lib-prefix.m4])
@@ -1447,3 +1445,5 @@ m4_include([m4/lt~obsolete.m4])
m4_include([m4/nls.m4])
m4_include([m4/po.m4])
m4_include([m4/progtest.m4])
+m4_include([m4/warn_lang_flags.m4])
+m4_include([m4/warnings.m4])
diff --git a/build-aux/compile b/build-aux/compile
index 99e50524..23fcba01 100755
--- a/build-aux/compile
+++ b/build-aux/compile
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
@@ -53,7 +53,7 @@ func_file_conv ()
MINGW*)
file_conv=mingw
;;
- CYGWIN*)
+ CYGWIN* | MSYS*)
file_conv=cygwin
;;
*)
@@ -67,7 +67,7 @@ func_file_conv ()
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
- cygwin/*)
+ cygwin/* | msys/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
diff --git a/build-aux/config.guess b/build-aux/config.guess
index 28bec27b..69188da7 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -1,12 +1,14 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2018 Free Software Foundation, Inc.
+# Copyright 1992-2023 Free Software Foundation, Inc.
-timestamp='2018-12-07'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+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
@@ -27,11 +29,19 @@ timestamp='2018-12-07'
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
#
# Please send patches to <config-patches@gnu.org>.
+# 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="\
@@ -50,7 +60,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2018 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."
@@ -84,6 +94,9 @@ if test $# != 0; then
exit 1
fi
+# Just in case it came from the environment.
+GUESS=
+
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
# temporary files to be created and, as you can see below, it is a
@@ -99,8 +112,10 @@ tmp=
trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
set_cc_for_build() {
+ # prevent multiple calls if $tmp is already set
+ test "$tmp" && return 0
: "${TMPDIR=/tmp}"
- # shellcheck disable=SC2039
+ # shellcheck disable=SC2039,SC3028
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
@@ -110,7 +125,7 @@ set_cc_for_build() {
,,) echo "int x;" > "$dummy.c"
for driver in cc gcc c89 c99 ; do
if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$driver"
+ CC_FOR_BUILD=$driver
break
fi
done
@@ -131,14 +146,12 @@ fi
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-case "$UNAME_SYSTEM" in
+case $UNAME_SYSTEM in
Linux|GNU|GNU/*)
- # If the system lacks a compiler, then just pick glibc.
- # We could probably try harder.
- LIBC=gnu
+ LIBC=unknown
set_cc_for_build
cat <<-EOF > "$dummy.c"
@@ -147,24 +160,37 @@ Linux|GNU|GNU/*)
LIBC=uclibc
#elif defined(__dietlibc__)
LIBC=dietlibc
- #else
+ #elif defined(__GLIBC__)
LIBC=gnu
+ #else
+ #include <stdarg.h>
+ /* First heuristic to detect musl libc. */
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+ cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ eval "$cc_set_libc"
- # If ldd exists, use it to detect musl libc.
- if command -v ldd >/dev/null && \
- ldd --version 2>&1 | grep -q ^musl
- then
- LIBC=musl
+ # Second heuristic to detect musl libc.
+ if [ "$LIBC" = unknown ] &&
+ command -v ldd >/dev/null &&
+ ldd --version 2>&1 | grep -q ^musl; then
+ LIBC=musl
+ fi
+
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ if [ "$LIBC" = unknown ]; then
+ LIBC=gnu
fi
;;
esac
# Note: order is significant - the case branches are not exclusive.
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
*:NetBSD:*:*)
# NetBSD (nbsd) targets should (where applicable) match one or
# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -176,12 +202,12 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
#
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
- "/sbin/$sysctl" 2>/dev/null || \
- "/usr/sbin/$sysctl" 2>/dev/null || \
+ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
echo unknown)`
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
+ aarch64eb) machine=aarch64_be-unknown ;;
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
@@ -190,13 +216,13 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
earmv*)
arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
- machine="${arch}${endian}"-unknown
+ machine=${arch}${endian}-unknown
;;
- *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+ *) machine=$UNAME_MACHINE_ARCH-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently (or will in the future) and ABI.
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
earm*)
os=netbsdelf
;;
@@ -217,7 +243,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
;;
esac
# Determine ABI tags.
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
earm*)
expr='s/^earmv[0-9]/-eabi/;s/eb$//'
abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
@@ -228,7 +254,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# thus, need a distinct triplet. However, they do not need
# kernel version information, so it can be replaced with a
# suitable tag, in the style of linux-gnu.
- case "$UNAME_VERSION" in
+ case $UNAME_VERSION in
Debian*)
release='-gnu'
;;
@@ -239,45 +265,57 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi-}"
- exit ;;
+ GUESS=$machine-${os}${release}${abi-}
+ ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+ ;;
*:OpenBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+ ;;
+ *:SecBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+ ;;
*:LibertyBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+ ;;
*:MidnightBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+ ;;
*:ekkoBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+ ;;
*:SolidBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+ ;;
+ *:OS108:*:*)
+ GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+ ;;
macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+ ;;
*:MirBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+ ;;
*:Sortix:*:*)
- echo "$UNAME_MACHINE"-unknown-sortix
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-sortix
+ ;;
+ *:Twizzler:*:*)
+ GUESS=$UNAME_MACHINE-unknown-twizzler
+ ;;
*:Redox:*:*)
- echo "$UNAME_MACHINE"-unknown-redox
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-redox
+ ;;
mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
+ GUESS=mips-dec-osf1
+ ;;
alpha:OSF1:*:*)
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ trap '' 0
case $UNAME_RELEASE in
*4.0)
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -291,7 +329,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# covers most systems running today. This code pipes the CPU
# types through head -n 1, so we only detect the type of CPU 0.
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
+ case $ALPHA_CPU_TYPE in
"EV4 (21064)")
UNAME_MACHINE=alpha ;;
"EV4.5 (21064)")
@@ -328,117 +366,121 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+ ;;
Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
+ GUESS=m68k-unknown-sysv4
+ ;;
*:[Aa]miga[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-amigaos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-amigaos
+ ;;
*:[Mm]orph[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-morphos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-morphos
+ ;;
*:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
+ GUESS=i370-ibm-openedition
+ ;;
*:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
+ GUESS=s390-ibm-zvmoe
+ ;;
*:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
+ GUESS=powerpc-ibm-os400
+ ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix"$UNAME_RELEASE"
- exit ;;
+ GUESS=arm-acorn-riscix$UNAME_RELEASE
+ ;;
arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
+ GUESS=arm-unknown-riscos
+ ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
+ GUESS=hppa1.1-hitachi-hiuxmpp
+ ;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
+ case `(/bin/universe) 2>/dev/null` in
+ att) GUESS=pyramid-pyramid-sysv3 ;;
+ *) GUESS=pyramid-pyramid-bsd ;;
+ esac
+ ;;
NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
+ GUESS=pyramid-pyramid-svr4
+ ;;
DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
+ GUESS=sparc-icl-nx6
+ ;;
DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
+ sparc) GUESS=sparc-icl-nx7 ;;
+ esac
+ ;;
s390x:SunOS:*:*)
- echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+ ;;
sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-hal-solaris2$SUN_REL
+ ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris2$SUN_REL
+ ;;
i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux"$UNAME_RELEASE"
- exit ;;
+ GUESS=i386-pc-auroraux$UNAME_RELEASE
+ ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
set_cc_for_build
SUN_ARCH=i386
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
# This test works for both compilers.
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ 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
fi
fi
- echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+ ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris3$SUN_REL
+ ;;
sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
+ case `/usr/bin/arch -k` in
Series*|S4*)
UNAME_RELEASE=`uname -v`
;;
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+ GUESS=sparc-sun-sunos$SUN_REL
+ ;;
sun3*:SunOS:*:*)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
- case "`/bin/arch`" in
+ case `/bin/arch` in
sun3)
- echo m68k-sun-sunos"$UNAME_RELEASE"
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
;;
sun4)
- echo sparc-sun-sunos"$UNAME_RELEASE"
+ GUESS=sparc-sun-sunos$UNAME_RELEASE
;;
esac
- exit ;;
+ ;;
aushp:SunOS:*:*)
- echo sparc-auspex-sunos"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-auspex-sunos$UNAME_RELEASE
+ ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
@@ -448,41 +490,41 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-milan-mint$UNAME_RELEASE
+ ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-hades-mint$UNAME_RELEASE
+ ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-unknown-mint$UNAME_RELEASE
+ ;;
m68k:machten:*:*)
- echo m68k-apple-machten"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-apple-machten$UNAME_RELEASE
+ ;;
powerpc:machten:*:*)
- echo powerpc-apple-machten"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-apple-machten$UNAME_RELEASE
+ ;;
RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
+ GUESS=mips-dec-mach_bsd4.3
+ ;;
RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-dec-ultrix$UNAME_RELEASE
+ ;;
VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix"$UNAME_RELEASE"
- exit ;;
+ GUESS=vax-dec-ultrix$UNAME_RELEASE
+ ;;
2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix"$UNAME_RELEASE"
- exit ;;
+ GUESS=clipper-intergraph-clix$UNAME_RELEASE
+ ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
@@ -510,75 +552,76 @@ EOF
dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
{ echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-mips-riscos$UNAME_RELEASE
+ ;;
Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
+ GUESS=powerpc-motorola-powermax
+ ;;
Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
+ GUESS=powerpc-harris-powermax
+ ;;
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
+ GUESS=powerpc-harris-powermax
+ ;;
Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
+ GUESS=powerpc-harris-powerunix
+ ;;
m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
+ GUESS=m88k-harris-cxux7
+ ;;
m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
+ GUESS=m88k-motorola-sysv4
+ ;;
m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
+ GUESS=m88k-motorola-sysv3
+ ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
then
- if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
- [ "$TARGET_BINARY_INTERFACE"x = x ]
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
then
- echo m88k-dg-dgux"$UNAME_RELEASE"
+ GUESS=m88k-dg-dgux$UNAME_RELEASE
else
- echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+ GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
fi
else
- echo i586-dg-dgux"$UNAME_RELEASE"
+ GUESS=i586-dg-dgux$UNAME_RELEASE
fi
- exit ;;
+ ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
+ GUESS=m88k-dolphin-sysv3
+ ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
+ GUESS=m88k-motorola-sysv3
+ ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
+ GUESS=m88k-tektronix-sysv3
+ ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
+ GUESS=m68k-tektronix-bsd
+ ;;
*:IRIX*:*:*)
- echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
- exit ;;
+ IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+ GUESS=mips-sgi-irix$IRIX_REL
+ ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
+ GUESS=i386-ibm-aix
+ ;;
ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
+ if test -x /usr/bin/oslevel ; then
IBM_REV=`/usr/bin/oslevel`
else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
fi
- echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
- exit ;;
+ GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+ ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
set_cc_for_build
@@ -595,16 +638,16 @@ EOF
EOF
if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
then
- echo "$SYSTEM_NAME"
+ GUESS=$SYSTEM_NAME
else
- echo rs6000-ibm-aix3.2.5
+ GUESS=rs6000-ibm-aix3.2.5
fi
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
+ GUESS=rs6000-ibm-aix3.2.4
else
- echo rs6000-ibm-aix3.2
+ GUESS=rs6000-ibm-aix3.2
fi
- exit ;;
+ ;;
*:AIX:*:[4567])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
@@ -612,56 +655,56 @@ EOF
else
IBM_ARCH=powerpc
fi
- if [ -x /usr/bin/lslpp ] ; then
- IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ if test -x /usr/bin/lslpp ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
fi
- echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
- exit ;;
+ GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+ ;;
*:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
+ GUESS=rs6000-ibm-aix
+ ;;
ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
+ GUESS=romp-ibm-bsd4.4
+ ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
+ GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to
+ ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
+ GUESS=rs6000-bull-bosx
+ ;;
DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
+ GUESS=m68k-bull-sysv3
+ ;;
9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
+ GUESS=m68k-hp-bsd
+ ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
+ GUESS=m68k-hp-bsd4.4
+ ;;
9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
- case "$UNAME_MACHINE" in
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ case $UNAME_MACHINE in
9000/31?) HP_ARCH=m68000 ;;
9000/[34]??) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
+ if test -x /usr/bin/getconf; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "$sc_cpu_version" in
+ case $sc_cpu_version in
523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
532) # CPU_PA_RISC2_0
- case "$sc_kernel_bits" in
+ case $sc_kernel_bits in
32) HP_ARCH=hppa2.0n ;;
64) HP_ARCH=hppa2.0w ;;
'') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
esac ;;
esac
fi
- if [ "$HP_ARCH" = "" ]; then
+ if test "$HP_ARCH" = ""; then
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
@@ -700,7 +743,7 @@ EOF
test -z "$HP_ARCH" && HP_ARCH=hppa
fi ;;
esac
- if [ "$HP_ARCH" = hppa2.0w ]
+ if test "$HP_ARCH" = hppa2.0w
then
set_cc_for_build
@@ -721,12 +764,12 @@ EOF
HP_ARCH=hppa64
fi
fi
- echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
- exit ;;
+ GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+ ;;
ia64:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux"$HPUX_REV"
- exit ;;
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ GUESS=ia64-hp-hpux$HPUX_REV
+ ;;
3050*:HI-UX:*:*)
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
@@ -756,36 +799,36 @@ EOF
EOF
$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
{ echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
+ GUESS=unknown-hitachi-hiuxwe2
+ ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
- echo hppa1.1-hp-bsd
- exit ;;
+ GUESS=hppa1.1-hp-bsd
+ ;;
9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
+ GUESS=hppa1.0-hp-bsd
+ ;;
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
+ GUESS=hppa1.0-hp-mpeix
+ ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
- echo hppa1.1-hp-osf
- exit ;;
+ GUESS=hppa1.1-hp-osf
+ ;;
hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
+ GUESS=hppa1.0-hp-osf
+ ;;
i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo "$UNAME_MACHINE"-unknown-osf1mk
+ if test -x /usr/sbin/sysversion ; then
+ GUESS=$UNAME_MACHINE-unknown-osf1mk
else
- echo "$UNAME_MACHINE"-unknown-osf1
+ GUESS=$UNAME_MACHINE-unknown-osf1
fi
- exit ;;
+ ;;
parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
+ GUESS=hppa1.1-hp-lites
+ ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
+ GUESS=c1-convex-bsd
+ ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
@@ -793,17 +836,18 @@ EOF
fi
exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
+ GUESS=c34-convex-bsd
+ ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
+ GUESS=c38-convex-bsd
+ ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
+ GUESS=c4-convex-bsd
+ ;;
CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=ymp-cray-unicos$CRAY_REL
+ ;;
CRAY*[A-Z]90:*:*:*)
echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
@@ -811,114 +855,135 @@ EOF
-e 's/\.[^.]*$/.X/'
exit ;;
CRAY*TS:*:*:*)
- echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=t90-cray-unicos$CRAY_REL
+ ;;
CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=alphaev5-cray-unicosmk$CRAY_REL
+ ;;
CRAY*SV1:*:*:*)
- echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=sv1-cray-unicos$CRAY_REL
+ ;;
*:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=craynv-cray-unicosmp$CRAY_REL
+ ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
5000:UNIX_System_V:4.*:*)
FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+ ;;
sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+ ;;
*:BSD/OS:*:*)
- echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+ ;;
arm:FreeBSD:*:*)
UNAME_PROCESSOR=`uname -p`
set_cc_for_build
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
else
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
fi
- exit ;;
+ ;;
*:FreeBSD:*:*)
UNAME_PROCESSOR=`/usr/bin/uname -p`
- case "$UNAME_PROCESSOR" in
+ case $UNAME_PROCESSOR in
amd64)
UNAME_PROCESSOR=x86_64 ;;
i386)
UNAME_PROCESSOR=i586 ;;
esac
- echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
- exit ;;
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+ ;;
i*:CYGWIN*:*)
- echo "$UNAME_MACHINE"-pc-cygwin
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-cygwin
+ ;;
*:MINGW64*:*)
- echo "$UNAME_MACHINE"-pc-mingw64
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-mingw64
+ ;;
*:MINGW*:*)
- echo "$UNAME_MACHINE"-pc-mingw32
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-mingw32
+ ;;
*:MSYS*:*)
- echo "$UNAME_MACHINE"-pc-msys
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-msys
+ ;;
i*:PW*:*)
- echo "$UNAME_MACHINE"-pc-pw32
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-pw32
+ ;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
*:Interix*:*)
- case "$UNAME_MACHINE" in
+ case $UNAME_MACHINE in
x86)
- echo i586-pc-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=i586-pc-interix$UNAME_RELEASE
+ ;;
authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=x86_64-unknown-interix$UNAME_RELEASE
+ ;;
IA64)
- echo ia64-unknown-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=ia64-unknown-interix$UNAME_RELEASE
+ ;;
esac ;;
i*:UWIN*:*)
- echo "$UNAME_MACHINE"-pc-uwin
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-uwin
+ ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-pc-cygwin
- exit ;;
+ GUESS=x86_64-pc-cygwin
+ ;;
prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=powerpcle-unknown-solaris2$SUN_REL
+ ;;
*:GNU:*:*)
# the GNU system
- echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
- exit ;;
+ GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+ GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+ ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
- exit ;;
+ GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+ 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:*:*)
- echo "$UNAME_MACHINE"-unknown-minix
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-minix
+ ;;
aarch64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
EV5) UNAME_MACHINE=alphaev5 ;;
EV56) UNAME_MACHINE=alphaev56 ;;
PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -929,183 +994,236 @@ EOF
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arc:Linux:*:* | arceb:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
arm*:Linux:*:*)
set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
else
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
fi
fi
- exit ;;
+ ;;
avr32*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
cris:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
crisv32:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
e2k:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
frv:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
hexagon:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
i*86:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+ ;;
ia64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
k1om:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ loongarch32:Linux:*:* | loongarch64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
m32r*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
m68*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
mips:Linux:*:* | mips64:Linux:*:*)
set_cc_for_build
+ IS_GLIBC=0
+ test x"${LIBC}" = xgnu && IS_GLIBC=1
sed 's/^ //' << EOF > "$dummy.c"
#undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
+ #undef mips
+ #undef mipsel
+ #undef mips64
+ #undef mips64el
+ #if ${IS_GLIBC} && defined(_ABI64)
+ LIBCABI=gnuabi64
+ #else
+ #if ${IS_GLIBC} && defined(_ABIN32)
+ LIBCABI=gnuabin32
+ #else
+ LIBCABI=${LIBC}
+ #endif
+ #endif
+
+ #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa64r6
+ #else
+ #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa32r6
+ #else
+ #if defined(__mips64)
+ CPU=mips64
+ #else
+ CPU=mips
+ #endif
+ #endif
+ #endif
+
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
+ MIPS_ENDIAN=el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
+ MIPS_ENDIAN=
#else
- CPU=
+ MIPS_ENDIAN=
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
- test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
+ cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+ eval "$cc_set_vars"
+ test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
;;
mips64el:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
openrisc*:Linux:*:*)
- echo or1k-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=or1k-unknown-linux-$LIBC
+ ;;
or32:Linux:*:* | or1k*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
padre:Linux:*:*)
- echo sparc-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=sparc-unknown-linux-$LIBC
+ ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=hppa64-unknown-linux-$LIBC
+ ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
- PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
- *) echo hppa-unknown-linux-"$LIBC" ;;
+ PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+ PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+ *) GUESS=hppa-unknown-linux-$LIBC ;;
esac
- exit ;;
+ ;;
ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc64-unknown-linux-$LIBC
+ ;;
ppc:Linux:*:*)
- echo powerpc-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc-unknown-linux-$LIBC
+ ;;
ppc64le:Linux:*:*)
- echo powerpc64le-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc64le-unknown-linux-$LIBC
+ ;;
ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-"$LIBC"
- exit ;;
- riscv32:Linux:*:* | riscv64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpcle-unknown-linux-$LIBC
+ ;;
+ riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+ ;;
sh64*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
sh*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
tile*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
vax:Linux:*:*)
- echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+ ;;
x86_64:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
+ set_cc_for_build
+ CPU=$UNAME_MACHINE
+ LIBCABI=$LIBC
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ 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=$CPU-pc-linux-$LIBCABI
+ ;;
xtensa*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
# earlier versions are messed up and put the nodename in both
# sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
+ GUESS=i386-sequent-sysv4
+ ;;
i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
- echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+ ;;
i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility
# is probably installed.
- echo "$UNAME_MACHINE"-pc-os2-emx
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-os2-emx
+ ;;
i*86:XTS-300:*:STOP)
- echo "$UNAME_MACHINE"-unknown-stop
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-stop
+ ;;
i*86:atheos:*:*)
- echo "$UNAME_MACHINE"-unknown-atheos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-atheos
+ ;;
i*86:syllable:*:*)
- echo "$UNAME_MACHINE"-pc-syllable
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-syllable
+ ;;
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=i386-unknown-lynxos$UNAME_RELEASE
+ ;;
i*86:*DOS:*:*)
- echo "$UNAME_MACHINE"-pc-msdosdjgpp
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+ ;;
i*86:*:4.*:*)
UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
else
- echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
fi
- exit ;;
+ ;;
i*86:*:5:[678]*)
# UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
@@ -1113,12 +1231,12 @@ EOF
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1128,11 +1246,11 @@ EOF
&& UNAME_MACHINE=i686
(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
&& UNAME_MACHINE=i686
- echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
else
- echo "$UNAME_MACHINE"-pc-sysv32
+ GUESS=$UNAME_MACHINE-pc-sysv32
fi
- exit ;;
+ ;;
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
@@ -1140,31 +1258,31 @@ EOF
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configure will decide that
# this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
+ GUESS=i586-pc-msdosdjgpp
+ ;;
Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
+ GUESS=i386-pc-mach3
+ ;;
paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
+ GUESS=i860-intel-osf1
+ ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+ GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
+ GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4
fi
- exit ;;
+ ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
- echo m68010-convergent-sysv
- exit ;;
+ GUESS=m68010-convergent-sysv
+ ;;
mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
+ GUESS=m68k-convergent-sysv
+ ;;
M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
+ GUESS=m68k-diab-dnix
+ ;;
M68*:*:R3V[5678]*:*)
test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
@@ -1189,253 +1307,407 @@ EOF
/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
&& { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+ ;;
mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
+ GUESS=m68k-atari-sysv4
+ ;;
TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+ ;;
rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+ ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+ ;;
SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-dde-sysv$UNAME_RELEASE
+ ;;
RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
+ GUESS=mips-sni-sysv4
+ ;;
RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
+ GUESS=mips-sni-sysv4
+ ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo "$UNAME_MACHINE"-sni-sysv4
+ GUESS=$UNAME_MACHINE-sni-sysv4
else
- echo ns32k-sni-sysv
+ GUESS=ns32k-sni-sysv
fi
- exit ;;
+ ;;
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
+ GUESS=i586-unisys-sysv4
+ ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
+ GUESS=hppa1.1-stratus-sysv4
+ ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
+ GUESS=i860-stratus-sysv4
+ ;;
i*86:VOS:*:*)
# From Paul.Green@stratus.com.
- echo "$UNAME_MACHINE"-stratus-vos
- exit ;;
+ GUESS=$UNAME_MACHINE-stratus-vos
+ ;;
*:VOS:*:*)
# From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
+ GUESS=hppa1.1-stratus-vos
+ ;;
mc68*:A/UX:*:*)
- echo m68k-apple-aux"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-apple-aux$UNAME_RELEASE
+ ;;
news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
+ GUESS=mips-sony-newsos6
+ ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv"$UNAME_RELEASE"
+ if test -d /usr/nec; then
+ GUESS=mips-nec-sysv$UNAME_RELEASE
else
- echo mips-unknown-sysv"$UNAME_RELEASE"
+ GUESS=mips-unknown-sysv$UNAME_RELEASE
fi
- exit ;;
+ ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
+ GUESS=powerpc-be-beos
+ ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
+ GUESS=powerpc-apple-beos
+ ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
+ GUESS=i586-pc-beos
+ ;;
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
- x86_64:Haiku:*:*)
- echo x86_64-unknown-haiku
- exit ;;
+ GUESS=i586-pc-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:*:*)
- echo sx4-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx4-nec-superux$UNAME_RELEASE
+ ;;
SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx5-nec-superux$UNAME_RELEASE
+ ;;
SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx6-nec-superux$UNAME_RELEASE
+ ;;
SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx7-nec-superux$UNAME_RELEASE
+ ;;
SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx8-nec-superux$UNAME_RELEASE
+ ;;
SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx8r-nec-superux$UNAME_RELEASE
+ ;;
SX-ACE:SUPER-UX:*:*)
- echo sxace-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sxace-nec-superux$UNAME_RELEASE
+ ;;
Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+ ;;
*:Rhapsody:*:*)
- echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+ ;;
+ arm64:Darwin:*:*)
+ GUESS=aarch64-apple-darwin$UNAME_RELEASE
+ ;;
*:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- set_cc_for_build
- if test "$UNAME_PROCESSOR" = unknown ; then
- UNAME_PROCESSOR=powerpc
+ UNAME_PROCESSOR=`uname -p`
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ if command -v xcode-select > /dev/null 2> /dev/null && \
+ ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+ # Avoid executing cc if there is no toolchain installed as
+ # cc will be a stub that puts up a graphical alert
+ # prompting the user to install developer tools.
+ CC_FOR_BUILD=no_compiler_found
+ else
+ set_cc_for_build
fi
- if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
- fi
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
- # Avoid executing cc on OS X 10.9, as it ships with a stub
- # that puts up a graphical alert prompting to install
- # developer tools. Any system running Mac OS X 10.7 or
- # later (Darwin 11 and later) is required to have a 64-bit
- # processor. This is not true of the ARM version of Darwin
- # that Apple uses in portable devices.
- UNAME_PROCESSOR=x86_64
+ # uname -m returns i386 or x86_64
+ UNAME_PROCESSOR=$UNAME_MACHINE
fi
- echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+ ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
UNAME_PROCESSOR=`uname -p`
if test "$UNAME_PROCESSOR" = x86; then
UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
- echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+ ;;
*:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
+ GUESS=i386-pc-qnx
+ ;;
NEO-*:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=neo-tandem-nsk$UNAME_RELEASE
+ ;;
NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nse-tandem-nsk$UNAME_RELEASE
+ ;;
NSR-*:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsr-tandem-nsk$UNAME_RELEASE
+ ;;
NSV-*:NONSTOP_KERNEL:*:*)
- echo nsv-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsv-tandem-nsk$UNAME_RELEASE
+ ;;
NSX-*:NONSTOP_KERNEL:*:*)
- echo nsx-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsx-tandem-nsk$UNAME_RELEASE
+ ;;
*:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
+ GUESS=mips-compaq-nonstopux
+ ;;
BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
+ GUESS=bs2000-siemens-sysv
+ ;;
DS/*:UNIX_System_V:*:*)
- echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+ ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
- # shellcheck disable=SC2154
- if test "$cputype" = 386; then
+ if test "${cputype-}" = 386; then
UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
+ elif test "x${cputype-}" != x; then
+ UNAME_MACHINE=$cputype
fi
- echo "$UNAME_MACHINE"-unknown-plan9
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-plan9
+ ;;
*:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
+ GUESS=pdp10-unknown-tops10
+ ;;
*:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
+ GUESS=pdp10-unknown-tenex
+ ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
+ GUESS=pdp10-dec-tops20
+ ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
+ GUESS=pdp10-xkl-tops20
+ ;;
*:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
+ GUESS=pdp10-unknown-tops20
+ ;;
*:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
+ GUESS=pdp10-unknown-its
+ ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-sei-seiux$UNAME_RELEASE
+ ;;
*:DragonFly:*:*)
- echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
- exit ;;
+ DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+ ;;
*:*VMS:*:*)
UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "$UNAME_MACHINE" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
+ case $UNAME_MACHINE in
+ A*) GUESS=alpha-dec-vms ;;
+ I*) GUESS=ia64-dec-vms ;;
+ V*) GUESS=vax-dec-vms ;;
esac ;;
*:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
+ GUESS=i386-pc-xenix
+ ;;
i*86:skyos:*:*)
- echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
- exit ;;
+ SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+ GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+ ;;
i*86:rdos:*:*)
- echo "$UNAME_MACHINE"-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo "$UNAME_MACHINE"-pc-aros
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-rdos
+ ;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
+ *:AROS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-aros
+ ;;
x86_64:VMkernel:*:*)
- echo "$UNAME_MACHINE"-unknown-esx
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-esx
+ ;;
amd64:Isilon\ OneFS:*:*)
- echo x86_64-unknown-onefs
- exit ;;
+ GUESS=x86_64-unknown-onefs
+ ;;
*:Unleashed:*:*)
- echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+ ;;
esac
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+ echo "$GUESS"
+ exit
+fi
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname un;
+ uname (&un);
+ printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname *un;
+ uname (&un);
+ printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
echo "$0: unable to guess system type" >&2
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+case $UNAME_MACHINE:$UNAME_SYSTEM in
mips:Linux | mips64:Linux)
# If we got here on MIPS GNU/Linux, output extra information.
cat >&2 <<EOF
@@ -1452,9 +1724,17 @@ This script (version $timestamp), has failed to recognize the
operating system you are using. If your script is old, overwrite *all*
copies of config.guess and config.sub with the latest versions from:
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
and
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+ cat >&2 <<EOF
If $0 has already been updated, send the following data and any
information you think might be pertinent to config-patches@gnu.org to
@@ -1482,6 +1762,7 @@ UNAME_RELEASE = "$UNAME_RELEASE"
UNAME_SYSTEM = "$UNAME_SYSTEM"
UNAME_VERSION = "$UNAME_VERSION"
EOF
+fi
exit 1
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 9542f985..de4259e4 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,12 +1,14 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2018 Free Software Foundation, Inc.
+# Copyright 1992-2023 Free Software Foundation, Inc.
-timestamp='2018-12-16'
+# 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
@@ -33,7 +35,7 @@ timestamp='2018-12-16'
# Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
@@ -50,6 +52,13 @@ timestamp='2018-12-16'
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
+# 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="\
@@ -67,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2018 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."
@@ -111,9 +120,12 @@ case $# in
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
@@ -123,28 +135,27 @@ case $1 in
;;
*-*-*-*)
basic_machine=$field1-$field2
- os=$field3-$field4
+ basic_os=$field3-$field4
;;
*-*-*)
# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
# parts
maybe_os=$field2-$field3
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
- | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
+ 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
- os=$maybe_os
+ basic_os=$maybe_os
;;
android-linux)
basic_machine=$field1-unknown
- os=linux-android
+ basic_os=linux-android
;;
*)
basic_machine=$field1-$field2
- os=$field3
+ basic_os=$field3
;;
esac
;;
@@ -153,7 +164,7 @@ case $1 in
case $field1-$field2 in
decstation-3100)
basic_machine=mips-dec
- os=
+ basic_os=
;;
*-*)
# Second component is usually, but not always the OS
@@ -161,7 +172,11 @@ case $1 in
# Prevent following clause from handling this valid os
sun*os*)
basic_machine=$field1
- os=$field2
+ basic_os=$field2
+ ;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
;;
# Manufacturers
dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
@@ -174,11 +189,11 @@ case $1 in
| microblaze* | sim | cisco \
| oki | wec | wrs | winbond)
basic_machine=$field1-$field2
- os=
+ basic_os=
;;
*)
basic_machine=$field1
- os=$field2
+ basic_os=$field2
;;
esac
;;
@@ -190,450 +205,451 @@ case $1 in
case $field1 in
386bsd)
basic_machine=i386-pc
- os=bsd
+ basic_os=bsd
;;
a29khif)
basic_machine=a29k-amd
- os=udi
+ basic_os=udi
;;
adobe68k)
basic_machine=m68010-adobe
- os=scout
+ basic_os=scout
;;
alliant)
basic_machine=fx80-alliant
- os=
+ basic_os=
;;
altos | altos3068)
basic_machine=m68k-altos
- os=
+ basic_os=
;;
am29k)
basic_machine=a29k-none
- os=bsd
+ basic_os=bsd
;;
amdahl)
basic_machine=580-amdahl
- os=sysv
+ basic_os=sysv
;;
amiga)
basic_machine=m68k-unknown
- os=
+ basic_os=
;;
amigaos | amigados)
basic_machine=m68k-unknown
- os=amigaos
+ basic_os=amigaos
;;
amigaunix | amix)
basic_machine=m68k-unknown
- os=sysv4
+ basic_os=sysv4
;;
apollo68)
basic_machine=m68k-apollo
- os=sysv
+ basic_os=sysv
;;
apollo68bsd)
basic_machine=m68k-apollo
- os=bsd
+ basic_os=bsd
;;
aros)
basic_machine=i386-pc
- os=aros
+ basic_os=aros
;;
aux)
basic_machine=m68k-apple
- os=aux
+ basic_os=aux
;;
balance)
basic_machine=ns32k-sequent
- os=dynix
+ basic_os=dynix
;;
blackfin)
basic_machine=bfin-unknown
- os=linux
+ basic_os=linux
;;
cegcc)
basic_machine=arm-unknown
- os=cegcc
+ basic_os=cegcc
;;
convex-c1)
basic_machine=c1-convex
- os=bsd
+ basic_os=bsd
;;
convex-c2)
basic_machine=c2-convex
- os=bsd
+ basic_os=bsd
;;
convex-c32)
basic_machine=c32-convex
- os=bsd
+ basic_os=bsd
;;
convex-c34)
basic_machine=c34-convex
- os=bsd
+ basic_os=bsd
;;
convex-c38)
basic_machine=c38-convex
- os=bsd
+ basic_os=bsd
;;
cray)
basic_machine=j90-cray
- os=unicos
+ basic_os=unicos
;;
crds | unos)
basic_machine=m68k-crds
- os=
+ basic_os=
;;
da30)
basic_machine=m68k-da30
- os=
+ basic_os=
;;
decstation | pmax | pmin | dec3100 | decstatn)
basic_machine=mips-dec
- os=
+ basic_os=
;;
delta88)
basic_machine=m88k-motorola
- os=sysv3
+ basic_os=sysv3
;;
dicos)
basic_machine=i686-pc
- os=dicos
+ basic_os=dicos
;;
djgpp)
basic_machine=i586-pc
- os=msdosdjgpp
+ basic_os=msdosdjgpp
;;
ebmon29k)
basic_machine=a29k-amd
- os=ebmon
+ basic_os=ebmon
;;
es1800 | OSE68k | ose68k | ose | OSE)
basic_machine=m68k-ericsson
- os=ose
+ basic_os=ose
;;
gmicro)
basic_machine=tron-gmicro
- os=sysv
+ basic_os=sysv
;;
go32)
basic_machine=i386-pc
- os=go32
+ basic_os=go32
;;
h8300hms)
basic_machine=h8300-hitachi
- os=hms
+ basic_os=hms
;;
h8300xray)
basic_machine=h8300-hitachi
- os=xray
+ basic_os=xray
;;
h8500hms)
basic_machine=h8500-hitachi
- os=hms
+ basic_os=hms
;;
harris)
basic_machine=m88k-harris
- os=sysv3
+ basic_os=sysv3
;;
- hp300)
+ hp300 | hp300hpux)
basic_machine=m68k-hp
+ basic_os=hpux
;;
hp300bsd)
basic_machine=m68k-hp
- os=bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=hpux
+ basic_os=bsd
;;
hppaosf)
basic_machine=hppa1.1-hp
- os=osf
+ basic_os=osf
;;
hppro)
basic_machine=hppa1.1-hp
- os=proelf
+ basic_os=proelf
;;
i386mach)
basic_machine=i386-mach
- os=mach
- ;;
- vsta)
- basic_machine=i386-pc
- os=vsta
+ basic_os=mach
;;
isi68 | isi)
basic_machine=m68k-isi
- os=sysv
+ basic_os=sysv
;;
m68knommu)
basic_machine=m68k-unknown
- os=linux
+ basic_os=linux
;;
magnum | m3230)
basic_machine=mips-mips
- os=sysv
+ basic_os=sysv
;;
merlin)
basic_machine=ns32k-utek
- os=sysv
+ basic_os=sysv
;;
mingw64)
basic_machine=x86_64-pc
- os=mingw64
+ basic_os=mingw64
;;
mingw32)
basic_machine=i686-pc
- os=mingw32
+ basic_os=mingw32
;;
mingw32ce)
basic_machine=arm-unknown
- os=mingw32ce
+ basic_os=mingw32ce
;;
monitor)
basic_machine=m68k-rom68k
- os=coff
+ basic_os=coff
;;
morphos)
basic_machine=powerpc-unknown
- os=morphos
+ basic_os=morphos
;;
moxiebox)
basic_machine=moxie-unknown
- os=moxiebox
+ basic_os=moxiebox
;;
msdos)
basic_machine=i386-pc
- os=msdos
+ basic_os=msdos
;;
msys)
basic_machine=i686-pc
- os=msys
+ basic_os=msys
;;
mvs)
basic_machine=i370-ibm
- os=mvs
+ basic_os=mvs
;;
nacl)
basic_machine=le32-unknown
- os=nacl
+ basic_os=nacl
;;
ncr3000)
basic_machine=i486-ncr
- os=sysv4
+ basic_os=sysv4
;;
netbsd386)
basic_machine=i386-pc
- os=netbsd
+ basic_os=netbsd
;;
netwinder)
basic_machine=armv4l-rebel
- os=linux
+ basic_os=linux
;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
- os=newsos
+ basic_os=newsos
;;
news1000)
basic_machine=m68030-sony
- os=newsos
+ basic_os=newsos
;;
necv70)
basic_machine=v70-nec
- os=sysv
+ basic_os=sysv
;;
nh3000)
basic_machine=m68k-harris
- os=cxux
+ basic_os=cxux
;;
nh[45]000)
basic_machine=m88k-harris
- os=cxux
+ basic_os=cxux
;;
nindy960)
basic_machine=i960-intel
- os=nindy
+ basic_os=nindy
;;
mon960)
basic_machine=i960-intel
- os=mon960
+ basic_os=mon960
;;
nonstopux)
basic_machine=mips-compaq
- os=nonstopux
+ basic_os=nonstopux
;;
os400)
basic_machine=powerpc-ibm
- os=os400
+ basic_os=os400
;;
OSE68000 | ose68000)
basic_machine=m68000-ericsson
- os=ose
+ basic_os=ose
;;
os68k)
basic_machine=m68k-none
- os=os68k
+ basic_os=os68k
;;
paragon)
basic_machine=i860-intel
- os=osf
+ basic_os=osf
;;
parisc)
basic_machine=hppa-unknown
- os=linux
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
;;
pw32)
basic_machine=i586-unknown
- os=pw32
+ basic_os=pw32
;;
rdos | rdos64)
basic_machine=x86_64-pc
- os=rdos
+ basic_os=rdos
;;
rdos32)
basic_machine=i386-pc
- os=rdos
+ basic_os=rdos
;;
rom68k)
basic_machine=m68k-rom68k
- os=coff
+ basic_os=coff
;;
sa29200)
basic_machine=a29k-amd
- os=udi
+ basic_os=udi
;;
sei)
basic_machine=mips-sei
- os=seiux
+ basic_os=seiux
;;
sequent)
basic_machine=i386-sequent
- os=
+ basic_os=
;;
sps7)
basic_machine=m68k-bull
- os=sysv2
+ basic_os=sysv2
;;
st2000)
basic_machine=m68k-tandem
- os=
+ basic_os=
;;
stratus)
basic_machine=i860-stratus
- os=sysv4
+ basic_os=sysv4
;;
sun2)
basic_machine=m68000-sun
- os=
+ basic_os=
;;
sun2os3)
basic_machine=m68000-sun
- os=sunos3
+ basic_os=sunos3
;;
sun2os4)
basic_machine=m68000-sun
- os=sunos4
+ basic_os=sunos4
;;
sun3)
basic_machine=m68k-sun
- os=
+ basic_os=
;;
sun3os3)
basic_machine=m68k-sun
- os=sunos3
+ basic_os=sunos3
;;
sun3os4)
basic_machine=m68k-sun
- os=sunos4
+ basic_os=sunos4
;;
sun4)
basic_machine=sparc-sun
- os=
+ basic_os=
;;
sun4os3)
basic_machine=sparc-sun
- os=sunos3
+ basic_os=sunos3
;;
sun4os4)
basic_machine=sparc-sun
- os=sunos4
+ basic_os=sunos4
;;
sun4sol2)
basic_machine=sparc-sun
- os=solaris2
+ basic_os=solaris2
;;
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
- os=
+ basic_os=
;;
sv1)
basic_machine=sv1-cray
- os=unicos
+ basic_os=unicos
;;
symmetry)
basic_machine=i386-sequent
- os=dynix
+ basic_os=dynix
;;
t3e)
basic_machine=alphaev5-cray
- os=unicos
+ basic_os=unicos
;;
t90)
basic_machine=t90-cray
- os=unicos
+ basic_os=unicos
;;
toad1)
basic_machine=pdp10-xkl
- os=tops20
+ basic_os=tops20
;;
tpf)
basic_machine=s390x-ibm
- os=tpf
+ basic_os=tpf
;;
udi29k)
basic_machine=a29k-amd
- os=udi
+ basic_os=udi
;;
ultra3)
basic_machine=a29k-nyu
- os=sym1
+ basic_os=sym1
;;
v810 | necv810)
basic_machine=v810-nec
- os=none
+ basic_os=none
;;
vaxv)
basic_machine=vax-dec
- os=sysv
+ basic_os=sysv
;;
vms)
basic_machine=vax-dec
- os=vms
+ basic_os=vms
+ ;;
+ vsta)
+ basic_machine=i386-pc
+ basic_os=vsta
;;
vxworks960)
basic_machine=i960-wrs
- os=vxworks
+ basic_os=vxworks
;;
vxworks68)
basic_machine=m68k-wrs
- os=vxworks
+ basic_os=vxworks
;;
vxworks29k)
basic_machine=a29k-wrs
- os=vxworks
+ basic_os=vxworks
;;
xbox)
basic_machine=i686-pc
- os=mingw32
+ basic_os=mingw32
;;
ymp)
basic_machine=ymp-cray
- os=unicos
+ basic_os=unicos
;;
*)
basic_machine=$1
- os=
+ basic_os=
;;
esac
;;
@@ -685,17 +701,17 @@ case $basic_machine in
bluegene*)
cpu=powerpc
vendor=ibm
- os=cnk
+ basic_os=cnk
;;
decsystem10* | dec10*)
cpu=pdp10
vendor=dec
- os=tops10
+ basic_os=tops10
;;
decsystem20* | dec20*)
cpu=pdp10
vendor=dec
- os=tops20
+ basic_os=tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
@@ -705,7 +721,7 @@ case $basic_machine in
dpx2*)
cpu=m68k
vendor=bull
- os=sysv3
+ basic_os=sysv3
;;
encore | umax | mmax)
cpu=ns32k
@@ -714,7 +730,7 @@ case $basic_machine in
elxsi)
cpu=elxsi
vendor=elxsi
- os=${os:-bsd}
+ basic_os=${basic_os:-bsd}
;;
fx2800)
cpu=i860
@@ -727,7 +743,7 @@ case $basic_machine in
h3050r* | hiux*)
cpu=hppa1.1
vendor=hitachi
- os=hiuxwe2
+ basic_os=hiuxwe2
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
cpu=hppa1.0
@@ -770,36 +786,36 @@ case $basic_machine in
i*86v32)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
- os=sysv32
+ basic_os=sysv32
;;
i*86v4*)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
- os=sysv4
+ basic_os=sysv4
;;
i*86v)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
- os=sysv
+ basic_os=sysv
;;
i*86sol2)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
- os=solaris2
+ basic_os=solaris2
;;
j90 | j90-cray)
cpu=j90
vendor=cray
- os=${os:-unicos}
+ basic_os=${basic_os:-unicos}
;;
iris | iris4d)
cpu=mips
vendor=sgi
- case $os in
+ case $basic_os in
irix*)
;;
*)
- os=irix4
+ basic_os=irix4
;;
esac
;;
@@ -810,24 +826,26 @@ case $basic_machine in
*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
cpu=m68k
vendor=atari
- os=mint
+ basic_os=mint
;;
news-3600 | risc-news)
cpu=mips
vendor=sony
- os=newsos
+ basic_os=newsos
;;
next | m*-next)
cpu=m68k
vendor=next
- case $os in
- nextstep* )
+ case $basic_os in
+ openstep*)
+ ;;
+ nextstep*)
;;
ns2*)
- os=nextstep2
+ basic_os=nextstep2
;;
*)
- os=nextstep3
+ basic_os=nextstep3
;;
esac
;;
@@ -838,12 +856,12 @@ case $basic_machine in
op50n-* | op60c-*)
cpu=hppa1.1
vendor=oki
- os=proelf
+ basic_os=proelf
;;
pa-hitachi)
cpu=hppa1.1
vendor=hitachi
- os=hiuxwe2
+ basic_os=hiuxwe2
;;
pbd)
cpu=sparc
@@ -880,12 +898,12 @@ case $basic_machine in
sde)
cpu=mipsisa32
vendor=sde
- os=${os:-elf}
+ basic_os=${basic_os:-elf}
;;
simso-wrs)
cpu=sparclite
vendor=wrs
- os=vxworks
+ basic_os=vxworks
;;
tower | tower-32)
cpu=m68k
@@ -902,7 +920,7 @@ case $basic_machine in
w89k-*)
cpu=hppa1.1
vendor=winbond
- os=proelf
+ basic_os=proelf
;;
none)
cpu=none
@@ -918,9 +936,12 @@ case $basic_machine in
;;
*-*)
+ # 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
@@ -954,11 +975,11 @@ case $cpu-$vendor in
# some cases the only manufacturer, in others, it is the most popular.
craynv-unknown)
vendor=cray
- os=${os:-unicosmp}
+ basic_os=${basic_os:-unicosmp}
;;
c90-unknown | c90-cray)
vendor=cray
- os=${os:-unicos}
+ basic_os=${Basic_os:-unicos}
;;
fx80-unknown)
vendor=alliant
@@ -999,10 +1020,15 @@ 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
- os=${os:-bosx}
+ basic_os=${basic_os:-bosx}
;;
# Here we normalize CPU types irrespective of the vendor
@@ -1011,7 +1037,7 @@ case $cpu-$vendor in
;;
blackfin-*)
cpu=bfin
- os=linux
+ basic_os=linux
;;
c54x-*)
cpu=tic54x
@@ -1024,7 +1050,7 @@ case $cpu-$vendor in
;;
e500v[12]-*)
cpu=powerpc
- os=$os"spe"
+ basic_os=${basic_os}"spe"
;;
mips3*-*)
cpu=mips64
@@ -1034,7 +1060,7 @@ case $cpu-$vendor in
;;
m68knommu-*)
cpu=m68k
- os=linux
+ basic_os=linux
;;
m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
cpu=s12z
@@ -1044,12 +1070,12 @@ case $cpu-$vendor in
;;
parisc-*)
cpu=hppa
- os=linux
+ basic_os=linux
;;
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
cpu=i586
;;
- pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
cpu=i686
;;
pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
@@ -1100,11 +1126,14 @@ case $cpu-$vendor in
xscale-* | xscalee[bl]-*)
cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
+ arm64-* | aarch64le-*)
+ cpu=aarch64
+ ;;
# Recognize the canonical CPU Types that limit and/or modify the
# company names they are paired with.
cr16-*)
- os=${os:-elf}
+ basic_os=${basic_os:-elf}
;;
crisv32-* | etraxfs*-*)
cpu=crisv32
@@ -1115,7 +1144,7 @@ case $cpu-$vendor in
vendor=axis
;;
crx-*)
- os=${os:-elf}
+ basic_os=${basic_os:-elf}
;;
neo-tandem)
cpu=neo
@@ -1137,16 +1166,12 @@ case $cpu-$vendor in
cpu=nsx
vendor=tandem
;;
- s390-*)
- cpu=s390
- vendor=ibm
- ;;
- s390x-*)
- cpu=s390x
- vendor=ibm
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
;;
tile*-*)
- os=${os:-linux-gnu}
+ basic_os=${basic_os:-linux-gnu}
;;
*)
@@ -1162,13 +1187,13 @@ case $cpu-$vendor in
| alphapca5[67] | alpha64pca5[67] \
| am33_2.0 \
| amdgcn \
- | arc | arceb \
- | arm | armh | arm[lb]e | arme[lb] | armv* \
+ | arc | arceb | arc32 | arc64 \
+ | arm | arm[lb]e | arme[lb] | armv* \
| avr | avr32 \
| asmjs \
| ba \
| be32 | be64 \
- | bfin | bs2000 \
+ | bfin | bpf | bs2000 \
| c[123]* | c30 | [cjt]90 | c4x \
| c8051 | clipper | craynv | csky | cydra \
| d10v | d30v | dlx | dsp16xx \
@@ -1182,14 +1207,15 @@ case $cpu-$vendor in
| k1om \
| le32 | le64 \
| lm32 \
+ | loongarch32 | loongarch64 \
| m32c | m32r | m32rle \
- | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k | v70 | w65 \
- | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip \
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
| m88110 | m88k | maxq | mb | mcore | mep | metag \
| microblaze | microblazeel \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
- | mips64 | mips64el \
+ | mips64 | mips64eb | mips64el \
| mips64octeon | mips64octeonel \
| mips64orion | mips64orionel \
| mips64r5900 | mips64r5900el \
@@ -1200,9 +1226,13 @@ case $cpu-$vendor in
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r3 | mipsisa32r3el \
+ | mipsisa32r5 | mipsisa32r5el \
| mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r3 | mipsisa64r3el \
+ | mipsisa64r5 | mipsisa64r5el \
| mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
@@ -1216,32 +1246,37 @@ case $cpu-$vendor in
| nds32 | nds32le | nds32be \
| nfp \
| nios | nios2 | nios2eb | nios2el \
- | none | np1 | ns16k | ns32k \
+ | none | np1 | ns16k | ns32k | nvptx \
| open8 \
| or1k* \
| or32 \
| orion \
+ | picochip \
| pdp10 | pdp11 | pj | pjl | pn | power \
| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
| pru \
| pyramid \
- | riscv | riscv32 | riscv64 \
+ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
| rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+ | sh | shl \
+ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
| sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
| sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
| spu \
| tahoe \
+ | thumbv7* \
| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
| tron \
| ubicom32 \
- | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
| vax \
| visium \
- | wasm32 \
+ | w65 \
+ | wasm32 | wasm64 \
| we32k \
| x86 | x86_64 | xc16x | xgate | xps100 \
| xstormy16 | xtensa* \
@@ -1271,8 +1306,53 @@ esac
# Decode manufacturer-specific aliases for certain operating systems.
-if [ x$os != x ]
+if test x$basic_os != x
then
+
+# 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|'`
+ ;;
+ os2-emx)
+ kernel=os2
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+ ;;
+ nto-qnx*)
+ kernel=nto
+ 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|'`
+ ;;
+ linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+ ;;
+ managarm*)
+ kernel=managarm
+ os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
case $os in
# First match some system type aliases that might get confused
# with valid system types.
@@ -1284,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
@@ -1292,9 +1372,6 @@ case $os in
unixware*)
os=sysv4.2uw
;;
- gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
# es1800 is here to avoid being matched by es* (a different OS)
es1800*)
os=ose
@@ -1316,12 +1393,9 @@ 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/'`
;;
- sco3.2v[4-9]* | sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- ;;
- scout)
+ sco*v* | scout)
# Don't match below
;;
sco*)
@@ -1330,77 +1404,25 @@ case $os in
psos*)
os=psos
;;
- # Now accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST end in a * to match a version number.
- # sysv* is not here because it comes later, after sysvr4.
- gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
- | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
- | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
- | sym* | kopensolaris* | plan9* \
- | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
- | aos* | aros* | cloudabi* | sortix* \
- | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
- | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
- | knetbsd* | mirbsd* | netbsd* \
- | bitrig* | openbsd* | solidbsd* | libertybsd* \
- | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
- | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
- | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
- | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
- | chorusrdb* | cegcc* | glidix* \
- | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
- | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
- | linux-newlib* | linux-musl* | linux-uclibc* \
- | uxpv* | beos* | mpeix* | udk* | moxiebox* \
- | interix* | uwin* | mks* | rhapsody* | darwin* \
- | openstep* | oskit* | conix* | pw32* | nonstopux* \
- | storm-chaos* | tops10* | tenex* | tops20* | its* \
- | os2* | vos* | palmos* | uclinux* | nucleus* \
- | morphos* | superux* | rtmk* | windiss* \
- | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
- | skyos* | haiku* | rdos* | toppers* | drops* | es* \
- | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
- | midnightbsd* | amdhsa* | unleashed*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
qnx*)
- case $cpu in
- x86 | i*86)
- ;;
- *)
- os=nto-$os
- ;;
- esac
+ os=qnx
;;
hiux*)
os=hiuxwe2
;;
- nto-qnx*)
- ;;
- nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- sim | xray | os68k* | v88r* \
- | windows* | osx | abug | netware* | os9* \
- | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
- ;;
- linux-dietlibc)
- os=linux-dietlibc
- ;;
- linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
lynx*178)
os=lynxos178
;;
lynx*5)
os=lynxos5
;;
+ lynxos*)
+ # don't get caught up in next wildcard
+ ;;
lynx*)
os=lynxos
;;
- mac*)
+ mac[0-9]*)
os=`echo "$os" | sed -e 's|mac|macos|'`
;;
opened*)
@@ -1445,12 +1467,9 @@ case $os in
ns2)
os=nextstep2
;;
- nsk*)
- os=nsk
- ;;
# 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
@@ -1473,18 +1492,12 @@ case $os in
sysvr4)
os=sysv4
;;
- # This must come after sysvr4.
- sysv*)
- ;;
ose*)
os=ose
;;
*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
os=mint
;;
- zvmoe)
- os=zvmoe
- ;;
dicos*)
os=dicos
;;
@@ -1501,19 +1514,11 @@ case $os in
;;
esac
;;
- nacl*)
- ;;
- ios)
- ;;
- none)
- ;;
- *-eabi)
- ;;
*)
- echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
- exit 1
+ # No normalization, but not necessarily accepted, that comes below.
;;
esac
+
else
# Here we handle the default operating systems that come with various machines.
@@ -1526,6 +1531,7 @@ else
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
+kernel=
case $cpu-$vendor in
score-*)
os=elf
@@ -1537,7 +1543,8 @@ case $cpu-$vendor in
os=riscix1.2
;;
arm*-rebel)
- os=linux
+ kernel=linux
+ os=gnu
;;
arm*-semi)
os=aout
@@ -1703,84 +1710,193 @@ case $cpu-$vendor in
os=none
;;
esac
+
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* | relibc* | uclibc*)
+ ;;
+ # Likewise for "kernel-abi"
+ eabi* | gnueabi*)
+ ;;
+ # VxWorks passes extra cpu info in the 4th filed.
+ simlinux | simwindows | spe)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
+ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* | serenity* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* | mlibc* )
+ ;;
+ # This one is extra strict with allowed versions
+ sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ ;;
+ none)
+ ;;
+ kernel* )
+ # Restricted further below
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+ exit 1
+ ;;
+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-relibc* | linux-uclibc* | linux-mlibc* )
+ ;;
+ uclinux-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)
+ ;;
+ nto-qnx*)
+ ;;
+ os2-emx)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
case $vendor in
unknown)
- case $os in
- riscix*)
+ case $cpu-$os in
+ *-riscix*)
vendor=acorn
;;
- sunos*)
+ *-sunos*)
vendor=sun
;;
- cnk*|-aix*)
+ *-cnk* | *-aix*)
vendor=ibm
;;
- beos*)
+ *-beos*)
vendor=be
;;
- hpux*)
+ *-hpux*)
vendor=hp
;;
- mpeix*)
+ *-mpeix*)
vendor=hp
;;
- hiux*)
+ *-hiux*)
vendor=hitachi
;;
- unos*)
+ *-unos*)
vendor=crds
;;
- dgux*)
+ *-dgux*)
vendor=dg
;;
- luna*)
+ *-luna*)
vendor=omron
;;
- genix*)
+ *-genix*)
vendor=ns
;;
- clix*)
+ *-clix*)
vendor=intergraph
;;
- mvs* | opened*)
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
vendor=ibm
;;
- os400*)
+ s390-* | s390x-*)
vendor=ibm
;;
- ptx*)
+ *-ptx*)
vendor=sequent
;;
- tpf*)
+ *-tpf*)
vendor=ibm
;;
- vxsim* | vxworks* | windiss*)
+ *-vxsim* | *-vxworks* | *-windiss*)
vendor=wrs
;;
- aux*)
+ *-aux*)
vendor=apple
;;
- hms*)
+ *-hms*)
vendor=hitachi
;;
- mpw* | macos*)
+ *-mpw* | *-macos*)
vendor=apple
;;
- *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
vendor=atari
;;
- vos*)
+ *-vos*)
vendor=stratus
;;
esac
;;
esac
-echo "$cpu-$vendor-$os"
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
exit
# Local variables:
diff --git a/build-aux/depcomp b/build-aux/depcomp
index 65cbf709..6b391623 100755
--- a/build-aux/depcomp
+++ b/build-aux/depcomp
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/build-aux/install-sh b/build-aux/install-sh
index 8175c640..ec298b53 100755
--- a/build-aux/install-sh
+++ b/build-aux/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2018-03-11.20; # UTC
+scriptversion=2020-11-14.01; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -69,6 +69,11 @@ posix_mkdir=
# Desired mode of installed file.
mode=0755
+# Create dirs (including intermediate dirs) using mode 755.
+# This is like GNU 'install' as of coreutils 8.32 (2020).
+mkdir_umask=22
+
+backupsuffix=
chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
@@ -99,18 +104,28 @@ Options:
--version display version info and exit.
-c (ignored)
- -C install only if different (preserve the last data modification time)
+ -C install only if different (preserve data modification time)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
+ -p pass -p to $cpprog.
-s $stripprog installed files.
+ -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG
+
+By default, rm is invoked with -f; when overridden with RMPROG,
+it's up to you to specify -f if you want it.
+
+If -S is not specified, no backups are attempted.
+
+Email bug reports to bug-automake@gnu.org.
+Automake home page: https://www.gnu.org/software/automake/
"
while test $# -ne 0; do
@@ -137,8 +152,13 @@ while test $# -ne 0; do
-o) chowncmd="$chownprog $2"
shift;;
+ -p) cpprog="$cpprog -p";;
+
-s) stripcmd=$stripprog;;
+ -S) backupsuffix="$2"
+ shift;;
+
-t)
is_target_a_directory=always
dst_arg=$2
@@ -255,6 +275,10 @@ do
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
+ # Don't chown directories that already exist.
+ if test $dstdir_status = 0; then
+ chowncmd=""
+ fi
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
@@ -301,22 +325,6 @@ do
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
# With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then
@@ -326,52 +334,49 @@ do
fi
posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- # Note that $RANDOM variable is not portable (e.g. dash); Use it
- # here however when possible just to lower collision chance.
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
- trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- # Because "mkdir -p" follows existing symlinks and we likely work
- # directly in world-writeable /tmp, make sure that the '$tmpdir'
- # directory is successfully created first before we actually test
- # 'mkdir -p' feature.
- if (umask $mkdir_umask &&
- $mkdirprog $mkdir_mode "$tmpdir" &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- test_tmpdir="$tmpdir/a"
- ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
- fi
- trap '' 0;;
- esac;;
+ # The $RANDOM variable is not portable (e.g., dash). Use it
+ # here however when possible just to lower collision chance.
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+ trap '
+ ret=$?
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
+ exit $ret
+ ' 0
+
+ # Because "mkdir -p" follows existing symlinks and we likely work
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
+ # directory is successfully created first before we actually test
+ # 'mkdir -p'.
+ if (umask $mkdir_umask &&
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+ fi
+ trap '' 0;;
esac
if
@@ -382,7 +387,7 @@ do
then :
else
- # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go.
@@ -411,7 +416,7 @@ do
prefixes=
else
if $posix_mkdir; then
- (umask=$mkdir_umask &&
+ (umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1
@@ -451,7 +456,18 @@ do
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+ (umask $cp_umask &&
+ { test -z "$stripcmd" || {
+ # Create $dsttmp read-write so that cp doesn't create it read-only,
+ # which would cause strip to fail.
+ if test -z "$doit"; then
+ : >"$dsttmp" # No need to fork-exec 'touch'.
+ else
+ $doit touch "$dsttmp"
+ fi
+ }
+ } &&
+ $doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
@@ -477,6 +493,13 @@ do
then
rm -f "$dsttmp"
else
+ # If $backupsuffix is set, and the file being installed
+ # already exists, attempt a backup. Don't worry if it fails,
+ # e.g., if mv doesn't support -f.
+ if test -n "$backupsuffix" && test -f "$dst"; then
+ $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+ fi
+
# Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
@@ -491,9 +514,9 @@ do
# file should still install successfully.
{
test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
+ $doit $rmcmd "$dst" 2>/dev/null ||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
} ||
{ echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
index 0a87cfdd..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
## ------ ##
@@ -75,7 +75,7 @@ scriptversion=2019-02-19.15; # UTC
# Copyright (C) 2004-2019 Bootstrap Authors
#
# This file is dual licensed under the terms of the MIT license
-# <https://opensource.org/license/MIT>, and GPL version 3 or later
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
# these licenses when using or redistributing this software or any of
# the files within it. See the URLs above, or the file `LICENSE`
@@ -1485,7 +1485,7 @@ func_lt_ver ()
# Copyright (C) 2010-2019 Bootstrap Authors
#
# This file is dual licensed under the terms of the MIT license
-# <https://opensource.org/license/MIT>, and GPL version 3 or later
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
# these licenses when using or redistributing this software or any of
# the files within it. See the URLs above, or the file `LICENSE`
@@ -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/build-aux/missing b/build-aux/missing
index 625aeb11..8d0eaad2 100755
--- a/build-aux/missing
+++ b/build-aux/missing
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
diff --git a/build-aux/test-driver b/build-aux/test-driver
index b8521a48..9759384a 100755
--- a/build-aux/test-driver
+++ b/build-aux/test-driver
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+# Copyright (C) 2011-2020 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -42,11 +42,13 @@ print_usage ()
{
cat <<END
Usage:
- test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
- [--expect-failure={yes|no}] [--color-tests={yes|no}]
- [--enable-hard-errors={yes|no}] [--]
+ test-driver --test-name NAME --log-file PATH --trs-file PATH
+ [--expect-failure {yes|no}] [--color-tests {yes|no}]
+ [--enable-hard-errors {yes|no}] [--]
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+See the GNU Automake documentation for information.
END
}
diff --git a/build-aux/ylwrap b/build-aux/ylwrap
index 5943168d..d1533360 100755
--- a/build-aux/ylwrap
+++ b/build-aux/ylwrap
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# Written by Tom Tromey <tromey@cygnus.com>.
#
diff --git a/conf/Makefile.in b/conf/Makefile.in
index 40df3983..05fdd2d1 100644
--- a/conf/Makefile.in
+++ b/conf/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -89,18 +89,21 @@ build_triplet = @build@
host_triplet = @host@
subdir = conf
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -208,10 +211,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -221,12 +228,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -240,7 +251,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -259,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@
@@ -287,8 +299,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -299,11 +310,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -348,7 +364,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -356,9 +371,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -368,6 +380,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
diff --git a/conf/pam.conf b/conf/pam.conf
index 3a06bd66..4961a0aa 100644
--- a/conf/pam.conf
+++ b/conf/pam.conf
@@ -13,14 +13,12 @@
#
chfn auth required pam_unix.so
chfn account required pam_unix.so
-chfn password required pam_cracklib.so retry=3
chfn password required pam_unix.so shadow md5 use_authtok
#
# The PAM configuration file for the `chsh' service
#
chsh auth required pam_unix.so
chsh account required pam_unix.so
-chsh password required pam_cracklib.so retry=3
chsh password required pam_unix.so shadow md5 use_authtok
#
# The PAM configuration file for the `ftp' service
@@ -43,7 +41,6 @@ login auth required pam_unix.so
login auth optional pam_group.so
login account requisite pam_time.so
login account required pam_unix.so
-login password required pam_cracklib.so retry=3
login password required pam_unix.so shadow md5 use_authtok
login session required pam_unix.so
#
@@ -63,7 +60,6 @@ other session required pam_deny.so
#
# The PAM configuration file for the `passwd' service
#
-passwd password requisite pam_cracklib.so retry=3
passwd password required pam_unix.so shadow md5 use_authtok
#
# The PAM configuration file for the `rexec' service
@@ -83,7 +79,6 @@ rlogin auth requisite pam_securetty.so
rlogin auth requisite pam_nologin.so
rlogin auth required pam_rhosts_auth.so
rlogin account required pam_unix.so
-rlogin password required pam_cracklib.so retry=3
rlogin password required pam_unix.so shadow md5 use_authtok
rlogin session required pam_unix.so
rlogin session required pam_limits.so
diff --git a/conf/pam_conv1/Makefile.am b/conf/pam_conv1/Makefile.am
index 4c72162b..88993a20 100644
--- a/conf/pam_conv1/Makefile.am
+++ b/conf/pam_conv1/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = README
AM_YFLAGS = -d
-AM_CFLAGS = $(WARN_CFLAGS)
+AM_CFLAGS = -I$(top_srcdir)/libpam/include $(WARN_CFLAGS)
pam_conv1_CFLAGS = $(AM_CFLAGS) -Wno-unused-function -Wno-sign-compare
diff --git a/conf/pam_conv1/Makefile.in b/conf/pam_conv1/Makefile.in
index 2fc90687..3717b3b8 100644
--- a/conf/pam_conv1/Makefile.in
+++ b/conf/pam_conv1/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -95,18 +95,21 @@ host_triplet = @host@
noinst_PROGRAMS = pam_conv1$(EXEEXT)
subdir = conf/pam_conv1
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -227,10 +230,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -240,12 +247,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -259,7 +270,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -278,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@
@@ -306,8 +318,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -318,11 +329,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -367,7 +383,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -375,9 +390,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -387,6 +399,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -394,7 +407,7 @@ top_srcdir = @top_srcdir@
CLEANFILES = *~
EXTRA_DIST = README
AM_YFLAGS = -d
-AM_CFLAGS = $(WARN_CFLAGS)
+AM_CFLAGS = -I$(top_srcdir)/libpam/include $(WARN_CFLAGS)
pam_conv1_CFLAGS = $(AM_CFLAGS) -Wno-unused-function -Wno-sign-compare
BUILT_SOURCES = pam_conv_y.h
pam_conv1_SOURCES = pam_conv_l.l pam_conv_y.y
@@ -617,7 +630,8 @@ all-am: Makefile $(PROGRAMS)
installdirs:
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -724,7 +738,7 @@ ps-am:
uninstall-am:
-.MAKE: all check install install-am install-strip
+.MAKE: all check install install-am install-exec install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
diff --git a/conf/pam_conv1/pam_conv_y.c b/conf/pam_conv1/pam_conv_y.c
index 7fcf3d44..519307ce 100644
--- a/conf/pam_conv1/pam_conv_y.c
+++ b/conf/pam_conv1/pam_conv_y.c
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.5. */
+/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -33,6 +34,10 @@
/* C LALR(1) parser skeleton written by Richard Stallman, by
simplifying the original so-called "semantic" parser. */
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+ especially those whose name start with YY_ or yy_. They are
+ private implementation details that can be changed or removed. */
+
/* All symbols defined below should begin with yy or YY, to avoid
infringing on user name space. This should be done even for local
variables, as they might otherwise be expanded by user macros.
@@ -40,11 +45,11 @@
define necessary library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below. */
-/* Identify Bison output. */
-#define YYBISON 1
+/* Identify Bison output, and Bison version. */
+#define YYBISON 30706
-/* Bison version. */
-#define YYBISON_VERSION "3.0.5"
+/* Bison version string. */
+#define YYBISON_VERSION "3.7.6"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -61,8 +66,8 @@
-/* Copy the first part of user declarations. */
-#line 1 "pam_conv_y.y" /* yacc.c:339 */
+/* First part of user prologue. */
+#line 1 "pam_conv_y.y"
/*
@@ -85,6 +90,8 @@
#include <ctype.h>
#include <sys/stat.h>
+#include <security/_pam_types.h>
+
extern int yylex(void);
int current_line=1;
@@ -104,26 +111,31 @@
const char *old_to_new_ctrl_flag(const char *old);
void yyerror(const char *format, ...);
-#line 108 "pam_conv_y.c" /* yacc.c:339 */
+#line 115 "pam_conv_y.c"
+# ifndef YY_CAST
+# ifdef __cplusplus
+# define YY_CAST(Type, Val) static_cast<Type> (Val)
+# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+# else
+# define YY_CAST(Type, Val) ((Type) (Val))
+# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+# endif
+# endif
# ifndef YY_NULLPTR
-# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULLPTR nullptr
+# if defined __cplusplus
+# if 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
# else
-# define YY_NULLPTR 0
+# define YY_NULLPTR ((void*)0)
# endif
# endif
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* In a future release of Bison, this section will be replaced
- by #include "y.tab.h". */
+/* Use api.header.include to #include this header
+ instead of duplicating it here. */
#ifndef YY_YY_PAM_CONV_Y_H_INCLUDED
# define YY_YY_PAM_CONV_Y_H_INCLUDED
/* Debug traces. */
@@ -134,34 +146,42 @@
extern int yydebug;
#endif
-/* Token type. */
+/* Token kinds. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
- NL = 258,
- EOFILE = 259,
- TOK = 260
+ YYEMPTY = -2,
+ YYEOF = 0, /* "end of file" */
+ YYerror = 256, /* error */
+ YYUNDEF = 257, /* "invalid token" */
+ NL = 258, /* NL */
+ EOFILE = 259, /* EOFILE */
+ TOK = 260 /* TOK */
};
+ typedef enum yytokentype yytoken_kind_t;
#endif
-/* Tokens. */
+/* Token kinds. */
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
#define NL 258
#define EOFILE 259
#define TOK 260
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
union YYSTYPE
{
-#line 43 "pam_conv_y.y" /* yacc.c:355 */
+#line 45 "pam_conv_y.y"
int def;
char *string;
-#line 163 "pam_conv_y.c" /* yacc.c:355 */
-};
+#line 183 "pam_conv_y.c"
+};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
@@ -173,37 +193,113 @@ extern YYSTYPE yylval;
int yyparse (void);
#endif /* !YY_YY_PAM_CONV_Y_H_INCLUDED */
+/* Symbol kind. */
+enum yysymbol_kind_t
+{
+ YYSYMBOL_YYEMPTY = -2,
+ YYSYMBOL_YYEOF = 0, /* "end of file" */
+ YYSYMBOL_YYerror = 1, /* error */
+ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
+ YYSYMBOL_NL = 3, /* NL */
+ YYSYMBOL_EOFILE = 4, /* EOFILE */
+ YYSYMBOL_TOK = 5, /* TOK */
+ YYSYMBOL_YYACCEPT = 6, /* $accept */
+ YYSYMBOL_complete = 7, /* complete */
+ YYSYMBOL_line = 8, /* line */
+ YYSYMBOL_tokenls = 9, /* tokenls */
+ YYSYMBOL_path = 10, /* path */
+ YYSYMBOL_tok = 11 /* tok */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
-/* Copy the second part of user declarations. */
-#line 180 "pam_conv_y.c" /* yacc.c:358 */
#ifdef short
# undef short
#endif
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+ <limits.h> and (if available) <stdint.h> are included
+ so that the code can choose integer types of a good width. */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_STDINT_H
+# endif
#endif
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+ signed or unsigned integer of at least N bits. In tables they can
+ save space and decrease cache pressure. Promoting to a signed type
+ helps avoid bugs in integer arithmetic. */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
#else
typedef signed char yytype_int8;
#endif
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
#else
-typedef unsigned short int yytype_uint16;
+typedef short yytype_int16;
+#endif
+
+/* Work around bug in HP-UX 11.23, which defines these macros
+ incorrectly for preprocessor constants. This workaround can likely
+ be removed in 2023, as HPE has promised support for HP-UX 11.23
+ (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+ <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
#endif
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
+#else
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
#else
-typedef short int yytype_int16;
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+# define YYPTRDIFF_T __PTRDIFF_TYPE__
+# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+# ifndef ptrdiff_t
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# endif
+# define YYPTRDIFF_T ptrdiff_t
+# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+# define YYPTRDIFF_T long
+# define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
#endif
#ifndef YYSIZE_T
@@ -211,15 +307,28 @@ typedef short int yytype_int16;
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
-# define YYSIZE_T unsigned int
+# define YYSIZE_T unsigned
# endif
#endif
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM \
+ YY_CAST (YYPTRDIFF_T, \
+ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
+ ? YYPTRDIFF_MAXIMUM \
+ : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int8 yy_state_t;
+
+/* State numbers in computations. */
+typedef int yy_state_fast_t;
#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
@@ -233,47 +342,37 @@ typedef short int yytype_int16;
# endif
#endif
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__ \
- && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
- || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-# define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define YY_ATTRIBUTE_PURE
+# endif
#endif
#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
- && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-# define _Noreturn __declspec (noreturn)
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
# else
-# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+# define YY_ATTRIBUTE_UNUSED
# endif
#endif
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
+# define YY_USE(E) ((void) (E))
#else
-# define YYUSE(E) /* empty */
+# define YY_USE(E) /* empty */
#endif
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop")
#else
# define YY_INITIAL_VALUE(Value) Value
@@ -286,8 +385,22 @@ typedef short int yytype_int16;
# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END \
+ _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
-#if ! defined yyoverflow || YYERROR_VERBOSE
+#if !defined yyoverflow
/* The parser invokes alloca or malloc; define the necessary symbols. */
@@ -352,8 +465,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
#if (! defined yyoverflow \
&& (! defined __cplusplus \
@@ -362,17 +474,17 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
/* A type that is properly aligned for any stack member. */
union yyalloc
{
- yytype_int16 yyss_alloc;
+ yy_state_t yyss_alloc;
YYSTYPE yyvs_alloc;
};
/* The size of the maximum gap between one aligned stack and the next. */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
- ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
# define YYCOPY_NEEDED 1
@@ -385,11 +497,11 @@ union yyalloc
# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
do \
{ \
- YYSIZE_T yynewbytes; \
+ YYPTRDIFF_T yynewbytes; \
YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
+ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / YYSIZEOF (*yyptr); \
} \
while (0)
@@ -401,12 +513,12 @@ union yyalloc
# ifndef YYCOPY
# if defined __GNUC__ && 1 < __GNUC__
# define YYCOPY(Dst, Src, Count) \
- __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
# else
# define YYCOPY(Dst, Src, Count) \
do \
{ \
- YYSIZE_T yyi; \
+ YYPTRDIFF_T yyi; \
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
@@ -429,17 +541,20 @@ union yyalloc
/* YYNSTATES -- Number of states. */
#define YYNSTATES 17
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
- by yylex, with out-of-bounds checking. */
-#define YYUNDEFTOK 2
+/* YYMAXUTOK -- Last valid token kind. */
#define YYMAXUTOK 260
-#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, with out-of-bounds checking. */
+#define YYTRANSLATE(YYX) \
+ (0 <= (YYX) && (YYX) <= YYMAXUTOK \
+ ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
+ : YYSYMBOL_YYUNDEF)
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
- as returned by yylex, without out-of-bounds checking. */
-static const yytype_uint8 yytranslate[] =
+ as returned by yylex. */
+static const yytype_int8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -474,38 +589,51 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
- 0, 56, 56, 58, 59, 60, 66, 130, 136, 139,
- 155, 161
+ 0, 59, 59, 60, 61, 62, 68, 132, 138, 141,
+ 157, 163
};
#endif
-#if YYDEBUG || YYERROR_VERBOSE || 0
+/** Accessing symbol of state STATE. */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+ YYSYMBOL. No bounds checking. */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
- "$end", "error", "$undefined", "NL", "EOFILE", "TOK", "$accept",
- "complete", "line", "tokenls", "path", "tok", YY_NULLPTR
+ "\"end of file\"", "error", "\"invalid token\"", "NL", "EOFILE", "TOK",
+ "$accept", "complete", "line", "tokenls", "path", "tok", YY_NULLPTR
};
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+ return yytname[yysymbol];
+}
#endif
-# ifdef YYPRINT
+#ifdef YYPRINT
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
(internal) symbol number NUM (which must be that of a token). */
-static const yytype_uint16 yytoknum[] =
+static const yytype_int16 yytoknum[] =
{
0, 256, 257, 258, 259, 260
};
-# endif
+#endif
-#define YYPACT_NINF -9
+#define YYPACT_NINF (-9)
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-9)))
+#define yypact_value_is_default(Yyn) \
+ ((Yyn) == YYPACT_NINF)
-#define YYTABLE_NINF -1
+#define YYTABLE_NINF (-1)
-#define yytable_value_is_error(Yytable_value) \
+#define yytable_value_is_error(Yyn) \
0
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -519,7 +647,7 @@ static const yytype_int8 yypact[] =
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
Performed when YYTABLE does not specify something else to do. Zero
means the default is an error. */
-static const yytype_uint8 yydefact[] =
+static const yytype_int8 yydefact[] =
{
2, 0, 1, 0, 3, 5, 11, 4, 0, 7,
0, 0, 10, 8, 0, 6, 9
@@ -534,13 +662,13 @@ static const yytype_int8 yypgoto[] =
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- -1, 1, 7, 14, 13, 8
+ 0, 1, 7, 14, 13, 8
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule whose
number is the opposite. If YYTABLE_NINF, syntax error. */
-static const yytype_uint8 yytable[] =
+static const yytype_int8 yytable[] =
{
10, 15, 11, 6, 2, 3, 16, 4, 5, 6,
9, 6, 0, 12
@@ -554,31 +682,31 @@ static const yytype_int8 yycheck[] =
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
-static const yytype_uint8 yystos[] =
+static const yytype_int8 yystos[] =
{
0, 7, 0, 1, 3, 4, 5, 8, 11, 3,
11, 11, 5, 10, 9, 3, 11
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
+static const yytype_int8 yyr1[] =
{
0, 6, 7, 7, 7, 7, 8, 8, 9, 9,
10, 11
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
+static const yytype_int8 yyr2[] =
{
0, 2, 0, 2, 2, 2, 6, 2, 0, 2,
1, 1
};
+enum { YYENOMEM = -2 };
+
#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
@@ -587,27 +715,26 @@ static const yytype_uint8 yyr2[] =
#define YYRECOVERING() (!!yyerrstatus)
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- YYPOPSTACK (yylen); \
- yystate = *yyssp; \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (0)
-
-/* Error token number */
-#define YYTERROR 1
-#define YYERRCODE 256
-
+#define YYBACKUP(Token, Value) \
+ do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+ while (0)
+
+/* Backward compatibility with an undocumented macro.
+ Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
/* Enable debugging if requested. */
@@ -625,54 +752,58 @@ do { \
} while (0)
/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
+# ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yy_symbol_print (stderr, \
- Type, Value); \
+ Kind, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT. |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO. |
+`-----------------------------------*/
static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo,
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
{
- FILE *yyo = yyoutput;
- YYUSE (yyo);
+ FILE *yyoutput = yyo;
+ YY_USE (yyoutput);
if (!yyvaluep)
return;
# ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+ if (yykind < YYNTOKENS)
+ YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
# endif
- YYUSE (yytype);
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YY_USE (yykind);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
}
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO. |
+`---------------------------*/
static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo,
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
{
- YYFPRINTF (yyoutput, "%s %s (",
- yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+ YYFPRINTF (yyo, "%s %s (",
+ yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
+ yy_symbol_value_print (yyo, yykind, yyvaluep);
+ YYFPRINTF (yyo, ")");
}
/*------------------------------------------------------------------.
@@ -681,7 +812,7 @@ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
`------------------------------------------------------------------*/
static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
{
YYFPRINTF (stderr, "Stack now");
for (; yybottom <= yytop; yybottom++)
@@ -704,21 +835,21 @@ do { \
`------------------------------------------------*/
static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
+ int yyrule)
{
- unsigned long int yylno = yyrline[yyrule];
+ int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
- YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
yyrule - 1, yylno);
/* The symbols being reduced. */
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
yy_symbol_print (stderr,
- yystos[yyssp[yyi + 1 - yynrhs]],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
+ YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
+ &yyvsp[(yyi + 1) - (yynrhs)]);
YYFPRINTF (stderr, "\n");
}
}
@@ -733,8 +864,8 @@ do { \
multiple parsers can coexist. */
int yydebug;
#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
@@ -757,250 +888,30 @@ int yydebug;
#endif
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-# if defined __GLIBC__ && defined _STRING_H
-# define yystrlen strlen
-# else
-/* Return the length of YYSTR. */
-static YYSIZE_T
-yystrlen (const char *yystr)
-{
- YYSIZE_T yylen;
- for (yylen = 0; yystr[yylen]; yylen++)
- continue;
- return yylen;
-}
-# endif
-# endif
-
-# ifndef yystpcpy
-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-# define yystpcpy stpcpy
-# else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
- YYDEST. */
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-{
- char *yyd = yydest;
- const char *yys = yysrc;
-
- while ((*yyd++ = *yys++) != '\0')
- continue;
-
- return yyd - 1;
-}
-# endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
- quotes and backslashes, so that it's suitable for yyerror. The
- heuristic is that double-quoting is unnecessary unless the string
- contains an apostrophe, a comma, or backslash (other than
- backslash-backslash). YYSTR is taken from yytname. If YYRES is
- null, do not copy; instead, return the length of what the result
- would have been. */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
- if (*yystr == '"')
- {
- YYSIZE_T yyn = 0;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
- do_not_strip_quotes: ;
- }
-
- if (! yyres)
- return yystrlen (yystr);
-
- return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
- about the unexpected token YYTOKEN for the state stack whose top is
- YYSSP.
-
- Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
- not large enough to hold the message. In that case, also set
- *YYMSG_ALLOC to the required number of bytes. Return 2 if the
- required number of bytes is too large to store. */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
- yytype_int16 *yyssp, int yytoken)
-{
- YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
- YYSIZE_T yysize = yysize0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- /* Internationalized format string. */
- const char *yyformat = YY_NULLPTR;
- /* Arguments of yyformat. */
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- /* Number of reported tokens (one for the "unexpected", one per
- "expected"). */
- int yycount = 0;
-
- /* There are many possibilities here to consider:
- - If this state is a consistent state with a default action, then
- the only way this function was invoked is if the default action
- is an error action. In that case, don't check for expected
- tokens because there are none.
- - The only way there can be no lookahead present (in yychar) is if
- this state is a consistent state with a default action. Thus,
- detecting the absence of a lookahead is sufficient to determine
- that there is no unexpected or expected token to report. In that
- case, just report a simple "syntax error".
- - Don't assume there isn't a lookahead just because this state is a
- consistent state with a default action. There might have been a
- previous inconsistent state, consistent state with a non-default
- action, or user semantic action that manipulated yychar.
- - Of course, the expected token list depends on states to have
- correct lookahead information, and it depends on the parser not
- to perform extra reductions after fetching a lookahead from the
- scanner and before detecting a syntax error. Thus, state merging
- (from LALR or IELR) and default reductions corrupt the expected
- token list. However, the list is correct for canonical LR with
- one exception: it will still contain any token that will not be
- accepted due to an error action in a later state.
- */
- if (yytoken != YYEMPTY)
- {
- int yyn = yypact[*yyssp];
- yyarg[yycount++] = yytname[yytoken];
- if (!yypact_value_is_default (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yyx;
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
- && !yytable_value_is_error (yytable[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- {
- YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
- if (! (yysize <= yysize1
- && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
- return 2;
- yysize = yysize1;
- }
- }
- }
- }
-
- switch (yycount)
- {
-# define YYCASE_(N, S) \
- case N: \
- yyformat = S; \
- break
- default: /* Avoid compiler warnings. */
- YYCASE_(0, YY_("syntax error"));
- YYCASE_(1, YY_("syntax error, unexpected %s"));
- YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
- YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
- YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
- YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
- }
- {
- YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
- if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
- return 2;
- yysize = yysize1;
- }
- if (*yymsg_alloc < yysize)
- {
- *yymsg_alloc = 2 * yysize;
- if (! (yysize <= *yymsg_alloc
- && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
- *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
- return 1;
- }
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- {
- char *yyp = *yymsg;
- int yyi = 0;
- while ((*yyp = *yyformat) != '\0')
- if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyformat += 2;
- }
- else
- {
- yyp++;
- yyformat++;
- }
- }
- return 0;
-}
-#endif /* YYERROR_VERBOSE */
/*-----------------------------------------------.
| Release the memory associated to this symbol. |
`-----------------------------------------------*/
static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+yydestruct (const char *yymsg,
+ yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
{
- YYUSE (yyvaluep);
+ YY_USE (yyvaluep);
if (!yymsg)
yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
- YYUSE (yytype);
+ YY_USE (yykind);
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
-
-
-/* The lookahead symbol. */
+/* Lookahead token kind. */
int yychar;
/* The semantic value of the lookahead symbol. */
@@ -1009,6 +920,8 @@ YYSTYPE yylval;
int yynerrs;
+
+
/*----------.
| yyparse. |
`----------*/
@@ -1016,43 +929,36 @@ int yynerrs;
int
yyparse (void)
{
- int yystate;
+ yy_state_fast_t yystate = 0;
/* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
-
- /* The stacks and their tools:
- 'yyss': related to states.
- 'yyvs': related to semantic values.
+ int yyerrstatus = 0;
- Refer to the stacks through separate pointers, to allow yyoverflow
+ /* Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss;
- yytype_int16 *yyssp;
+ /* Their size. */
+ YYPTRDIFF_T yystacksize = YYINITDEPTH;
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs;
- YYSTYPE *yyvsp;
+ /* The state stack: array, bottom, top. */
+ yy_state_t yyssa[YYINITDEPTH];
+ yy_state_t *yyss = yyssa;
+ yy_state_t *yyssp = yyss;
- YYSIZE_T yystacksize;
+ /* The semantic value stack: array, bottom, top. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp = yyvs;
int yyn;
+ /* The return value of yyparse. */
int yyresult;
- /* Lookahead token as an internal (translated) token number. */
- int yytoken = 0;
+ /* Lookahead symbol kind. */
+ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
-#if YYERROR_VERBOSE
- /* Buffer for error messages, and its allocated size. */
- char yymsgbuf[128];
- char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
@@ -1060,58 +966,60 @@ yyparse (void)
Keep to zero when no symbol should be popped. */
int yylen = 0;
- yyssp = yyss = yyssa;
- yyvsp = yyvs = yyvsa;
- yystacksize = YYINITDEPTH;
-
YYDPRINTF ((stderr, "Starting parse\n"));
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
yychar = YYEMPTY; /* Cause a token to be read. */
goto yysetstate;
+
/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
+| yynewstate -- push a new state, which is found in yystate. |
`------------------------------------------------------------*/
- yynewstate:
+yynewstate:
/* In all cases, when you get here, the value and location stacks
have just been pushed. So pushing a state here evens the stacks. */
yyssp++;
- yysetstate:
- *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate. |
+`--------------------------------------------------------------------*/
+yysetstate:
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+ YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+ YY_IGNORE_USELESS_CAST_BEGIN
+ *yyssp = YY_CAST (yy_state_t, yystate);
+ YY_IGNORE_USELESS_CAST_END
+ YY_STACK_PRINT (yyss, yyssp);
if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+#else
{
/* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
+ YYPTRDIFF_T yysize = yyssp - yyss + 1;
-#ifdef yyoverflow
+# if defined yyoverflow
{
/* Give user a chance to reallocate the stack. Use copies of
these so that the &'s don't force the real ones into
memory. */
+ yy_state_t *yyss1 = yyss;
YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
data in use in that stack, in bytes. This used to be a
conditional around just the two extra args, but that might
be undefined if yyoverflow is a macro. */
yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
+ &yyss1, yysize * YYSIZEOF (*yyssp),
+ &yyvs1, yysize * YYSIZEOF (*yyvsp),
&yystacksize);
-
yyss = yyss1;
yyvs = yyvs1;
}
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
goto yyexhaustedlab;
@@ -1120,9 +1028,10 @@ yyparse (void)
yystacksize = YYMAXDEPTH;
{
- yytype_int16 *yyss1 = yyss;
+ yy_state_t *yyss1 = yyss;
union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ YY_CAST (union yyalloc *,
+ YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
if (! yyptr)
goto yyexhaustedlab;
YYSTACK_RELOCATE (yyss_alloc, yyss);
@@ -1132,30 +1041,30 @@ yyparse (void)
YYSTACK_FREE (yyss1);
}
# endif
-#endif /* no yyoverflow */
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
+ YY_IGNORE_USELESS_CAST_BEGIN
+ YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+ YY_CAST (long, yystacksize)));
+ YY_IGNORE_USELESS_CAST_END
if (yyss + yystacksize - 1 <= yyssp)
YYABORT;
}
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
if (yystate == YYFINAL)
YYACCEPT;
goto yybackup;
+
/*-----------.
| yybackup. |
`-----------*/
yybackup:
-
/* Do appropriate processing given the current state. Read a
lookahead token if we need one and don't already have one. */
@@ -1166,18 +1075,29 @@ yybackup:
/* Not known => get a lookahead token if don't already have one. */
- /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
if (yychar == YYEMPTY)
{
- YYDPRINTF ((stderr, "Reading a token: "));
+ YYDPRINTF ((stderr, "Reading a token\n"));
yychar = yylex ();
}
if (yychar <= YYEOF)
{
- yychar = yytoken = YYEOF;
+ yychar = YYEOF;
+ yytoken = YYSYMBOL_YYEOF;
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
+ else if (yychar == YYerror)
+ {
+ /* The scanner already issued an error message, process directly
+ to error recovery. But do not keep the error token as
+ lookahead, it is too special and may lead us to an endless
+ loop in error recovery. */
+ yychar = YYUNDEF;
+ yytoken = YYSYMBOL_YYerror;
+ goto yyerrlab1;
+ }
else
{
yytoken = YYTRANSLATE (yychar);
@@ -1205,15 +1125,13 @@ yybackup:
/* Shift the lookahead token. */
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token. */
- yychar = YYEMPTY;
-
yystate = yyn;
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
YY_IGNORE_MAYBE_UNINITIALIZED_END
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
goto yynewstate;
@@ -1228,7 +1146,7 @@ yydefault:
/*-----------------------------.
-| yyreduce -- Do a reduction. |
+| yyreduce -- do a reduction. |
`-----------------------------*/
yyreduce:
/* yyn is the number of a rule to reduce with. */
@@ -1248,17 +1166,17 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
- case 5:
-#line 60 "pam_conv_y.y" /* yacc.c:1648 */
- {
+ case 5: /* complete: complete EOFILE */
+#line 62 "pam_conv_y.y"
+ {
return 0;
}
-#line 1257 "pam_conv_y.c" /* yacc.c:1648 */
+#line 1175 "pam_conv_y.c"
break;
- case 6:
-#line 66 "pam_conv_y.y" /* yacc.c:1648 */
- {
+ case 6: /* line: tok tok tok path tokenls NL */
+#line 68 "pam_conv_y.y"
+ {
char *filename;
FILE *conf;
int i;
@@ -1322,28 +1240,28 @@ yyreduce:
fclose(conf);
}
-#line 1326 "pam_conv_y.c" /* yacc.c:1648 */
+#line 1244 "pam_conv_y.c"
break;
- case 7:
-#line 130 "pam_conv_y.y" /* yacc.c:1648 */
- {
+ case 7: /* line: error NL */
+#line 132 "pam_conv_y.y"
+ {
yyerror("malformed line");
}
-#line 1334 "pam_conv_y.c" /* yacc.c:1648 */
+#line 1252 "pam_conv_y.c"
break;
- case 8:
-#line 136 "pam_conv_y.y" /* yacc.c:1648 */
- {
+ case 8: /* tokenls: %empty */
+#line 138 "pam_conv_y.y"
+ {
(yyval.string)=NULL;
}
-#line 1342 "pam_conv_y.c" /* yacc.c:1648 */
+#line 1260 "pam_conv_y.c"
break;
- case 9:
-#line 139 "pam_conv_y.y" /* yacc.c:1648 */
- {
+ case 9: /* tokenls: tokenls tok */
+#line 141 "pam_conv_y.y"
+ {
int len;
if ((yyvsp[-1].string)) {
@@ -1356,28 +1274,29 @@ yyreduce:
(yyval.string) = (yyvsp[0].string);
}
}
-#line 1360 "pam_conv_y.c" /* yacc.c:1648 */
+#line 1278 "pam_conv_y.c"
break;
- case 10:
-#line 155 "pam_conv_y.y" /* yacc.c:1648 */
- {
+ case 10: /* path: TOK */
+#line 157 "pam_conv_y.y"
+ {
/* XXX - this could be used to check if file present */
(yyval.string) = strdup(yytext);
}
-#line 1369 "pam_conv_y.c" /* yacc.c:1648 */
+#line 1287 "pam_conv_y.c"
break;
- case 11:
-#line 161 "pam_conv_y.y" /* yacc.c:1648 */
- {
+ case 11: /* tok: TOK */
+#line 163 "pam_conv_y.y"
+ {
(yyval.string) = strdup(yytext);
}
-#line 1377 "pam_conv_y.c" /* yacc.c:1648 */
+#line 1295 "pam_conv_y.c"
break;
-#line 1381 "pam_conv_y.c" /* yacc.c:1648 */
+#line 1299 "pam_conv_y.c"
+
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -1391,25 +1310,23 @@ yyreduce:
case of YYERROR or YYBACKUP, subsequent parser actions might lead
to an incorrect destructor call or verbose syntax error message
before the lookahead is translated. */
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
YYPOPSTACK (yylen);
yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
*++yyvsp = yyval;
/* Now 'shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
+ {
+ const int yylhs = yyr1[yyn] - YYNTOKENS;
+ const int yyi = yypgoto[yylhs] + *yyssp;
+ yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+ ? yytable[yyi]
+ : yydefgoto[yylhs]);
+ }
goto yynewstate;
@@ -1420,50 +1337,14 @@ yyreduce:
yyerrlab:
/* Make sure we have latest lookahead translation. See comments at
user semantic actions for why this is necessary. */
- yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
+ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
/* If not already recovering from an error, report this error. */
if (!yyerrstatus)
{
++yynerrs;
-#if ! YYERROR_VERBOSE
yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
- yyssp, yytoken)
- {
- char const *yymsgp = YY_("syntax error");
- int yysyntax_error_status;
- yysyntax_error_status = YYSYNTAX_ERROR;
- if (yysyntax_error_status == 0)
- yymsgp = yymsg;
- else if (yysyntax_error_status == 1)
- {
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
- if (!yymsg)
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- yysyntax_error_status = 2;
- }
- else
- {
- yysyntax_error_status = YYSYNTAX_ERROR;
- yymsgp = yymsg;
- }
- }
- yyerror (yymsgp);
- if (yysyntax_error_status == 2)
- goto yyexhaustedlab;
- }
-# undef YYSYNTAX_ERROR
-#endif
}
-
-
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
@@ -1492,12 +1373,10 @@ yyerrlab:
| yyerrorlab -- error raised explicitly by YYERROR. |
`---------------------------------------------------*/
yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
+ /* Pacify compilers when the user code never invokes YYERROR and the
+ label yyerrorlab therefore never appears in user code. */
+ if (0)
+ YYERROR;
/* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
@@ -1514,13 +1393,14 @@ yyerrorlab:
yyerrlab1:
yyerrstatus = 3; /* Each real token shifted decrements this. */
+ /* Pop stack until we find a state that shifts the error token. */
for (;;)
{
yyn = yypact[yystate];
if (!yypact_value_is_default (yyn))
{
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ yyn += YYSYMBOL_YYerror;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
{
yyn = yytable[yyn];
if (0 < yyn)
@@ -1534,7 +1414,7 @@ yyerrlab1:
yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
+ YY_ACCESSING_SYMBOL (yystate), yyvsp);
YYPOPSTACK (1);
yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
@@ -1546,7 +1426,7 @@ yyerrlab1:
/* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
yystate = yyn;
goto yynewstate;
@@ -1559,6 +1439,7 @@ yyacceptlab:
yyresult = 0;
goto yyreturn;
+
/*-----------------------------------.
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
@@ -1566,16 +1447,21 @@ yyabortlab:
yyresult = 1;
goto yyreturn;
-#if !defined yyoverflow || YYERROR_VERBOSE
+
+#if !defined yyoverflow
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here. |
`-------------------------------------------------*/
yyexhaustedlab:
yyerror (YY_("memory exhausted"));
yyresult = 2;
- /* Fall through. */
+ goto yyreturn;
#endif
+
+/*-------------------------------------------------------.
+| yyreturn -- parsing is finished, clean up and return. |
+`-------------------------------------------------------*/
yyreturn:
if (yychar != YYEMPTY)
{
@@ -1592,20 +1478,18 @@ yyreturn:
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
+ YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
YYPOPSTACK (1);
}
#ifndef yyoverflow
if (yyss != yyssa)
YYSTACK_FREE (yyss);
#endif
-#if YYERROR_VERBOSE
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
-#endif
+
return yyresult;
}
-#line 165 "pam_conv_y.y" /* yacc.c:1907 */
+
+#line 167 "pam_conv_y.y"
const char *old_to_new_ctrl_flag(const char *old)
@@ -1628,6 +1512,7 @@ const char *old_to_new_ctrl_flag(const char *old)
return clist[i];
}
+PAM_FORMAT((printf, 1, 2))
void yyerror(const char *format, ...)
{
va_list args;
diff --git a/conf/pam_conv1/pam_conv_y.h b/conf/pam_conv1/pam_conv_y.h
index a2151d19..17bdcea1 100644
--- a/conf/pam_conv1/pam_conv_y.h
+++ b/conf/pam_conv1/pam_conv_y.h
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.5. */
+/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -30,6 +31,10 @@
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+ especially those whose name start with YY_ or yy_. They are
+ private implementation details that can be changed or removed. */
+
#ifndef YY_YY_PAM_CONV_Y_H_INCLUDED
# define YY_YY_PAM_CONV_Y_H_INCLUDED
/* Debug traces. */
@@ -40,34 +45,42 @@
extern int yydebug;
#endif
-/* Token type. */
+/* Token kinds. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
- NL = 258,
- EOFILE = 259,
- TOK = 260
+ YYEMPTY = -2,
+ YYEOF = 0, /* "end of file" */
+ YYerror = 256, /* error */
+ YYUNDEF = 257, /* "invalid token" */
+ NL = 258, /* NL */
+ EOFILE = 259, /* EOFILE */
+ TOK = 260 /* TOK */
};
+ typedef enum yytokentype yytoken_kind_t;
#endif
-/* Tokens. */
+/* Token kinds. */
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
#define NL 258
#define EOFILE 259
#define TOK 260
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
union YYSTYPE
{
-#line 43 "pam_conv_y.y" /* yacc.c:1910 */
+#line 45 "pam_conv_y.y"
int def;
char *string;
-#line 69 "pam_conv_y.h" /* yacc.c:1910 */
-};
+#line 82 "pam_conv_y.h"
+};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
diff --git a/conf/pam_conv1/pam_conv_y.y b/conf/pam_conv1/pam_conv_y.y
index c971abf4..66d80440 100644
--- a/conf/pam_conv1/pam_conv_y.y
+++ b/conf/pam_conv1/pam_conv_y.y
@@ -20,6 +20,8 @@
#include <ctype.h>
#include <sys/stat.h>
+#include <security/_pam_types.h>
+
extern int yylex(void);
int current_line=1;
@@ -184,6 +186,7 @@ const char *old_to_new_ctrl_flag(const char *old)
return clist[i];
}
+PAM_FORMAT((printf, 1, 2))
void yyerror(const char *format, ...)
{
va_list args;
diff --git a/config.h.in b/config.h.in
index b43f19b2..d8f322ab 100644
--- a/config.h.in
+++ b/config.h.in
@@ -22,12 +22,6 @@
the CoreFoundation framework. */
#undef HAVE_CFPREFERENCESCOPYAPPVALUE
-/* Define to 1 if you have the <crack.h> header file. */
-#undef HAVE_CRACK_H
-
-/* Define to 1 if you have the `crypt_gensalt_r' function. */
-#undef HAVE_CRYPT_GENSALT_R
-
/* Define to 1 if you have the <crypt.h> header file. */
#undef HAVE_CRYPT_H
@@ -64,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
@@ -145,15 +142,9 @@
/* Define to 1 if audit support should be compiled in. */
#undef HAVE_LIBAUDIT
-/* Define to 1 if xcrypt support should be compiled in. */
-#undef HAVE_LIBXCRYPT
-
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
-/* Define to 1 if you have the <linux/magic.h> header file. */
-#undef HAVE_LINUX_MAGIC_H
-
/* Define to 1 if you have the `logwtmp' function. */
#undef HAVE_LOGWTMP
@@ -163,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
@@ -175,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
@@ -184,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
@@ -264,9 +252,6 @@
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
-/* Define to 1 if you have the <sys/vfs.h> header file. */
-#undef HAVE_SYS_VFS_H
-
/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
#undef HAVE_SYS_WAIT_H
@@ -291,9 +276,6 @@
/* Define to 1 if you have the `vprintf' function. */
#undef HAVE_VPRINTF
-/* Define to 1 if you have the <xcrypt.h> header file. */
-#undef HAVE_XCRYPT_H
-
/* Define to 1 if you have the `yperr_string' function. */
#undef HAVE_YPERR_STRING
@@ -342,6 +324,9 @@
/* libpam should observe a global authentication lock */
#undef PAM_LOCKING
+/* libpam_misc misc_conv() buffer size. */
+#undef PAM_MISC_CONV_BUFSIZE
+
/* Path where mails are stored */
#undef PAM_PATH_MAILDIR
@@ -357,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
@@ -372,7 +357,7 @@
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
#undef TM_IN_SYS_TIME
-/* define if your compiler has __att ribute__ ((unused)) */
+/* Define if the compiler supports __attribute__((unused)) */
#undef UNUSED
/* Define to 1 if the lckpwdf function should be used */
@@ -403,9 +388,15 @@
/* 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
+/* OpenSSL provides crypto algorithm for hmac */
+#undef WITH_OPENSSL
+
/* Defined if SE Linux support is compiled in */
#undef WITH_SELINUX
diff --git a/configure b/configure
index b22e1db6..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.4.0.
+# 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.4.0'
-PACKAGE_STRING='Linux-PAM 1.4.0'
+PACKAGE_VERSION='1.5.3'
+PACKAGE_STRING='Linux-PAM 1.5.3'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -636,12 +636,10 @@ am__EXEEXT_TRUE
LTLIBOBJS
COND_BUILD_PAM_USERDB_FALSE
COND_BUILD_PAM_USERDB_TRUE
+COND_BUILD_PAM_UNIX_FALSE
+COND_BUILD_PAM_UNIX_TRUE
COND_BUILD_PAM_TTY_AUDIT_FALSE
COND_BUILD_PAM_TTY_AUDIT_TRUE
-COND_BUILD_PAM_TALLY2_FALSE
-COND_BUILD_PAM_TALLY2_TRUE
-COND_BUILD_PAM_TALLY_FALSE
-COND_BUILD_PAM_TALLY_TRUE
COND_BUILD_PAM_SETQUOTA_FALSE
COND_BUILD_PAM_SETQUOTA_TRUE
COND_BUILD_PAM_SEPERMIT_FALSE
@@ -656,8 +654,7 @@ COND_BUILD_PAM_LASTLOG_FALSE
COND_BUILD_PAM_LASTLOG_TRUE
COND_BUILD_PAM_KEYINIT_FALSE
COND_BUILD_PAM_KEYINIT_TRUE
-COND_BUILD_PAM_CRACKLIB_FALSE
-COND_BUILD_PAM_CRACKLIB_TRUE
+systemdunitdir
POSUB
LTLIBINTL
LIBINTL
@@ -686,27 +683,45 @@ XML_CATALOG_FILE
XMLLINT
XSLTPROC
LIBOBJS
+STRINGPARAM_PROFILECONDITIONS
+COND_USE_OPENSSL_FALSE
+COND_USE_OPENSSL_TRUE
+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
NSL_CFLAGS
TIRPC_LIBS
TIRPC_CFLAGS
+LIBDB
+LIBCRYPT
+CRYPT_LIBS
+CRYPT_CFLAGS
PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH
PKG_CONFIG
-LIBDB
-LIBCRYPT
LIBAUDIT
-LIBCRACK
LIBDL
pam_xauth_path
SCONFIGDIR
SECUREDIR
+MAN_STYLESHEET
+PDF_STYLESHEET
+TXT_STYLESHEET
+HTML_STYLESHEET
+DOCBOOK_RNG
LIBPRELUDE_CONFIG_PREFIX
LIBPRELUDE_PREFIX
LIBPRELUDE_LIBS
@@ -716,9 +731,8 @@ LIBPRELUDE_CFLAGS
LIBPRELUDE_CONFIG
HAVE_DOC_FALSE
HAVE_DOC_TRUE
-PIE_LDFLAGS
-PIE_CFLAGS
-libc_cv_fpie
+EXE_LDFLAGS
+EXE_CFLAGS
HAVE_VERSIONING_FALSE
HAVE_VERSIONING_TRUE
BUILD_LDFLAGS
@@ -726,9 +740,6 @@ BUILD_CFLAGS
BUILD_CPPFLAGS
CC_FOR_BUILD
WARN_CFLAGS
-pam_cv_ld_O1
-pam_cv_ld_no_undefined
-pam_cv_ld_as_needed
LEXLIB
LEX_OUTPUT_ROOT
LEX
@@ -746,6 +757,7 @@ ac_ct_AR
AR
DLLTOOL
OBJDUMP
+FILECMD
LN_S
NM
ac_ct_DUMPBIN
@@ -867,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
@@ -875,7 +892,6 @@ enable_read_both_confs
enable_lckpwdf
with_mailspool
with_xauth
-enable_cracklib
enable_audit
with_randomdev
enable_db
@@ -883,8 +899,10 @@ with_db_uniquename
enable_nis
enable_usergroups
enable_selinux
+enable_logind
enable_econf
enable_vendordir
+enable_openssl
enable_regenerate_docu
with_xml_catalog
enable_nls
@@ -892,10 +910,11 @@ enable_rpath
with_libiconv_prefix
with_libintl_prefix
with_uidmin
-with_sysuidmin
-with_kerneloverflowuid
-enable_tally
-enable_tally2
+with_kernel_overflow_uid
+with_systemdunitdir
+enable_unix
+enable_lastlog
+with_misc_conv_bufsize
'
ac_precious_vars='build_alias
host_alias
@@ -912,10 +931,14 @@ YFLAGS
PKG_CONFIG
PKG_CONFIG_PATH
PKG_CONFIG_LIBDIR
+CRYPT_CFLAGS
+CRYPT_LIBS
TIRPC_CFLAGS
TIRPC_LIBS
NSL_CFLAGS
NSL_LIBS
+SYSTEMD_CFLAGS
+SYSTEMD_LIBS
ECONF_CFLAGS
ECONF_LIBS'
@@ -1458,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.4.0 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]...
@@ -1528,7 +1551,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Linux-PAM 1.4.0:";;
+ short | recursive ) echo "Configuration of Linux-PAM 1.5.3:";;
esac
cat <<\_ACEOF
@@ -1553,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]
@@ -1563,7 +1601,6 @@ Optional Features:
--enable-read-both-confs
read both /etc/pam.d and /etc/pam.conf files
--disable-lckpwdf do not use the lckpwdf function
- --enable-cracklib build deprecated pam_cracklib module
--disable-audit do not enable audit support
--enable-db=(db|ndbm|yes|no)
Default behavior 'yes', which is to check for libdb
@@ -1572,15 +1609,17 @@ 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
+ --enable-openssl use OpenSSL crypto libraries
--disable-regenerate-docu
Don't re-build documentation from XML sources
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
- --enable-tally build deprecated pam_tally module
- --enable-tally2 build deprecated pam_tally2 module
+ --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,10 +1651,13 @@ 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
+ path to systemd service directory
+ --with-misc-conv-bufsize=<number>
+ Size of input buffer for libpam_misc's misc_conv()
+ conversation function, default=4096
Some influential environment variables:
CC C compiler command
@@ -1639,11 +1681,18 @@ Some influential environment variables:
directories to add to pkg-config's search path
PKG_CONFIG_LIBDIR
path overriding pkg-config's built-in search path
+ CRYPT_CFLAGS
+ C compiler flags for CRYPT, overriding pkg-config
+ CRYPT_LIBS linker flags for CRYPT, overriding pkg-config
TIRPC_CFLAGS
C compiler flags for TIRPC, overriding pkg-config
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
@@ -1714,7 +1763,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Linux-PAM configure 1.4.0
+Linux-PAM configure 1.5.3
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2074,7 +2123,7 @@ else
/* Declare this function with the same prototype as __builtin_$2.
This removes a warning about conflicting types for built-in function $2 */
__typeof__(__builtin_$2) $2;
-__typeof__(__builtin_$2) *f = $2;
+__typeof__(__builtin_$2) *volatile f = $2;
int
main ()
@@ -2265,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.4.0, 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 $@
@@ -2822,12 +2871,7 @@ program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
am_aux_dir=`cd "$ac_aux_dir" && pwd`
if test x"${MISSING+set}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
- *)
- MISSING="\${SHELL} $am_aux_dir/missing" ;;
- esac
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
fi
# Use eval to expand $SHELL
if eval "$MISSING --is-lightweight"; then
@@ -3132,7 +3176,7 @@ fi
# Define the identity of the package.
PACKAGE='Linux-PAM'
- VERSION='1.4.0'
+ VERSION='1.5.3'
cat >>confdefs.h <<_ACEOF
@@ -4849,8 +4893,8 @@ esac
-macro_version='2.4.6'
-macro_revision='2.4.6'
+macro_version='2.4.7'
+macro_revision='2.4.7'
@@ -5244,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
@@ -5378,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"
;;
@@ -5480,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`
@@ -5523,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
@@ -5726,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
@@ -5857,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
;;
@@ -5891,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
@@ -5912,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'
@@ -5959,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
;;
@@ -6727,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'"
@@ -6745,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'"\
@@ -6800,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
@@ -7004,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|'')
;; #(
@@ -7121,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
;;
@@ -7142,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"
;;
@@ -7154,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"
;;
@@ -7180,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"
;;
@@ -7189,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"
;;
@@ -7197,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"
@@ -7209,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
@@ -7222,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)
@@ -7233,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"
;;
@@ -7340,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*)
@@ -8086,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
@@ -8964,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'
@@ -9445,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 ...
@@ -9572,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)
@@ -9615,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
@@ -9627,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'
@@ -9644,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
@@ -10130,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
@@ -10165,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
@@ -11105,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"
;;
@@ -11115,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'
@@ -11141,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
@@ -11211,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
@@ -13512,95 +13650,139 @@ $as_echo "no" >&6; }
fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports --as-needed" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports --as-needed" >&5
$as_echo_n "checking whether ld supports --as-needed... " >&6; }
if ${pam_cv_ld_as_needed+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat > conftest.c <<EOF
-int main (void) { return 0; }
-EOF
- if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -o conftest.o conftest.c
- -Wl,--as-needed 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- pam_cv_ld_as_needed=yes
- LDFLAGS="$LDFLAGS -Wl,--as-needed"
- else
- pam_cv_ld_as_needed=no
- fi
- rm -f conftest*
+ saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--as-needed"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pam_cv_ld_as_needed=yes
+else
+ pam_cv_ld_as_needed=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$saved_LDFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_ld_as_needed" >&5
$as_echo "$pam_cv_ld_as_needed" >&6; }
+ if test $pam_cv_ld_as_needed = yes; then :
+ LDFLAGS="$LDFLAGS -Wl,--as-needed"
+fi
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports --no-undefined" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports --no-undefined" >&5
$as_echo_n "checking whether ld supports --no-undefined... " >&6; }
if ${pam_cv_ld_no_undefined+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat > conftest.c <<EOF
-int main (void) { return 0; }
-EOF
- if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -o conftest.o conftest.c
- -Wl,--no-undefined 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- pam_cv_ld_no_undefined=yes
- LDFLAGS="$LDFLAGS -Wl,--no-undefined"
- else
- pam_cv_ld_no_undefined=no
- fi
- rm -f conftest*
+ saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--no-undefined"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pam_cv_ld_no_undefined=yes
+else
+ pam_cv_ld_no_undefined=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$saved_LDFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_ld_no_undefined" >&5
$as_echo "$pam_cv_ld_no_undefined" >&6; }
+ if test $pam_cv_ld_no_undefined = yes; then :
+ LDFLAGS="$LDFLAGS -Wl,--no-undefined"
+fi
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports -O1" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports -O1" >&5
$as_echo_n "checking whether ld supports -O1... " >&6; }
if ${pam_cv_ld_O1+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat > conftest.c <<EOF
-int main (void) { return 0; }
-EOF
- if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -o conftest.o conftest.c
- -Wl,-O1 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- pam_cv_ld_O1=yes
- LDFLAGS="$LDFLAGS -Wl,-O1"
- else
- pam_cv_ld_O1=no
- fi
- rm -f conftest*
+ saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,-O1"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pam_cv_ld_O1=yes
+else
+ pam_cv_ld_O1=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$saved_LDFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_ld_O1" >&5
$as_echo "$pam_cv_ld_O1" >&6; }
+ if test $pam_cv_ld_O1 = yes; then :
+ LDFLAGS="$LDFLAGS -Wl,-O1"
+fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports \"-z now\"" >&5
+$as_echo_n "checking whether ld supports \"-z now\"... " >&6; }
+if ${pam_cv_ld_z_now+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,-z,now"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pam_cv_ld_z_now=yes
+else
+ pam_cv_ld_z_now=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$saved_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_ld_z_now" >&5
+$as_echo "$pam_cv_ld_z_now" >&6; }
+ if test $pam_cv_ld_z_now = yes; then :
+ ZNOW_LDFLAGS="-Wl,-z,now"
+else
+ ZNOW_LDFLAGS=
+fi
# Check whether --enable-largefile was given.
@@ -13804,73 +13986,1942 @@ rm -rf conftest*
fi
-Werror_option=
+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 -W" >&5
+$as_echo_n "checking whether $CC handles -W... " >&6; }
+if ${gl_cv_warn_CFLAGS__W+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -W"
+ 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__W=yes
+else
+ gl_cv_warn_CFLAGS__W=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__W" >&5
+$as_echo "$gl_cv_warn_CFLAGS__W" >&6; }
+if test "x$gl_cv_warn_CFLAGS__W" = xyes; then :
+ as_fn_append WARN_CFLAGS " -W"
+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 -Wall" >&5
+$as_echo_n "checking whether $CC handles -Wall... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wall+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wall"
+ 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__Wall=yes
+else
+ gl_cv_warn_CFLAGS__Wall=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__Wall" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wall" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wall" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wall"
+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 -Wbad-function-cast" >&5
+$as_echo_n "checking whether $CC handles -Wbad-function-cast... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wbad_function_cast+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wbad-function-cast"
+ 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__Wbad_function_cast=yes
+else
+ gl_cv_warn_CFLAGS__Wbad_function_cast=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__Wbad_function_cast" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wbad_function_cast" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wbad_function_cast" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wbad-function-cast"
+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 -Wcast-align" >&5
+$as_echo_n "checking whether $CC handles -Wcast-align... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wcast_align+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wcast-align"
+ 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__Wcast_align=yes
+else
+ gl_cv_warn_CFLAGS__Wcast_align=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__Wcast_align" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wcast_align" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wcast_align" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wcast-align"
+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 -Wcast-align=strict" >&5
+$as_echo_n "checking whether $CC handles -Wcast-align=strict... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wcast_align_strict+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wcast-align=strict"
+ 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__Wcast_align_strict=yes
+else
+ gl_cv_warn_CFLAGS__Wcast_align_strict=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__Wcast_align_strict" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wcast_align_strict" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wcast_align_strict" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wcast-align=strict"
+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 -Wcast-qual" >&5
+$as_echo_n "checking whether $CC handles -Wcast-qual... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wcast_qual+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wcast-qual"
+ 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__Wcast_qual=yes
+else
+ gl_cv_warn_CFLAGS__Wcast_qual=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__Wcast_qual" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wcast_qual" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wcast_qual" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wcast-qual"
+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 -Wdeprecated" >&5
+$as_echo_n "checking whether $CC handles -Wdeprecated... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wdeprecated+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wdeprecated"
+ 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__Wdeprecated=yes
+else
+ gl_cv_warn_CFLAGS__Wdeprecated=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__Wdeprecated" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wdeprecated" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wdeprecated" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wdeprecated"
+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 -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 :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Winline"
+ 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__Winline=yes
+else
+ gl_cv_warn_CFLAGS__Winline=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__Winline" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Winline" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Winline" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Winline"
+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 -Wmain" >&5
+$as_echo_n "checking whether $CC handles -Wmain... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wmain+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wmain"
+ 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__Wmain=yes
+else
+ gl_cv_warn_CFLAGS__Wmain=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__Wmain" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wmain" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wmain" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wmain"
+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 -Wmissing-declarations" >&5
+$as_echo_n "checking whether $CC handles -Wmissing-declarations... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wmissing_declarations+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wmissing-declarations"
+ 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__Wmissing_declarations=yes
+else
+ gl_cv_warn_CFLAGS__Wmissing_declarations=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__Wmissing_declarations" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wmissing_declarations" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wmissing_declarations" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wmissing-declarations"
+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 -Wmissing-format-attribute" >&5
+$as_echo_n "checking whether $CC handles -Wmissing-format-attribute... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wmissing_format_attribute+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wmissing-format-attribute"
+ 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__Wmissing_format_attribute=yes
+else
+ gl_cv_warn_CFLAGS__Wmissing_format_attribute=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__Wmissing_format_attribute" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wmissing_format_attribute" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wmissing_format_attribute" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wmissing-format-attribute"
+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 -Wmissing-prototypes" >&5
+$as_echo_n "checking whether $CC handles -Wmissing-prototypes... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wmissing_prototypes+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wmissing-prototypes"
+ 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__Wmissing_prototypes=yes
+else
+ gl_cv_warn_CFLAGS__Wmissing_prototypes=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__Wmissing_prototypes" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wmissing_prototypes" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wmissing_prototypes" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wmissing-prototypes"
+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 -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 :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wp64"
+ 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__Wp64=yes
+else
+ gl_cv_warn_CFLAGS__Wp64=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__Wp64" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wp64" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wp64" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wp64"
+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 -Wpointer-arith" >&5
+$as_echo_n "checking whether $CC handles -Wpointer-arith... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wpointer_arith+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wpointer-arith"
+ 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__Wpointer_arith=yes
+else
+ gl_cv_warn_CFLAGS__Wpointer_arith=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__Wpointer_arith" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wpointer_arith" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wpointer_arith" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wpointer-arith"
+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 -Wreturn-type" >&5
+$as_echo_n "checking whether $CC handles -Wreturn-type... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wreturn_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wreturn-type"
+ 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__Wreturn_type=yes
+else
+ gl_cv_warn_CFLAGS__Wreturn_type=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__Wreturn_type" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wreturn_type" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wreturn_type" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wreturn-type"
+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 -Wshadow" >&5
+$as_echo_n "checking whether $CC handles -Wshadow... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wshadow+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wshadow"
+ 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__Wshadow=yes
+else
+ gl_cv_warn_CFLAGS__Wshadow=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__Wshadow" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wshadow" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wshadow" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wshadow"
+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 -Wstrict-prototypes" >&5
+$as_echo_n "checking whether $CC handles -Wstrict-prototypes... " >&6; }
+if ${gl_cv_warn_CFLAGS__Wstrict_prototypes+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wstrict-prototypes"
+ 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__Wstrict_prototypes=yes
+else
+ gl_cv_warn_CFLAGS__Wstrict_prototypes=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__Wstrict_prototypes" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wstrict_prototypes" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wstrict_prototypes" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wstrict-prototypes"
+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 -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 :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wuninitialized"
+ 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__Wuninitialized=yes
+else
+ gl_cv_warn_CFLAGS__Wuninitialized=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__Wuninitialized" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wuninitialized" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wuninitialized" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wuninitialized"
+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 -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 :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wwrite-strings"
+ 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__Wwrite_strings=yes
+else
+ gl_cv_warn_CFLAGS__Wwrite_strings=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__Wwrite_strings" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Wwrite_strings" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Wwrite_strings" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Wwrite-strings"
+fi
+
+
# Check whether --enable-Werror was given.
if test "${enable_Werror+set}" = set; then :
enableval=$enable_Werror; case $enableval in
- yes) Werror_option=-Werror ;;
- no) ;;
- *) as_fn_error $? "bad value $enableval for Werror option" "$LINENO" 5 ;;
- esac
-fi
-
-
-if eval 'test "x$GCC" = "xyes" -a "$CC" != "icc"'; then
- for flag in \
- -W \
- -Wall \
- -Wbad-function-cast \
- -Wcast-align \
- -Wcast-qual \
- -Wmissing-declarations \
- -Wmissing-prototypes \
- -Wpointer-arith \
- -Wreturn-type \
- -Wstrict-prototypes \
- -Wwrite-strings \
- -Winline \
- -Wshadow \
- $Werror_option
- do
- case "$CFLAGS" in
-"$flag" | "$flag "* | *" $flag" | *" $flag "* )
- :
- ;;
-*)
- WARN_CFLAGS="$WARN_CFLAGS $flag"
- ;;
-esac
+ yes) 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
- done
+ 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
-if eval 'test "x$CC" = "xicc"'; then
- for flag in \
- -Wall \
- -Wmissing-prototypes \
- -Wpointer-arith \
- -Wreturn-type \
- -Wstrict-prototypes \
- -Wwrite-strings \
- -Wshadow \
- -Wp64 \
- -Wdeprecated \
- -Wuninitialized \
- -Wmain
- do
- case "$CFLAGS" in
-"$flag" | "$flag "* | *" $flag" | *" $flag "* )
- :
- ;;
-*)
- WARN_CFLAGS="$WARN_CFLAGS $flag"
- ;;
-esac
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
- done
+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 -Werror" >&5
+$as_echo_n "checking whether $CC handles -Werror... " >&6; }
+if ${gl_cv_warn_CFLAGS__Werror+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror"
+ 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=yes
+else
+ gl_cv_warn_CFLAGS__Werror=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" >&5
+$as_echo "$gl_cv_warn_CFLAGS__Werror" >&6; }
+if test "x$gl_cv_warn_CFLAGS__Werror" = xyes; then :
+ as_fn_append WARN_CFLAGS " -Werror"
+fi
+
+ ;;
+ no) ;;
+ *) as_fn_error $? "bad value $enableval for Werror option" "$LINENO" 5 ;;
+ esac
fi
+
if test "x${CC_FOR_BUILD+set}" != "xset" ; then
if test "x$cross_compiling" = "xyes" ; then
for ac_prog in gcc cc
@@ -13953,52 +16004,41 @@ fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__" >&5
-$as_echo_n "checking for __attribute__... " >&6; }
-if ${ac_cv___attribute__+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((unused))" >&5
+$as_echo_n "checking for __attribute__((unused))... " >&6; }
+if ${pam_cv_attribute_unused+:} false; then :
$as_echo_n "(cached) " >&6
else
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
-#include <stdlib.h>
-static void foo (void) __attribute__ ((unused));
-
-static void
-foo (void)
-{
- exit(1);
-}
-
+int fun(int i __attribute__((unused)));
int
main ()
{
-
- exit (0);
-
+return fun(0);
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv___attribute__=yes
+ pam_cv_attribute_unused=yes
else
- ac_cv___attribute__=no
+ pam_cv_attribute_unused=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-
-if test "$ac_cv___attribute__" = "yes"; then
-
-$as_echo "#define UNUSED __attribute__ ((unused))" >>confdefs.h
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_attribute_unused" >&5
+$as_echo "$pam_cv_attribute_unused" >&6; }
+ if test "$pam_cv_attribute_unused" = yes; then :
+ unused='__attribute__((unused))'
else
- $as_echo "#define UNUSED /**/" >>confdefs.h
-
+ unused=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv___attribute__" >&5
-$as_echo "$ac_cv___attribute__" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define UNUSED $unused
+_ACEOF
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for .symver assembler directive" >&5
@@ -14078,43 +16118,72 @@ fi
# Check whether --enable-pie was given.
if test "${enable_pie+set}" = set; then :
- enableval=$enable_pie; USE_PIE=$enableval
+ enableval=$enable_pie;
else
- USE_PIE=yes
+ enable_pie=check
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fpie" >&5
-$as_echo_n "checking for -fpie... " >&6; }
-if ${libc_cv_fpie+:} false; then :
+case "$enable_pie" in
+ no) ;;
+ yes|check)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fpie/-pie support" >&5
+$as_echo_n "checking for -fpie/-pie support... " >&6; }
+if ${pam_cv_pie+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
- if test "$USE_PIE" = "yes" -a "$CC" != "icc" &&
- { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fpie
- -o conftest conftest.c 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- libc_cv_fpie=yes
- PIE_CFLAGS="-fpie"
- PIE_LDFLAGS="-pie"
- else
- libc_cv_fpie=no
- PIE_CFLAGS=""
- PIE_LDFLAGS=""
- fi
- rm -f conftest*
+ saved_CFLAGS="$CFLAGS"
+ saved_LDFLAGS="$LDFLAGS"
+ CFLAGS="$CFLAGS -fpie"
+ LDFLAGS="$LDFLAGS -pie"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pam_cv_pie=yes
+else
+ pam_cv_pie=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$saved_LDFLAGS"
+ CFLAGS="$saved_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_pie" >&5
+$as_echo "$pam_cv_pie" >&6; }
+ if test "$pam_cv_pie" = yes; then :
+ enable_pie=yes
+else
+ if test "$enable_pie" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "requested -fpie/-pie support not found
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ enable_pie=no
+fi
+fi
+ ;;
+ *) as_fn_error $? "bad value $enable_pie for --enable-pie option" "$LINENO" 5 ;;
+esac
+
+if test "$enable_pie" = yes; then :
+ PIE_CFLAGS="-fpie"
+ PIE_LDFLAGS="-pie"
+else
+ PIE_CFLAGS=
+ PIE_LDFLAGS=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_fpie" >&5
-$as_echo "$libc_cv_fpie" >&6; }
+EXE_CFLAGS="$PIE_CFLAGS"
+EXE_LDFLAGS="$PIE_LDFLAGS $ZNOW_LDFLAGS"
@@ -14229,6 +16298,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -14310,21 +16380,24 @@ $as_echo "yes" >&6; }
$as_echo "no" >&6; }
fi
if test "$LIBPRELUDE_CONFIG" = "no" ; then
- echo "*** The libprelude-config script installed by LIBPRELUDE could not be found"
- echo "*** If LIBPRELUDE was installed in PREFIX, make sure PREFIX/bin is in"
- echo "*** your path, or set the LIBPRELUDE_CONFIG environment variable to the"
- echo "*** full path to libprelude-config."
+ if test x$libprelude_config_prefix != x ; then
+ echo "*** The libprelude-config script installed by LIBPRELUDE could not be found"
+ echo "*** If LIBPRELUDE was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the LIBPRELUDE_CONFIG environment variable to the"
+ echo "*** full path to libprelude-config."
+ fi
else
if test -f conf.libpreludetest ; then
:
else
echo "*** Could not run libprelude test program, checking why..."
CFLAGS="$CFLAGS $LIBPRELUDE_CFLAGS"
- LDFLAGS="$LDFLAGS $LIBPRELUDE_LDFLAGS"
+ LDFLAGS="$LDFLAGS $LIBPRELUDE_LDFLAGS"
LIBS="$LIBS $LIBPRELUDE_LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -14358,7 +16431,7 @@ fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$ac_save_CFLAGS"
- LDFLAGS="$ac_save_LDFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
@@ -14392,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
@@ -14425,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 :
@@ -14491,6 +16621,7 @@ else
/* end confdefs.h. */
#include <paths.h>
+#include <stdlib.h>
int main() {
#ifdef _PATH_MAILDIR
exit(0);
@@ -14643,81 +16774,6 @@ See \`config.log' for more details" "$LINENO" 5; } ;;
esac
-# Check whether --enable-cracklib was given.
-if test "${enable_cracklib+set}" = set; then :
- enableval=$enable_cracklib;
-else
- enable_cracklib=no
-fi
-
-LIBCRACK=""
-case "$enable_cracklib" in
- no) ;;
- yes|check)
- for ac_header in crack.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "crack.h" "ac_cv_header_crack_h" "$ac_includes_default"
-if test "x$ac_cv_header_crack_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_CRACK_H 1
-_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FascistCheck in -lcrack" >&5
-$as_echo_n "checking for FascistCheck in -lcrack... " >&6; }
-if ${ac_cv_lib_crack_FascistCheck+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcrack $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 FascistCheck ();
-int
-main ()
-{
-return FascistCheck ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_crack_FascistCheck=yes
-else
- ac_cv_lib_crack_FascistCheck=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_crack_FascistCheck" >&5
-$as_echo "$ac_cv_lib_crack_FascistCheck" >&6; }
-if test "x$ac_cv_lib_crack_FascistCheck" = xyes; then :
- LIBCRACK="-lcrack"
-fi
-
-fi
-
-done
-
- if test -z "$LIBCRACK"; then
- if test "$enable_cracklib" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to find cracklib
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
- ;;
- *) as_fn_error $? "bad value $enable_cracklib for --enable-cracklib option" "$LINENO" 5 ;;
-esac
-
-
# Check whether --enable-audit was given.
if test "${enable_audit+set}" = set; then :
enableval=$enable_audit; WITH_LIBAUDIT=$enableval
@@ -14782,7 +16838,7 @@ fi
fi
- if test -n "$LIBAUDIT" -a "$ac_cv_header_libaudit_h" != "no" ; then
+ if test -n "$LIBAUDIT" && test "$ac_cv_header_libaudit_h" != "no" ; then
$as_echo "#define HAVE_LIBAUDIT 1" >>confdefs.h
@@ -14808,27 +16864,318 @@ else
fi
-for ac_header in xcrypt.h crypt.h
+for ac_header in crypt.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 :
+ ac_fn_c_check_header_mongrel "$LINENO" "crypt.h" "ac_cv_header_crypt_h" "$ac_includes_default"
+if test "x$ac_cv_header_crypt_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_CRYPT_H 1
_ACEOF
fi
done
-if test "x$ac_cv_header_xcrypt_h" = "xyes"; then :
- crypt_libs="xcrypt crypt"
+
+BACKUP_LIBS=$LIBS
+LIBCRYPT=""
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; 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_path_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ 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_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $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
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; 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_path_ac_pt_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ 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_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $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
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
else
- crypt_libs="crypt"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-BACKUP_LIBS=$LIBS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ 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
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcrypt" >&5
+$as_echo_n "checking for libcrypt... " >&6; }
+
+if test -n "$CRYPT_CFLAGS"; then
+ pkg_cv_CRYPT_CFLAGS="$CRYPT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcrypt\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libcrypt") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CRYPT_CFLAGS=`$PKG_CONFIG --cflags "libcrypt" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$CRYPT_LIBS"; then
+ pkg_cv_CRYPT_LIBS="$CRYPT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcrypt\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libcrypt") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CRYPT_LIBS=`$PKG_CONFIG --libs "libcrypt" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CRYPT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcrypt" 2>&1`
+ else
+ CRYPT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcrypt" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$CRYPT_PKG_ERRORS" >&5
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt_gensalt_rn" >&5
+$as_echo_n "checking for library containing crypt_gensalt_rn... " >&6; }
+if ${ac_cv_search_crypt_gensalt_rn+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$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 crypt_gensalt_rn ();
+int
+main ()
+{
+return crypt_gensalt_rn ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' crypt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_crypt_gensalt_rn=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_crypt_gensalt_rn+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_crypt_gensalt_rn+:} false; then :
+
+else
+ ac_cv_search_crypt_gensalt_rn=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt_gensalt_rn" >&5
+$as_echo "$ac_cv_search_crypt_gensalt_rn" >&6; }
+ac_res=$ac_cv_search_crypt_gensalt_rn
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ case "$ac_cv_search_crypt_gensalt_rn" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt_gensalt_rn" ;;
+ no) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt_r" >&5
+$as_echo_n "checking for library containing crypt_r... " >&6; }
+if ${ac_cv_search_crypt_r+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$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 crypt_r ();
+int
+main ()
+{
+return crypt_r ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' crypt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_crypt_r=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_crypt_r+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_crypt_r+:} false; then :
+
+else
+ ac_cv_search_crypt_r=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt_r" >&5
+$as_echo "$ac_cv_search_crypt_r" >&6; }
+ac_res=$ac_cv_search_crypt_r
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ case "$ac_cv_search_crypt_r" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt_r" ;;
+ no ) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5
$as_echo_n "checking for library containing crypt... " >&6; }
if ${ac_cv_search_crypt+:} false; then :
$as_echo_n "(cached) " >&6
@@ -14852,7 +17199,7 @@ return crypt ();
return 0;
}
_ACEOF
-for ac_lib in '' $crypt_libs; do
+for ac_lib in '' crypt; do
if test -z "$ac_lib"; then
ac_res="none required"
else
@@ -14881,30 +17228,222 @@ $as_echo "$ac_cv_search_crypt" >&6; }
ac_res=$ac_cv_search_crypt
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- LIBCRYPT="${ac_cv_search_crypt}"
+
+fi
+
+ case "$ac_cv_search_crypt" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt" ;;
+ esac ;;
+ esac ;;
+ esac
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt_gensalt_rn" >&5
+$as_echo_n "checking for library containing crypt_gensalt_rn... " >&6; }
+if ${ac_cv_search_crypt_gensalt_rn+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$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 crypt_gensalt_rn ();
+int
+main ()
+{
+return crypt_gensalt_rn ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' crypt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_crypt_gensalt_rn=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_crypt_gensalt_rn+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_crypt_gensalt_rn+:} false; then :
+
else
- LIBCRYPT=""
+ ac_cv_search_crypt_gensalt_rn=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt_gensalt_rn" >&5
+$as_echo "$ac_cv_search_crypt_gensalt_rn" >&6; }
+ac_res=$ac_cv_search_crypt_gensalt_rn
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-for ac_func in crypt_r crypt_gensalt_r
-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"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+fi
+
+ case "$ac_cv_search_crypt_gensalt_rn" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt_gensalt_rn" ;;
+ no) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt_r" >&5
+$as_echo_n "checking for library containing crypt_r... " >&6; }
+if ${ac_cv_search_crypt_r+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$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 crypt_r ();
+int
+main ()
+{
+return crypt_r ();
+ ;
+ return 0;
+}
_ACEOF
+for ac_lib in '' crypt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_crypt_r=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_crypt_r+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_crypt_r+:} false; then :
+
+else
+ ac_cv_search_crypt_r=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt_r" >&5
+$as_echo "$ac_cv_search_crypt_r" >&6; }
+ac_res=$ac_cv_search_crypt_r
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
+
+ case "$ac_cv_search_crypt_r" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt_r" ;;
+ no ) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5
+$as_echo_n "checking for library containing crypt... " >&6; }
+if ${ac_cv_search_crypt+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$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 crypt ();
+int
+main ()
+{
+return crypt ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' crypt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_crypt=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_crypt+:} false; then :
+ break
+fi
done
+if ${ac_cv_search_crypt+:} false; then :
-LIBS=$BACKUP_LIBS
+else
+ ac_cv_search_crypt=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5
+$as_echo "$ac_cv_search_crypt" >&6; }
+ac_res=$ac_cv_search_crypt
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-if test "$LIBCRYPT" = "-lxcrypt" -a "$ac_cv_header_xcrypt_h" = "yes" ; then
+fi
-$as_echo "#define HAVE_LIBXCRYPT 1" >>confdefs.h
+ case "$ac_cv_search_crypt" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt" ;;
+ esac ;;
+ esac ;;
+ esac
+
+else
+ CRYPT_CFLAGS=$pkg_cv_CRYPT_CFLAGS
+ CRYPT_LIBS=$pkg_cv_CRYPT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ CFLAGS="$CFLAGS $CRYPT_CFLAGS"
+ CPPFLAGS="$CPPFLAGS $CRYPT_CFLAGS"
+ LIBS="$LIBS $CRYPT_LIBS"
+ LIBCRYPT="$CRYPT_LIBS"
fi
+for ac_func in crypt_r
+do :
+ ac_fn_c_check_func "$LINENO" "crypt_r" "ac_cv_func_crypt_r"
+if test "x$ac_cv_func_crypt_r" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_CRYPT_R 1
+_ACEOF
+
+fi
+done
+
+LIBS=$BACKUP_LIBS
+
# Check whether --with-randomdev was given.
@@ -14912,7 +17451,7 @@ if test "${with_randomdev+set}" = set; then :
withval=$with_randomdev; opt_randomdev=$withval
fi
-if test "$opt_randomdev" = yes -o -z "$opt_randomdev"; then
+if test "$opt_randomdev" = yes || test -z "$opt_randomdev"; then
opt_randomdev="/dev/urandom"
elif test "$opt_randomdev" = no; then
opt_randomdev=
@@ -14939,7 +17478,7 @@ if test "${with_db_uniquename+set}" = set; then :
fi
if test x"$WITH_DB" != xno ; then
- if test x"$WITH_DB" = xyes -o x"$WITH_DB" = xdb ; then
+ if test x"$WITH_DB" = xyes || test x"$WITH_DB" = xdb ; then
old_libs=$LIBS
LIBS="$LIBS -ldb$with_db_uniquename"
for ac_func in db_create$with_db_uniquename db_create dbm_store$with_db_uniquename dbm_store
@@ -15036,126 +17575,6 @@ if test "${enable_nis+set}" = set; then :
fi
-
-
-
-
-
-
-
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; 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_path_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- 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_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $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
-
- ;;
-esac
-fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_PKG_CONFIG"; then
- ac_pt_PKG_CONFIG=$PKG_CONFIG
- # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; 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_path_ac_pt_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_pt_PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- 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_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $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
-
- ;;
-esac
-fi
-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-if test -n "$ac_pt_PKG_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_pt_PKG_CONFIG" = x; then
- PKG_CONFIG=""
- 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
- PKG_CONFIG=$ac_pt_PKG_CONFIG
- fi
-else
- PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
-fi
-
-fi
-if test -n "$PKG_CONFIG"; then
- _pkg_min_version=0.9.0
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- PKG_CONFIG=""
- fi
-fi
if test "x$enable_nis" != "xno"; then :
old_CFLAGS=$CFLAGS
@@ -15419,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
@@ -15457,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 :
@@ -15560,6 +18003,93 @@ done
LIBS=$BACKUP_LIBS
fi
+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_LOGIND=yes
+fi
+
+if test "$WITH_LOGIND" = "yes"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd >= 254" >&5
+$as_echo_n "checking for libsystemd >= 254... " >&6; }
+
+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 \"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_SYSTEMD_CFLAGS=`$PKG_CONFIG --cflags "libsystemd >= 254" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+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 \"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_SYSTEMD_LIBS=`$PKG_CONFIG --libs "libsystemd >= 254" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd >= 254" 2>&1`
+ else
+ 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 "$SYSTEMD_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ :
+else
+ 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
+
+
+
+ECONF_CFLAGS=
+ECONF_LIBS=
# Check whether --enable-econf was given.
if test "${enable_econf+set}" = set; then :
enableval=$enable_econf; WITH_ECONF=$enableval
@@ -15567,22 +18097,22 @@ else
WITH_ECONF=yes
fi
-if test "$WITH_ECONF" = "yes" ; then
+if test "$WITH_ECONF" = "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 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\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libeconf") 2>&5
+ { { $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" 2>/dev/null`
+ pkg_cv_ECONF_CFLAGS=`$PKG_CONFIG --cflags "libeconf >= 0.5.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -15594,12 +18124,12 @@ 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\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libeconf") 2>&5
+ { { $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" 2>/dev/null`
+ pkg_cv_ECONF_LIBS=`$PKG_CONFIG --libs "libeconf >= 0.5.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -15620,65 +18150,82 @@ 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`
+ 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" 2>&1`
+ 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
- { $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. */
+ 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
+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;
-}
+
+
+# Check whether --enable-vendordir was given.
+if test "${enable_vendordir+set}" = set; then :
+ enableval=$enable_vendordir;
+fi
+
+if test -n "$enable_vendordir"; then
+
+cat >>confdefs.h <<_ACEOF
+#define VENDORDIR "$enable_vendordir"
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_econf_econf_readDirs=yes
+
+
+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
- ac_cv_lib_econf_econf_readDirs=no
+ profileconditions="without_vendordir"
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+
+
+ if test -n "$enable_vendordir"; then
+ HAVE_VENDORDIR_TRUE=
+ HAVE_VENDORDIR_FALSE='#'
+else
+ HAVE_VENDORDIR_TRUE='#'
+ HAVE_VENDORDIR_FALSE=
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"
+
+
+# Check whether --enable-openssl was given.
+if test "${enable_openssl+set}" = set; then :
+ enableval=$enable_openssl; OPENSSL_ENABLED=$enableval
else
- ECONF_LIBS=""
+ OPENSSL_ENABLED=no
fi
-elif test $pkg_failed = untried; 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 :
+if test "$OPENSSL_ENABLED" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EVP_MAC_CTX_new in -lcrypto" >&5
+$as_echo_n "checking for EVP_MAC_CTX_new in -lcrypto... " >&6; }
+if ${ac_cv_lib_crypto_EVP_MAC_CTX_new+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-leconf $LIBS"
+LIBS="-lcrypto $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -15688,62 +18235,52 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char econf_readDirs ();
+char EVP_MAC_CTX_new ();
int
main ()
{
-return econf_readDirs ();
+return EVP_MAC_CTX_new ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_econf_econf_readDirs=yes
+ ac_cv_lib_crypto_EVP_MAC_CTX_new=yes
else
- ac_cv_lib_econf_econf_readDirs=no
+ ac_cv_lib_crypto_EVP_MAC_CTX_new=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"
-else
- ECONF_LIBS=""
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_EVP_MAC_CTX_new" >&5
+$as_echo "$ac_cv_lib_crypto_EVP_MAC_CTX_new" >&6; }
+if test "x$ac_cv_lib_crypto_EVP_MAC_CTX_new" = xyes; then :
+ CRYPTO_LIBS="-lcrypto"
+ use_openssl=yes
-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; }
+$as_echo "#define WITH_OPENSSL 1" >>confdefs.h
+ profileconditions+=";openssl_hmac"
+else
+ CRYPTO_LIBS=""
+ profileconditions+=";no_openssl_hmac"
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;
fi
-if test -n "$enable_vendordir"; then
-
-cat >>confdefs.h <<_ACEOF
-#define VENDORDIR "$enable_vendordir"
-_ACEOF
-
- STRINGPARAM_VENDORDIR="--stringparam vendordir '$enable_vendordir'"
+ if test "x$use_openssl" = "xyes"; then
+ COND_USE_OPENSSL_TRUE=
+ COND_USE_OPENSSL_FALSE='#'
else
- STRINGPARAM_VENDORDIR="--stringparam vendordir '<vendordir>'"
+ COND_USE_OPENSSL_TRUE='#'
+ COND_USE_OPENSSL_FALSE=
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`
@@ -16055,7 +18592,7 @@ $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
fi
-for ac_header in fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h net/if.h termio.h unistd.h sys/fsuid.h inittypes.h sys/vfs.h linux/magic.h
+for ac_header in fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h net/if.h termio.h unistd.h sys/fsuid.h inittypes.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"
@@ -16794,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"
@@ -16802,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 :
@@ -16989,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
@@ -17009,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
@@ -17154,7 +19689,7 @@ fi
- if test x$enable_docu != xno -a x$enable_doc != xno; then
+ if test x$enable_docu != xno && test x$enable_doc != xno; then
ENABLE_REGENERATE_MAN_TRUE=
ENABLE_REGENERATE_MAN_FALSE='#'
else
@@ -19265,9 +21800,8 @@ if test "${with_uidmin+set}" = set; then :
withval=$with_uidmin; opt_uidmin=$withval
fi
-if test x"$opt_uidmin" == x; then
- opt_uidmin=1000
-fi
+test -n "$opt_uidmin" ||
+ opt_uidmin=1000
cat >>confdefs.h <<_ACEOF
#define PAM_USERTYPE_UIDMIN $opt_uidmin
@@ -19275,67 +21809,95 @@ _ACEOF
-# Check whether --with-sysuidmin was given.
-if test "${with_sysuidmin+set}" = set; then :
- withval=$with_sysuidmin; opt_sysuidmin=$withval
+# 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
fi
-if test x"$opt_sysuidmin" == x; then
- opt_sysuidmin=101
-fi
+test -n "$opt_kerneloverflowuid" ||
+ opt_kerneloverflowuid=65534
cat >>confdefs.h <<_ACEOF
-#define PAM_USERTYPE_SYSUIDMIN $opt_sysuidmin
+#define PAM_USERTYPE_OVERFLOW_UID $opt_kerneloverflowuid
_ACEOF
-# Check whether --with-kerneloverflowuid was given.
-if test "${with_kerneloverflowuid+set}" = set; then :
- withval=$with_kerneloverflowuid; opt_kerneloverflowuid=$withval
+# Check whether --with-systemdunitdir was given.
+if test "${with_systemdunitdir+set}" = set; then :
+ withval=$with_systemdunitdir;
+else
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "systemd") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ with_systemdunitdir=$($PKG_CONFIG --variable=systemdunitdir systemd)
+else
+ with_systemdunitdir='${prefix}/lib/systemd/system'
fi
-if test x"$opt_kerneloverflowuid" == x; then
- opt_kerneloverflowuid=65534
fi
-cat >>confdefs.h <<_ACEOF
-#define PAM_USERTYPE_OVERFLOW_UID $opt_kerneloverflowuid
-_ACEOF
+systemdunitdir=$with_systemdunitdir
-# Check whether --enable-tally was given.
-if test "${enable_tally+set}" = set; then :
- enableval=$enable_tally;
+# Check whether --enable-unix was given.
+if test "${enable_unix+set}" = set; then :
+ enableval=$enable_unix;
else
- enable_tally=no
+ enable_unix=yes
fi
-case "$enable_tally" in
+case "$enable_unix" in
yes|no) ;;
- *) as_fn_error $? "bad value $enable_tally for --enable-tally option" "$LINENO" 5 ;;
+ *) as_fn_error $? "bad value $enable_unix for --enable-unix option" "$LINENO" 5 ;;
esac
-# Check whether --enable-tally2 was given.
-if test "${enable_tally2+set}" = set; then :
- enableval=$enable_tally2;
+# Check whether --enable-lastlog was given.
+if test "${enable_lastlog+set}" = set; then :
+ enableval=$enable_lastlog;
else
- enable_tally2=no
+ enable_lastlog=no
fi
-case "$enable_tally2" in
- yes|no) ;;
- *) as_fn_error $? "bad value $enable_tally2 for --enable-tally2 option" "$LINENO" 5 ;;
+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
- if test -n "$LIBCRACK"; then
- COND_BUILD_PAM_CRACKLIB_TRUE=
- COND_BUILD_PAM_CRACKLIB_FALSE='#'
+
+# Check whether --with-misc-conv-bufsize was given.
+if test "${with_misc_conv_bufsize+set}" = set; then :
+ withval=$with_misc_conv_bufsize;
else
- COND_BUILD_PAM_CRACKLIB_TRUE='#'
- COND_BUILD_PAM_CRACKLIB_FALSE=
+ with_misc_conv_bufsize=4096
fi
+
+cat >>confdefs.h <<_ACEOF
+#define PAM_MISC_CONV_BUFSIZE $with_misc_conv_bufsize
+_ACEOF
+
+
if test "$have_key_syscalls" = 1; then
COND_BUILD_PAM_KEYINIT_TRUE=
COND_BUILD_PAM_KEYINIT_FALSE='#'
@@ -19360,7 +21922,7 @@ else
COND_BUILD_PAM_NAMESPACE_FALSE=
fi
- if test "$ac_cv_func_ruserok_af" = yes -o "$ac_cv_func_ruserok" = yes; then
+ if test "$ac_cv_func_ruserok_af" = yes || test "$ac_cv_func_ruserok" = yes; then
COND_BUILD_PAM_RHOSTS_TRUE=
COND_BUILD_PAM_RHOSTS_FALSE='#'
else
@@ -19392,22 +21954,6 @@ else
COND_BUILD_PAM_SETQUOTA_FALSE=
fi
- if test "$enable_tally" = yes; then
- COND_BUILD_PAM_TALLY_TRUE=
- COND_BUILD_PAM_TALLY_FALSE='#'
-else
- COND_BUILD_PAM_TALLY_TRUE='#'
- COND_BUILD_PAM_TALLY_FALSE=
-fi
-
- if test "$enable_tally2" = yes; then
- COND_BUILD_PAM_TALLY2_TRUE=
- COND_BUILD_PAM_TALLY2_FALSE='#'
-else
- COND_BUILD_PAM_TALLY2_TRUE='#'
- COND_BUILD_PAM_TALLY2_FALSE=
-fi
-
if test "$HAVE_AUDIT_TTY_STATUS" = yes; then
COND_BUILD_PAM_TTY_AUDIT_TRUE=
COND_BUILD_PAM_TTY_AUDIT_FALSE='#'
@@ -19416,6 +21962,14 @@ else
COND_BUILD_PAM_TTY_AUDIT_FALSE=
fi
+ if test "$enable_unix" = yes; then
+ COND_BUILD_PAM_UNIX_TRUE=
+ COND_BUILD_PAM_UNIX_FALSE='#'
+else
+ COND_BUILD_PAM_UNIX_TRUE='#'
+ COND_BUILD_PAM_UNIX_FALSE=
+fi
+
if test -n "$LIBDB"; then
COND_BUILD_PAM_USERDB_TRUE=
COND_BUILD_PAM_USERDB_FALSE='#'
@@ -19425,7 +21979,7 @@ else
fi
-ac_config_files="$ac_config_files Makefile libpam/Makefile libpamc/Makefile libpamc/test/Makefile libpam_misc/Makefile conf/Makefile conf/pam_conv1/Makefile po/Makefile.in Make.xml.rules modules/Makefile modules/pam_access/Makefile modules/pam_cracklib/Makefile modules/pam_debug/Makefile modules/pam_deny/Makefile modules/pam_echo/Makefile modules/pam_env/Makefile modules/pam_faildelay/Makefile modules/pam_faillock/Makefile modules/pam_filter/Makefile modules/pam_filter/upperLOWER/Makefile modules/pam_ftp/Makefile modules/pam_group/Makefile modules/pam_issue/Makefile modules/pam_keyinit/Makefile modules/pam_lastlog/Makefile modules/pam_limits/Makefile modules/pam_listfile/Makefile modules/pam_localuser/Makefile modules/pam_loginuid/Makefile modules/pam_mail/Makefile modules/pam_mkhomedir/Makefile modules/pam_motd/Makefile modules/pam_namespace/Makefile modules/pam_namespace/pam_namespace_helper modules/pam_namespace/pam_namespace.service modules/pam_nologin/Makefile modules/pam_permit/Makefile modules/pam_pwhistory/Makefile modules/pam_rhosts/Makefile modules/pam_rootok/Makefile modules/pam_exec/Makefile modules/pam_securetty/Makefile modules/pam_selinux/Makefile modules/pam_sepermit/Makefile modules/pam_setquota/Makefile modules/pam_shells/Makefile modules/pam_stress/Makefile modules/pam_succeed_if/Makefile modules/pam_tally/Makefile modules/pam_tally2/Makefile modules/pam_time/Makefile modules/pam_timestamp/Makefile modules/pam_tty_audit/Makefile modules/pam_umask/Makefile modules/pam_unix/Makefile modules/pam_userdb/Makefile modules/pam_usertype/Makefile modules/pam_warn/Makefile modules/pam_wheel/Makefile modules/pam_xauth/Makefile doc/Makefile doc/specs/Makefile doc/man/Makefile doc/sag/Makefile doc/adg/Makefile doc/mwg/Makefile examples/Makefile tests/Makefile xtests/Makefile"
+ac_config_files="$ac_config_files Makefile libpam/Makefile libpamc/Makefile libpamc/test/Makefile libpam_misc/Makefile conf/Makefile conf/pam_conv1/Makefile libpam/pam.pc libpam_misc/pam_misc.pc libpamc/pamc.pc po/Makefile.in Make.xml.rules modules/Makefile modules/pam_access/Makefile modules/pam_debug/Makefile modules/pam_deny/Makefile modules/pam_echo/Makefile modules/pam_env/Makefile modules/pam_faildelay/Makefile modules/pam_faillock/Makefile modules/pam_filter/Makefile modules/pam_filter/upperLOWER/Makefile modules/pam_ftp/Makefile modules/pam_group/Makefile modules/pam_issue/Makefile modules/pam_keyinit/Makefile modules/pam_lastlog/Makefile modules/pam_limits/Makefile modules/pam_listfile/Makefile modules/pam_localuser/Makefile modules/pam_loginuid/Makefile modules/pam_mail/Makefile modules/pam_mkhomedir/Makefile modules/pam_motd/Makefile modules/pam_namespace/Makefile modules/pam_namespace/pam_namespace_helper modules/pam_namespace/pam_namespace.service modules/pam_nologin/Makefile modules/pam_permit/Makefile modules/pam_pwhistory/Makefile modules/pam_rhosts/Makefile modules/pam_rootok/Makefile modules/pam_exec/Makefile modules/pam_securetty/Makefile modules/pam_selinux/Makefile modules/pam_sepermit/Makefile modules/pam_setquota/Makefile modules/pam_shells/Makefile modules/pam_stress/Makefile modules/pam_succeed_if/Makefile modules/pam_time/Makefile modules/pam_timestamp/Makefile modules/pam_tty_audit/Makefile modules/pam_umask/Makefile modules/pam_unix/Makefile modules/pam_userdb/Makefile modules/pam_usertype/Makefile modules/pam_warn/Makefile modules/pam_wheel/Makefile modules/pam_xauth/Makefile doc/Makefile doc/specs/Makefile doc/man/Makefile doc/sag/Makefile doc/adg/Makefile doc/mwg/Makefile examples/Makefile tests/Makefile xtests/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -19572,6 +22126,18 @@ 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
+fi
if test -z "${ENABLE_REGENERATE_MAN_TRUE}" && test -z "${ENABLE_REGENERATE_MAN_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_REGENERATE_MAN\" was never defined.
@@ -19581,10 +22147,6 @@ if test -z "${ENABLE_GENERATE_PDF_TRUE}" && test -z "${ENABLE_GENERATE_PDF_FALSE
as_fn_error $? "conditional \"ENABLE_GENERATE_PDF\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${COND_BUILD_PAM_CRACKLIB_TRUE}" && test -z "${COND_BUILD_PAM_CRACKLIB_FALSE}"; then
- as_fn_error $? "conditional \"COND_BUILD_PAM_CRACKLIB\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${COND_BUILD_PAM_KEYINIT_TRUE}" && test -z "${COND_BUILD_PAM_KEYINIT_FALSE}"; then
as_fn_error $? "conditional \"COND_BUILD_PAM_KEYINIT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -19613,18 +22175,14 @@ if test -z "${COND_BUILD_PAM_SETQUOTA_TRUE}" && test -z "${COND_BUILD_PAM_SETQUO
as_fn_error $? "conditional \"COND_BUILD_PAM_SETQUOTA\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${COND_BUILD_PAM_TALLY_TRUE}" && test -z "${COND_BUILD_PAM_TALLY_FALSE}"; then
- as_fn_error $? "conditional \"COND_BUILD_PAM_TALLY\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${COND_BUILD_PAM_TALLY2_TRUE}" && test -z "${COND_BUILD_PAM_TALLY2_FALSE}"; then
- as_fn_error $? "conditional \"COND_BUILD_PAM_TALLY2\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${COND_BUILD_PAM_TTY_AUDIT_TRUE}" && test -z "${COND_BUILD_PAM_TTY_AUDIT_FALSE}"; then
as_fn_error $? "conditional \"COND_BUILD_PAM_TTY_AUDIT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${COND_BUILD_PAM_UNIX_TRUE}" && test -z "${COND_BUILD_PAM_UNIX_FALSE}"; then
+ as_fn_error $? "conditional \"COND_BUILD_PAM_UNIX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${COND_BUILD_PAM_USERDB_TRUE}" && test -z "${COND_BUILD_PAM_USERDB_FALSE}"; then
as_fn_error $? "conditional \"COND_BUILD_PAM_USERDB\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -20026,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.4.0, 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
@@ -20092,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.4.0
+Linux-PAM config.status 1.5.3
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -20255,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"`'
@@ -20384,6 +22943,7 @@ LN_S \
lt_SP2NL \
lt_NL2SP \
reload_flag \
+FILECMD \
OBJDUMP \
deplibs_check_method \
file_magic_cmd \
@@ -20522,11 +23082,13 @@ do
"libpam_misc/Makefile") CONFIG_FILES="$CONFIG_FILES libpam_misc/Makefile" ;;
"conf/Makefile") CONFIG_FILES="$CONFIG_FILES conf/Makefile" ;;
"conf/pam_conv1/Makefile") CONFIG_FILES="$CONFIG_FILES conf/pam_conv1/Makefile" ;;
+ "libpam/pam.pc") CONFIG_FILES="$CONFIG_FILES libpam/pam.pc" ;;
+ "libpam_misc/pam_misc.pc") CONFIG_FILES="$CONFIG_FILES libpam_misc/pam_misc.pc" ;;
+ "libpamc/pamc.pc") CONFIG_FILES="$CONFIG_FILES libpamc/pamc.pc" ;;
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
"Make.xml.rules") CONFIG_FILES="$CONFIG_FILES Make.xml.rules" ;;
"modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;;
"modules/pam_access/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_access/Makefile" ;;
- "modules/pam_cracklib/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_cracklib/Makefile" ;;
"modules/pam_debug/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_debug/Makefile" ;;
"modules/pam_deny/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_deny/Makefile" ;;
"modules/pam_echo/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_echo/Makefile" ;;
@@ -20563,8 +23125,6 @@ do
"modules/pam_shells/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_shells/Makefile" ;;
"modules/pam_stress/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_stress/Makefile" ;;
"modules/pam_succeed_if/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_succeed_if/Makefile" ;;
- "modules/pam_tally/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_tally/Makefile" ;;
- "modules/pam_tally2/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_tally2/Makefile" ;;
"modules/pam_time/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_time/Makefile" ;;
"modules/pam_timestamp/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_timestamp/Makefile" ;;
"modules/pam_tty_audit/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_tty_audit/Makefile" ;;
@@ -21257,7 +23817,9 @@ $as_echo X/"$am_mf" |
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "Something went wrong bootstrapping makefile fragments
- for automatic dependency tracking. Try re-running configure with the
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE=\"gmake\" (or whatever is
+ necessary). You can also try re-running configure with the
'--disable-dependency-tracking' option to at least be able to build
the package (albeit without support for automatic dependency tracking).
See \`config.log' for more details" "$LINENO" 5; }
@@ -21404,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
@@ -21807,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 ea08a7a3..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.4.0], , [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])
@@ -75,61 +75,12 @@ AM_PROG_CC_C_O
PAM_LD_AS_NEEDED
PAM_LD_NO_UNDEFINED
PAM_LD_O1
+PAM_LD_Z_NOW
dnl Largefile support
AC_SYS_LARGEFILE
-Werror_option=
-AC_ARG_ENABLE([Werror],
- [AS_HELP_STRING([--enable-Werror],
- [turn on -Werror compiler option])],
- [case $enableval in
- yes) Werror_option=-Werror ;;
- no) ;;
- *) AC_MSG_ERROR([bad value $enableval for Werror option]) ;;
- esac])
-
-dnl icc claims to be GCC compatible, but use other flags for warnings
-if eval 'test "x$GCC" = "xyes" -a "$CC" != "icc"'; then
- for flag in \
- -W \
- -Wall \
- -Wbad-function-cast \
- -Wcast-align \
- -Wcast-qual \
- -Wmissing-declarations \
- -Wmissing-prototypes \
- -Wpointer-arith \
- -Wreturn-type \
- -Wstrict-prototypes \
- -Wwrite-strings \
- -Winline \
- -Wshadow \
- $Werror_option
- do
- JAPHAR_GREP_CFLAGS($flag, [ WARN_CFLAGS="$WARN_CFLAGS $flag" ])
- done
-fi
-dnl icc has special warning flags
-if eval 'test "x$CC" = "xicc"'; then
- for flag in \
- -Wall \
- -Wmissing-prototypes \
- -Wpointer-arith \
- -Wreturn-type \
- -Wstrict-prototypes \
- -Wwrite-strings \
- -Wshadow \
- -Wp64 \
- -Wdeprecated \
- -Wuninitialized \
- -Wmain
- do
- JAPHAR_GREP_CFLAGS($flag, [ WARN_CFLAGS="$WARN_CFLAGS $flag" ])
- done
-fi
-
-AC_SUBST(WARN_CFLAGS)
+pam_WARN_LANG_FLAGS
if test "x${CC_FOR_BUILD+set}" != "xset" ; then
if test "x$cross_compiling" = "xyes" ; then
@@ -169,7 +120,7 @@ if test "x${BUILD_LDFLAGS+set}" != "xset" ; then
fi
AC_SUBST(BUILD_LDFLAGS)
-AC_C___ATTRIBUTE__
+PAM_ATTRIBUTE_UNUSED
dnl
dnl Check if --version-script is supported by ld
@@ -224,36 +175,44 @@ rm -f conftest*])
AM_CONDITIONAL([HAVE_VERSIONING],
[test "$libc_cv_ld_version_script_option" = "yes"])
-dnl
-dnl check for -fPIE/-pie support
-dnl
-dnl icc handles -fpie as -fp without error, so blacklist icc
-dnl
-AC_ARG_ENABLE(pie,AS_HELP_STRING([--disable-pie],
- [disable position-independent executables (PIE)]),
- USE_PIE=$enableval, USE_PIE=yes)
-
-AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
- cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
- if test "$USE_PIE" = "yes" -a "$CC" != "icc" &&
- AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fpie
- -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_fpie=yes
- PIE_CFLAGS="-fpie"
- PIE_LDFLAGS="-pie"
- else
- libc_cv_fpie=no
- PIE_CFLAGS=""
- PIE_LDFLAGS=""
- fi
- rm -f conftest*])
-AC_SUBST(libc_cv_fpie)
-AC_SUBST(PIE_CFLAGS)
-AC_SUBST(PIE_LDFLAGS)
+AC_ARG_ENABLE([pie],
+ [AS_HELP_STRING([--disable-pie],
+ [disable position-independent executables (PIE)])],
+ [], [enable_pie=check])
+case "$enable_pie" in
+ no) ;;
+ yes|check)
+ dnl Check for -fpie/-pie support
+ AC_CACHE_CHECK([for -fpie/-pie support],
+ [pam_cv_pie],
+ [saved_CFLAGS="$CFLAGS"
+ saved_LDFLAGS="$LDFLAGS"
+ CFLAGS="$CFLAGS -fpie"
+ LDFLAGS="$LDFLAGS -pie"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
+ [pam_cv_pie=yes],
+ [pam_cv_pie=no])
+ LDFLAGS="$saved_LDFLAGS"
+ CFLAGS="$saved_CFLAGS"])
+ AS_IF([test "$pam_cv_pie" = yes],
+ [enable_pie=yes],
+ [AS_IF([test "$enable_pie" = yes],
+ [AC_MSG_FAILURE([requested -fpie/-pie support not found])],
+ [enable_pie=no])])
+ ;;
+ *) AC_MSG_ERROR([bad value $enable_pie for --enable-pie option]) ;;
+esac
+
+AS_IF([test "$enable_pie" = yes],
+ [PIE_CFLAGS="-fpie"
+ PIE_LDFLAGS="-pie"],
+ [PIE_CFLAGS=
+ PIE_LDFLAGS=])
+
+EXE_CFLAGS="$PIE_CFLAGS"
+EXE_LDFLAGS="$PIE_LDFLAGS $ZNOW_LDFLAGS"
+AC_SUBST(EXE_CFLAGS)
+AC_SUBST(EXE_LDFLAGS)
dnl
@@ -284,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)
@@ -300,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,
@@ -336,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);
@@ -375,28 +369,6 @@ case "$ac_cv_search_dlopen" in
esac
AC_SUBST(LIBDL)
-AC_ARG_ENABLE([cracklib],
- [AS_HELP_STRING([--enable-cracklib],
- [build deprecated pam_cracklib module])],
- [], [enable_cracklib=no])
-LIBCRACK=""
-case "$enable_cracklib" in
- no) ;;
- yes|check)
- dnl Check for cracklib
- AC_CHECK_HEADERS([crack.h],
- [AC_CHECK_LIB([crack], [FascistCheck],
- [LIBCRACK="-lcrack"])])
- if test -z "$LIBCRACK"; then
- if test "$enable_cracklib" = yes; then
- AC_MSG_FAILURE([failed to find cracklib])
- fi
- fi
- ;;
- *) AC_MSG_ERROR([bad value $enable_cracklib for --enable-cracklib option]) ;;
-esac
-AC_SUBST(LIBCRACK)
-
dnl Look for Linux Auditing library - see documentation
AC_ARG_ENABLE([audit],
AS_HELP_STRING([--disable-audit],[do not enable audit support]),
@@ -409,7 +381,7 @@ if test x"$WITH_LIBAUDIT" != xno ; then
[HAVE_AUDIT_TTY_STATUS=""],
[#include <libaudit.h>])]
)
- if test -n "$LIBAUDIT" -a "$ac_cv_header_libaudit_h" != "no" ; then
+ if test -n "$LIBAUDIT" && test "$ac_cv_header_libaudit_h" != "no" ; then
AC_DEFINE([HAVE_LIBAUDIT], 1, [Define to 1 if audit support should be compiled in.])
fi
if test -n "$HAVE_AUDIT_TTY_STATUS" ; then
@@ -422,22 +394,35 @@ else
fi
AC_SUBST(LIBAUDIT)
-AC_CHECK_HEADERS(xcrypt.h crypt.h)
-AS_IF([test "x$ac_cv_header_xcrypt_h" = "xyes"],
- [crypt_libs="xcrypt crypt"],
- [crypt_libs="crypt"])
+AC_CHECK_HEADERS(crypt.h)
BACKUP_LIBS=$LIBS
-AC_SEARCH_LIBS([crypt],[$crypt_libs], LIBCRYPT="${ac_cv_search_crypt}", LIBCRYPT="")
-AC_CHECK_FUNCS(crypt_r crypt_gensalt_r)
+LIBCRYPT=""
+PKG_CHECK_MODULES([CRYPT], [libcrypt], [
+ CFLAGS="$CFLAGS $CRYPT_CFLAGS"
+ CPPFLAGS="$CPPFLAGS $CRYPT_CFLAGS"
+ LIBS="$LIBS $CRYPT_LIBS"
+ LIBCRYPT="$CRYPT_LIBS"
+], [
+ AC_SEARCH_LIBS([crypt_gensalt_rn],[crypt])
+ case "$ac_cv_search_crypt_gensalt_rn" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt_gensalt_rn" ;;
+ no) AC_SEARCH_LIBS([crypt_r],[crypt])
+ case "$ac_cv_search_crypt_r" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt_r" ;;
+ no ) AC_SEARCH_LIBS([crypt],[crypt])
+ case "$ac_cv_search_crypt" in
+ -l*) LIBCRYPT="$ac_cv_search_crypt" ;;
+ esac ;;
+ esac ;;
+ esac
+])
+AC_CHECK_FUNCS([crypt_r])
LIBS=$BACKUP_LIBS
AC_SUBST(LIBCRYPT)
-if test "$LIBCRYPT" = "-lxcrypt" -a "$ac_cv_header_xcrypt_h" = "yes" ; then
- AC_DEFINE([HAVE_LIBXCRYPT], 1, [Define to 1 if xcrypt support should be compiled in.])
-fi
AC_ARG_WITH([randomdev], AS_HELP_STRING([--with-randomdev=(<path>|yes|no)],[use specified random device instead of /dev/urandom or 'no' to disable]), opt_randomdev=$withval)
-if test "$opt_randomdev" = yes -o -z "$opt_randomdev"; then
+if test "$opt_randomdev" = yes || test -z "$opt_randomdev"; then
opt_randomdev="/dev/urandom"
elif test "$opt_randomdev" = no; then
opt_randomdev=
@@ -454,7 +439,7 @@ AC_ARG_ENABLE([db],
AC_ARG_WITH([db-uniquename],
AS_HELP_STRING([--with-db-uniquename=extension],[Unique name for db libraries and functions.]))
if test x"$WITH_DB" != xno ; then
- if test x"$WITH_DB" = xyes -o x"$WITH_DB" = xdb ; then
+ if test x"$WITH_DB" = xyes || test x"$WITH_DB" = xdb ; then
old_libs=$LIBS
LIBS="$LIBS -ldb$with_db_uniquename"
AC_CHECK_FUNCS([db_create$with_db_uniquename db_create dbm_store$with_db_uniquename dbm_store],
@@ -496,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>
@@ -510,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]),
@@ -540,34 +532,73 @@ 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]),
+ [OPENSSL_ENABLED=$enableval], OPENSSL_ENABLED=no)
+if test "$OPENSSL_ENABLED" = "yes" ; then
+ AC_CHECK_LIB([crypto], [EVP_MAC_CTX_new],
+ [CRYPTO_LIBS="-lcrypto"
+ use_openssl=yes
+ AC_DEFINE([WITH_OPENSSL], 1, [OpenSSL provides crypto algorithm for hmac])
+ profileconditions+=";openssl_hmac"],
+ [CRYPTO_LIBS=""
+ profileconditions+=";no_openssl_hmac"])
+fi
+AC_SUBST([CRYPTO_LIBS])
+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
AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h net/if.h termio.h unistd.h sys/fsuid.h inittypes.h sys/vfs.h linux/magic.h)
+AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h net/if.h termio.h unistd.h sys/fsuid.h inittypes.h)
dnl For module/pam_lastlog
AC_CHECK_HEADERS(lastlog.h utmp.h utmpx.h)
@@ -594,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]),
@@ -611,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])
@@ -631,7 +659,7 @@ fi
AC_PATH_PROG([FO2PDF], [fop])
-AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test x$enable_docu != xno -a x$enable_doc != xno)
+AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test x$enable_docu != xno && test x$enable_doc != xno)
AM_CONDITIONAL(ENABLE_GENERATE_PDF, test -n "$FO2PDF")
@@ -658,61 +686,75 @@ dnl
dnl Get values for default uid ranges in login.defs used in pam_usertype
dnl
AC_ARG_WITH([uidmin], AS_HELP_STRING([--with-uidmin=<number>],[default value for regular user min uid (1000)]), opt_uidmin=$withval)
-if test x"$opt_uidmin" == x; then
- opt_uidmin=1000
-fi
+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)
-if test x"$opt_sysuidmin" == x; then
- opt_sysuidmin=101
-fi
-AC_DEFINE_UNQUOTED(PAM_USERTYPE_SYSUIDMIN, $opt_sysuidmin, [Minimum system user uid.])
-
-AC_ARG_WITH([kerneloverflowuid], AS_HELP_STRING([--with-kernel-overflow-uid=<number>],[kernel overflow uid, default (uint16_t)-2=65534]), opt_kerneloverflowuid=$withval)
-if test x"$opt_kerneloverflowuid" == x; then
- opt_kerneloverflowuid=65534
-fi
+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
AC_DEFINE_UNQUOTED(PAM_USERTYPE_OVERFLOW_UID, $opt_kerneloverflowuid, [Kernel overflow uid.])
-AC_ARG_ENABLE([tally],
- [AS_HELP_STRING([--enable-tally],
- [build deprecated pam_tally module])],
- [], [enable_tally=no])
-case "$enable_tally" in
+AC_ARG_WITH([systemdunitdir],
+AS_HELP_STRING([--with-systemdunitdir=DIR], [path to systemd service directory]),
+ [],
+ [
+ PKG_CHECK_EXISTS([systemd],
+ [with_systemdunitdir=$($PKG_CONFIG --variable=systemdunitdir systemd)],
+ [with_systemdunitdir='${prefix}/lib/systemd/system'])
+ ])
+AC_SUBST([systemdunitdir], [$with_systemdunitdir])
+
+AC_ARG_ENABLE([unix],
+ [AS_HELP_STRING([--disable-unix],
+ [do not build pam_unix module])],
+ [], [enable_unix=yes])
+case "$enable_unix" in
yes|no) ;;
- *) AC_MSG_ERROR([bad value $enable_tally for --enable-tally option]) ;;
+ *) AC_MSG_ERROR([bad value $enable_unix for --enable-unix option]) ;;
esac
-AC_ARG_ENABLE([tally2],
- [AS_HELP_STRING([--enable-tally2],
- [build deprecated pam_tally2 module])],
- [], [enable_tally2=no])
-case "$enable_tally2" in
- yes|no) ;;
- *) AC_MSG_ERROR([bad value $enable_tally2 for --enable-tally2 option]) ;;
+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
-AM_CONDITIONAL([COND_BUILD_PAM_CRACKLIB], [test -n "$LIBCRACK"])
+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]),
+ [],
+ [with_misc_conv_bufsize=4096])
+AC_DEFINE_UNQUOTED(PAM_MISC_CONV_BUFSIZE, $with_misc_conv_bufsize, [libpam_misc misc_conv() buffer size.])
+
AM_CONDITIONAL([COND_BUILD_PAM_KEYINIT], [test "$have_key_syscalls" = 1])
AM_CONDITIONAL([COND_BUILD_PAM_LASTLOG], [test "$ac_cv_func_logwtmp" = yes])
AM_CONDITIONAL([COND_BUILD_PAM_NAMESPACE], [test "$ac_cv_func_unshare" = yes])
-AM_CONDITIONAL([COND_BUILD_PAM_RHOSTS], [test "$ac_cv_func_ruserok_af" = yes -o "$ac_cv_func_ruserok" = yes])
+AM_CONDITIONAL([COND_BUILD_PAM_RHOSTS], [test "$ac_cv_func_ruserok_af" = yes || test "$ac_cv_func_ruserok" = yes])
AM_CONDITIONAL([COND_BUILD_PAM_SELINUX], [test -n "$LIBSELINUX"])
AM_CONDITIONAL([COND_BUILD_PAM_SEPERMIT], [test -n "$LIBSELINUX"])
AM_CONDITIONAL([COND_BUILD_PAM_SETQUOTA], [test "$ac_cv_func_quotactl" = yes])
-AM_CONDITIONAL([COND_BUILD_PAM_TALLY], [test "$enable_tally" = yes])
-AM_CONDITIONAL([COND_BUILD_PAM_TALLY2], [test "$enable_tally2" = yes])
AM_CONDITIONAL([COND_BUILD_PAM_TTY_AUDIT], [test "$HAVE_AUDIT_TTY_STATUS" = yes])
+AM_CONDITIONAL([COND_BUILD_PAM_UNIX], [test "$enable_unix" = yes])
AM_CONDITIONAL([COND_BUILD_PAM_USERDB], [test -n "$LIBDB"])
dnl Files to be created from when we run configure
AC_CONFIG_FILES([Makefile libpam/Makefile libpamc/Makefile libpamc/test/Makefile \
libpam_misc/Makefile conf/Makefile conf/pam_conv1/Makefile \
+ libpam/pam.pc libpam_misc/pam_misc.pc libpamc/pamc.pc \
po/Makefile.in \
Make.xml.rules \
modules/Makefile \
- modules/pam_access/Makefile modules/pam_cracklib/Makefile \
+ modules/pam_access/Makefile \
modules/pam_debug/Makefile modules/pam_deny/Makefile \
modules/pam_echo/Makefile modules/pam_env/Makefile \
modules/pam_faildelay/Makefile modules/pam_faillock/Makefile \
@@ -731,8 +773,7 @@ AC_CONFIG_FILES([Makefile libpam/Makefile libpamc/Makefile libpamc/test/Makefile
modules/pam_securetty/Makefile modules/pam_selinux/Makefile \
modules/pam_sepermit/Makefile modules/pam_setquota/Makefile \
modules/pam_shells/Makefile modules/pam_stress/Makefile \
- modules/pam_succeed_if/Makefile modules/pam_tally/Makefile \
- modules/pam_tally2/Makefile modules/pam_time/Makefile \
+ modules/pam_succeed_if/Makefile modules/pam_time/Makefile \
modules/pam_timestamp/Makefile modules/pam_tty_audit/Makefile \
modules/pam_umask/Makefile \
modules/pam_unix/Makefile modules/pam_userdb/Makefile \
diff --git a/debian/README.source b/debian/README.source
index de10a628..6e74d5b8 100644
--- a/debian/README.source
+++ b/debian/README.source
@@ -1,8 +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:
+This package uses gbp pq to patch the source; please see the gbp-pq
+man page.
- /usr/share/doc/quilt/README.source
+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.
-for more information on how to apply the patches, modify patches, or
-remove a patch.
+ -- Sam Hartman <hartmans@debian.org>, Mon, 11 Sep 2023 13:56:17 -0600
diff --git a/debian/changelog b/debian/changelog
index 9878c380..35bdb972 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,282 @@
+pam (1.5.3-1) UNRELEASED; 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.
+
+ -- Sam Hartman <hartmans@debian.org> Wed, 13 Sep 2023 13:26:06 -0600
+
+pam (1.5.2-7) unstable; urgency=medium
+
+ [ Steve Langasek ]
+ * Drop reference to stale package version in libpam-modules.postinst;
+ thanks, Gioele Barabucci <gioele@svario.it>.
+
+ [ Sam Hartman ]
+ * Fix pam-auth-update --disable logic error, Closes: #1039873
+ * Set myself as maintainer; thanks Steve for past and future work.
+ * Fix watch file, thanks Daniel Lewart, Closes: #1040310
+ * Install upstream NEWS file as main upstream changelog; detailed
+ CHANGELOG only in libpam-doc, Closes: #1040315
+ * Updated Turkish Debconf translations, Thanks Atila KOÇ, Closes: #1029002
+
+ -- Sam Hartman <hartmans@debian.org> Wed, 16 Aug 2023 17:22:53 -0600
+
+pam (1.5.2-6) unstable; urgency=medium
+
+ * Update debian/copyright, Thanks Bastian Germann, Closes: #460232
+ * When pam-auth-update is called with --root, use
+ /usr/share/pam-configs from the root not from the host system, Thanks
+ Johannes Schauer Marin Rodrigues, Closes: #1022952
+ * Build-depend on libcrypt-dev, Closes: #1024645
+ * Add pam-auth-udpate --disable, Closes: #1004000
+ * Add autopkgtests
+
+ -- Sam Hartman <hartmans@debian.org> Tue, 03 Jan 2023 13:15:23 -0700
+
+pam (1.5.2-5) unstable; urgency=medium
+
+ * pam_namespace_helper manpage *wasn't* missing, it was just being
+ wrongly shipped in libpam-modules instead - so complete the moving
+ of the manpage to the libpam-modules-bin where it belongs with the
+ binary. Really Closes: #1021336.
+
+ -- Steve Langasek <vorlon@debian.org> Thu, 06 Oct 2022 18:56:06 +0000
+
+pam (1.5.2-4) unstable; urgency=medium
+
+ * pam_namespace_helper manpage was missing, but namespace.conf.5 was
+ already shipped in libpam-modules. Leave it there. Closes: #1021336.
+
+ -- Steve Langasek <vorlon@debian.org> Thu, 06 Oct 2022 17:28:36 +0000
+
+pam (1.5.2-3) unstable; urgency=medium
+
+ * Add missing manpages for pam_namespace which for some reason don't get
+ installed by the upstream rules
+ * Drop obsolete upgrade code from maintainer scripts which is no longer
+ used
+ * Drop manual multiarch file handling in favor of dh-exec.
+ * No special-case needed for pam_modutil_sanitize_helper_fds in symbols
+ file, it's covered by the existing globs.
+ * debian/local/Debian-PAM-MiniPolicy: drop references to ancient
+ package versions. Thanks, Marc Haber.
+ * Support DPKG_ROOT in the postinst scripts. Closes: #993161.
+ Thanks, Johannes Schauer Marin Rodrigues.
+ * Further proof libpam-runtime postinst for DPKG_ROOT just in case.
+
+ -- Steve Langasek <vorlon@debian.org> Thu, 06 Oct 2022 04:05:02 +0000
+
+pam (1.5.2-2) unstable; urgency=medium
+
+ * Pass --with-systemdunitdir=/usr/lib/systemd/system for consistent
+ builds whether we are or aren't building in an environment with systemd
+ present.
+ * Install the pam_namespace.service unit in the libpam-modules-bin
+ package.
+
+ -- Steve Langasek <vorlon@debian.org> Thu, 18 Aug 2022 16:47:57 +0000
+
+pam (1.5.2-1) unstable; urgency=medium
+
+ * New upstream release.
+ - fixes compatibility with libpam-systemd. Closes: #1017467.
+ - fixes bashisms in configure.ac. Closes: #998361.
+ * Refresh patches.
+ * Drop patches included or obsoleted upstream:
+ - debian/patches-applied/pam_unix_fix_sgid_shadow_auth.patch
+ - debian/patches-applied/pam_unix_initialize_daysleft
+ - debian/patches-applied/pam_faillock_create_directory
+ - debian/patches-applied/pam_unix_avoid_checksalt
+ - debian/patches-applied/pam_env-allow-environment-files-without-EOL-at-EOF.patch
+ * Drop libpam-cracklib which has been obsoleted upstream.
+ * Add pkgconfig .pc files to libpam0g-dev. Closes: #1012688.
+ * Update .symbols file.
+ * Updated Romanian debconf translation, thanks Andrei Popescu, Closes:
+ #986416
+ * Drop versioning of quilt build-dependency to quiet lintian, since the
+ version is satisfied by oldoldoldstable.
+ * Drop unused build-build-dependency on bzip2.
+ * Adjust lintian overrides for latest lintian syntax.
+ * Update Standards-Version.
+ * Bump debhelper compat to 13.
+ * debian/not-installed: document upstream files that aren't used.
+ * Override incorrect lintian warning about use of dpkg database.
+ * Override lintian warning for PAM module manpages being in section 8
+ * Override lintian warning for unused debconf templates
+ * Install additional upstream manpages: faillock(8), environment(5),
+ pwhistory_helper(8)
+ * Install additional helpers in libpam-modules-bin: pam_namespace_helper,
+ pwhistory_helper
+ * Fix wrong syntax in symbols file
+
+ -- Steve Langasek <vorlon@debian.org> Thu, 18 Aug 2022 07:27:16 +0000
+
+pam (1.4.0-13) unstable; urgency=medium
+
+ * Don't build with NIS support. This is only used for password changes on
+ NIS systems, and is pulling a large dependency chain into the Essential
+ package set which is not justifiable.
+
+ -- Steve Langasek <vorlon@debian.org> Mon, 25 Apr 2022 16:12:04 -0700
+
+pam (1.4.0-11) unstable; urgency=medium
+
+ * Whitespace fixes in debconf templates.
+
+ [ Sergio Durigan Junior ]
+ * d/p/pam_env-allow-environment-files-without-EOL-at-EOF.patch:
+ Allow /etc/environment files without EOL at EOF. In other words,
+ allow files without a newline at the end. (LP: #1953201)
+
+ -- Steve Langasek <vorlon@debian.org> Mon, 06 Dec 2021 11:11:31 -0800
+
+pam (1.4.0-10) unstable; urgency=medium
+
+ * Fix syntax error in libpam0g.postinst when a systemd unit fails,
+ Closes: #992538
+ * Include upstream patch not to use crypt_checksalt; without this
+ passwords set prior to bullseye were considered expired, Closes:
+ #992848
+ * Support DPKG_ROOT for pam-auth-update, thanks Johannes 'josch' Schauer
+ Closes: #983427
+
+
+ -- Sam Hartman <hartmans@debian.org> Thu, 26 Aug 2021 13:43:23 -0600
+
+pam (1.4.0-9) unstable; urgency=medium
+
+ * Revert prefer the multiarch path from 1.4.0-8: It turns out that
+ Debian uses DEFAULT_MODULE_PATH and _PAM_ISA in the opposite meaning
+ of upstream. If I had read the patch header of
+ patches-applied/lib_security_multiarch_compat more closely I would
+ have noticed this. The effect of 1.4.0-9 is what is stated in the
+ 1.4.0-8 changelog: we prefer multiarch paths, but the original patch
+ did that.
+ * I did test this in 1.4.0-8, but my test design was flawed. I placed a
+ invalid shared object in /lib/security and confirmed it did not shadow
+ an object in /lib/x86_64-linux-gnu/security. However I realized
+ shortly after releasing 1.4.0-8 that a valid shared object in
+ /lib/security will shadow one in the multiarch path.
+
+ -- Sam Hartman <hartmans@debian.org> Fri, 09 Jul 2021 10:55:02 -0600
+
+pam (1.4.0-8) unstable; urgency=high
+
+ [ Hideki Yamane ]
+ * debian/patches-applied/lib_security_multiarch_compat
+ - Fix regression introduced in 1.4.0-1: search both /lib/security and
+ /lib/[multiarch_tripple]/security/, Closes: #990790
+
+ [ Sam Hartman ]
+ * Reword changelog
+ * Prefer the multiarch path (_PAM_ISA) to the non-multiarch path.
+ That's different than buster, but guarantees everything already
+ working in bullseye will continue to work and also guarantees that
+ when multiarch modules are available we use them.
+
+ -- Hideki Yamane <henrich@debian.org> Tue, 06 Jul 2021 22:09:15 +0900
+
+pam (1.4.0-7) unstable; urgency=medium
+
+ * Updated portuguese debconf translation, thanks Pedro Ribeiro, Closes:
+ #983594
+ * Updated Simplified Chinese Translations, thanks Boyuan Yang
+ * Updated Bulgarian Translation, Thanks Damyan Ivanov
+ * Updated translation from the Slovak team, thanks Ladislav MichnoviÄ,
+ Closes: #984891
+ * Updated Catalan translation, thanks Alex Muntada, Closes: #984568
+ * Updated Brazilian Portuguese translation, Thanks Adriano Rafael Gomes,
+ Closes: #984656
+ * French Debconf translations, thanks Jean-Pierre Giraud , Closes:
+ #984910
+ * Updated russian Debconf translations, thanks ÐлекÑей Шилин, Closes:
+ #984878
+ * Updated Dutch debconf templates, Thanks Frans Spiesschaert, Closes:
+ #984823
+ * Updated German Debconf translations, Thanks Sven Joachim
+ * Code review fixes for the fix to #982295, thanks Mark Hindley
+ - Actually set service to $1 rather than happening to use a variable
+ of the same name in enclosing scope
+ - Remove dead code setting idl when not used
+ * Code review fixes to the fix for #982530, thanks Martin Schurz
+ - Include '-' in the file matching regexp so we search
+ /etc/pam.d/common-* for uses of pam_tally. The profile check will
+ catch this unless the user has overwridden the configuration
+ - Fix capitalization of pam_Tally in debconf description
+
+
+ -- Sam Hartman <hartmans@debian.org> Mon, 15 Mar 2021 15:01:55 -0400
+
+pam (1.4.0-6) unstable; urgency=medium
+
+ * Clearly it's been too long since I've done debconf; run
+ debconf-updatepo so the translations will show up as needing
+ translating.
+
+ -- Sam Hartman <hartmans@debian.org> Fri, 26 Feb 2021 10:48:23 -0500
+
+pam (1.4.0-5) unstable; urgency=low
+
+ * Remove profiles containing pam_tally or pam_tally2 since we no longer
+ build them.
+ * Also, fail to permit profiles to be selected that include pam_tally
+ once the new pam-auth-update is installed
+ * Check for any user-added references to pam_tally and halt the upgrade,
+ Closes: #982530
+ * Handle services with systemd units but no init scripts, Closes: #982295
+ * Register md5sum for new common-password template, Closes: #982898
+ * After reading pam-auth-update source, I agree with Lucas Nussbaum
+ that common-session is intended only for interactive sessions.
+ Otherwise pam-auth-update should not duplicate module configurations
+ between common-session-noninteractive and common-session, so update
+ the documentation, Closes: #982297
+
+ -- Sam Hartman <hartmans@debian.org> Thu, 25 Feb 2021 15:48:22 -0500
+
+pam (1.4.0-4) unstable; urgency=medium
+
+ * Document in README.source how to avoid multi-arch problems with documentation, Closes: #851650
+ * Update header to common-password talking about sha512
+ * The fix for #977648 incorrectly assumed how prerm scripts are called; update.
+
+ -- Sam Hartman <hartmans@debian.org> Wed, 03 Feb 2021 12:35:12 -0500
+
+pam (1.4.0-3) unstable; urgency=medium
+
+ [ Josh Triplett ]
+ * libpam-runtime.postrm: Remove session-noninteractive files on purge,
+ Closes: #978601
+
+ [ Sam Hartman ]
+ * patches-applied/pam_mkhomedir_stat_before_opendir: Stat the skeleton
+ directory before opendir, Closes: #834589
+ * libpam-modules.install: Install pam_faillock binaries, Closes: #981092
+ * debian/patches-applied/pam_unix_initialize_daysleft : Initialize days before password expire, Closes: #980285
+ * pam-configs/unix: Default to yescript rather than sha512. From a theoretical security standpoint, it looks like yescript has similar security properties, assuming (as we typically do in the crypto protocol community) that sha256 is still reasonable. However, in terms of practical resistant to password cracking, particularly in terms of valuing space complexity as well as time complexity, yescript is superior, Closes: #978553
+ * No infinite loop on purge of libpam-runtime, Closes: #977648
+ * patches-applied/pam_faillock_create_directory: create /run/faillock when needed.
+
+
+ -- Sam Hartman <hartmans@debian.org> Mon, 01 Feb 2021 15:27:08 -0500
+
+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 18af497a..62f09e76 100644
--- a/debian/clean
+++ b/debian/clean
@@ -1,3 +1 @@
debian/local/pam_getenv.8
-debian/libpam0g-dev.links
-debian/libpam0g-dev.install
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index ec635144..00000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-9
diff --git a/debian/control b/debian/control
index ba9d68e2..cfc1e275 100644
--- a/debian/control
+++ b/debian/control
@@ -1,10 +1,10 @@
Source: pam
Section: libs
Priority: optional
-Uploaders: Sam Hartman <hartmans@debian.org>
-Maintainer: Steve Langasek <vorlon@debian.org>
-Standards-Version: 4.3.0
-Build-Depends: libcrack2-dev (>= 2.8), bzip2, debhelper (>= 9), quilt (>= 0.48-1), flex, libdb-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
+Maintainer: Sam Hartman <hartmans@debian.org>
+Uploaders: Steve Langasek <vorlon@debian.org>
+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
@@ -47,7 +47,7 @@ Priority: required
Architecture: any
Multi-Arch: foreign
Depends: ${shlibs:Depends}, ${misc:Depends}
-Replaces: libpam-modules (<< 1.1.3-8)
+Replaces: libpam-modules (<< 1.5.2-5~)
Description: Pluggable Authentication Modules for PAM - helper binaries
This package contains helper binaries used by the standard set of PAM
modules in the libpam-modules package.
@@ -80,21 +80,12 @@ Description: Development files for PAM
possible to upgrade the authentication system without recompiling or
rewriting the applications.
-Package: libpam-cracklib
-Section: admin
-Architecture: any
-Multi-Arch: same
-Replaces: libpam0g-cracklib, libpam-modules (<< 1.1.0-3)
-Depends: ${misc:Depends}, ${shlibs:Depends}, libpam-runtime (>= 1.0.1-6), cracklib-runtime, wamerican | wordlist
-Description: PAM module to enable cracklib support
- This package includes libpam_cracklib, a PAM module that tests
- passwords to make sure they are not too weak during password change.
-
Package: libpam-doc
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/copyright b/debian/copyright
index 45201f1d..c1283683 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,67 +1,205 @@
-This package was debianized by J.H.M. Dassen (Ray) jdassen@debian.org on
-Wed, 23 Sep 1998 20:29:32 +0200.
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: Linux-PAM
+Comment: This package was debianized by J.H.M. Dassen (Ray) jdassen@debian.org.
+Source: https://github.com/linux-pam/linux-pam/releases
-It was downloaded from ftp://ftp.kernel.org/pub/linux/libs/pam/pre/
+Files: *
+Copyright:
+ Copyright (C) 1994, 1995, 1996 Olaf Kirch, <okir@monad.swb.de>
+ Copyright (C) 1995 Wietse Venema
+ Copyright (C) 1995, 2001-2008 Red Hat, Inc.
+ Copyright (C) 1996-1999, 2000-2003, 2005 Andrew G. Morgan <morgan@kernel.org>
+ Copyright (C) 1996, 1997, 1999 Cristian Gafton <gafton@redhat.com>
+ Copyright (C) 1996, 1999 Theodore Ts'o
+ Copyright (C) 1996 Alexander O. Yuriev
+ Copyright (C) 1996 Elliot Lee
+ Copyright (C) 1997 Philip W. Dalrymple <pwd@mdtsoft.com>
+ Copyright (C) 1999 Jan Rękorajski
+ Copyright (C) 1999 Ben Collins <bcollins@debian.org>
+ Copyright (C) 2000-2001, 2003, 2005, 2007 Steve Langasek
+ Copyright (C) 2003, 2005 IBM Corporation
+ Copyright (C) 2003, 2006 SuSE Linux AG.
+ Copyright (C) 2003 Nalin Dahyabhai <nalin@redhat.com>
+ Copyright (C) 2005-2008 Thorsten Kukuk <kukuk@thkukuk.de>
+ Copyright (C) 2005 Darren Tucker
+License: BSD-3-clause or GPL
+ Unless otherwise *explicitly* stated the following text describes the
+ licensed conditions under which the contents of this Linux-PAM release
+ may be distributed:
+ .
+ Redistribution and use in source and binary forms of Linux-PAM, with
+ or without modification, are permitted provided that the following
+ conditions are met:
+ 1. Redistributions of source code must retain any existing copyright
+ notice, and this entire permission notice in its entirety,
+ including the disclaimer of warranties.
+ 2. Redistributions in binary form must reproduce all prior and current
+ copyright notices, this list of conditions, and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ 3. The name of any author may not be used to endorse or promote
+ products derived from this software without their specific prior
+ written permission.
+ .
+ ALTERNATIVELY, this product may be distributed under the terms of the
+ GNU General Public License, in which case the provisions of the GNU
+ GPL are required INSTEAD OF the above restrictions. (This clause is
+ necessary due to a potential conflict between the GNU 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(S) 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.
+Comment:
+ On Debian GNU/Linux systems, the complete text of the GNU General
+ Public License can be found in `/usr/share/common-licenses/GPL'.
-Copyright (C) 1994, 1995, 1996 Olaf Kirch, <okir@monad.swb.de>
-Copyright (C) 1995 Wietse Venema
-Copyright (C) 1995, 2001-2008 Red Hat, Inc.
-Copyright (C) 1996-1999, 2000-2003, 2005 Andrew G. Morgan <morgan@kernel.org>
-Copyright (C) 1996, 1997, 1999 Cristian Gafton <gafton@redhat.com>
-Copyright (C) 1996, 1999 Theodore Ts'o
-Copyright (C) 1996 Alexander O. Yuriev
-Copyright (C) 1996 Elliot Lee
-Copyright (C) 1997 Philip W. Dalrymple <pwd@mdtsoft.com>
-Copyright (C) 1999 Jan Rękorajski
-Copyright (C) 1999 Ben Collins <bcollins@debian.org>
-Copyright (C) 2000-2001, 2003, 2005, 2007 Steve Langasek
-Copyright (C) 2003, 2005 IBM Corporation
-Copyright (C) 2003, 2006 SuSE Linux AG.
-Copyright (C) 2003 Nalin Dahyabhai <nalin@redhat.com>
-Copyright (C) 2005-2008 Thorsten Kukuk <kukuk@thkukuk.de>
-Copyright (C) 2005 Darren Tucker
+Files: tests/tst-pam_mkargv.c
+Copyright: (C) Thorsten Kukuk <kukuk@suse.de> 2009
+License: GPL-2
+ This program 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 in version 2 of the License.
+Comment:
+ On Debian GNU/Linux systems, the complete text of the GNU General
+ Public License version 2 can be found in `/usr/share/common-licenses/GPL-2'.
+Files: tests/tst-dlopen.c
+ modules/pam_keyinit/pam_keyinit.c
+ modules/pam_loginuid/pam_loginuid.c
+ modules/pam_unix/yppasswd.h
+ modules/pam_unix/yppasswd_xdr.c
+ debian/local/pam_getenv
+Copyright:
+ Copyright 2005 Red Hat Inc., Durham, North Carolina.
+ Copyright (C) Nalin Dahyabhai <nalin@redhat.com> 2003
+ Copyright 2004 by Sam Hartman
+ Copyright 1994, 1995, 1996 Olaf Kirch, <okir@lst.de>
+License: GPL-2+
+ This program 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 2 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Suite 500
+ Boston, MA 02110-1335 USA
+Comment:
+ On Debian GNU/Linux systems, the complete text of the GNU General
+ Public License version 2 can be found in `/usr/share/common-licenses/GPL-2'.
-Unless otherwise *explicitly* stated the following text describes the
-licensed conditions under which the contents of this Linux-PAM release
-may be distributed:
+Files: debian/local/pam-auth-update*
+Copyright: (C) 2008 Canonical Ltd.
+License: GPL-3
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 3 of the GNU General Public License as
+ published by the Free Software Foundation.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+Comment:
+ On Debian GNU/Linux systems, the complete text of the GNU General
+ Public License version 3 can be found in `/usr/share/common-licenses/GPL-3'.
--------------------------------------------------------------------------
-Redistribution and use in source and binary forms of Linux-PAM, with
-or without modification, are permitted provided that the following
-conditions are met:
+Files: doc/specs/parse_y.*
+ conf/pam_conv1/pam_conv_y.*
+Copyright: (C) 1984-2021 Free Software Foundation, Inc.
+License: GPL-3+ with Bison exception
+ This program 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
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ .
+ As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+ .
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison.
+Comment:
+ On Debian GNU/Linux systems, the complete text of the GNU General
+ Public License version 3 can be found in `/usr/share/common-licenses/GPL-3'.
-1. Redistributions of source code must retain any existing copyright
- notice, and this entire permission notice in its entirety,
- including the disclaimer of warranties.
+Files: modules/pam_access/pam_access.c
+Copyright: 1995 by Wietse Venema. All rights reserved. Individual files
+ may be covered by other copyrights (as noted in the file itself.)
+License: BSD-tcp_wrappers
+ This material was originally written and compiled by Wietse Venema at
+ Eindhoven University of Technology, The Netherlands, in 1990, 1991,
+ 1992, 1993, 1994 and 1995.
+ .
+ Redistribution and use in source and binary forms are permitted
+ provided that this entire copyright notice is duplicated in all such
+ copies.
+ .
+ This software is provided "as is" and without any expressed or implied
+ warranties, including, without limitation, the implied warranties of
+ merchantability and fitness for any particular purpose.
-2. Redistributions in binary form must reproduce all prior and current
- copyright notices, this list of conditions, and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
+Files: modules/pam_mkhomedir/mkhomedir_helper.c
+ modules/pam_mkhomedir/pam_mkhomedir.c
+ modules/pam_issue/pam_issue.c
+Copyright:
+ Copyright (c) Red Hat, Inc. 2009
+ Copyright 1999 by Ben Collins <bcollins@debian.org>
+License: LGPL-2+
+ Released under the GNU LGPL version 2 or later
+Comment:
+ On Debian GNU/Linux systems, the complete text of the GNU Lesser General
+ Public License version 2 can be found in `/usr/share/common-licenses/LGPL-2'.
-3. The name of any author may not be used to endorse or promote
- products derived from this software without their specific prior
- written permission.
+Files: modules/pam_unix/md5.c
+ modules/pam_namespace/md5.c
+Copyright: 1993 Colin Plumb
+License: public-domain
+ This code was written by Colin Plumb in 1993, no copyright is claimed.
+ This code is in the public domain; do with it what you wish.
-ALTERNATIVELY, this product may be distributed under the terms of the
-GNU General Public License, in which case the provisions of the GNU
-GPL are required INSTEAD OF the above restrictions. (This clause is
-necessary due to a potential conflict between the GNU GPL and the
-restrictions contained in a BSD-style copyright.)
+Files: modules/pam_unix/lckpwdf.-c
+Copyright: Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>
+License: public-domain
+ Written by Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>,
+ public domain.
-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(S) 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.
--------------------------------------------------------------------------
-
-On Debian GNU/Linux systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL'.
+Files: modules/pam_unix/md5_crypt.c
+Copyright: Poul-Henning Kamp <phk@login.dknet.dk>
+License: Beerware
+ "THE BEER-WARE LICENSE" (Revision 42):
+ <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
+ can do whatever you want with this stuff. If we meet some day, and you think
+ this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
diff --git a/debian/libpam-cracklib.install b/debian/libpam-cracklib.install
deleted file mode 100644
index 55265e5e..00000000
--- a/debian/libpam-cracklib.install
+++ /dev/null
@@ -1,2 +0,0 @@
-lib/*/security/pam_cracklib.so
-debian/pam-configs/cracklib usr/share/pam-configs
diff --git a/debian/libpam-cracklib.manpages b/debian/libpam-cracklib.manpages
deleted file mode 100644
index 0660c415..00000000
--- a/debian/libpam-cracklib.manpages
+++ /dev/null
@@ -1 +0,0 @@
-debian/tmp/usr/share/man/man8/pam_cracklib.8
diff --git a/debian/libpam-cracklib.postinst b/debian/libpam-cracklib.postinst
deleted file mode 100644
index cf52f262..00000000
--- a/debian/libpam-cracklib.postinst
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-set -e
-
-if dpkg --compare-versions "$2" lt 1.0.1-6; then
- pam-auth-update --package
-fi
-
-#DEBHELPER#
diff --git a/debian/libpam-cracklib.prerm b/debian/libpam-cracklib.prerm
deleted file mode 100644
index fe234ac2..00000000
--- a/debian/libpam-cracklib.prerm
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-set -e
-
-if [ "$1" = remove ] && [ "${DPKG_MAINTSCRIPT_PACKAGE_REFCOUNT:-1}" = 1 ]; then
- pam-auth-update --package --remove cracklib
-fi
-
-#DEBHELPER#
diff --git a/debian/libpam-doc.docs b/debian/libpam-doc.docs
new file mode 100644
index 00000000..56631abf
--- /dev/null
+++ b/debian/libpam-doc.docs
@@ -0,0 +1 @@
+ChangeLog
diff --git a/debian/libpam-modules-bin.install b/debian/libpam-modules-bin.install
index 097c27d6..2f1c3914 100644
--- a/debian/libpam-modules-bin.install
+++ b/debian/libpam-modules-bin.install
@@ -1,4 +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
+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 a40efeaf..895133f7 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 *sbin/unix_chkpwd* 2755 root/shadow
diff --git a/debian/libpam-modules-bin.manpages b/debian/libpam-modules-bin.manpages
index 8ab40612..1a7219a8 100644
--- a/debian/libpam-modules-bin.manpages
+++ b/debian/libpam-modules-bin.manpages
@@ -1,3 +1,7 @@
debian/tmp/usr/share/man/man8/mkhomedir_helper.8
debian/tmp/usr/share/man/man8/unix_*.8
debian/tmp/usr/share/man/man8/pam_timestamp_check.8
+debian/tmp/usr/share/man/man8/faillock.8
+debian/tmp/usr/share/man/man5/environment.5
+debian/tmp/usr/share/man/man8/pwhistory_helper.8
+modules/pam_namespace/pam_namespace_helper.8
diff --git a/debian/libpam-modules.lintian-overrides b/debian/libpam-modules.lintian-overrides
index 3eba0f93..8594dd3a 100644
--- a/debian/libpam-modules.lintian-overrides
+++ b/debian/libpam-modules.lintian-overrides
@@ -2,12 +2,13 @@
# 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 [*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*]
# pam_deny.so does not use any symbol from libc.
-libpam-modules: shared-lib-without-dependency-information lib/*/security/pam_deny.so
-
+libpam-modules: shared-library-lacks-prerequisites *lib/*/security/pam_deny.so*
+# lintian doesn't know what to do with manpages for pam modules
+libpam-modules: spare-manual-page [*]
diff --git a/debian/libpam-modules.manpages b/debian/libpam-modules.manpages
index a9f488d0..1a52120f 100644
--- a/debian/libpam-modules.manpages
+++ b/debian/libpam-modules.manpages
@@ -1,2 +1,3 @@
debian/tmp/usr/share/man/man8/pam_*.8
debian/tmp/usr/share/man/man5/*conf.5
+modules/pam_namespace/pam_namespace.8
diff --git a/debian/libpam-modules.postinst b/debian/libpam-modules.postinst
index ce03090b..ed6afbe2 100644
--- a/debian/libpam-modules.postinst
+++ b/debian/libpam-modules.postinst
@@ -3,26 +3,17 @@
# If the user has removed the config file, respect this sign of dementia
# -- only create on package install.
-if [ -z "$2" ] || dpkg --compare-versions "$2" lt 0.99.7.1-3
-then
- if ! [ -f /etc/security/opasswd ]; then
+if [ -z "$2" ]; then
+ if ! [ -f "$DPKG_ROOT"/etc/security/opasswd ]; then
umask 066
- touch /etc/security/opasswd
+ touch "$DPKG_ROOT"/etc/security/opasswd
umask 022
fi
fi
-if dpkg --compare-versions "$2" lt 0.99.9.0-1 && ! [ -f /etc/environment ]
-then
- touch /etc/environment
-fi
-
-if dpkg --compare-versions "$2" lt-nl 1.1.2-1 \
- && grep -q 'pam_unix.*\bmin=[0-9]\+' /etc/pam.d/common-password
+if dpkg --compare-versions "$2" lt 0.99.9.0-1 && ! [ -f "$DPKG_ROOT"/etc/environment ]
then
- echo "'min=' option to pam_unix is obsolete."
- echo "replacing with 'minlen=' in /etc/pam.d/common-password."
- sed -i -e'/pam_unix/ s/\bmin=/minlen=/' /etc/pam.d/common-password
+ touch "$DPKG_ROOT"/etc/environment
fi
#DEBHELPER#
diff --git a/debian/libpam-modules.preinst b/debian/libpam-modules.preinst
index 034dfaab..50505eff 100644
--- a/debian/libpam-modules.preinst
+++ b/debian/libpam-modules.preinst
@@ -4,7 +4,37 @@ set -e
. /usr/share/debconf/confmodule
-if dpkg --compare-versions "$2" lt-nl 1.3.1-2; then
+
+handle_profiles_with_removed_modules() {
+ removed_modules="$1"
+ profiles=""
+ modules=""
+ test -x /usr/sbin/pam-auth-update ||return 0
+ test -r /var/lib/pam/auth ||return 0
+ for module in $removed_modules; do
+ new_profiles=$( perl -nle 'BEGIN {$removed = shift;} /^Module: (.*)$/&&($profile = $1); /^[^#]*$removed/&&$profile&&($profiles{$profile} = 1); END {print join("\n",keys %profiles) if %profiles;}' \
+ $module \
+ /var/lib/pam/auth /var/lib/pam/account \
+ /var/lib/pam/password /var/lib/pam/session \
+ /var/lib/pam/session-noninteractive)
+ if [ "$new_profiles" != "" ]; then
+ modules="$modules $module"
+ profiles="${profiles}${new_profiles}"
+ fi
+ done
+ profiles=$( echo "$profiles" |sort |uniq)
+ if [ "$profiles" != "" ]; then
+ db_reset libpam-modules/profiles-disabled
+ db_subst libpam-modules/profiles-disabled modules "$modules"
+ db_input critical libpam-modules/profiles-disabled ||true
+ db_go ||true
+ pam-auth-update --remove $profiles
+ fi
+}
+
+
+
+if dpkg --compare-versions "$2" lt-nl 1.4.0-5; then
db_version 2.0
if pidof xscreensaver xlockmore >/dev/null; then
diff --git a/debian/libpam-modules.templates b/debian/libpam-modules.templates
index b928751e..83f5d6e5 100644
--- a/debian/libpam-modules.templates
+++ b/debian/libpam-modules.templates
@@ -7,3 +7,22 @@ _Description: xscreensaver and xlockmore must be restarted before upgrading
authenticate to these programs. You should arrange for these programs
to be restarted or stopped before continuing this upgrade, to avoid
locking your users out of their current sessions.
+
+Template: libpam-modules/profiles-disabled
+Type: error
+_Description: PAM Profiles with Deprecated Modules Disabled
+ Your system had PAM profiles enabled with the ${modules} PAM
+ modules. These modules have been removed from PAM. Leaving these PAM
+ profiles enabled would prevent users from accessing your system. As a
+ result, these profiles have been disabled.
+
+Template: libpam-modules/deprecate-tally
+Type: error
+_Description: you are using pam_tally or pam_tally2 in your configuration
+ The pam_tally and pam_tally2 modules have been removed from PAM. You
+ are using one of these modules in your PAM configuration in
+ /etc/pam.d. You must remove the uses of these modules before PAM can
+ be upgraded; including these modules in your PAM configuration after
+ the upgrade will stop users from being able to log into the system.
+ .
+ Consider the pam_faillock module as a replacement for pam_tally.
diff --git a/debian/libpam-runtime.lintian-overrides b/debian/libpam-runtime.lintian-overrides
index 7a8b1a70..d7ad72be 100644
--- a/debian/libpam-runtime.lintian-overrides
+++ b/debian/libpam-runtime.lintian-overrides
@@ -2,4 +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]
+# 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 [*:*]
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/libpam-runtime.postinst b/debian/libpam-runtime.postinst
index 518e8d24..667b33a6 100644
--- a/debian/libpam-runtime.postinst
+++ b/debian/libpam-runtime.postinst
@@ -8,7 +8,7 @@ calculate_md5sum()
sed -n -e'1,/# here are the per-package modules (the "Primary" block)/p;
/# here.s the fallback if no module succeeds/,/# and here are more per-package modules (the "Additional" block)/p;
/# end of pam-auth-update config/,$p' \
- /etc/pam.d/"$configfile" | md5sum | awk '{ print $1 }'
+ "$DPKG_ROOT"/etc/pam.d/"$configfile" | md5sum | awk '{ print $1 }'
}
# If the user has removed the config file, respect this sign of dementia
@@ -20,26 +20,22 @@ then
for configfile in common-auth common-account common-session \
common-password
do
- if [ -f /etc/pam.d/$configfile ] && \
+ if [ -f "$DPKG_ROOT"/etc/pam.d/$configfile ] && \
! fgrep -q $(calculate_md5sum $configfile) \
- /usr/share/pam/$configfile.md5sums 2>/dev/null
+ "$DPKG_ROOT"/usr/share/pam/$configfile.md5sums 2>/dev/null
then
force=
fi
done
fi
-pam-auth-update --package $force
+pam-auth-update --root "$DPKG_ROOT" --package $force
if [ -n "$force" ]; then
- rm -f /etc/pam.d/common-auth.pam-old \
- /etc/pam.d/common-account.pam-old \
- /etc/pam.d/common-password.pam-old \
- /etc/pam.d/common-session.pam-old
-elif dpkg --compare-versions "$2" lt-nl 1.1.0-1 \
- && [ ! -e /etc/pam.d/common-session-noninteractive ]
-then
- cp -a /etc/pam.d/common-session /etc/pam.d/common-session-noninteractive
+ rm -f "$DPKG_ROOT"/etc/pam.d/common-auth.pam-old \
+ "$DPKG_ROOT"/etc/pam.d/common-account.pam-old \
+ "$DPKG_ROOT"/etc/pam.d/common-password.pam-old \
+ "$DPKG_ROOT"/etc/pam.d/common-session.pam-old
fi
#DEBHELPER#
diff --git a/debian/libpam-runtime.postrm b/debian/libpam-runtime.postrm
index 9a11040d..bff1f43f 100644
--- a/debian/libpam-runtime.postrm
+++ b/debian/libpam-runtime.postrm
@@ -2,10 +2,12 @@
if [ "$1" = "purge" ]; then
rm -f /etc/pam.d/common-auth /etc/pam.d/common-account \
- /etc/pam.d/common-session /etc/pam.d/common-password
+ /etc/pam.d/common-session /etc/pam.d/common-password \
+ /etc/pam.d/common-session-noninteractive
rm -f /var/lib/pam/auth /var/lib/pam/account /var/lib/pam/session \
- /var/lib/pam/password /var/lib/pam/seen
- rmdir --ignore-fail-on-non-empty /var/lib/pam
+ /var/lib/pam/password /var/lib/pam/seen \
+ /var/lib/pam/session-noninteractive
+ rmdir --ignore-fail-on-non-empty /var/lib/pam ||true
fi
#DEBHELPER#
diff --git a/debian/libpam-runtime.prerm b/debian/libpam-runtime.prerm
index ec239237..2690cc09 100644
--- a/debian/libpam-runtime.prerm
+++ b/debian/libpam-runtime.prerm
@@ -1,9 +1,20 @@
#!/bin/sh
set -e
+# Packages including pam configurations need to include a block like
+# the following to arrange for removal of the PAM profile prior to
+# package removale. Libpam-runtime is special because it includes the
+# machinery for managing the profiles and because there is a check to
+# make sure at least one profile is enabled. Libpam-runtime can only
+# be removed in a situation where dpkg checks are being overriden; in
+# that case the resulting PAM config is likely to be broken anyway.
+# But we prefer to permit the removal if enough dpkg force options are
+# given than to create an infinite loop. So, this block is commented
+# out, left here as an example for other packages.
-if [ "$1" = remove ]; then
- pam-auth-update --package --remove unix
-fi
+
+# if [ "$1" = remove ] ; then
+# pam-auth-update --package --remove unix
+# fi
#DEBHELPER#
diff --git a/debian/libpam0g-dev.install b/debian/libpam0g-dev.install
new file mode 100755
index 00000000..0d6f4856
--- /dev/null
+++ b/debian/libpam0g-dev.install
@@ -0,0 +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
diff --git a/debian/libpam0g-dev.install.in b/debian/libpam0g-dev.install.in
deleted file mode 100644
index 827690aa..00000000
--- a/debian/libpam0g-dev.install.in
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/include/security/*
-lib/@DEB_HOST_MULTIARCH@/*.a usr/lib/@DEB_HOST_MULTIARCH@
diff --git a/debian/libpam0g-dev.links b/debian/libpam0g-dev.links
new file mode 100755
index 00000000..5cbfd6db
--- /dev/null
+++ b/debian/libpam0g-dev.links
@@ -0,0 +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
diff --git a/debian/libpam0g-dev.links.in b/debian/libpam0g-dev.links.in
deleted file mode 100644
index ee062368..00000000
--- a/debian/libpam0g-dev.links.in
+++ /dev/null
@@ -1,3 +0,0 @@
-/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
diff --git a/debian/libpam0g.lintian-overrides b/debian/libpam0g.lintian-overrides
index f66356af..ef3655f5 100644
--- a/debian/libpam0g.lintian-overrides
+++ b/debian/libpam0g.lintian-overrides
@@ -1,8 +1,11 @@
# obvious multilib package false-positive; also the package name hasn't
# changed since the glibc transition, go us!
-libpam0g: package-name-doesnt-match-sonames libpam0 libpam-misc0 libpamc0
+libpam0g: 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
+# 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
diff --git a/debian/libpam0g.postinst b/debian/libpam0g.postinst
index 953078a0..6279f684 100644
--- a/debian/libpam0g.postinst
+++ b/debian/libpam0g.postinst
@@ -52,7 +52,45 @@ filerc() {
echo ""
}
-installed_services() {
+if test -d /run/systemd/system; then
+ is_service_configured() {
+ systemctl is-enabled --quiet $1 || return 1
+ }
+ restart_service() {
+ if systemctl try-restart $1; then
+ :
+ else
+ failed="$failed $1"
+ fi
+ }
+else # not systemd
+ is_service_configured() {
+ service="$1"
+ idl="/etc/init.d/${service}"
+ if [ -n "$idl" ] && [ -x $idl ]; then
+ return 0
+ else
+ return 1
+ fi
+ }
+
+ restart_service() {
+ service="$1"
+ idl="invoke-rc.d ${service}"
+ echo -n " $service: stopping..." 2>&1
+ $idl stop > /dev/null 2>&1 || true
+ sleep 1
+ echo -n "starting..." 2>&1
+ if $idl start > /dev/null 2>&1; then
+ echo "done." 2>&1
+ else
+ echo "FAILED! ($?)" 2>&1
+ failed="$service $failed"
+ fi
+ }
+fi
+
+ installed_services() {
check="$@"
# Only get the ones that are installed, and configured
@@ -74,11 +112,10 @@ installed_services() {
)
for service in $check; do
- idl="/etc/init.d/${service}"
- if [ -n "$idl" ] && [ -x $idl ]; then
+ if is_service_configured $service; then
services="$service $services"
else
- echo "WARNING: init script for $service not found." >&2
+ echo "WARNING: $service not configured." >&2
fi
done
echo "$services"
@@ -87,7 +124,7 @@ installed_services() {
if [ "$1" = "configure" ]
then
if [ ! -z "$2" ]; then
- if dpkg --compare-versions "$2" lt 1.3.1-2; then
+ if dpkg --compare-versions "$2" lt 1.4.0-2; then
db_version 2.0
echo -n "Checking for services that may need to be restarted..."
@@ -152,16 +189,7 @@ then
continue
;;
esac
- echo -n " $service: stopping..."
- $idl stop > /dev/null 2>&1 || true
- sleep 1
- echo -n "starting..."
- if $idl start > /dev/null 2>&1; then
- echo "done."
- else
- echo "FAILED! ($?)"
- failed="$service $failed"
- fi
+ restart_service "$service"
done
echo
if [ -n "$failed" ]; then
@@ -197,7 +225,7 @@ then
# Shut down the frontend, to make sure none of the
# restarted services keep a connection open to it
db_stop
- fi # end upgrading and $2 lt 1.3.1-2
+ fi # end upgrading and $2 lt 1.4.0-2
fi # Upgrading
fi
diff --git a/debian/libpam0g.symbols b/debian/libpam0g.symbols
index 7d13d32d..c8bfbb0a 100644
--- a/debian/libpam0g.symbols
+++ b/debian/libpam0g.symbols
@@ -9,7 +9,7 @@ libpam.so.0 libpam0g #MINVER#
*@LIBPAM_MODUTIL_1.1.3 1.1.3
*@LIBPAM_MODUTIL_1.1.9 1.3.1
*@LIBPAM_MODUTIL_1.3.2 1.3.2
-(optional)pam_modutil_sanitize_helper_fds 1.3.1
+ *@LIBPAM_MODUTIL_1.4.1 1.4.1
libpam_misc.so.0 libpam0g #MINVER#
*@LIBPAM_MISC_1.0 0.99.7.1
libpamc.so.0 libpam0g #MINVER#
diff --git a/debian/libpam0g.templates b/debian/libpam0g.templates
index 64a616ac..2ea4bca7 100644
--- a/debian/libpam0g.templates
+++ b/debian/libpam0g.templates
@@ -3,7 +3,7 @@ Type: string
_Description: Services to restart for PAM library upgrade:
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
+ list of services to be restarted now, and correct it
if needed.
Template: libpam0g/xdm-needs-restart
diff --git a/debian/local/Debian-PAM-MiniPolicy b/debian/local/Debian-PAM-MiniPolicy
index e51a0246..8cba0aee 100644
--- a/debian/local/Debian-PAM-MiniPolicy
+++ b/debian/local/Debian-PAM-MiniPolicy
@@ -83,11 +83,11 @@ those modules. E.g., /etc/pam.d/login includes the line:
therefore it must depend on libpam-modules, which provides
/lib/security/pam_limits.so.
-Applications need to depend on libpam-runtime (>= 0.76-14) to
-guarantee that /etc/pam.d/common-* exist.
+Applications need to depend on libpam-runtime to guarantee that
+/etc/pam.d/common-* exist.
Applications that use common-session-noninteractive must depend
-on libpam-runtime (>= 1.0.1-11) for this file.
+on libpam-runtime for this file.
The pam_unix.so module allows programs to authenticate the uid of the
diff --git a/debian/local/common-password b/debian/local/common-password
index 963f1eb4..676b814c 100644
--- a/debian/local/common-password
+++ b/debian/local/common-password
@@ -6,14 +6,14 @@
# used to change user passwords. The default is pam_unix.
# Explanation of pam_unix options:
-#
-# The "sha512" option enables salted SHA512 passwords. Without this option,
-# the default is Unix crypt. Prior releases used the option "md5".
-#
-# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
-# login.defs.
-#
-# See the pam_unix manpage for other options.
+# The "yescrypt" option enables
+#hashed passwords using the yescrypt algorithm, introduced in Debian
+#11. Without this option, the default is Unix crypt. Prior releases
+#used the option "sha512"; if a shadow password hash will be shared
+#between Debian 11 and older releases replace "yescrypt" with "sha512"
+#for compatibility . The "obscure" option replaces the old
+#`OBSCURE_CHECKS_ENAB' option in login.defs. See the pam_unix manpage
+#for other options.
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
diff --git a/debian/local/common-session b/debian/local/common-session
index 4125ec41..1cd4f1ae 100644
--- a/debian/local/common-session
+++ b/debian/local/common-session
@@ -3,8 +3,7 @@
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
-# at the start and end of sessions of *any* kind (both interactive and
-# non-interactive).
+# at the start and end of interactive sessions.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
diff --git a/debian/local/pam-auth-update b/debian/local/pam-auth-update
index 6d17ab72..ca1cb36d 100644
--- a/debian/local/pam-auth-update
+++ b/debian/local/pam-auth-update
@@ -39,7 +39,7 @@ my $blanktemplate = 'libpam-runtime/no_profiles_chosen';
my $titletemplate = 'libpam-runtime/title';
my $confdir = '/etc/pam.d';
my $savedir = '/var/lib/pam';
-my (%profiles, @sorted, @enabled, @conflicts, @new, %removals, %to_enable);
+my (%profiles, @sorted, @enabled, @conflicts, @new, %removals, %to_disable, %to_enable);
my $force = 0;
my $package = 0;
my $priority = 'high';
@@ -47,11 +47,13 @@ my %md5sums = (
'auth' => ['8d4fe17e66ba25de16a117035d1396aa'],
'account' => ['3c0c362eaf3421848b679d63fd48c3fa'],
'password' => [
+ '4d5c92d595a46b69cd61f18feb4c0574',
'50fce2113dfda83ac8bdd5a6e706caec',
'4bd7610f2e85f8ddaef79c7db7cb49eb',
'9ba753d0824276b44bcadfee1f87b6bc',
],
'session' => [
+ 'f297c731a467822cbd86e1283263e8a3',
'240fb92986c885b327cdb21dd641da8c',
'4a25673e8b36f1805219027d3be02cd2',
],
@@ -59,13 +61,7 @@ my %md5sums = (
'ad2b78ce1498dd637ef36469430b6ac6',
],
);
-
-opendir(DIR, $inputdir) || die "could not open config directory: $!";
-while (my $profile = readdir(DIR)) {
- next if ($profile eq '.' || $profile eq '..' || $profile =~ m/~$/ || $profile =~ m/^#.+#$/);
- %{$profiles{$profile}} = parse_pam_profile($inputdir . '/' . $profile);
-}
-closedir DIR;
+my @invalid_modules = ('pam_tally');
# use a '--force' arg to specify that /etc/pam.d should be overwritten;
# used only on upgrades where the postinst has already determined that the
@@ -82,6 +78,11 @@ while ($#ARGV >= 0) {
$force = 1;
} elsif ($opt eq '--package') {
$package = 1;
+ } elsif ($opt eq '--root') {
+ my $rootdir = shift @ARGV;
+ $savedir = "${rootdir}$savedir";
+ $confdir = "${rootdir}$confdir";
+ $inputdir = "${rootdir}$inputdir";
} elsif ($opt eq '--remove') {
while ($#ARGV >= 0) {
last if ($ARGV[0] =~ /^--/);
@@ -89,6 +90,13 @@ while ($#ARGV >= 0) {
}
# --remove implies --package
$package = 1 if (keys(%removals));
+ } elsif ($opt eq '--disable') {
+ while ($#ARGV >= 0) {
+ last if ($ARGV[0] =~ /^--/);
+ $to_disable{shift @ARGV} = 1;
+ }
+ # --disable implies --package
+ $package = 1 if (keys(%to_disable));
} elsif ($opt eq '--enable') {
while ($#ARGV >= 0) {
last if ($ARGV[0] =~ /^--/);
@@ -99,6 +107,16 @@ while ($#ARGV >= 0) {
}
}
+opendir(DIR, $inputdir) || die "could not open config directory: $!";
+while (my $profile = readdir(DIR)) {
+ next if ($profile eq '.' || $profile eq '..' || $profile =~ m/~$/ || $profile =~ m/^#.+#$/);
+ %{$profiles{$profile}} = parse_pam_profile($inputdir . '/' . $profile);
+ if (defined $profiles{$profile}{'disabled'} and $profiles{$profile}{'disabled'}) {
+ delete $profiles{$profile};
+ }
+}
+closedir DIR;
+
$priority = 'medium' if ($package);
x_loadtemplatefile('/var/lib/dpkg/info/libpam-runtime.templates','libpam-runtime');
@@ -137,15 +155,23 @@ if (-e $savedir . '/seen') {
# filter out any options that are no longer available for any reason
@enabled = grep { $profiles{$_} } @enabled;
+# add configs to enable
+push(@enabled,
+ grep { $to_enable{$_} } @sorted);
+
+# Disable anything explicitly disabled
+@enabled = grep {!$to_disable{$_} } @enabled;
+# And we've seen anything we disable
+foreach my $i (keys %to_disable) {
+ $seen{$i} = 1;
+}
+
# an empty module set is an error, so in that case grab all the defaults
if (!@enabled) {
%seen = ();
$priority = 'high' unless ($force);
}
-# add configs to enable
-push(@enabled,
- grep { $to_enable{$_} } @sorted);
# add any previously-unseen configs
push(@enabled,
@@ -702,11 +728,14 @@ sub parse_pam_profile
s/^\s+//;
s/\s+$//;
$profile{$fieldname} .= "\n$_" if ($_);
+ if (grep { $profile{$fieldname} =~ /$_/} @invalid_modules) {
+ $profile{'disabled'} = 1;
+ }
$profile{$fieldname} =~ s/^[\n\s]+//;
}
}
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/local/pam-auth-update.8 b/debian/local/pam-auth-update.8
index a5ebdbad..a31ec921 100644
--- a/debian/local/pam-auth-update.8
+++ b/debian/local/pam-auth-update.8
@@ -23,6 +23,10 @@ pam\-auth\-update - manage PAM configuration using packaged profiles
.RB [ \-\-package " [" \-\-remove
.IR profile " [" profile\fR... "]]]"
.RB [ \-\-force ]
+.RB [ \-\-enable
+.IR profile " [" profile\fR... "]]"
+.RB [ \-\-disable
+.IR profile " [" profile\fR... "]]"
.SH DESCRIPTION
.I pam\-auth\-update
is a utility that permits configuring the central authentication policy
@@ -68,6 +72,9 @@ Indicate that the caller is a package maintainer script; lowers the
priority of debconf questions to `medium' so that the user is not
prompted by default.
.TP
+.B \-\-disable \fIprofile \fR[\fIprofile\fR...]
+Disable the specified profiles in system configuration. This can be used from system administration scripts to disable profiles.
+.TP
.B \-\-enable \fIprofile \fR[\fIprofile\fR...]
Enable the specified profiles in system configuration. This is used to
enable profiles that are not on by default.
diff --git a/debian/not-installed b/debian/not-installed
new file mode 100644
index 00000000..4aaa5853
--- /dev/null
+++ b/debian/not-installed
@@ -0,0 +1,8 @@
+lib/*/security/*.a
+lib/*/security/*.la
+lib/*/*.la
+lib/*/*.so
+usr/share/man/man7/pam.7
+etc/environment
+# sample filter, do not install
+lib/*/security/pam_filter/upperLOWER
diff --git a/debian/pam-configs/cracklib b/debian/pam-configs/cracklib
deleted file mode 100644
index 1c48274f..00000000
--- a/debian/pam-configs/cracklib
+++ /dev/null
@@ -1,9 +0,0 @@
-Name: Cracklib password strength checking
-Default: yes
-Priority: 1024
-Conflicts: unix-zany
-Password-Type: Primary
-Password:
- requisite pam_cracklib.so retry=3 minlen=8 difok=3
-Password-Initial:
- requisite pam_cracklib.so retry=3 minlen=8 difok=3
diff --git a/debian/pam-configs/unix b/debian/pam-configs/unix
index 6e896439..83c429bc 100644
--- a/debian/pam-configs/unix
+++ b/debian/pam-configs/unix
@@ -18,6 +18,6 @@ Session-Initial:
required pam_unix.so
Password-Type: Primary
Password:
- [success=end default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512
+ [success=end default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
Password-Initial:
- [success=end default=ignore] pam_unix.so obscure sha512
+ [success=end default=ignore] pam_unix.so obscure yescrypt
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 b940aa27..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
-@@ -761,9 +761,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 99ac3f62..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
-@@ -749,7 +749,7 @@
- struct passwd *tmpent = NULL;
- struct stat st;
- FILE *pwfile, *opwfile;
-- int err = 1;
-+ int err = 1, found = 0;
- int oldmask;
- #ifdef WITH_SELINUX
- security_context_t prev_context=NULL;
-@@ -820,6 +820,7 @@
-
- tmpent->pw_passwd = assigned_passwd.charp;
- err = 0;
-+ found = 1;
- }
- if (putpwent(tmpent, pwfile)) {
- D(("error writing entry to password file: %m"));
-@@ -862,7 +863,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/036_pam_wheel_getlogin_considered_harmful b/debian/patches-applied/036_pam_wheel_getlogin_considered_harmful
deleted file mode 100644
index ca465d99..00000000
--- a/debian/patches-applied/036_pam_wheel_getlogin_considered_harmful
+++ /dev/null
@@ -1,145 +0,0 @@
-Patch for Debian bug #163787 et al
-
-Always use the process uid, not getlogin(), to identify an applicant in
-pam_wheel; utmp may be wrong or may have no entry at all in the case of
-an xterm
-
-Authors: Ben Collins <bcollins@debian.org>
-
-Upstream status: submitted in <20070901175405.GA26092@dario.dodds.net>
-
-Index: pam/modules/pam_wheel/pam_wheel.c
-===================================================================
---- pam.orig/modules/pam_wheel/pam_wheel.c
-+++ pam/modules/pam_wheel/pam_wheel.c
-@@ -60,9 +60,8 @@
- /* argument parsing */
-
- #define PAM_DEBUG_ARG 0x0001
--#define PAM_USE_UID_ARG 0x0002
--#define PAM_TRUST_ARG 0x0004
--#define PAM_DENY_ARG 0x0010
-+#define PAM_TRUST_ARG 0x0002
-+#define PAM_DENY_ARG 0x0004
- #define PAM_ROOT_ONLY_ARG 0x0020
-
- static int
-@@ -80,8 +79,7 @@
-
- if (!strcmp(*argv,"debug"))
- ctrl |= PAM_DEBUG_ARG;
-- else if (!strcmp(*argv,"use_uid"))
-- ctrl |= PAM_USE_UID_ARG;
-+ else if (!strcmp(*argv,"use_uid")); /* ignored for compat. */
- else if (!strcmp(*argv,"trust"))
- ctrl |= PAM_TRUST_ARG;
- else if (!strcmp(*argv,"deny"))
-@@ -129,27 +127,14 @@
- }
- }
-
-- if (ctrl & PAM_USE_UID_ARG) {
-- tpwd = pam_modutil_getpwuid (pamh, getuid());
-- if (!tpwd) {
-- if (ctrl & PAM_DEBUG_ARG) {
-- pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
-- }
-- return PAM_SERVICE_ERR;
-- }
-- fromsu = tpwd->pw_name;
-- } else {
-- fromsu = pam_modutil_getlogin(pamh);
-- if (fromsu) {
-- tpwd = pam_modutil_getpwnam (pamh, fromsu);
-- }
-- if (!fromsu || !tpwd) {
-- if (ctrl & PAM_DEBUG_ARG) {
-- pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
-- }
-- return PAM_SERVICE_ERR;
-+ tpwd = pam_modutil_getpwuid (pamh, getuid());
-+ if (!tpwd) {
-+ if (ctrl & PAM_DEBUG_ARG) {
-+ pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
- }
-+ return PAM_SERVICE_ERR;
- }
-+ fromsu = tpwd->pw_name;
-
- /*
- * 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 for wheel membership will be done against
-- the current uid instead of the original one (useful when
-- jumping with su from one account to another for example).
-- </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 for wheel membership will be done against the current uid instead of the original one (useful when jumping with su from one account to another for example)\&.
--.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 for wheel membership will be done against the current uid instead
-- of the original one (useful when jumping with su from one account to
-- another for example).
--
- EXAMPLES
-
- The root account gains access by default (rootok), only wheel members can
diff --git a/debian/patches-applied/PAM-manpage-section b/debian/patches-applied/PAM-manpage-section
deleted file mode 100644
index 815c2614..00000000
--- a/debian/patches-applied/PAM-manpage-section
+++ /dev/null
@@ -1,1801 +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" "06/08/2020" "Linux-PAM Manual" "Linux-PAM Manual"
-+.TH "PAM" "7" "06/08/2020" "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
-@@ -346,7 +346,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
-@@ -343,7 +343,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_cracklib/pam_cracklib.8.xml
-===================================================================
---- pam.orig/modules/pam_cracklib/pam_cracklib.8.xml
-+++ pam/modules/pam_cracklib/pam_cracklib.8.xml
-@@ -577,7 +577,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_cracklib/pam_cracklib.8
-===================================================================
---- pam.orig/modules/pam_cracklib/pam_cracklib.8
-+++ pam/modules/pam_cracklib/pam_cracklib.8
-@@ -357,7 +357,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_cracklib was written by Cristian Gafton <gafton@redhat\&.com>
-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
-@@ -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>,
- <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
-@@ -287,7 +287,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
-@@ -177,7 +177,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
-@@ -198,7 +198,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
-@@ -124,7 +124,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
-@@ -195,7 +195,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
-@@ -399,7 +399,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
-@@ -178,7 +178,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" "06/08/2020" "Linux-PAM Manual" "Linux\-PAM Manual"
-+.TH "PAM_SELINUX" "7" "06/08/2020" "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_tally/pam_tally.8.xml
-===================================================================
---- pam.orig/modules/pam_tally/pam_tally.8.xml
-+++ pam/modules/pam_tally/pam_tally.8.xml
-@@ -444,7 +444,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_tally/pam_tally.8
-===================================================================
---- pam.orig/modules/pam_tally/pam_tally.8
-+++ pam/modules/pam_tally/pam_tally.8
-@@ -250,7 +250,7 @@
- \fBfaillog\fR(8),
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_tally was written by Tim Baverstock and Tomas Mraz\&.
-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
-@@ -278,7 +278,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" "06/08/2020" "Linux-PAM Manual" "Linux-PAM Manual"
-+.TH "PAM_ENV" "7" "06/08/2020" "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_tally2/pam_tally2.8.xml
-===================================================================
---- pam.orig/modules/pam_tally2/pam_tally2.8.xml
-+++ pam/modules/pam_tally2/pam_tally2.8.xml
-@@ -435,7 +435,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_tally2/pam_tally2.8
-===================================================================
---- pam.orig/modules/pam_tally2/pam_tally2.8
-+++ pam/modules/pam_tally2/pam_tally2.8
-@@ -238,7 +238,7 @@
- .PP
- \fBpam.conf\fR(5),
- \fBpam.d\fR(5),
--\fBpam\fR(8)
-+\fBpam\fR(7)
- .SH "AUTHOR"
- .PP
- pam_tally2 was written by Tim Baverstock and Tomas Mraz\&.
-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
-@@ -188,7 +188,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
-@@ -124,7 +124,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_tally 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 ed15df13..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
-@@ -619,7 +619,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/pam_unix_fix_sgid_shadow_auth.patch b/debian/patches-applied/pam_unix_fix_sgid_shadow_auth.patch
deleted file mode 100644
index 0ce85eb7..00000000
--- a/debian/patches-applied/pam_unix_fix_sgid_shadow_auth.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Revert upstream change that prevents pam_unix from working with sgid
-shadow applications.
-
-Authors: Steve Langasek <vorlon@debian.org>
-
-Upstream status: to be submitted (and debated...)
-
-Index: pam/modules/pam_unix/passverify.c
-===================================================================
---- pam.orig/modules/pam_unix/passverify.c
-+++ pam/modules/pam_unix/passverify.c
-@@ -198,11 +198,11 @@
- * ...and shadow password file entry for this user,
- * if shadowing is enabled
- */
-+ *spwdent = pam_modutil_getspnam(pamh, name);
- #ifndef HELPER_COMPILE
-- if (geteuid() || SELINUX_ENABLED)
-+ if (*spwdent == NULL && (geteuid() || SELINUX_ENABLED))
- return PAM_UNIX_RUN_HELPER;
- #endif
-- *spwdent = pam_modutil_getspnam(pamh, name);
- if (*spwdent == NULL || (*spwdent)->sp_pwdp == NULL)
- return PAM_AUTHINFO_UNAVAIL;
- }
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 acbdc1a9..5466536f 100644
--- a/debian/patches-applied/008_modules_pam_limits_chroot
+++ b/debian/patches/008_modules_pam_limits_chroot
@@ -1,24 +1,89 @@
-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
-@@ -88,6 +88,7 @@
- int flag_numsyslogins; /* whether to limit logins only for a
+---
+ 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) */
+ char chroot_dir[8092]; /* directory to chroot into */
struct user_limits_struct limits[RLIM_NLIMITS];
const char *conf_file;
int utmp_after_pam_call;
-@@ -98,6 +99,7 @@
- #define LIMIT_NUMSYSLOGINS RLIM_NLIMITS+2
+@@ -115,6 +116,7 @@ struct pam_limit_s {
#define LIMIT_PRI RLIM_NLIMITS+3
-+#define LIMIT_CHROOT RLIM_NLIMITS+4
+ #define LIMIT_NONEWPRIVS RLIM_NLIMITS+4
++#define LIMIT_CHROOT RLIM_NLIMITS+5
#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,16 +92,16 @@ Index: pam/modules/pam_limits/pam_limits.c
return retval;
}
-@@ -554,6 +558,8 @@
- pl->flag_numsyslogins = 1;
- } else if (strcmp(lim_item, "priority") == 0) {
+@@ -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;
+ } else if (strcmp(lim_item, "chroot") == 0) {
-+ limit_item = LIMIT_CHROOT;
++ limit_item = LIMIT_CHROOT;
} else {
pam_syslog(pamh, LOG_DEBUG, "unknown limit item '%s'", lim_item);
return;
-@@ -591,9 +597,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,8 +113,8 @@ Index: pam/modules/pam_limits/pam_limits.c
#ifdef __USE_FILE_OFFSET64
rlimit_value = strtoull (lim_value, &endptr, 10);
#else
-@@ -654,7 +660,11 @@
- #endif
+@@ -803,7 +809,11 @@ process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
+ break;
}
- if ( (limit_item != LIMIT_LOGIN)
@@ -59,10 +124,10 @@ Index: pam/modules/pam_limits/pam_limits.c
+ }
+ else if ( (limit_item != LIMIT_LOGIN)
&& (limit_item != LIMIT_NUMSYSLOGINS)
- && (limit_item != LIMIT_PRI) ) {
- if (limit_type & LIMIT_SOFT) {
-@@ -998,6 +1008,15 @@
- retval |= LOGIN_ERR;
+ && (limit_item != LIMIT_PRI)
+ && (limit_item != LIMIT_NONEWPRIVS) ) {
+@@ -1163,6 +1173,15 @@ static int setup_limits(pam_handle_t *pamh,
+ }
}
+ if (!retval && pl->chroot_dir[0]) {
@@ -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
-@@ -266,6 +266,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
-@@ -271,6 +271,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
-@@ -35,6 +35,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>
- #
-@@ -45,6 +46,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 5ac946f5..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
-@@ -46,6 +46,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
-@@ -83,6 +91,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
-@@ -448,9 +457,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) {
-@@ -466,18 +484,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);
-@@ -816,7 +884,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",
-@@ -842,7 +910,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",
-@@ -876,7 +944,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;
-@@ -1062,6 +1130,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
-@@ -11,6 +11,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
-@@ -41,6 +44,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>
-
-@@ -323,6 +328,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
-@@ -142,6 +142,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
-@@ -317,6 +321,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
-@@ -54,6 +54,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 1948f894..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
-@@ -122,6 +122,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));
-@@ -192,8 +196,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,
-@@ -204,13 +210,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 d5ce6953..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
-@@ -1046,6 +1046,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/036_pam_wheel_getlogin_considered_harmful b/debian/patches/036_pam_wheel_getlogin_considered_harmful
new file mode 100644
index 00000000..43979153
--- /dev/null
+++ b/debian/patches/036_pam_wheel_getlogin_considered_harmful
@@ -0,0 +1,148 @@
+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
+pam_wheel; utmp may be wrong or may have no entry at all in the case of
+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(-)
+
+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 */
+
+ #define PAM_DEBUG_ARG 0x0001
+-#define PAM_USE_UID_ARG 0x0002
+-#define PAM_TRUST_ARG 0x0004
+-#define PAM_DENY_ARG 0x0010
++#define PAM_TRUST_ARG 0x0002
++#define PAM_DENY_ARG 0x0004
+ #define PAM_ROOT_ONLY_ARG 0x0020
+
+ static int
+@@ -68,8 +67,7 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv,
+
+ if (!strcmp(*argv,"debug"))
+ ctrl |= PAM_DEBUG_ARG;
+- else if (!strcmp(*argv,"use_uid"))
+- ctrl |= PAM_USE_UID_ARG;
++ else if (!strcmp(*argv,"use_uid")); /* ignored for compat. */
+ else if (!strcmp(*argv,"trust"))
+ ctrl |= PAM_TRUST_ARG;
+ else if (!strcmp(*argv,"deny"))
+@@ -118,39 +116,14 @@ perform_check (pam_handle_t *pamh, int ctrl, const char *use_group)
+ }
+ }
+
+- if (ctrl & PAM_USE_UID_ARG) {
+- tpwd = pam_modutil_getpwuid (pamh, getuid());
+- if (tpwd == NULL) {
+- if (ctrl & PAM_DEBUG_ARG) {
+- pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
+- }
+- return PAM_SERVICE_ERR;
+- }
+- fromsu = tpwd->pw_name;
+- } else {
+- fromsu = pam_modutil_getlogin(pamh);
+-
+- /* if getlogin fails try a fallback to PAM_RUSER */
+- if (fromsu == NULL) {
+- const char *rhostname;
+-
+- retval = pam_get_item(pamh, PAM_RHOST, (const void **)&rhostname);
+- if (retval != PAM_SUCCESS || rhostname == NULL) {
+- retval = pam_get_item(pamh, PAM_RUSER, (const void **)&fromsu);
+- }
+- }
+-
+- if (fromsu != NULL) {
+- tpwd = pam_modutil_getpwnam (pamh, fromsu);
+- }
+-
+- if (fromsu == NULL || tpwd == NULL) {
+- if (ctrl & PAM_DEBUG_ARG) {
+- pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
+- }
+- return PAM_SERVICE_ERR;
++ tpwd = pam_modutil_getpwuid (pamh, getuid());
++ if (tpwd == NULL) {
++ if (ctrl & PAM_DEBUG_ARG) {
++ pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
+ }
++ return PAM_SERVICE_ERR;
+ }
++ fromsu = tpwd->pw_name;
+
+ /*
+ * At this point fromsu = username-of-invoker; tpwd = pwd ptr for fromsu
diff --git a/debian/patches-applied/040_pam_limits_log_failure b/debian/patches/040_pam_limits_log_failure
index 616887c3..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
-@@ -1043,9 +1043,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 c43a733e..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/libpam/pam_handlers.c
-===================================================================
---- pam.orig/libpam/pam_handlers.c
-+++ pam/libpam/pam_handlers.c
-@@ -735,7 +735,18 @@
+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));
@@ -31,11 +38,20 @@ Index: pam/libpam/pam_handlers.c
+ } else {
+ pam_syslog(pamh, LOG_CRIT, "cannot malloc full mod path");
+ }
++ if (!mod->dl_handle) {
++ if (asprintf(&mod_full_path, "%s/%s",
++ _PAM_ISA, mod_path) >= 0) {
++ mod->dl_handle = _pam_dlopen(mod_full_path);
++ _pam_drop(mod_full_path);
++ } else {
++ pam_syslog(pamh, LOG_CRIT, "cannot malloc full mod path");
++ }
++ }
+ }
D(("_pam_load_module: _pam_dlopen'ed"));
D(("_pam_load_module: dlopen'ed"));
if (mod->dl_handle == NULL) {
-@@ -812,7 +823,6 @@
+@@ -814,7 +834,6 @@ int _pam_add_handler(pam_handle_t *pamh
struct handler **handler_p2;
struct handlers *the_handlers;
const char *sym, *sym2;
@@ -43,7 +59,7 @@ Index: pam/libpam/pam_handlers.c
servicefn func, func2;
int mod_type = PAM_MT_FAULTY_MOD;
-@@ -824,16 +834,7 @@
+@@ -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 302c911f..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
-@@ -451,6 +451,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/pam_mkhomedir_stat_before_opendir b/debian/patches/pam_mkhomedir_stat_before_opendir
new file mode 100644
index 00000000..50026225
--- /dev/null
+++ b/debian/patches/pam_mkhomedir_stat_before_opendir
@@ -0,0 +1,34 @@
+From: Sam Hartman <hartmans@debian.org>
+Date: Mon, 11 Sep 2023 14:00:42 -0600
+Subject: pam_mkhomedir_stat_before_opendir
+
+===================================================================
+---
+ 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;
++ struct stat stat_buf;
+
+ /* Create the new directory */
+ if (mkdir(dest, 0700) && errno != EEXIST)
+@@ -54,6 +55,12 @@ create_homedir(const struct passwd *pwd,
+ goto go_out;
+ }
+
++ /* Various things such as an autofs mount with browsing disabled
++ * can cause the directory to appear only on stat. The intent is
++ * to minimize network traversal when a file explorer tries to
++ * traverse large chunks of a directory tree. So stat first.*/
++ stat(source, &stat_buf);
++
+ /* Scan the directory */
+ d = opendir(source);
+ if (d == NULL)
diff --git a/debian/patches-applied/pam_unix_dont_trust_chkpwd_caller.patch b/debian/patches/pam_unix_dont_trust_chkpwd_caller.patch
index 11d4ee31..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,15 +10,18 @@ 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
-@@ -137,9 +137,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 (strcmp(user, argv[1])) {
+ if (user == NULL || strcmp(user, argv[1])) {
+ gid_t gid = getgid();
user = argv[1];
/* no match -> permanently change to the real user and proceed */
diff --git a/debian/patches-applied/series b/debian/patches/series
index 4d562185..8f2a05e1 100644
--- a/debian/patches-applied/series
+++ b/debian/patches/series
@@ -1,23 +1,21 @@
-pam_unix_fix_sgid_shadow_auth.patch
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
diff --git a/debian/patches-applied/update-motd b/debian/patches/update-motd
index d84ecf57..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
-@@ -286,6 +286,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;
-@@ -295,6 +296,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;
-@@ -324,6 +326,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);
}
-@@ -336,6 +341,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
-@@ -114,6 +114,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
-@@ -51,6 +51,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/bg.po b/debian/po/bg.po
index b763fbde..f494e5cd 100644
--- a/debian/po/bg.po
+++ b/debian/po/bg.po
@@ -1,21 +1,21 @@
# translation of bg.po to Bulgarian
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-# Damyan Ivanov <dmn@debian.org>, 2007, 2009, 2012.
+# Damyan Ivanov <dmn@debian.org>, 2007-2021.
#
msgid ""
msgstr ""
"Project-Id-Version: bg\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2012-01-19 22:36+0200\n"
+"POT-Creation-Date: 2021-03-15 18:23-0400\n"
+"PO-Revision-Date: 2021-02-28 21:32+0200\n"
"Last-Translator: Damyan Ivanov <dmn@debian.org>\n"
-"Language-Team: БългарÑки <dict@fsa-bg.org>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Gtranslator 3.38.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#. Type: string
@@ -30,13 +30,12 @@ msgstr "РеÑтартиране на уÑлуги при обновÑване Ð
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"Повечето уÑлуги, които използват PAM трÑбва да бъдат реÑтартирани за да "
"могат да използват модулите за новата верÑÐ¸Ñ Ð½Ð° libpam. Прегледайте ÑпиÑъка "
-"от init.d Ñкриптове по-долу и го коригирайте ако е необходимо. Имената на "
-"отделните Ñкриптове трÑбва да Ñа отделени Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»."
+"от уÑлуги по-долу и го коригирайте ако е необходимо. Имената на отделните "
+"уÑлуги трÑбва да Ñа отделени Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»."
#. Type: error
#. Description
@@ -224,3 +223,49 @@ msgstr ""
"невъзможно идентифицирането Ñ Ñ‚ÐµÐ·Ð¸ програми. ТрÑбва да оÑигурите "
"реÑтартирането или Ñпирането на xscreensaver и xlockmore за да избегнете "
"проблеми Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñта при потребителите, които ги използват."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Изключване на профили на PAM, използващи оÑтарели модули"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"Ð’ ÑиÑтемата имаше активни профили на PAM, използващи модулите ${modules}. "
+"Тези модули Ñа премахнати от PAM. Използването на тези профилите би "
+"възпрепÑÑ‚Ñтвало доÑтъпа на потребителите до ÑиÑтемата и затова Ñа изключени."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "наÑтройките на ÑиÑтемата използват pam_tally или pam_tally2"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Модулите pam_tally и pam_tally2 Ñа премахнати от PAM. Ðеобходимо тези модули "
+"да бъдат премахнати от наÑтройките в /etc/pam.d преди обновÑването на PAM. Ð’ "
+"противен Ñлучай, Ñлед обновÑването на ÑиÑтемата потребителите нÑма да могат "
+"да влизат."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "Модулът pam_faillock може да Ñе използва като замеÑтител на pam_tally."
diff --git a/debian/po/ca.po b/debian/po/ca.po
index 18d42f4c..66d1bcfd 100644
--- a/debian/po/ca.po
+++ b/debian/po/ca.po
@@ -7,16 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pam 1.1.3-6.1\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2012-01-21 08:33+0100\n"
-"Last-Translator: Innocent De Marchi <tangram.peces@gmail.com>\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
+"PO-Revision-Date: 2021-03-05 11:06+0100\n"
+"Last-Translator: Alex Muntada <alexm@debian.org>\n"
"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Catalan\n"
-"X-Poedit-Country: SPAIN\n"
+"X-Generator: Poedit 2.2.1\n"
#. Type: string
#. Description
@@ -31,13 +30,12 @@ msgstr ""
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"És necessari reiniciar la majoria dels serveis que fan servir PAM per a que "
"facin servir els mòduls d'aquesta versió de «libpam». Reviseu la següent "
-"llista separada per espais dels scripts «init.d» que indica els serveis que "
-"es reiniciaran ara i modificau-la si és necessari."
+"llista separada per espais dels serveis que es reiniciaran ara i modificau-"
+"la si és necessari."
#. Type: error
#. Description
@@ -108,8 +106,8 @@ msgid ""
"asked questions on each library upgrade."
msgstr ""
"Hi ha serveis instal·lats en el seu sistema que necessiten ser reiniciats en "
-"actualitzar certes biblioteques, com libpam, libc i libssl. Ja que el procés "
-"de reinicii pot causar interrupcions en el sistema, normalment se vos "
+"actualitzar certes biblioteques, com libpam, libc i libssl. Com que el "
+"procés de reinici pot causar interrupcions en el sistema, normalment se vos "
"demanarà, a cada actualització, per a la llista de serveis que voleu "
"reiniciar. Podeu triar aquesta opció per evitar que se vos demani; en canvi, "
"es faran automàticament tots els reinicis necessaris sense demanar-vos "
@@ -136,7 +134,7 @@ msgid ""
"allowing configuration of additional actions to take when starting user "
"sessions."
msgstr ""
-"Els «Pluggable Authentication Modules» (PAM, o Mòduls d'autenticació "
+"Els «Pluggable Authentication Modules» (PAM, o mòduls d'autenticació "
"inseribles) determinen com es gestionen en el sistema l'autenticació, "
"autorització i modificació de contrasenyes. També permet la definició "
"d'accions addicionals a realitzar quan s'inicia la sessió d'un usuari."
@@ -181,7 +179,7 @@ msgstr "Seleccioneu un conjunt distint de mòduls a activar."
#: ../libpam-runtime.templates:4001
msgid "Override local changes to /etc/pam.d/common-*?"
msgstr ""
-"Desitjau descartar els canvis locals realitzats a «/etc/pam.d/common-*»?"
+"Desitjau sobreescriure els canvis locals realitzats a «/etc/pam.d/common-*»?"
#. Type: boolean
#. Description
@@ -239,3 +237,51 @@ msgstr ""
"biblioteca. Heu de procurar que aquests programes es reinicien o s'aturin "
"abans de continuar amb l'actualització. Així evitareu que els usuaris quedin "
"bloquejats i no puguin continuar les seves sessions actuals."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Perfils de PAM amb mòduls descartats desactivats"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"El vostre sistema tenia perfils de PAM activats amb els mòduls PAM "
+"${modules}. Aquests mòduls s'han eliminat de PAM. Deixant aquests perfils "
+"activats els usuaris no podrien accedir al vostre sistema. Com a resultat, "
+"aquests perfils s'han desactivat."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "esteu utilitzant pam_tally o pam_tally2 a la vostra configuració"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Els mòduls pam_tally i pam_tally2 s'han eliminat de PAM. Esteu utilitzant un "
+"d'aquests mòduls a la vostra configuració de PAM a /etc/pam.d. Heu "
+"d'eliminar els usos d'aquests mòduls abans que es pugui actualitzar PAM ja "
+"que, amb aquests mòduls inclosos a la vostra configuració de PAM, després de "
+"l'actualització els usuaris deixarien de poder entrar al sistema."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "Valoreu el mòdul pam_faillock com a substitut de pam_tally."
diff --git a/debian/po/cs.po b/debian/po/cs.po
index 47570645..865dfd7e 100644
--- a/debian/po/cs.po
+++ b/debian/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2012-01-27 07:56+0100\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -25,11 +25,16 @@ msgstr "Služby, které se mají restartovat po aktualizaci knihovny PAM:"
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"Aby se zaÄaly používat moduly z nové verze knihovny libpam, musí se vÄ›tÅ¡ina "
"služeb používajících PAM restartovat. Zkontrolujte prosím následující seznam "
@@ -98,12 +103,12 @@ msgid ""
"necessary restarts will be done for you automatically so you can avoid being "
"asked questions on each library upgrade."
msgstr ""
-"V systému jsou nainstalovány služby, které je nutno při aktualizaci "
-"urÄitých knihoven (libpam, libc nebo libssl) restartovat. BÄ›hem restartu "
-"služeb jsou tyto po nějakou dobu nedostupné. Abychom předešli nechtěné "
-"nedostupnosti, je při každé aktualizaci nabídnut seznam služeb, které se "
-"mají restartovat. Povolíte-li tuto možnost, budou se všechny potřebné "
-"služby restartovat při aktualizaci knihoven automaticky bez ptaní."
+"V systému jsou nainstalovány služby, které je nutno pÅ™i aktualizaci urÄitých "
+"knihoven (libpam, libc nebo libssl) restartovat. Během restartu služeb jsou "
+"tyto po nějakou dobu nedostupné. Abychom předešli nechtěné nedostupnosti, je "
+"při každé aktualizaci nabídnut seznam služeb, které se mají restartovat. "
+"Povolíte-li tuto možnost, budou se všechny potřebné služby restartovat při "
+"aktualizaci knihoven automaticky bez ptaní."
#. Type: title
#. Description
@@ -224,3 +229,42 @@ msgstr ""
"autentizovat. To jinými slovy znamená, že se uživatelé nedostanou ke svým "
"uzamÄeným sezením. Abyste tomu pÅ™edeÅ¡li, mÄ›li byste pÅ™ed aktualizací zmínÄ›né "
"programy zastavit, nebo je ve vhodný Äas restartovat."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/da.po b/debian/po/da.po
index c332eac5..e45d9122 100644
--- a/debian/po/da.po
+++ b/debian/po/da.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2011-11-10 19:21+0100\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
@@ -25,11 +25,16 @@ msgstr "Tjenester at genstarte for PAM-biblioteksopgradering:"
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"De fleste tjenester, som bruger PAM, har brug for at blive genstartet for at "
"kunne bruge moduler bygget til denne nye version af libpam. Gennemgå "
@@ -227,3 +232,42 @@ msgstr ""
"af disse programmer. Du skal sørge for at disse programmer bliver genstartet "
"eller stoppet, før du fortsætter med opgraderingen, for at undgå låsning af "
"dine brugere i deres aktuelle sessioner."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/de.po b/debian/po/de.po
index 981bc2da..c501720e 100644
--- a/debian/po/de.po
+++ b/debian/po/de.po
@@ -1,14 +1,14 @@
# German translation of pam debconf templates
-# Copyright (C) 2007, 2009, 2011 Sven Joachim <svenjoac@gmx.de>.
+# Copyright (C) 2007, 2009, 2011, 2021 Sven Joachim <svenjoac@gmx.de>.
# Copyright (C) Helge Kreutzmann <debian@helgefjell.de>, 2011.
# This file is distributed under the same license as the pam package.
#
msgid ""
msgstr ""
-"Project-Id-Version: pam 1.1.3-6\n"
+"Project-Id-Version: pam 1.4.0-6\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2011-12-26 19:53+0100\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
+"PO-Revision-Date: 2021-03-01 18:03+0100\n"
"Last-Translator: Sven Joachim <svenjoac@gmx.de>\n"
"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
"Language: de\n"
@@ -28,14 +28,12 @@ msgstr "Neu zu startende Dienste für das Upgrade der PAM-Bibliothek:"
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"Die meisten Dienste, die PAM verwenden, müssen neu gestartet werden, um "
"Module dieser neuen Version von libpam verwenden zu können. Bitte überprüfen "
-"Sie die folgende, Leerzeichen-getrennte Liste von init.d-Skripten für "
-"Dienste, die jetzt neu zu starten sind, und korrigieren Sie diese Liste "
-"falls notwendig."
+"Sie die folgende, Leerzeichen-getrennte Liste von Diensten, die jetzt neu zu "
+"starten sind, und korrigieren Sie diese Liste falls notwendig."
#. Type: error
#. Description
@@ -185,10 +183,10 @@ msgid ""
"configuration by hand."
msgstr ""
"Eine oder mehrere der Dateien /etc/pam.d/common-{auth,account,password,"
-"session} sind lokal verändert worden. Bitte geben Sie an, ob diese "
-"Änderungen durch die mitgelieferte Konfiguration außer Kraft gesetzt werden "
-"sollen. Falls Sie diese Option ablehnen, müssen Sie die Authentifizierungs-"
-"Konfiguration Ihres Systems von Hand verwalten."
+"session} sind lokal verändert worden. Bitte geben Sie an, ob diese lokalen "
+"Änderungen durch die vom System bereitgestellte Konfiguration außer Kraft "
+"gesetzt werden sollen. Falls Sie diese Option ablehnen, müssen Sie die "
+"Authentifizierungs-Konfiguration Ihres Systems von Hand verwalten."
#. Type: error
#. Description
@@ -206,14 +204,14 @@ msgid ""
msgstr ""
"Es wurden keine PAM-Profile für die Verwendung auf diesem System ausgewählt. "
"Dies würde allen Benutzern Zugang ohne Authentifizierung gestatten und ist "
-"nicht erlaubt. Bitte wählen Sie mindestens ein PAM-Profil aus der "
-"verfügbaren Liste aus."
+"nicht erlaubt. Bitte wählen Sie mindestens ein PAM-Profil aus der Liste der "
+"verfügbaren aus."
#. Type: error
#. Description
#: ../libpam-modules.templates:1001
msgid "xscreensaver and xlockmore must be restarted before upgrading"
-msgstr "Xscreensaver und xlockmore müssen vor dem Upgrade neu gestartet werden"
+msgstr "Xscreensaver und Xlockmore müssen vor dem Upgrade neu gestartet werden"
#. Type: error
#. Description
@@ -226,10 +224,59 @@ msgid ""
"stopped before continuing this upgrade, to avoid locking your users out of "
"their current sessions."
msgstr ""
-"Eine oder mehrere laufende Instanzen von xscreensaver oder xlockmore sind "
+"Eine oder mehrere laufende Instanzen von Xscreensaver oder Xlockmore sind "
"auf diesem System entdeckt worden. Aufgrund inkompatibler Änderungen in "
"Bibliotheken wird das Upgrade des libpam-modules-Paketes Sie außerstande "
"setzen, sich gegenüber diesen Programmen zu authentifizieren. Sie sollten "
"dafür sorgen, dass diese Programme neu gestartet oder beendet werden, bevor "
"Sie dieses Upgrade fortsetzen, damit Ihre Benutzer nicht aus ihren laufenden "
"Sitzungen ausgesperrt werden."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "PAM-Profile mit veralteten Modulen deaktiviert"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"Ihr System hatte PAM-Profile mit den PAM-Modulen ${modules} aktiviert. Diese "
+"Module sind aus PAM entfernt worden. Diese PAM-Profile aktivert zu lassen "
+"würde Benutzer daran hindern, auf Ihr System zuzugreifen. Infolgedessen sind "
+"diese Profile deaktiviert worden."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "Sie verwenden pam_tally oder pam_tally2 in Ihrer Konfiguration"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Die Module pam_tally und pam_tally2 sind aus PAM entfernt worden. Sie "
+"verwenden eines dieser Module in Ihrer PAM-Konfiguration in /etc/pam.d. Sie "
+"müssen die Verwendung dieser Module entfernen, bevor das Upgrade von PAM "
+"durchgeführt werden kann; die Einbindung dieser Module in Ihrer PAM-"
+"Konfiguration nach dem Upgrade wird Benutzer davon abhalten, sich an dem "
+"System anzumelden."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "Betrachten Sie das Modul pam_faillock als Ersatz for pam_tally."
diff --git a/debian/po/es.po b/debian/po/es.po
index 4afcb985..41f8641b 100644
--- a/debian/po/es.po
+++ b/debian/po/es.po
@@ -35,7 +35,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam 0.79-4\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2012-01-02 01:41+0100\n"
"Last-Translator: Javier Fernandez-Sanguino <jfs@debian.org>\n"
"Language-Team: Debian Spanish <debian-l10n-spanish@lists.debian.org>\n"
@@ -58,11 +58,16 @@ msgstr "Servicios a reiniciar para la actualización de la biblioteca de PAM:"
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"Es necesario reiniciar la mayoría de los servicios que utilizan PAM para que "
"usen los módulos de esta versión de libpam. Por favor, revise la lista "
@@ -268,3 +273,42 @@ msgstr ""
"librerías. Debería procurar que estos programas se reinicien o se paren "
"antes de continuar con la actualización. Así evitará que los usuarios queden "
"bloqueados y no puedan reanudar sus sesiones actuales."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/eu.po b/debian/po/eu.po
index 8573dd57..ca5e40ce 100644
--- a/debian/po/eu.po
+++ b/debian/po/eu.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam_1.0.1-5_eu\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2009-01-02 12:30+0100\n"
"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
"Language-Team: debian-eu <debian-l10n-eu@lists.debian.org>\n"
@@ -30,11 +30,16 @@ msgstr ""
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"PAM erabiltzen duten zerbitzu gehienak berrabiarazi egin behar dira libpam "
"bertsio honetako moduluak erabiltzeko. Mesedez gainbegiratu berrabiaraziko "
@@ -234,3 +239,42 @@ msgstr ""
"edop gelditu egin beharko zenituzke bertsio-berritzearekin jarraitu "
"aurretik, sistemako erabiltzaileak beraien uneko saioan blokeatzea "
"saihesteko."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/fi.po b/debian/po/fi.po
index af797d73..207393c9 100644
--- a/debian/po/fi.po
+++ b/debian/po/fi.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam 0.99.7.1-4\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2010-10-18 22:46+0300\n"
"Last-Translator: Esko Arajärvi <edu@iki.fi>\n"
"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
@@ -25,11 +25,16 @@ msgstr "Palvelut, jotka käynnistetään uudelleen PAM-kirjastoa päivitettäess
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"Useimmat PAMia käyttävät palvelut pitää käynnistää uudelleen libpamin uuden "
"version käyttöön ottamiseksi. Tarkista seuraava välilyönnein eroteltu lista "
@@ -229,3 +234,42 @@ msgstr ""
"yhteensopivuussyistä enää tunnistautua. Nämä ohjelmat tulisi pysäyttää tai "
"käynnistää uudelleen ennen päivityksen jatkamista, jotta käyttäjät eivät "
"lukitse itseään ulos nykyisistä istunnoistaan."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/fr.po b/debian/po/fr.po
index dc9a92a7..43ea1867 100644
--- a/debian/po/fr.po
+++ b/debian/po/fr.po
@@ -3,22 +3,25 @@
# Copyright (C) 2009, 2001 Jean-Baka Domelevo Entfellner <domelevo@gmail.com>
# This file is distributed under the same license as the pam package.
# Translators:
-# Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>, 2007
-# Jean-Baka Domelevo Entfellner <domelevo@gmail.com>, 2009, 2011
#
+# Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>, 2007.
+# Jean-Baka Domelevo Entfellner <domelevo@gmail.com>, 2009, 2011.
+# Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: pam 1.1.3-6\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2011-11-11 20:19+0100\n"
-"Last-Translator: Jean-Baka Domelevo Entfellner <domelevo@gmail.com>\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
+"PO-Revision-Date: 2021-03-03 09:58+0100\n"
+"Last-Translator: Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Country: FRANCE\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 2.0\n"
#. Type: string
#. Description
@@ -33,13 +36,12 @@ msgstr ""
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"La plupart des services utilisant PAM doivent être redémarrés pour utiliser "
"les modules compilés pour cette nouvelle version de libpam. Veuillez "
-"vérifier la liste suivante de scripts de démarrage à relancer maintenant, et "
-"la corriger si nécessaire."
+"vérifier la liste suivante de services, séparés par des espaces, à relancer "
+"maintenant, et la corriger si nécessaire."
#. Type: error
#. Description
@@ -92,7 +94,8 @@ msgstr ""
#. Description
#: ../libpam0g.templates:4001
msgid "Restart services during package upgrades without asking?"
-msgstr "Redémarrer les services automatiquement lors des mises à jour ?"
+msgstr ""
+"Faut-il redémarrer les services automatiquement lors des mises à niveau ?"
#. Type: boolean
#. Description
@@ -106,14 +109,14 @@ msgid ""
"necessary restarts will be done for you automatically so you can avoid being "
"asked questions on each library upgrade."
msgstr ""
-"Certains services installés sur le système demandent à être redémarrés "
-"lors de la mise à jour de certaines bibliothèques (par exemple libpam, libc "
-"ou encore libssl). Puisque de tels redémarrages peuvent causer des "
+"Certains services installés sur le système demandent à être redémarrés lors "
+"de la mise à niveau de certaines bibliothèques (par exemple libpam, libc ou "
+"encore libssl). Puisque de tels redémarrages peuvent causer des "
"interruptions de service, une confirmation est habituellement demandée lors "
-"de chaque mise à jour, en présentant la liste des services à redémarrer. "
+"de chaque mise à niveau, en présentant la liste des services à redémarrer. "
"Vous pouvez sélectionner cette option pour éviter ces demandes interactives "
"de confirmation. Tous les redémarrages nécessaires seront alors effectués "
-"automatiquement lors de chaque mise à jour de bibliothèque."
+"automatiquement lors de chaque mise à niveau de bibliothèque."
#. Type: title
#. Description
@@ -149,9 +152,10 @@ msgid ""
"adjust the behavior of all PAM-using applications on the system. Please "
"indicate which of these behaviors you wish to enable."
msgstr ""
-"Certains paquets de modules PAM fournissent des profils qui peuvent "
-"être utilisés pour ajuster automatiquement le comportement de toutes les "
-"applications utilisant PAM qui sont présentes sur le système."
+"Certains paquets de modules PAM fournissent des profils qui peuvent être "
+"utilisés pour ajuster automatiquement le comportement de toutes les "
+"applications utilisant PAM qui sont présentes sur le système. Veuillez "
+"indiquer lequel de ces comportements vous voulez autoriser."
#. Type: error
#. Description
@@ -177,7 +181,7 @@ msgstr "Veuillez choisir un autre jeu de modules à activer."
#. Description
#: ../libpam-runtime.templates:4001
msgid "Override local changes to /etc/pam.d/common-*?"
-msgstr "Écraser les modifications locales sur /etc/pam.d/common-* ?"
+msgstr "Faut-il écraser les modifications locales sur /etc/pam.d/common-* ?"
#. Type: boolean
#. Description
@@ -189,11 +193,11 @@ msgid ""
"decline this option, you will need to manage your system's authentication "
"configuration by hand."
msgstr ""
-"Au moins un des fichiers /etc/pam.d/common-{auth,account,password,session} "
-"a été modifié localement. Veuillez indiquer s'il faut abandonner ces "
+"Au moins un des fichiers /etc/pam.d/common-{auth,account,password,session} a "
+"été modifié localement. Veuillez indiquer s'il faut abandonner ces "
"changements locaux et revenir à la configuration standard du système. Dans "
-"le cas contraire, vous devrez configurer vous-même le système "
-"d'authentification."
+"le cas contraire, vous devrez configurer vous-même l'authentification dans "
+"le système."
#. Type: error
#. Description
@@ -232,9 +236,59 @@ msgid ""
"stopped before continuing this upgrade, to avoid locking your users out of "
"their current sessions."
msgstr ""
-"Une ou plusieurs instances de xscreensaver et/ou de xlockmore ont été "
-"détectées sur le système. À cause de la modification de certaines "
-"bibliothèques, la mise à niveau du paquet libpam-modules entrainera "
-"l'impossibilité de s'authentifier. Avant de poursuivre la mise à niveau, ces "
-"programmes doivent être redémarrés ou arrêtés pour éviter que des "
-"utilisateurs ne puissent plus accéder à leur session."
+"Une ou plusieurs instances de xscreensaver ou de xlockmore ont été détectées "
+"sur le système. À cause de la modification de certaines bibliothèques, la "
+"mise à niveau du paquet libpam-modules entraînera l'impossibilité de "
+"s'authentifier. Avant de poursuivre la mise à niveau, vous devrez planifier "
+"le redémarrage ou l'arrêt de ces programmes pour éviter que des utilisateurs "
+"ne puissent plus accéder à leur session."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Les profils PAM avec des modules obsolètes sont désactivés."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"Le système comportait des profils PAM activés avec les modules PAM "
+"${modules}. Ces modules ont été retirés de PAM. Laisser ces profils PAM "
+"activés pourrait empêcher l'accès d'utilisateurs au système. En conséquence, "
+"ces profils ont été désactivés."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "Vous utilisez pam_tally ou pam_tally2 dans votre configuration."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Les modules pam_tally et pam_tally2 ont été retirés de PAM. Vous utilisez un "
+"de ces modules dans le fichier de configuration de PAM dans /etc/pam.d. Vous "
+"devez supprimer l'usage de ces modules avant que PAM puissent être mis à "
+"niveau. L'inclusion de ces modules dans la configuration de PAM après la "
+"mise à niveau empêchera certains utilisateurs de se connecter au système."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
+"Vous devriez envisager d'utiliser le module pam_faillock comme alternative à "
+"pam_tally."
diff --git a/debian/po/gl.po b/debian/po/gl.po
index c397ce2b..daa7eed7 100644
--- a/debian/po/gl.po
+++ b/debian/po/gl.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam_1.1.1-3_gl\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2011-03-29 13:01-0700\n"
"Last-Translator: Jorge Barreiro <yortx.barry@gmail.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
@@ -29,11 +29,16 @@ msgstr "Servizos a reiniciar para a actualización da biblioteca PAM:"
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"A maioría dos servizos que empregan PAM deben reiniciarse para empregar os "
"módulos compilados para esta versión de libpam. Revise a seguinte lista de "
@@ -223,3 +228,42 @@ msgstr ""
"quen de autenticarse nestes programas. Deber reiniciar ou deter estes "
"programas antes de continuar coa actualización, para evitar deixar trancados "
"os usuarios fora das súas sesións de traballo actuais."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/it.po b/debian/po/it.po
index f13a59a1..e3621c5f 100644
--- a/debian/po/it.po
+++ b/debian/po/it.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam 0.99.7.1-5\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2010-10-23 21:21+0200\n"
"Last-Translator: Nicole B. <damn3dg1rl@gmail.com>\n"
"Language-Team: Italiano <tp@lists.linux.it>\n"
@@ -28,11 +28,16 @@ msgstr "Servizi da riavviare per l'aggiornamento della libreria PAM:"
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"La maggior parte dei servizi che usano PAM hanno bisogno di essere riavviati "
"per utilizzare i moduli compilati per questa nuova versione di libpam. "
@@ -227,3 +232,42 @@ msgstr ""
"l'arresto di questi programmi prima di continuare con l'aggiornamento, al "
"fine di evitare che gli utenti siano bloccati al di fuori delle proprie "
"sessioni."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/ja.po b/debian/po/ja.po
index de3439b9..6c3b1b41 100644
--- a/debian/po/ja.po
+++ b/debian/po/ja.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam 1.3.6-1\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2012-01-22 10:47+0900\n"
"Last-Translator: Kenshi Muto <kmuto@debian.org>\n"
"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
@@ -25,11 +25,16 @@ msgstr "PAM ãƒ©ã‚¤ãƒ–ãƒ©ãƒªã®æ›´æ–°ã®ãŸã‚ã«å†èµ·å‹•ã™ã‚‹ã‚µãƒ¼ãƒ“ス:"
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"PAM を利用ã™ã‚‹ã»ã¨ã‚“ã©ã®ã‚µãƒ¼ãƒ“スã¯ã€ã“ã® libpam ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ãƒ“ルドã•"
"れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使ã†ãŸã‚ã«å†èµ·å‹•ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚以下ã®ã€ã‚¹ãƒšãƒ¼ã‚¹ã§åŒºåˆ‡ã‚‰ã‚ŒãŸ"
@@ -222,3 +227,42 @@ msgstr ""
"プログラムã§ã®èªè¨¼ãŒã§ããªããªã‚‹ã¨ã„ã†äº‹æ…‹ã«ã‚ãªãŸã‚’追ã„やりã¾ã™ã€‚ユーザãŒç¾"
"在ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®å¤–ã«ç· ã‚出ã•れるã®ã‚’é¿ã‘ã‚‹ãŸã‚ã€ã“ã®ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ›´æ–°ã‚’継続ã™"
"ã‚‹å‰ã«ã€ã“れらã®ãƒ—ログラムをå†èµ·å‹•ã™ã‚‹ã‹åœæ­¢ã™ã‚‹ã‚ˆã†ã«æ‰‹é…ã™ã¹ãã§ã™ã€‚"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/nl.po b/debian/po/nl.po
index fd96e244..60e09423 100644
--- a/debian/po/nl.po
+++ b/debian/po/nl.po
@@ -4,19 +4,22 @@
# Bart Cornelis <cobaco@skolelinux.no>, 2007.
# Eric Spreen <erispre@gmail.com>, 2010.
# Jeroen Schot <schot@a-eskwadraat.nl>, 2011.
+# Frans Spiesschaert <Frans.Spiesschaert@yucom.be>, 2021.
#
msgid ""
msgstr ""
-"Project-Id-Version: pam 1.1.3-6\n"
+"Project-Id-Version: pam 1.4.0-6\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2011-11-25 16:33+0100\n"
-"Last-Translator: Jeroen Schot <schot@a-eskwadraat.nl>\n"
-"Language-Team: Debian l10n Dutch <debian-l10n-dutch@lists.debian.org>\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
+"PO-Revision-Date: 2021-02-26 22:27+0100\n"
+"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
+"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.2.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Type: string
#. Description
@@ -30,13 +33,12 @@ msgstr "Bij de opwaardering van de PAM-bibliotheek te herstarten diensten:"
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"De meeste PAM-gebruikende diensten moeten herstart worden voor ze gebruik "
"kunnen maken van modules die gebouwd zijn voor de nieuwe libpam-versie. De "
-"volgende, met spaties gescheiden, lijst van init.d scripts wordt herstart. "
-"Gelieve deze lijst te controleren en indien nodig aan te passen."
+"volgende, met spaties gescheiden, lijst van diensten wordt herstart. Gelieve "
+"deze lijst te controleren en indien nodig aan te passen."
#. Type: error
#. Description
@@ -172,7 +174,8 @@ msgstr "Selecteer een andere set modules om in te schakelen."
#. Description
#: ../libpam-runtime.templates:4001
msgid "Override local changes to /etc/pam.d/common-*?"
-msgstr "Wilt u de locale veranderingen aan /etc/pam.d/common-* overschrijven?"
+msgstr ""
+"Wilt u de lokale veranderingen aan /etc/pam.d/common-* laten overschrijven?"
#. Type: boolean
#. Description
@@ -187,8 +190,8 @@ msgstr ""
"Een of meer van de bestanden /etc/pam.d/common-{auth,account,password,"
"session} zijn lokaal aangepast. Geef aan of deze lokale veranderingen moeten "
"worden overschreven, door de door het systeem geleverde configuratie te "
-"gebruiken. Als u dit weigert, zult u de configuratie van de authenticatie "
-"van uw systeem met de hand moeten onderhouden."
+"gebruiken. Als u dit afwijst, zult u de configuratie van de authenticatie op "
+"uw systeem met de hand moeten onderhouden."
#. Type: error
#. Description
@@ -233,3 +236,51 @@ msgstr ""
"ervoor te zorgen dat deze programma's worden herstart of gestopt voordat u "
"verder gaat met deze upgrade, om te voorkomen dat gebruikers worden "
"uitgesloten van hun huidige sessies."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "PAM-profielen met achterhaalde modules uitgeschakeld"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"Op uw systeem waren PAM-profielen ingeschakeld met de PAM-modules "
+"${modules}. Deze modules zijn verwijderd uit PAM. Deze PAM-profielen "
+"ingeschakeld laten zou gebruikers de toegang tot uw systeem beletten. Daarom "
+"zijn deze profielen uitgeschakeld."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "u gebruikt in uw configuratie pam_tally of pam_tally2"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"De modules pam_tally en pam_tally2 zijn verwijderd uit PAM. U gebruikt één "
+"van deze modules in uw PAM-configuratie in /etc/pam.d. U moet het gebruik "
+"van deze modules verwijderen voordat PAM opgewaardeerd kan worden; het "
+"opnemen van deze modules in uw PAM-configuratie na de opwaardering zal "
+"ervoor zorgen dat gebruikers zich niet meer kunnen aanmelden op het systeem."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "Beschouw de module pam_faillock als een vervanging voor pam_tally."
diff --git a/debian/po/pl.po b/debian/po/pl.po
index 00cbdae5..9699e716 100644
--- a/debian/po/pl.po
+++ b/debian/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2012-01-26 12:07+0100\n"
"Last-Translator: Michał Kułach <michal.kulach@gmail.com>\n"
"Language-Team: Polish <debian-l10n-polish@lists.debian.org>\n"
@@ -28,11 +28,16 @@ msgstr ""
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"Większość usług używających PAM musi być zrestartowana, aby używać modułów "
"zbudowanych do tej nowej wersji libpam. Proszę przeglądnąć poniższą listę "
@@ -229,3 +234,42 @@ msgstr ""
"libpam-modules uniemożliwiła by autoryzację użytkownika do tych programów. "
"Należy zrestartować lub zatrzymać te programy przed aktualizacją, aby "
"zapobiec utknięciu użytkowników poza ich aktualnymi sesjami."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/pt.po b/debian/po/pt.po
index 52211a5a..09ee460e 100644
--- a/debian/po/pt.po
+++ b/debian/po/pt.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the pam package.
#
# Américo Monteiro <a_monteiro@netcabo.pt>, 2007, 2009.
-# Pedro Ribeiro <p.m42.ribeiro@gmail.com>, 2011.
+# Pedro Ribeiro <p.m42.ribeiro@gmail.com>, 2011, 2021.
#
msgid ""
msgstr ""
-"Project-Id-Version: pam 1.1.3-6\n"
+"Project-Id-Version: pam 1.4.0-6\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2011-12-17 18:46+0000\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
+"PO-Revision-Date: 2021-02-26 20:46+0000\n"
"Last-Translator: Pedro Ribeiro <p.m42.ribeiro@gmail.com>\n"
"Language-Team: Portuguese <traduz@debianpt.org>\n"
"Language: pt\n"
@@ -31,13 +31,12 @@ msgstr "Serviços a reiniciar para a actualização da biblioteca PAM:"
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"A maioria dos serviços que usam PAM necessitam ser reiniciados para usarem "
"os módulos construídos para esta nova versão do libpam. Por favor, reveja a "
-"seguinte lista de scripts init.d de serviços, separados por espaços, para "
-"serem reiniciados agora e corrija-a se for necessário."
+"seguinte lista de serviços, separados por espaços, a serem reiniciados agora "
+"e corrija-a se for necessário."
#. Type: error
#. Description
@@ -233,3 +232,51 @@ msgstr ""
"nestes programas. Você deve fazer com que estes programas sejam reiniciados "
"ou parados antes de continuar com esta actualização, para evitar trancar os "
"seus utilizadores fora das suas sessões actuais."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Perfis PAM com Módulos Deprecados Desativados"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"O seu sistema tem perfis PAM activos com os módulos PAM ${modules}. Estes "
+"módulos foram removidos do PAM. Deixar estes perfis activos iria impedir os "
+"utilizadores de aceder ao seu sistema. Deste modo, estes perfis foram "
+"desactivados."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "está a usar pam_tally ou pam_tally2 na sua configuração"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Os módulos pam_tally e pam_tally2 foram removidos do PAM. Está a usar um "
+"destes módulos na sua configuração de PAM em /etc/pam.d. Tem que remover as "
+"referências a estes módulos antes de actualizar o PAM; incluir estes módulos "
+"na sua configuração após a actualização do PAM irá impedir os utilizadores de "
+"fazer login no seu sistema."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "Considere usar o módulo pam_faillock como substuituto do pam_tally."
diff --git a/debian/po/pt_BR.po b/debian/po/pt_BR.po
index d36ff2e5..f70a74e2 100644
--- a/debian/po/pt_BR.po
+++ b/debian/po/pt_BR.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the pam package.
# Eder L. Marques <eder@edermarques.net>, 2007-2009.
# Fernando Ike de Oliveira <fike@midstorm.org>, 2013.
-# Adriano Rafael Gomes <adrianorg@arg.eti.br>, 2009-2015.
+# Adriano Rafael Gomes <adrianorg@debian.org>, 2009-2021.
#
msgid ""
msgstr ""
"Project-Id-Version: pam\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2015-09-18 20:27-0300\n"
-"Last-Translator: Adriano Rafael Gomes <adrianorg@arg.eti.br>\n"
+"POT-Creation-Date: 2021-03-15 18:23-0400\n"
+"PO-Revision-Date: 2021-03-06 14:11-0300\n"
+"Last-Translator: Adriano Rafael Gomes <adrianorg@debian.org>\n"
"Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian."
"org>\n"
"Language: pt_BR\n"
@@ -31,13 +31,12 @@ msgstr "Serviços a serem reiniciados para atualização da biblioteca PAM:"
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"A maioria dos serviços que utilizam PAM precisam ser reiniciados para usar "
"os módulos construídos para esta nova versão da libpam. Por favor, revise a "
-"seguinte lista separada por espaços de scripts init.d de serviços que serão "
-"reiniciados agora, e a corrija, se necessário."
+"seguinte lista de serviços que serão reiniciados agora, separados por "
+"espaços, e a corrija, se necessário."
#. Type: error
#. Description
@@ -234,3 +233,51 @@ msgstr ""
"se autenticar nestes programas. Você deve providenciar que estes programas "
"sejam reiniciados ou parados antes de continuar com esta atualização, para "
"evitar bloquear seus usuários fora de suas sessões atuais."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Perfis PAM com módulos obsoletos desabilitados"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"O seu sistema tinha perfis PAM habilitados com os módulos PAM ${modules}. "
+"Esses módulos foram removidos do PAM. Deixar esses perfis PAM habilitados "
+"impediria que os usuários acessassem o seu sistema. Como resultado, esses "
+"perfis foram desabilitados."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "você está usando pam_tally ou pam_tally2 na sua configuração"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Os módulos pam_tally e pam_tally2 foram removidos do PAM. Você está usando "
+"um desses módulos na sua configuração do PAM em /etc/pam.d. Você deve "
+"remover o uso desses módulos antes que o PAM possa ser atualizado. Incluir "
+"esses módulos na sua configuração do PAM depois da atualização impedirá que "
+"os usuários consigam logar no sistema."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "Considere o módulo pam_faillock como um substituto para o pam_tally."
diff --git a/debian/po/ro.po b/debian/po/ro.po
index edbede44..2752ae40 100644
--- a/debian/po/ro.po
+++ b/debian/po/ro.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: pam 1.0.1-7\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2011-03-29 13:01-0700\n"
-"Last-Translator: Eddy Petrișor <eddy.petrisor@gmail.com>\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
+"PO-Revision-Date: 2021-04-05 16:44+0300\n"
+"Last-Translator: Andrei POPESCU <andreimpopescu@gmail.com>\n"
"Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
@@ -33,13 +33,11 @@ msgstr "Serviciile repornite la actualizarea bibliotecii PAM:"
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"Majoritatea serviciilor ce folosesc PAM trebuie repornite pentru a folosi "
-"modulele pentru noua versiune de libpam. Următoarea listă folosește ca "
-"separator spațiul și conține script-uri init.d care urmează să fie repornite "
-"acum; verificați-o și corectați-o, dacă este necesar."
+"modulele pentru noua versiune de libpam. Verificați și ajustați după caz "
+"lista următoare (separată prin spațiu) cu servicii care trebuie repornite."
#. Type: error
#. Description
@@ -92,6 +90,7 @@ msgstr ""
#: ../libpam0g.templates:4001
msgid "Restart services during package upgrades without asking?"
msgstr ""
+"Să se repornească serviciile fără confirmare în timpul unei actualizări?"
#. Type: boolean
#. Description
@@ -105,12 +104,19 @@ msgid ""
"necessary restarts will be done for you automatically so you can avoid being "
"asked questions on each library upgrade."
msgstr ""
+"Pe acest sistem sunt instalate servicii care trebuie repornite atunci când "
+"anumite biblioteci, cum ar fi libpam, libc și libssl sunt actualizate. "
+"Deoarece aceste reporniri pot cauza întreruperi în furnizarea serviciului în "
+"mod normal se solicită confirmarea listei de servicii pe care doriți să le "
+"reporniți la fiecare actualizare. Puteți alege această opțiune pentru a "
+"evita confirmarea. ÃŽn schimb toate repornirile necesare vor fi executate "
+"automat pentru a evita întrebările la fiecare actualizare de biblioteci."
#. Type: title
#. Description
#: ../libpam-runtime.templates:1001
msgid "PAM configuration"
-msgstr ""
+msgstr "Configurarea PAM"
#. Type: multiselect
#. Description
@@ -188,10 +194,8 @@ msgstr ""
#. Type: error
#. Description
#: ../libpam-runtime.templates:5001
-#, fuzzy
-#| msgid "Incompatible PAM profiles selected."
msgid "No PAM profiles have been selected."
-msgstr "Selecție de profile PAM incompatibile."
+msgstr "Nu au fost selectate profile PAM."
#. Type: error
#. Description
@@ -201,6 +205,9 @@ msgid ""
"all users access without authenticating, and is not allowed. Please select "
"at least one PAM profile from the available list."
msgstr ""
+"Nu a fost ales nici un profil PAM pentru a fi folosit pe acest sistem. Acest "
+"lucru ar permite tuturor utilizatorilor accesul fără autentificare, ceea ce "
+"nu este permis. Selectați cel puțin un profil PAM din lista disponibilă."
#. Type: error
#. Description
@@ -225,3 +232,51 @@ msgstr ""
"în aceste programe. Va trebui să aranjați lucrurile în așa fel încât aceste "
"programe să fie repornite sau oprite înainte de a continua înnoirea pentru a "
"evita blocarea utilizatorilor în afara sesiunilor lor curente."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Profilele PAM cu module învechite au fost dezactivate"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"Acest sistem are profile PAM activate cu modulele PAM ${modules}. Aceste "
+"module au fost scoase din PAM. Păstrarea acestor profile PAM activate ar "
+"împiedica accesul utilizatorilor la sistem. În consecință aceste profile au "
+"fost dezactivate."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "folosiți pam_tally sau pam_tally2"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Modulele pam_tally și pam_tally2 au fost scoase din PAM. Acum utilizați unul "
+"din aceste module în configurația PAM din /etc/pam.d. Înainde de a putea "
+"actualiza PAM utilizarea acestor module trebuie oprită. Includerea acestor "
+"module după actualizare în configurația PAM va împiedica accesul "
+"utilizatorilor la sistem."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "Modulul pam_faillock are putea fi un înlocuitor pentru pam_tally."
diff --git a/debian/po/ru.po b/debian/po/ru.po
index b9b755e4..cb3f2ec6 100644
--- a/debian/po/ru.po
+++ b/debian/po/ru.po
@@ -5,21 +5,23 @@
# Yuri Kozlov <kozlov.y@gmail.com>, 2007.
# Max Kosmach <max@tcen.ru>, 2009.
# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2011.
+# ÐлекÑей Шилин <shilin.aleksej@gmail.com>, 2021.
+#
msgid ""
msgstr ""
-"Project-Id-Version: pam 1.1.3-6\n"
+"Project-Id-Version: pam 1.4.0-6\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2011-12-04 09:00+0400\n"
-"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
-"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
+"POT-Creation-Date: 2021-03-15 18:23-0400\n"
+"PO-Revision-Date: 2021-03-07 19:17+0300\n"
+"Last-Translator: ÐлекÑей Шилин <shilin.aleksej@gmail.com>\n"
+"Language-Team: руÑÑкий <debian-l10n-russian@lists.debian.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\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: Gtranslator 3.30.1\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"
#. Type: string
#. Description
@@ -33,13 +35,12 @@ msgstr "Службы, которые будут перезапущены поÑÐ
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
-"Чтобы задейÑтвовать новые верÑии модулей из libpam нужно перезапуÑтить "
-"большинÑтво Ñлужб, иÑпользующих PAM. Внимательно проÑмотрите и, при "
-"необходимоÑти, отредактируйте ÑпиÑок Ñценариев из init.d Ð´Ð»Ñ Ñлужб, которые "
-"будут перезапущены. Элементы ÑпиÑка разделÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð¾Ð¼."
+"Чтобы задейÑтвовать новые верÑии модулей из libpam, нужно перезапуÑтить "
+"большинÑтво Ñлужб, иÑпользующих PAM. Внимательно проÑмотрите и при "
+"необходимоÑти отредактируйте Ñледующий ÑпиÑок Ñлужб, которые будут "
+"перезапущены. Элементы ÑпиÑка разделÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð¾Ð¼."
#. Type: error
#. Description
@@ -58,7 +59,7 @@ msgid ""
msgstr ""
"Ð”Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¾Ð²Ð¾Ð¹ верÑией libpam программам Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° в ÑиÑтему wdm и xdm "
"требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑк, но Ñто прервёт вÑе запущенные X-ÑеанÑÑ‹. ПоÑтому вам "
-"нужно перезапуÑтить Ñти Ñлужбы вручную Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы можно было Ñнова "
+"нужно перезапуÑтить Ñти Ñлужбы вручную, Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы можно было Ñнова "
"входить в ÑиÑтему через X."
#. Type: error
@@ -81,13 +82,13 @@ msgstr ""
msgid ""
"You will need to start these manually by running '/etc/init.d/<service> "
"start'."
-msgstr "Вам нужно запуÑтить их вручную, выполнив '/etc/init.d/<Ñлужба> start'."
+msgstr "Вам нужно запуÑтить их вручную, выполнив «/etc/init.d/<Ñлужба> start»."
#. Type: boolean
#. Description
#: ../libpam0g.templates:4001
msgid "Restart services during package upgrades without asking?"
-msgstr "ПерезапуÑкать Ñлужбы при обновлении пакета не Ð·Ð°Ð´Ð°Ð²Ð°Ñ Ð²Ð¾Ð¿Ñ€Ð¾Ñ?"
+msgstr "ПерезапуÑкать Ñлужбы при обновлении пакета, не Ð·Ð°Ð´Ð°Ð²Ð°Ñ Ð²Ð¾Ð¿Ñ€Ð¾Ñов?"
#. Type: boolean
#. Description
@@ -102,11 +103,11 @@ msgid ""
"asked questions on each library upgrade."
msgstr ""
"Ð’ ÑиÑтеме уÑтановлены Ñлужбы, которые требуют перезапуÑка поÑле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ "
-"определённых библиотек (например, libpam, libc и libssl). Так как Ñто может "
-"вызвать перерыв в работе Ñлужбы, обычно, при каждом обновлении выдаётÑÑ "
-"ÑпиÑок Ñлужб, которые нужно перезапуÑтить. Чтобы Ñтот Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð½Ðµ задавалÑÑ, "
-"вы можете ответить утвердительно; в Ñтом Ñлучае вÑе необходимые Ñлужбы будут "
-"перезапущены автоматичеÑки."
+"определённых библиотек (например, libpam, libc и libssl). ПоÑкольку Ñто "
+"может вызвать перерыв в работе Ñлужб, то обычно при каждом обновлении вам "
+"будет предложено указать ÑпиÑок Ñлужб, которые вы хотите перезапуÑтить. "
+"Чтобы Ñтот Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð½Ðµ задавалÑÑ, вы можете ответить утвердительно; в Ñтом "
+"Ñлучае вÑе необходимые Ñлужбы будут перезапущены автоматичеÑки."
#. Type: title
#. Description
@@ -129,10 +130,10 @@ msgid ""
"allowing configuration of additional actions to take when starting user "
"sessions."
msgstr ""
-"Через подключаемые модули аутентификации (PAM) указываетÑÑ ÐºÐ°Ðº нужно "
+"Через подключаемые модули аутентификации (PAM) указываетÑÑ, как нужно "
"проводить аутентификацию, авторизацию и Ñмену Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð² ÑиÑтеме, а также "
-"можно назначать запуÑк дополнительных дейÑтвий при Ñтарте пользовательÑкого "
-"ÑеанÑа."
+"можно назначать запуÑк дополнительных дейÑтвий при Ñтарте пользовательÑких "
+"ÑеанÑов."
#. Type: multiselect
#. Description
@@ -182,10 +183,10 @@ msgid ""
"decline this option, you will need to manage your system's authentication "
"configuration by hand."
msgstr ""
-"Один или более файлов в /etc/pam.d/common-{auth,account,password,session} "
-"был изменён вручную. Заметьте, что данные локальные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть "
-"переопределены через ÑиÑтемные наÑтройки. ЕÑли вы ответите отрицательно, то "
-"вам придётÑÑ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñть наÑтройками аутентификации ÑиÑтемы вручную."
+"Один или более из файлов /etc/pam.d/common-{auth,account,password,session} "
+"был изменён вручную. Укажите, Ñледует ли заменить Ñти локальные правки "
+"конфигурацией, предоÑтавленной ÑиÑтемой. ЕÑли вы ответите отрицательно, то "
+"вам придётÑÑ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñть наÑтройками аутентификации вашей ÑиÑтемы вручную."
#. Type: error
#. Description
@@ -201,9 +202,10 @@ msgid ""
"all users access without authenticating, and is not allowed. Please select "
"at least one PAM profile from the available list."
msgstr ""
-"Ð’ ÑиÑтеме Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ не выбрано ни одного Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ PAM. Это предоÑтавит "
-"полный доÑтуп вÑем пользователÑм без аутентификации, что нежелательно. "
-"Выберите, по крайней мере, один профиль PAM из доÑтупных."
+"Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑиÑтеме не выбрано ни одного Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ PAM. Это "
+"предоÑтавило бы полный доÑтуп вÑем пользователÑм без аутентификации, что "
+"запрещено. ПожалуйÑта, выберите по крайней мере один профиль PAM из "
+"доÑтупных."
#. Type: error
#. Description
@@ -223,8 +225,54 @@ msgid ""
"their current sessions."
msgstr ""
"Обнаружено, что в ÑиÑтеме запущен один или неÑколько процеÑÑов xscreensaver "
-"или xlockmore. Из-за изменений в библиотеке, обновление пакета libpam-"
-"modules приведёт к невозможноÑти Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ из Ñтих программ. "
-"Перед тем как продолжить обновление вам нужно перезапуÑтить или оÑтановить "
-"работу Ñтих программ, чтобы избежать блокировки пользователей в их активных "
-"ÑеанÑах."
+"или xlockmore. Из-за изменений в библиотеке обновление пакета libpam-modules "
+"приведёт к невозможноÑти Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ в Ñтих программах. Перед "
+"тем как продолжить обновление, вам нужно перезапуÑтить или оÑтановить работу "
+"Ñтих программ, чтобы избежать блокировки пользователей в их активных ÑеанÑах."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Профили PAM Ñ ÑƒÑтаревшими модулÑми отключены"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"Ð’ вашей ÑиÑтеме были включены профили PAM Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñми ${modules}. Эти модули "
+"были удалены из PAM. ЕÑли оÑтавить данные профили включёнными, то "
+"пользователи не Ñмогут получить доÑтуп к ÑиÑтеме. По Ñтой причине данные "
+"профили были отключены."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "Ð’ вашей конфигурации иÑпользуетÑÑ pam_tally или pam_tally2"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Модули pam_tally и pam_tally2 были удалены из PAM, однако в ваших наÑтройках "
+"PAM в /etc/pam.d иÑпользуетÑÑ Ð¾Ð´Ð¸Ð½ из Ñтих модулей. Перед обновлением PAM "
+"необходимо удалить иÑпользование данных модулей; включение Ñтих модулей в "
+"конфигурацию PAM поÑле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ позволит пользователÑм войти в ÑиÑтему."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "РаÑÑмотрите модуль pam_faillock как замену pam_tally."
diff --git a/debian/po/sk.po b/debian/po/sk.po
index 662ac9ad..5a4e7ac7 100644
--- a/debian/po/sk.po
+++ b/debian/po/sk.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pam\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2012-01-19 22:37+0100\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
+"PO-Revision-Date: 2021-03-09 11:35+0100\n"
"Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.1\n"
#. Type: string
#. Description
@@ -27,13 +28,12 @@ msgstr "Pri aktualizácii knižnice PAM reštartovať nasledovné služby:"
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
-"VäÄÅ¡inu služieb využívajúcich PAM je potrebné reÅ¡tartovaÅ¥, aby zaÄali "
-"používať moduly zostavené pre túto novú verziu libpam. Prosím, skontrolujte "
-"nasledovný zoznam init.d skriptov (oddelené Äiarkami), ktoré sa majú teraz "
-"reštartovať a ak je to potrebné, opravte ho."
+"VäÄÅ¡inu služieb, ktoré používajú PAM, je nutné reÅ¡tartovaÅ¥, aby sa použili "
+"moduly vytvorené pre túto novú verziu libpamu. Skontrolujte prosím "
+"nasledujúci zoznam služieb oddelených medzerou, ktoré sa teraz reštartujú. V "
+"prípade potreby ho opravte."
#. Type: error
#. Description
@@ -114,7 +114,7 @@ msgstr "Konfigurácia PAM"
#. Description
#: ../libpam-runtime.templates:2001
msgid "PAM profiles to enable:"
-msgstr "Zapnúř nasledovné profily PAM:"
+msgstr "Zapnúť nasledovné profily PAM:"
#. Type: multiselect
#. Description
@@ -177,11 +177,10 @@ msgid ""
"decline this option, you will need to manage your system's authentication "
"configuration by hand."
msgstr ""
-"Jeden alebo viac zo súborov /etc/pam.d/common-{auth,account,password,"
-"session} bolo na lokálnom systéme zmenených. UveÄte prosím, Äi sa majú tieto "
+"Jeden alebo viacero zo súborov /etc/pam.d/common-{auth,account,password,"
+"session} bolo na lokálnom systéme zmenených. Zvoľte prosím, Äi sa majú tieto "
"lokálne zmeny prepísaÅ¥ Å¡tandardnými konfiguraÄnými voľbami. Ak túto možnosÅ¥ "
-"zamietnete, budete musieť spravovať nastavenia autentifikácie tohto systému "
-"ruÄne."
+"zamietnete, budete musieÅ¥ nastaviÅ¥ autentifikácie tohto systému ruÄne."
#. Type: error
#. Description
@@ -205,7 +204,7 @@ msgstr ""
#. Description
#: ../libpam-modules.templates:1001
msgid "xscreensaver and xlockmore must be restarted before upgrading"
-msgstr "Pred aktualizáciou je potrebné reštartovať xscreensaver a xlockmore"
+msgstr "je nutné reštartovať xscreensaver a xlockmore pred aktualizáciou"
#. Type: error
#. Description
@@ -220,8 +219,55 @@ msgid ""
msgstr ""
"Na tomto systéme bola zistená jedna alebo viacero bežiacich inštancií "
"programov xscreensaver alebo xlockmore. Z dôvodu nekomaptibilných zmien v "
-"knižniciach balíka libpam-modules by ste po aktualizácii neboli schopní "
-"overiť sa týmto programom. Mali by ste zariadiť, aby sa tieto programy "
+"knižniciach balíka libpam-modules nebudete schopní po aktualizácii overiť "
+"identitu týmto programom. Mali by ste zariadiť, aby sa tieto programy "
"reštartovali alebo zastavili predtým, než budete v tejto aktualizácii "
"pokraÄovaÅ¥, aby ste prediÅ¡li tomu, že používatelia sa nebudú môcÅ¥ prihlásiÅ¥ "
"zo svojich súÄasných relácií."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Profily PAM s vypnutými zastaranými modulmi"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"Váš systém mal povolené PAM profily s modulmi ${modules}. Tieto moduly boli "
+"odstránené z PAM. Ponechanie týchto PAM profilov by zabránilo používateľom v "
+"prístupe k vášmu systému. V dôsledku toho boli tieto profily vypnuté."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "používate pam_tally alebo pam_tally2 vo vašej konfigurácii"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"Moduly pam_tally a pam_tally2 boli z PAM odstránené. Používate jeden z "
+"týchto modulov v konfigurácii PAM v /etc/pam.d. Pred aktualizáciou PAM "
+"musíte odstrániť použitie týchto modulov. Zahrnutie týchto modulov do "
+"konfigurácie PAM by po aktualizácii znemožnilo používateľom prihlásiť sa do "
+"systému."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "Zvážte pam_faillock modul ako náhradu za pam_tally."
diff --git a/debian/po/sv.po b/debian/po/sv.po
index f56344ee..8c44bbaf 100644
--- a/debian/po/sv.po
+++ b/debian/po/sv.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam 0.99.7.1-5\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\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"
"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
@@ -28,11 +28,16 @@ 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
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 "
@@ -134,8 +139,7 @@ msgid ""
msgstr ""
"Pluggable Authentication Modules (PAM) hanterar hur autentisering, "
"identifiering och byte av lösenord ska utföras på systemet. Dessutom "
-"hanteras särskilda åtgärder som ska vidtas vid uppstart av "
-"användarsessioner."
+"hanteras särskilda åtgärder som ska vidtas vid uppstart av användarsessioner."
#. Type: multiselect
#. Description
@@ -235,6 +239,45 @@ msgstr ""
"före uppgraderingen, resultatet kan annars innebära att du inte kan komma åt "
"dina aktiva sessioner på systemet."
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. 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!"
diff --git a/debian/po/templates.pot b/debian/po/templates.pot
index 84a5fc37..d0541b83 100644
--- a/debian/po/templates.pot
+++ b/debian/po/templates.pot
@@ -1,14 +1,14 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# This file is distributed under the same license as the pam package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: pam\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-03-15 18:23-0400\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"
@@ -29,8 +29,7 @@ msgstr ""
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
#. Type: error
@@ -189,3 +188,42 @@ msgid ""
"stopped before continuing this upgrade, to avoid locking your users out of "
"their current sessions."
msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr ""
diff --git a/debian/po/tr.po b/debian/po/tr.po
index 960ce5e8..19b0c1ef 100644
--- a/debian/po/tr.po
+++ b/debian/po/tr.po
@@ -1,29 +1,27 @@
-# Debconf questions for the Linux-PAM package.
-# Copyright (C) 2007 Steve Langasek <vorlon@debian.org>
+# Turkish translation of pam.
# This file is distributed under the same license as the pam package.
-# Mert Dirik <mertdirik@gmail.com>, 2008.
+# Mert Dirik <mertdirik@gmail.com>, 2008, 2014.
#
msgid ""
msgstr ""
-"Project-Id-Version: pam 0.99.7.1-5\n"
+"Project-Id-Version: pam\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2014-08-01 14:42+0200\n"
-"Last-Translator: Mert Dirik <mertdirik@gmail.com>\n"
-"Language-Team: Debian L10n Turkish <debian-l10n-turkish@lists.debian.org>\n"
+"POT-Creation-Date: 2021-03-15 18:23-0400\n"
+"PO-Revision-Date: 2022-12-26 12:26+0300\n"
+"Last-Translator: Atila KOÇ <koc@artielektronik.com.tr>\n"
"Language: tr\n"
+"Language-Team: Debian L10n Turkish <debian-l10n-turkish@lists.debian.org>\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: Poedit 1.5.4\n"
+"X-Generator: Poedit 2.4.2\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. Type: string
#. Description
#: ../libpam0g.templates:1001
msgid "Services to restart for PAM library upgrade:"
-msgstr ""
-"PAM kitaplığının yükseltilmesi için yeniden başlatılacak olan hizmetler:"
+msgstr "PAM kitaplığının yükseltilmesi için yeniden başlatılacak hizmetler:"
#. Type: string
#. Description
@@ -31,13 +29,12 @@ msgstr ""
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"PAM kullanan çoğu hizmet, libpam'ın bu yeni sürümü için derlenmiş "
-"modüllerden yararlanabilmek için yeniden başlatılmak zorunda. Lütfen "
+"modüllerden yararlanabilmek için yeniden başlatılmak zorundadır. Lütfen "
"yeniden başlatılacak hizmetlere ilişkin init.d betiklerinin boşluklarla "
-"ayrılmış aşağıdaki listesini inceleyin ve gerekliyse listeyi düzeltin."
+"ayrılmış aşağıdaki listesini inceleyin ve gerekliyse düzeltin."
#. Type: error
#. Description
@@ -48,11 +45,6 @@ msgstr "Görüntü yöneticisinin elle yeniden başlatılması gerekli"
#. Type: error
#. Description
#: ../libpam0g.templates:2001
-#| msgid ""
-#| "The kdm, wdm, and xdm display managers require a restart for the new "
-#| "version of libpam, but there are X login sessions active on your system "
-#| "that would be terminated by this restart. You will therefore need to "
-#| "restart these services by hand before further X logins will be possible."
msgid ""
"The wdm and xdm display managers require a restart for the new version of "
"libpam, but there are X login sessions active on your system that would be "
@@ -60,10 +52,10 @@ msgid ""
"services by hand before further X logins will be possible."
msgstr ""
"wdm ve xdm görüntü yöneticileri, libpam'ın yeni sürümünden yararlanabilmek "
-"için yeniden başlatılmalı; fakat sisteminizde etkin X oturumları var. "
-"Görüntü yöneticisi yeniden başlatılırsa bu oturumlar da kapatılır. Bu "
-"yüzden ileride yeni X oturumları açabilmek için bu hizmetleri elle yeniden "
-"başlatmanız gerekecek. "
+"için yeniden başlatılmalıdır. Sisteminizde şu anda açık X oturumları var. "
+"Görüntü yöneticileri yeniden başlatılırsa bu oturumların kapanmasına neden "
+"olacaklar. Bu nedenle yeni X oturumları açılmadan önce için bu hizmetleri "
+"elle yeniden başlatmanız gerekiyor."
#. Type: error
#. Description
@@ -86,14 +78,15 @@ msgid ""
"You will need to start these manually by running '/etc/init.d/<service> "
"start'."
msgstr ""
-"Bu hizmetleri '/etc/init.d/<hizmet> start' komutunu kullanarak elinizle "
-"başlatmanız gerekecek."
+"Bu hizmetleri '/etc/init.d/<hizmet> start' komutunu kullanarak elle "
+"başlatmanız gerekiyor."
#. Type: boolean
#. Description
#: ../libpam0g.templates:4001
msgid "Restart services during package upgrades without asking?"
-msgstr "Paket yükseltme esnasında hizmetler sorulmadan yeniden başlatılsın mı?"
+msgstr ""
+"Hizmetler, paket yükseltme sırasında size sorulmadan yeniden başlatılsın mı?"
#. Type: boolean
#. Description
@@ -110,11 +103,11 @@ msgstr ""
"Sisteminizde libpam, libc ve libssl gibi bazı kitaplıklar yükseltildiğinde "
"yeniden başlatılması gereken bazı hizmetler kurulu. Yeniden başlatma "
"iÅŸlemleri sisteminizin sunduÄŸu hizmetlerde kesintilere neden olabileceÄŸinden "
-"dolayı her yükseltme işlemi esnasında yeniden başlatmak istediğiniz "
-"hizmetler size sorulacaktır. Eğer bu sorunun sorulmasını istemiyorsanız bu "
-"seçeneği kullanabilirsiniz. Bu seçenek seçildiği takdirde bir kitaplık "
-"yükseltmesi yapılırken gereken tüm yeniden başlatma işlemleri size "
-"sorulmaksızın otomatik olarak yapılacaktır."
+"dolayı her yükseltme işlemi sırasında yeniden başlatmak istediğiniz "
+"hizmetler size sorulacaktır. Sorulmasını istemiyorsanız bu seçeneği "
+"kullanabilirsiniz. Bu durumda bir kitaplık yükseltmesi yapılırken gereken "
+"tüm yeniden başlatma işlemleri size sorulmaksızın otomatik olarak "
+"yapılacaktır."
#. Type: title
#. Description
@@ -137,10 +130,10 @@ msgid ""
"allowing configuration of additional actions to take when starting user "
"sessions."
msgstr ""
-"Takılabilir Doğrulama Modülleri (PAM), sistemdeki kimlik doğrulama, izin "
-"verme ve parola deÄŸiÅŸtirme iÅŸlemlerinin ne ÅŸekilde idare edileceÄŸine karar "
-"veren ve ayrıca kullanıcı oturumları başlatılırken atılması gereken adımları "
-"yapılandırmaya yarayan bir sistemdir."
+"Pluggable Authentication Modules (PAM), sisteminizdeki kimlik doÄŸrulama, "
+"yetki izni verme ve parola değiştirme işlemlerinin ne şekilde yapılacağını "
+"belirler ve kullanıcı oturumları başlatılırken atılması gereken adımları "
+"yapılandırır."
#. Type: multiselect
#. Description
@@ -150,9 +143,9 @@ msgid ""
"adjust the behavior of all PAM-using applications on the system. Please "
"indicate which of these behaviors you wish to enable."
msgstr ""
-"Bazı PAM modül paketleri, sistemde mevcut olan ve PAM kullanan tüm "
+"Bazı PAM modül paketleri sisteminizde bulunan ve PAM kullanan tüm "
"uygulamaların davranışlarını otomatik olarak ayarlamaya yarayan profiller "
-"sağlar. Lütfen bu davranışlardan hangisini etkinleştirmek istediğinizi "
+"sağlar. Lütfen bu profillerden hangilerini etkinleştirmek istediğinizi "
"belirtin."
#. Type: error
@@ -167,7 +160,7 @@ msgstr "Uyumsuz PAM profilleri seçildi"
#. PAM profile names.
#: ../libpam-runtime.templates:3001
msgid "The following PAM profiles cannot be used together:"
-msgstr "Şu PAM profilleri birarada kullanılamaz:"
+msgstr "Bu PAM profilleri birlikte kullanılamaz:"
#. Type: error
#. Description
@@ -180,7 +173,7 @@ msgstr "Lütfen farklı bir modül kümesi seçin."
#: ../libpam-runtime.templates:4001
msgid "Override local changes to /etc/pam.d/common-*?"
msgstr ""
-"/etc/pam.d/common-* konumundaki yerel değişiklikler görmezden gelinsin mi?"
+"/etc/pam.d/common-* konumundaki yerel değişikliklerin üzerine yazılsın mı?"
#. Type: boolean
#. Description
@@ -193,16 +186,16 @@ msgid ""
"configuration by hand."
msgstr ""
"/etc/pam.d/common-{auth,account,password,session} dosyalarından bir ya da "
-"daha fazlası yerel olarak değiştirilmiş. Lütfen bu yerel değişikliklerin "
-"sistem tarafından sağlanan yapılandırma ile değiştirilmesine izin verip "
-"vermediğinizi belirtin. Bu seçeneği kabul etmediğiniz takdirde sistemin "
-"kimlik doğrulama yapılandırmasını elinizle ayarlamanız gerekecektir."
+"daha fazlası yerel olarak değiştirilmiş. Lütfen bu yerel değişikliklerin "
+"yerine sistem tarafından sağlanan yapılandırmanın konulmasına izin verip "
+"vermediğinizi belirtin. Bu seçeneği kabul etmezseniz sisteminizin kimlik "
+"doğrulama yapılandırmasını elle ayarlamanız gerekecektir."
#. Type: error
#. Description
#: ../libpam-runtime.templates:5001
msgid "No PAM profiles have been selected."
-msgstr "Hiçbir PAM profili seçilmedi."
+msgstr "Hiçbir PAM profili seçilmedi"
#. Type: error
#. Description
@@ -212,10 +205,10 @@ msgid ""
"all users access without authenticating, and is not allowed. Please select "
"at least one PAM profile from the available list."
msgstr ""
-"Sistemde kullanılmak üzere hiçbir PAM modülü seçilmedi. Bu durum tüm "
-"kullanıcılara hiçbir kimlik doğrulamaya maruz kalmaksızın erişim izni "
-"verilmesi anlamına gelir ve bu duruma izin verilmemektedir. Lütfen mevcut "
-"profiller listesinden en az bir PAM profili seçin."
+"Sisteminizde kullanılmak amacıyla hiçbir PAM modülü seçilmedi. Bu durum "
+"kullanıcılarınızın sisteminize hiçbir kimlik doğrulama yapmadan erişmesine "
+"olanak verecektir ve kabul edilemez. Hazırdaki profiller listesinden en az "
+"bir PAM profili seçin."
#. Type: error
#. Description
@@ -237,6 +230,55 @@ msgid ""
msgstr ""
"Sisteminizde çalışmakta olan birden fazla xscreensaver ya da xlockmore "
"örneğine rastlandı. Uyumsuz kitaplık değişiklikleri yüzünden, libpam-modules "
-"paketinin yükseltilmesi bu programlarda kimlik doğrulamasını olanaksız hale "
-"getirecek. Mevcut oturumların kilitlenmesi önlemek için, yükseltme işlemine "
-"devam etmeden önce bu programları durdurmalı ya da yeniden başlatmalısınız."
+"paketinin yükseltilmesi bu programlarda kimlik doğrulaması yapmanızı "
+"olanaksız kılacaktır. Oturum açmış kullanıcılarınızın oturumlarının "
+"kilitlenmemesi için, yükseltmeyi sürdürmeden önce bu programları durdurmalı "
+"ya da yeniden başlatmalısınız."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "Artık kullanılmayan modülleri içeren PAM profilleri etkisizleştirildi"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"Sisteminizde ${modules} PAM modüllerinin etkinleştirildiği PAM profilleri "
+"bulunuyordu. Bu modüller şimdi kaldırıldığı için, o PAM profillerindeki "
+"ilgili içerikler de etkisizleştirildi. Öbür türlü kullanıcıların sisteminize "
+"erişiminde sorunlar yaşanacaktı."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "Yapılandırmanızda pam_tally ya da pam_tally2 modülünü kullanıyorsunuz"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"pam_tally ve pam_tally2 modülleri PAM sisteminden kaldırıldı. /etc/pam.d "
+"dizinindeki yapılandırmalarınızda bu modüllerden birini kullanıyorsunuz. PAM "
+"yükseltmesi öncesinde bu kullanımları kaldırmanız gerekiyor. Bu modülleri "
+"kullanan PAM yapılandırmalarını öylece bırakırsanız, kullanıcılarınız "
+"yükseltmeden sonra sisteminize giriş yapamayacaklardır."
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "pam_tally yerine pam_faillock modülünü kullanmayı düşünebilirsiniz."
diff --git a/debian/po/vi.po b/debian/po/vi.po
index 868a8359..e2c5ed53 100644
--- a/debian/po/vi.po
+++ b/debian/po/vi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pam 1.1.1-6.1\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
"PO-Revision-Date: 2010-10-24 20:46+1030\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -26,11 +26,16 @@ msgstr "Dịch vụ cần khởi chạy lại để nâng cấp thư viện PAM:
#. 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 "
-"list of init.d scripts for services to be restarted now, and correct it if "
-"needed."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"Phần lớn dịch vụ sử dụng PAM thì cũng cần phải được khởi chạy lại để sử dụng "
"những mô-đun được xây dựng cho phiên bản libpam mới này. Hãy xem lại danh "
@@ -227,6 +232,45 @@ msgstr ""
"này trước khi tiếp tục tiến trình nâng cấp, để tránh chặn ngưá»i dùng đăng "
"nhập vào buổi hợp đang chạy."
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+
+#. 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 "Hệ thống này cho phép truy cập mà không nhập mật khẩu !"
diff --git a/debian/po/zh_CN.po b/debian/po/zh_CN.po
index 23291f5e..59b47ac8 100644
--- a/debian/po/zh_CN.po
+++ b/debian/po/zh_CN.po
@@ -12,14 +12,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pam\n"
"Report-Msgid-Bugs-To: pam@packages.debian.org\n"
-"POT-Creation-Date: 2011-10-30 15:05-0400\n"
-"PO-Revision-Date: 2009-01-01 12:30+0800\n"
-"Last-Translator: Deng Xiyue <manphiz-guest@users.alioth.debian.org>\n"
+"POT-Creation-Date: 2021-02-26 10:32-0500\n"
+"PO-Revision-Date: 2021-02-26 21:04-0500\n"
+"Last-Translator: Boyuan Yang <byang@debian.org>\n"
"Language-Team: Debian Chinese [GB] <debian-chinese-gb@lists.debian.org>\n"
-"Language: \n"
+"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.2\n"
#. Type: string
#. Description
@@ -33,12 +34,11 @@ msgstr "å›  PAM 库å‡çº§è€Œéœ€è¦é‡æ–°å¯åŠ¨çš„æœåŠ¡ï¼š"
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."
+"list of services to be restarted now, and correct it if needed."
msgstr ""
"为了使用基于这个新版本 libpam 编译的模å—,ç»å¤§éƒ¨åˆ†ä½¿ç”¨ PAM çš„æœåŠ¡éƒ½éœ€è¦è¢«é‡æ–°"
-"å¯åŠ¨ã€‚è¯·å¤æŸ¥ä¸‹é¢è¿™ä¸ªéœ€è¦é‡æ–°å¯åŠ¨çš„æœåŠ¡æ‰€å¯¹åº”çš„ init.d script 列表,script å"
-"称之间以åŠè§’空格分隔。如列表有误,请直接更正。"
+"å¯åŠ¨ã€‚è¯·å¤æŸ¥ä¸‹é¢è¿™ä¸ªéœ€è¦é‡æ–°å¯åŠ¨çš„æœåŠ¡æ‰€å¯¹åº”çš„åˆ—è¡¨ï¼Œscript å称之间以åŠè§’空格"
+"分隔。如列表有误,请直接更正。"
#. Type: error
#. Description
@@ -49,22 +49,15 @@ msgstr "å¿…é¡»æ‰‹åŠ¨é‡æ–°å¯åŠ¨æ˜¾ç¤ºç®¡ç†å™¨"
#. Type: error
#. Description
#: ../libpam0g.templates:2001
-#, fuzzy
-#| msgid ""
-#| "The kdm, wdm, and xdm display managers require a restart for the new "
-#| "version of libpam, but there are X login sessions active on your system "
-#| "that would be terminated by this restart. You will therefore need to "
-#| "restart these services by hand before further X logins will be possible."
msgid ""
"The wdm and xdm display managers require a restart for the new version of "
"libpam, but there are X login sessions active on your system that would be "
"terminated by this restart. You will therefore need to restart these "
"services by hand before further X logins will be possible."
msgstr ""
-"由于 lipam 更新到新版本,显示管ç†å™¨ kdmã€wdm å’Œ xdm 需è¦è¢«é‡æ–°å¯åŠ¨ã€‚ä½†æ˜¯æ‚¨çš„"
-"系统上有正在è¿è¡Œçš„ X 登录会è¯ï¼Œè€Œå¦‚æžœé‡æ–°å¯åŠ¨æ˜¾ç¤ºç®¡ç†å™¨æœåŠ¡ï¼Œè¿™äº› X 会è¯å°±ä¼š"
-"被强行结æŸã€‚å› æ­¤ï¼Œæ‚¨éœ€è¦æ‰‹åЍ釿–°å¯åŠ¨è¿™äº›æœåŠ¡ï¼Œå¦åˆ™æ‚¨å°†æ— æ³•å†ç™»å½•è¿› X 窗å£ç³»"
-"统。"
+"由于 libpam 更新到新版本,wdm å’Œ xdm 等显示管ç†å™¨éœ€è¦è¢«é‡æ–°å¯åŠ¨ã€‚ä½†æ˜¯æ‚¨çš„ç³»ç»Ÿ"
+"上有正在è¿è¡Œçš„ X 登录会è¯ï¼Œè€Œå¦‚æžœé‡æ–°å¯åŠ¨æ˜¾ç¤ºç®¡ç†å™¨æœåŠ¡ï¼Œè¿™äº› X 会è¯å°±ä¼šè¢«å¼º"
+"行结æŸã€‚å› æ­¤ï¼Œæ‚¨éœ€è¦æ‰‹åЍ釿–°å¯åŠ¨è¿™äº›æœåŠ¡ï¼Œå¦åˆ™æ‚¨å°†æ— æ³•å†ç™»å½•è¿› X 窗å£ç³»ç»Ÿã€‚"
#. Type: error
#. Description
@@ -91,7 +84,7 @@ msgstr "您需è¦è¿è¡Œâ€œ/etc/init.d/<æœåŠ¡> startâ€æ¥æ‰‹åЍå¯åŠ¨è¿™äº›æœå
#. Description
#: ../libpam0g.templates:4001
msgid "Restart services during package upgrades without asking?"
-msgstr ""
+msgstr "是å¦åœ¨è½¯ä»¶åŒ…å‡çº§è¿‡ç¨‹ä¸­ä¸ç»è¯¢é—®ç›´æŽ¥é‡æ–°å¯åЍæœåŠ¡ï¼Ÿ"
#. Type: boolean
#. Description
@@ -105,18 +98,23 @@ msgid ""
"necessary restarts will be done for you automatically so you can avoid being "
"asked questions on each library upgrade."
msgstr ""
+"您的系统上有一些正在è¿è¡Œçš„æœåŠ¡éœ€è¦åœ¨ç‰¹å®šçš„软件库(如 libpamã€libcã€libssl)的"
+"å‡çº§è¿‡ç¨‹ä¸­é‡æ–°å¯åŠ¨ã€‚å› ä¸ºé‡æ–°å¯åŠ¨è¿™äº›æœåŠ¡å¯èƒ½é€ æˆç³»ç»ŸåŠŸèƒ½çš„ä¸­æ–­ï¼Œé€šå¸¸æƒ…å†µä¸‹æ‚¨"
+"ä¼šåœ¨æ¯æ¬¡å‡çº§æ—¶æ”¶åˆ°å†³å®šæ˜¯å¦é‡å¯æœåŠ¡çš„æé†’。您也å¯ä»¥é€‰æ‹©æœ¬é€‰é¡¹ä»¥é¿å…收到æé†’ï¼›"
+"在此情况下,所有必需的æœåŠ¡é‡å¯å‡ä¼šè‡ªåŠ¨è¿›è¡Œï¼Œæ‚¨ä¹Ÿä¸ä¼šåœ¨å„个库进行更新时收到询"
+"问。"
#. Type: title
#. Description
#: ../libpam-runtime.templates:1001
msgid "PAM configuration"
-msgstr ""
+msgstr "PAM é…ç½®"
#. Type: multiselect
#. Description
#: ../libpam-runtime.templates:2001
msgid "PAM profiles to enable:"
-msgstr ""
+msgstr "è¦å¯ç”¨çš„ PAM é…置策略:"
#. Type: multiselect
#. Description
@@ -127,6 +125,8 @@ msgid ""
"allowing configuration of additional actions to take when starting user "
"sessions."
msgstr ""
+"坿’å…¥èº«ä»½éªŒè¯æ¨¡å—(PAM)决定系统上的身份验è¯ã€æŽˆæƒå’Œå¯†ç æ›´æ”¹åº”当如何进行,åŒ"
+"æ—¶å…许é…ç½®å¯åŠ¨ç”¨æˆ·ä¼šè¯æ—¶è¦è¿›è¡Œçš„é¢å¤–æ“作。"
#. Type: multiselect
#. Description
@@ -136,12 +136,14 @@ msgid ""
"adjust the behavior of all PAM-using applications on the system. Please "
"indicate which of these behaviors you wish to enable."
msgstr ""
+"æŸäº› PAM 模å—软件包æä¾›äº†é…置策略(profile),å¯ç”¨æ¥è‡ªåŠ¨è°ƒæ•´ç³»ç»Ÿä¸Šæ‰€æœ‰ä½¿ç”¨ "
+"PAM 的应用程åºçš„行为。请选择您希望å¯ç”¨å…¶ä¸­çš„哪些行为。"
#. Type: error
#. Description
#: ../libpam-runtime.templates:3001
msgid "Incompatible PAM profiles selected."
-msgstr ""
+msgstr "选中了ä¸å…¼å®¹çš„ PAM é…置策略。"
#. Type: error
#. Description
@@ -149,19 +151,19 @@ msgstr ""
#. PAM profile names.
#: ../libpam-runtime.templates:3001
msgid "The following PAM profiles cannot be used together:"
-msgstr ""
+msgstr "以下的 PAM é…置策略ä¸èƒ½å…±åŒä½¿ç”¨ï¼š"
#. Type: error
#. Description
#: ../libpam-runtime.templates:3001
msgid "Please select a different set of modules to enable."
-msgstr ""
+msgstr "请选择å¦ä¸€ç»„è¦å¯ç”¨çš„æ¨¡å—。"
#. Type: boolean
#. Description
#: ../libpam-runtime.templates:4001
msgid "Override local changes to /etc/pam.d/common-*?"
-msgstr ""
+msgstr "覆盖 /etc/pam.d/common-* 的本地修改å—?"
#. Type: boolean
#. Description
@@ -173,12 +175,15 @@ msgid ""
"decline this option, you will need to manage your system's authentication "
"configuration by hand."
msgstr ""
+"在 /etc/pam.d/common-{auth,account,password,session} 中的一个或多个文件有本地"
+"的修改。请选择是å¦åº”当使用系统æä¾›çš„é…ç½®è¦†ç›–è¿™äº›æœ¬åœ°ä¿®æ”¹ã€‚å¦‚æžœæ‚¨æ‹’ç»æœ¬é€‰é¡¹ï¼Œ"
+"您需è¦ç¨åŽæ‰‹åŠ¨ç®¡ç†æ‚¨ç³»ç»Ÿä¸Šçš„验è¯é…置。"
#. Type: error
#. Description
#: ../libpam-runtime.templates:5001
msgid "No PAM profiles have been selected."
-msgstr ""
+msgstr "未选择任何 PAM é…置策略。"
#. Type: error
#. Description
@@ -188,6 +193,8 @@ msgid ""
"all users access without authenticating, and is not allowed. Please select "
"at least one PAM profile from the available list."
msgstr ""
+"未选中任何用于本系统的 PAM é…置策略。如果这样åšä¼šå…许所有用户ä¸ç»éªŒè¯è¿›è¡Œè®¿"
+"问,而这ç§è¡Œä¸ºæ˜¯ä¸å…许出现的。请从å¯ç”¨åˆ—表中选择至少一个 PAM é…置策略。"
#. Type: error
#. Description
@@ -209,3 +216,48 @@ msgstr ""
"检测到一个或多个 xscreensaver 或 xlockmore è¿è¡Œå®žä¾‹ã€‚因为ä¸å…¼å®¹çš„库的å˜åŒ–,"
"libpam-module 软件包的å‡çº§å°†ä½¿æ‚¨æ— æ³•å‘这些程åºè®¤è¯ã€‚您需è¦åœ¨ç»§ç»­æ­¤å‡çº§å‰å®‰æŽ’"
"这些程åºé‡æ–°å¯åŠ¨æˆ–è€…åœæ­¢è¿è¡Œï¼Œä»¥é¿å…将您的用户é”在他们的当å‰ä¼šè¯ä¹‹å¤–。"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid "PAM Profiles with Deprecated Modules Disabled"
+msgstr "å·²ç¦ç”¨å¸¦æœ‰å·²å¼ƒç”¨æ¨¡å—çš„ PAM é…置策略"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:2001
+msgid ""
+"Your system had PAM profiles enabled with the ${modules} PAM modules. These "
+"modules have been removed from PAM. Leaving these PAM profiles enabled would "
+"prevent users from accessing your system. As a result, these profiles have "
+"been disabled."
+msgstr ""
+"您的系统上存在带有 ${modules} PAM 模å—çš„ PAM é…置策略。这些模å—已从 PAM 中移"
+"除。如继续å¯ç”¨è¿™äº› PAM é…ç½®ç­–ç•¥åˆ™ç”¨æˆ·å°†æ— æ³•ç»æ­¤æ–¹å¼éªŒè¯å¹¶è®¿é—®ç³»ç»Ÿã€‚因此,这些"
+"é…置策略已被ç¦ç”¨ã€‚"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "you are using pam_tally or pam_tally2 in your configuration"
+msgstr "您的é…置文件中正在使用 pam_tally 或 pam_tally2"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid ""
+"The pam_tally and pam_tally2 modules have been removed from PAM. You are "
+"using one of these modules in your PAM configuration in /etc/pam.d. You must "
+"remove the uses of these modules before PAM can be upgraded; including these "
+"modules in your PAM configuration after the upgrade will stop users from "
+"being able to log into the system."
+msgstr ""
+"请注æ„,pam_tally å’Œ pam_tally2 模å—已从 PAM 中移除。您正在系统上 /etc/pam.d "
+"中的é…置文件中使用其中æŸä¸ªæ¨¡å—。在 PAM 更新之å‰ï¼Œæ‚¨å¿…须移除对这些模å—的使用;"
+"在å‡çº§åŽä¾æ—§äºŽ PAM é…置中使用这些模å—将导致用户无法使用该方å¼ç™»å½•系统。"
+
+#. Type: error
+#. Description
+#: ../libpam-modules.templates:3001
+msgid "Consider the pam_faillock module as a replacement for pam_tally."
+msgstr "请考虑使用 pam_faillock 模å—作为 pam_tally 的替代。"
diff --git a/debian/rules b/debian/rules
index 8db11856..07bc9d47 100755
--- a/debian/rules
+++ b/debian/rules
@@ -13,35 +13,45 @@ 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:
dh_auto_configure -- --enable-static --enable-shared \
--libdir=/lib/$(DEB_HOST_MULTIARCH) \
--enable-isadir=/lib/security \
- --enable-cracklib \
- --enable-usergroups \
+ --with-systemdunitdir=/usr/lib/systemd/system \
+ --disable-nis \
$(CONFIGURE_OPTS)
# .install files don't have "except for" handling, so we need to exclude
# our module that doesn't match right here
override_dh_install:
- sed -e"s/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g" $(d)/libpam0g-dev.install.in > $(d)/libpam0g-dev.install
-ifneq (,$(findstring libpam-modules, $(shell dh_listpackages)))
- dh_install -plibpam-modules -Xpam_cracklib
-endif
- dh_install -Nlibpam-modules
+ dh_install
+ # Make sure the md5sums for the templates we ship are
+ # recognized by pam-auth-update.
+ for f in common-auth common-session common-session-noninteractive common-account common-password; do \
+ if grep -q $$(perl debian/template-md5sum debian/local/$$f ) debian/local/pam-auth-update; then \
+ echo $$f okay; \
+ else \
+ echo md5sum for $$f not registered in debian/local/pam-auth-update; \
+ echo use debian/template-md5sum to compute; \
+ exit 2; \
+ fi; \
+ done
+
+
# again, excluding files by hand; also, build our local manpage for pam_getenv
# from the XML
@@ -49,14 +59,8 @@ override_dh_installman:
pod2man --section 8 --release="Debian GNU/Linux" $(dl)/pam_getenv >$(dl)/pam_getenv.8
dh_installman
rm -f $(d)/libpam-modules/usr/share/man/man5/pam.conf.5
- rm -f $(d)/libpam-modules/usr/share/man/man8/pam_cracklib.8
rm -f $(d)/libpam-modules/usr/share/man/man8/pam_timestamp_check.8
-
-# dh_link doesn't do wildcards, so we can't auto-link to the right per-arch
-# directory
-override_dh_link:
- sed -e"s/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g" $(d)/libpam0g-dev.links.in > $(d)/libpam0g-dev.links
- dh_link
+ rm -f $(d)/libpam-modules/usr/share/man/man8/pam_namespace_helper.8
# using perms that differ from upstream (sgid instead of suid) /and/ that
# dh_fixperms doesn't want
@@ -66,3 +70,6 @@ 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
endif
+
+override_dh_installchangelogs:
+ dh_installchangelogs NEWS
diff --git a/debian/source.lintian-overrides b/debian/source.lintian-overrides
deleted file mode 100644
index 037bfc61..00000000
--- a/debian/source.lintian-overrides
+++ /dev/null
@@ -1,3 +0,0 @@
-pam source: dh-quilt-addon-but-quilt-source-format
-pam source: build-depends-on-1-revision build-depends: quilt (>= 0.48-1)
-
diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides
new file mode 100644
index 00000000..85133c70
--- /dev/null
+++ b/debian/source/lintian-overrides
@@ -0,0 +1,2 @@
+pam source: dh-quilt-addon-but-quilt-source-format
+
diff --git a/debian/template-md5sum b/debian/template-md5sum
new file mode 100755
index 00000000..e043a82b
--- /dev/null
+++ b/debian/template-md5sum
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+use IPC::Open2;
+
+
+ my($template) = @ARGV;
+ my $state = 0;
+
+ open(INPUT,$template) || return '';
+ my($md5sum_fd,$output_fd);
+ my $pid = open2($md5sum_fd, $output_fd, 'md5sum');
+ return '' if (!$pid);
+
+ while (<INPUT>) {
+ if ($state == 1) {
+ if (/^# here's the fallback if no module succeeds/) {
+ print $output_fd $_;
+ $state++;
+ }
+ next;
+ }
+ if ($state == 3) {
+ if (/^# end of pam-auth-update config/) {
+ print $output_fd $_;
+ $state++;
+ }
+ next;
+ }
+
+ print $output_fd $_;
+
+ my ($pattern,$val);
+ if ($state == 0) {
+ $pattern = '^# here are the per-package modules \(the "Primary" block\)';
+ } elsif ($state == 2) {
+ $pattern = '^# and here are more per-package modules \(the "Additional" block\)';
+ } else {
+ next;
+ }
+
+ if (/$pattern/) {
+ $state++;
+ }
+ }
+ close(INPUT);
+ close($output_fd);
+ my $md5sum = <$md5sum_fd>;
+ close($md5sum_fd);
+ waitpid $pid, 0;
+
+ $md5sum = (split(/\s+/,$md5sum))[0];
+ print $md5sum;
diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644
index 00000000..07797e1d
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,7 @@
+Tests: pam-auth-update
+Depends: libpam-modules, libpam-runtime, libpam0g
+Restrictions: needs-root, allow-stderr
+
+Tests: pam-test
+Depends: libpam-modules, libpam-runtime, libpam0g, python3-pam
+Restrictions: needs-root
diff --git a/debian/tests/pam-auth-update b/debian/tests/pam-auth-update
new file mode 100644
index 00000000..d2649f36
--- /dev/null
+++ b/debian/tests/pam-auth-update
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# Copyright 2023, Sam Hartman
+# This code may be redistributed under the same terms as Linux Pam
+# itself, or at your pution, under the GNU General Public License,
+# version 3.
+
+set -x
+
+fail() {
+ echo "$@" 2>&1
+ exit 1
+}
+
+
+# Confirm enabling pam_mkhomedir updates common-session
+grep mkhomedir /etc/pam.d/* && fail pam_mkhomedir already enabled
+pam-auth-update --enable mkhomedir ||fail pam-auth-update enable failed
+grep mkhomedir /etc/pam.d/common-session ||fail pam_mkhomedir was not enabled
+
+# and confirm that it makes a home directory
+useradd -s /bin/bash pam_test
+su -c date pam_test
+test -d ~pam_test || fail pam_test home directory not made
+
+# confirm added options are preserved
+grep -i rounds /etc/pam.d/common-password &&fail rounds parameter already specified
+sed -i -e 's/obscure yescrypt/obscure yescrypt rounds=3/' /etc/pam.d/common-password
+grep rounds /etc/pam.d/common-password ||fail sed did not update common password
+
+( echo get libpam-runtime/profiles |debconf-communicate |grep mkhomedir) || fail mkhomedir not in enabled profiles
+
+# Confirm removing mkhomedir preserves rounds parameter
+pam-auth-update --disable mkhomedir ||fail pam-auth-update disable failed
+( echo get libpam-runtime/profiles |debconf-communicate |grep mkhomedir) && fail mkhomedir still in profiles
+grep mkhomedir /var/lib/pam/seen || fail mkhomedir removed from seen after disable
+grep mkhomedir /etc/pam.d/common-session &&fail pam_mkhomedir not removed
+grep rounds /etc/pam.d/common-password || fail rounds parameter not preserved
diff --git a/debian/tests/pam-test b/debian/tests/pam-test
new file mode 100644
index 00000000..dc97da4b
--- /dev/null
+++ b/debian/tests/pam-test
@@ -0,0 +1,10 @@
+#!/bin/sh
+# Copyright 2023, Sam Hartman
+# This code may be redistributed under the same terms as Linux Pam
+# itself, or at your pution, under the GNU General Public License,
+# version 3.
+
+set -e
+useradd -s /bin/bash pam_test 2>&1 || true
+python3 debian/tests/pam-test.py
+userdel pam_test ||true
diff --git a/debian/tests/pam-test.py b/debian/tests/pam-test.py
new file mode 100644
index 00000000..0024ca5c
--- /dev/null
+++ b/debian/tests/pam-test.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python3
+# Copyright 2023, Sam Hartman
+# This code may be redistributed under the same terms as Linux Pam
+# itself, or at your pution, under the GNU General Public License,
+# version 3.
+
+
+import PAM
+
+def conversation(auth, queries, userdata):
+ results = []
+ for prompt, type in queries:
+ if type == PAM.PAM_PROMPT_ECHO_OFF:
+ results.append(('ThisLongPasswordIsHardCoded', 0))
+ else: results.append(('',0))
+ return results
+# set a password
+
+auth = PAM.pam()
+auth.start('passwd')
+auth.set_item(PAM.PAM_USER, 'pam_test')
+auth.set_item(PAM.PAM_CONV, conversation)
+auth.chauthtok()
+
+# Now authenticate and session
+auth = PAM.pam()
+auth.start('login')
+auth.set_item(PAM.PAM_USER, 'pam_test')
+auth.set_item(PAM.PAM_CONV, conversation)
+auth.authenticate()
+auth.acct_mgmt()
+auth.open_session()
+auth.close_session()
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/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc
new file mode 100644
index 00000000..b56d6ab1
--- /dev/null
+++ b/debian/upstream/signing-key.asc
@@ -0,0 +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]
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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/debian/watch b/debian/watch
index 5d37a694..15cf7127 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,2 +1,4 @@
-version=4
- https://github.com/linux-pam/linux-pam/releases .*/\S+-([\d.]+)\.tar\.xz
+ version=4
+ opts=searchmode=plain,pgpmode=auto \
+ https://api.github.com/repos/linux-pam/linux-pam/releases \
+ https://github.com/linux-pam/linux-pam/releases/download/v?[\d.]+/Linux-PAM-([\d.]+)@ARCHIVE_EXT@
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 64e09979..361d6df4 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -94,18 +94,21 @@ build_triplet = @build@
host_triplet = @host@
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_html_DATA) \
@@ -243,10 +246,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -256,12 +263,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -275,7 +286,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -294,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@
@@ -322,8 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -334,11 +345,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -383,7 +399,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -391,9 +406,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -403,6 +415,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -410,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 187b1372..3cb17bbf 100644
--- a/doc/adg/Makefile.in
+++ b/doc/adg/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -93,18 +93,21 @@ build_triplet = @build@
host_triplet = @host@
subdir = doc/adg
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -152,10 +155,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -165,12 +172,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -184,7 +195,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -203,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@
@@ -231,8 +243,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -243,11 +254,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -292,7 +308,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -300,9 +315,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -312,6 +324,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -523,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 \
@@ -551,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 4c35e839..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/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 669a5ed7..d18dc7d4 100644
--- a/doc/man/Makefile.in
+++ b/doc/man/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -93,18 +93,21 @@ build_triplet = @build@
host_triplet = @host@
subdir = doc/man
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -186,10 +189,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -199,12 +206,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -218,7 +229,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -237,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@
@@ -265,8 +277,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -277,11 +288,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -326,7 +342,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -334,9 +349,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -346,6 +358,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -372,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 c133f44b..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b3cc86fd..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: 06/08/2020
+.\" 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" "06/08/2020" "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 1ec589b3..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: 06/08/2020
+.\" 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" "06/08/2020" "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 7b4edbf2..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>
@@ -265,7 +261,8 @@
this action indicates that the return code should be thought
of as indicative of the module failing. If this module is the
first in the stack to fail, its status value will be used for
- that of the whole stack.
+ that of the whole stack. This is the default action for
+ all return codes.
</para>
</listitem>
</varlistentry>
@@ -273,8 +270,9 @@
<term>die</term>
<listitem>
<para>
- equivalent to bad with the side effect of terminating the
- module stack and PAM immediately returning to the application.
+ equivalent to <emphasis>bad</emphasis> with the side effect of
+ terminating the module stack and PAM immediately returning to
+ the application.
</para>
</listitem>
</varlistentry>
@@ -297,8 +295,9 @@
<term>done</term>
<listitem>
<para>
- equivalent to ok with the side effect of terminating the module
- stack and PAM immediately returning to the application.
+ equivalent to <emphasis>ok</emphasis> with the side effect of
+ terminating the module stack and PAM immediately returning to the
+ application unless there was a non-ignored module failure before.
</para>
</listitem>
</varlistentry>
@@ -334,6 +333,13 @@
</variablelist>
<para>
+ If a return code's action is not specifically defined via a
+ <emphasis>valueN</emphasis> token, and the
+ <emphasis>default</emphasis> value is not specified, that return
+ code's action defaults to <emphasis>bad</emphasis>.
+ </para>
+
+ <para>
Each of the four keywords: required; requisite; sufficient; and
optional, have an equivalent expression in terms of the [...]
syntax. They are as follows:
@@ -401,7 +407,7 @@
should use `\]'. In other words:
</para>
<programlisting>
- [..[..\]..] --> ..[..]..
+ [..[..\]..] --&gt; ..[..]..
</programlisting>
<para>
@@ -414,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 e38b425c..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: 06/08/2020
+.\" 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" "06/08/2020" "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
@@ -234,12 +237,14 @@ when used with a stack of modules, the module\*(Aqs return status will not contr
.PP
bad
.RS 4
-this action indicates that the return code should be thought of as indicative of the module failing\&. If this module is the first in the stack to fail, its status value will be used for that of the whole stack\&.
+this action indicates that the return code should be thought of as indicative of the module failing\&. If this module is the first in the stack to fail, its status value will be used for that of the whole stack\&. This is the default action for all return codes\&.
.RE
.PP
die
.RS 4
-equivalent to bad with the side effect of terminating the module stack and PAM immediately returning to the application\&.
+equivalent to
+\fIbad\fR
+with the side effect of terminating the module stack and PAM immediately returning to the application\&.
.RE
.PP
ok
@@ -250,7 +255,9 @@ this tells PAM that the administrator thinks this return code should contribute
.PP
done
.RS 4
-equivalent to ok with the side effect of terminating the module stack and PAM immediately returning to the application\&.
+equivalent to
+\fIok\fR
+with the side effect of terminating the module stack and PAM immediately returning to the application unless there was a non\-ignored module failure before\&.
.RE
.PP
N (an unsigned integer)
@@ -279,6 +286,13 @@ reset
clear all memory of the state of the module stack and start again with the next stacked module\&.
.RE
.PP
+If a return code\*(Aqs action is not specifically defined via a
+\fIvalueN\fR
+token, and the
+\fIdefault\fR
+value is not specified, that return code\*(Aqs action defaults to
+\fIbad\fR\&.
+.PP
Each of the four keywords: required; requisite; sufficient; and optional, have an equivalent expression in terms of the [\&.\&.\&.] syntax\&. They are as follows:
.PP
required
@@ -340,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
@@ -364,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 8e14431f..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b49c0c70..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: 06/08/2020
+.\" 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" "06/08/2020" "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 f4ff84f6..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: 06/08/2020
+.\" 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" "06/08/2020" "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 8a6f8d1c..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: 06/08/2020
+.\" 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" "06/08/2020" "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 181604e2..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: 06/08/2020
+.\" 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" "06/08/2020" "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 6311d857..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: 06/08/2020
+.\" 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" "06/08/2020" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_END" "3" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -59,7 +59,7 @@ is used as an argument to the module specific callback function,
and
\fBpam_get_data\fR(3))\&. In this way the module can be given notification of the pass/fail nature of the tear\-down process, and perform any last minute tasks that are appropriate to the module before it is unlinked\&. This argument can be logically OR\*(Aqd with
\fIPAM_DATA_SILENT\fR
-to indicate to indicate that the module should not treat the call too seriously\&. It is generally used to indicate that the current closing of the library is in a
+to indicate that the module should not treat the call too seriously\&. 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\&.)\&.
.PP
This function
diff --git a/doc/man/pam_end.3.xml b/doc/man/pam_end.3.xml
index 039bb3cd..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
@@ -56,7 +53,7 @@
of the pass/fail nature of the tear-down process, and perform any
last minute tasks that are appropriate to the module before it is
unlinked. This argument can be logically OR'd with
- <emphasis>PAM_DATA_SILENT</emphasis> to indicate to indicate that
+ <emphasis>PAM_DATA_SILENT</emphasis> to indicate that
the module should not treat the call too seriously. It is generally
used to indicate that the current closing of the library is in a
<citerefentry>
@@ -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 58fcdd26..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: 06/08/2020
+.\" 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" "06/08/2020" "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 ea7f0abe..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: 06/08/2020
+.\" 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" "06/08/2020" "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 346f4e1a..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: 06/08/2020
+.\" 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" "06/08/2020" "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 7c6b23ea..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: 06/08/2020
+.\" 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" "06/08/2020" "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 ec0e6e69..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: 06/08/2020
+.\" 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" "06/08/2020" "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 256fae87..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: 06/08/2020
+.\" 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" "06/08/2020" "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 96551953..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b353f758..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: 06/08/2020
+.\" 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" "06/08/2020" "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 ae58d460..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: 06/08/2020
+.\" 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" "06/08/2020" "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 deaec8b4..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: 06/08/2020
+.\" 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" "06/08/2020" "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 e0335ef3..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: 06/08/2020
+.\" 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" "06/08/2020" "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 0d041d41..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: 06/08/2020
+.\" 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" "06/08/2020" "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 16e08c08..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: 06/08/2020
+.\" 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" "06/08/2020" "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 0b2fd933..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: 06/08/2020
+.\" 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" "06/08/2020" "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 9c58b0de..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: 06/08/2020
+.\" 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" "06/08/2020" "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 6590fdc8..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: 06/08/2020
+.\" 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" "06/08/2020" "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 95ee4a23..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: 06/08/2020
+.\" 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" "06/08/2020" "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 893477eb..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: 06/08/2020
+.\" 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" "06/08/2020" "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 239d9fff..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: 06/08/2020
+.\" 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" "06/08/2020" "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 366d2eef..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: 06/08/2020
+.\" 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" "06/08/2020" "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 807aee2b..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: 06/08/2020
+.\" 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" "06/08/2020" "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 236e76e6..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: 06/08/2020
+.\" 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" "06/08/2020" "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 94298ede..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: 06/08/2020
+.\" 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" "06/08/2020" "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 e2d70607..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b6039135..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: 06/08/2020
+.\" 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" "06/08/2020" "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 7e06717c..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: 06/08/2020
+.\" 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" "06/08/2020" "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 ceb6d769..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: 06/08/2020
+.\" 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" "06/08/2020" "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 1715e90e..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: 06/08/2020
+.\" 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" "06/08/2020" "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 706ca65f..2f20d573 100644
--- a/doc/mwg/Makefile.in
+++ b/doc/mwg/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -93,18 +93,21 @@ build_triplet = @build@
host_triplet = @host@
subdir = doc/mwg
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -152,10 +155,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -165,12 +172,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -184,7 +195,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -203,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@
@@ -231,8 +243,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -243,11 +254,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -292,7 +308,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -300,9 +315,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -312,6 +324,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -523,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 \
@@ -551,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 6a324aa5..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,97 +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_cracklib.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_tally.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally2.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>
@@ -501,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)
@@ -522,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;
@@ -573,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 8b44b15b..435ab867 100644
--- a/doc/sag/Makefile.in
+++ b/doc/sag/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -93,18 +93,21 @@ build_triplet = @build@
host_triplet = @host@
subdir = doc/sag
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -152,10 +155,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -165,12 +172,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -184,7 +195,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -203,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@
@@ -231,8 +243,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -243,11 +254,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -292,7 +308,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -300,9 +315,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -312,6 +324,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -523,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 \
@@ -551,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_cracklib.xml b/doc/sag/pam_cracklib.xml
deleted file mode 100644
index 898bbf9c..00000000
--- a/doc/sag/pam_cracklib.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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_cracklib'>
- <title>pam_cracklib - checks the password against dictionary words</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_cracklib/pam_cracklib.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_cracklib-cmdsynopsis"]/*)'/>
- </cmdsynopsis>
- <section id='sag-pam_cracklib-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_cracklib/pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-description"]/*)'/>
- </section>
- <section id='sag-pam_cracklib-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_cracklib/pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-options"]/*)'/>
- </section>
- <section id='sag-pam_cracklib-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_cracklib/pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-types"]/*)'/>
- </section>
- <section id='sag-pam_cracklib-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_cracklib/pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-return_values"]/*)'/>
- </section>
- <section id='sag-pam_cracklib-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_cracklib/pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-examples"]/*)'/>
- </section>
- <section id='sag-pam_cracklib-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_cracklib/pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-author"]/*)'/>
- </section>
-</section>
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_tally.xml b/doc/sag/pam_tally.xml
deleted file mode 100644
index ec4afa52..00000000
--- a/doc/sag/pam_tally.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?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_tally'>
- <title>pam_tally - login counter (tallying) module</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_tally-cmdsynopsis1"]/*)'/>
- </cmdsynopsis>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_tally-cmdsynopsis2"]/*)'/>
- </cmdsynopsis>
- <section id='sag-pam_tally-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-description"]/*)'/>
- </section>
- <section id='sag-pam_tally-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-options"]/*)'/>
- </section>
- <section id='sag-pam_tally-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-types"]/*)'/>
- </section>
- <section id='sag-pam_tally-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-return_values"]/*)'/>
- </section>
- <section id='sag-pam_tally-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-examples"]/*)'/>
- </section>
- <section id='sag-pam_tally-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-author"]/*)'/>
- </section>
-</section>
diff --git a/doc/sag/pam_tally2.xml b/doc/sag/pam_tally2.xml
deleted file mode 100644
index 085003d3..00000000
--- a/doc/sag/pam_tally2.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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_tally2'>
- <title>pam_tally2 - login counter (tallying) module</title>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_tally2-cmdsynopsis1"]/*)'/>
- </cmdsynopsis>
- <cmdsynopsis>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_tally2-cmdsynopsis2"]/*)'/>
- </cmdsynopsis>
- <section id='sag-pam_tally2-description'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-description"]/*)'/>
- </section>
- <section id='sag-pam_tally2-options'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-options"]/*)'/>
- </section>
- <section id='sag-pam_tally2-types'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-types"]/*)'/>
- </section>
- <section id='sag-pam_tally2-return_values'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-return_values"]/*)'/>
- </section>
- <section id='sag-pam_tally2-notes'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-notes"]/*)'/>
- </section>
- <section id='sag-pam_tally2-examples'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-examples"]/*)'/>
- </section>
- <section id='sag-pam_tally2-files'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-files"]/*)'/>
- </section>
- <section id='sag-pam_tally2-author'>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../../modules/pam_tally2/pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-author"]/*)'/>
- </section>
-</section>
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 12bc0683..3213eaa0 100644
--- a/doc/specs/Makefile.in
+++ b/doc/specs/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
noinst_PROGRAMS = padout$(EXEEXT)
subdir = doc/specs
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -256,10 +259,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @BUILD_CFLAGS@
CPP = @CPP@
CPPFLAGS = @BUILD_CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -269,12 +276,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -288,7 +299,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -307,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@
@@ -335,8 +347,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -347,11 +358,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -396,7 +412,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -404,9 +419,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -416,6 +428,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -670,7 +683,8 @@ installdirs:
done
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -777,7 +791,7 @@ ps-am:
uninstall-am: uninstall-docDATA
-.MAKE: all check install install-am install-strip
+.MAKE: all check install install-am install-exec install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
diff --git a/doc/specs/parse_y.c b/doc/specs/parse_y.c
index da163a36..7009e3f9 100644
--- a/doc/specs/parse_y.c
+++ b/doc/specs/parse_y.c
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.5. */
+/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -33,6 +34,10 @@
/* C LALR(1) parser skeleton written by Richard Stallman, by
simplifying the original so-called "semantic" parser. */
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+ especially those whose name start with YY_ or yy_. They are
+ private implementation details that can be changed or removed. */
+
/* All symbols defined below should begin with yy or YY, to avoid
infringing on user name space. This should be done even for local
variables, as they might otherwise be expanded by user macros.
@@ -40,11 +45,11 @@
define necessary library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below. */
-/* Identify Bison output. */
-#define YYBISON 1
+/* Identify Bison output, and Bison version. */
+#define YYBISON 30706
-/* Bison version. */
-#define YYBISON_VERSION "3.0.5"
+/* Bison version string. */
+#define YYBISON_VERSION "3.7.6"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -61,8 +66,8 @@
-/* Copy the first part of user declarations. */
-#line 2 "parse_y.y" /* yacc.c:339 */
+/* First part of user prologue. */
+#line 2 "parse_y.y"
#ifdef HAVE_CONFIG_H
# include <config.h>
@@ -87,26 +92,31 @@
extern void set_label(const char *label, const char *target);
char *new_counter(const char *key);
-#line 91 "parse_y.c" /* yacc.c:339 */
+#line 96 "parse_y.c"
+# ifndef YY_CAST
+# ifdef __cplusplus
+# define YY_CAST(Type, Val) static_cast<Type> (Val)
+# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+# else
+# define YY_CAST(Type, Val) ((Type) (Val))
+# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+# endif
+# endif
# ifndef YY_NULLPTR
-# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULLPTR nullptr
+# if defined __cplusplus
+# if 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
# else
-# define YY_NULLPTR 0
+# define YY_NULLPTR ((void*)0)
# endif
# endif
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* In a future release of Bison, this section will be replaced
- by #include "y.tab.h". */
+/* Use api.header.include to #include this header
+ instead of duplicating it here. */
#ifndef YY_YY_PARSE_Y_H_INCLUDED
# define YY_YY_PARSE_Y_H_INCLUDED
/* Debug traces. */
@@ -117,21 +127,30 @@
extern int yydebug;
#endif
-/* Token type. */
+/* Token kinds. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
- NEW_COUNTER = 258,
- LABEL = 259,
- HASH = 260,
- CHAR = 261,
- NEWLINE = 262,
- NO_INDENT = 263,
- RIGHT = 264
+ YYEMPTY = -2,
+ YYEOF = 0, /* "end of file" */
+ YYerror = 256, /* error */
+ YYUNDEF = 257, /* "invalid token" */
+ NEW_COUNTER = 258, /* NEW_COUNTER */
+ LABEL = 259, /* LABEL */
+ HASH = 260, /* HASH */
+ CHAR = 261, /* CHAR */
+ NEWLINE = 262, /* NEWLINE */
+ NO_INDENT = 263, /* NO_INDENT */
+ RIGHT = 264 /* RIGHT */
};
+ typedef enum yytokentype yytoken_kind_t;
#endif
-/* Tokens. */
+/* Token kinds. */
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
#define NEW_COUNTER 258
#define LABEL 259
#define HASH 260
@@ -142,17 +161,16 @@ extern int yydebug;
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
union YYSTYPE
{
-#line 27 "parse_y.y" /* yacc.c:355 */
+#line 27 "parse_y.y"
int def;
char *string;
-#line 154 "parse_y.c" /* yacc.c:355 */
-};
+#line 172 "parse_y.c"
+};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
@@ -164,37 +182,115 @@ extern YYSTYPE yylval;
int yyparse (void);
#endif /* !YY_YY_PARSE_Y_H_INCLUDED */
+/* Symbol kind. */
+enum yysymbol_kind_t
+{
+ YYSYMBOL_YYEMPTY = -2,
+ YYSYMBOL_YYEOF = 0, /* "end of file" */
+ YYSYMBOL_YYerror = 1, /* error */
+ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
+ YYSYMBOL_NEW_COUNTER = 3, /* NEW_COUNTER */
+ YYSYMBOL_LABEL = 4, /* LABEL */
+ YYSYMBOL_HASH = 5, /* HASH */
+ YYSYMBOL_CHAR = 6, /* CHAR */
+ YYSYMBOL_NEWLINE = 7, /* NEWLINE */
+ YYSYMBOL_NO_INDENT = 8, /* NO_INDENT */
+ YYSYMBOL_RIGHT = 9, /* RIGHT */
+ YYSYMBOL_YYACCEPT = 10, /* $accept */
+ YYSYMBOL_doc = 11, /* doc */
+ YYSYMBOL_stuff = 12, /* stuff */
+ YYSYMBOL_text = 13 /* text */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
-/* Copy the second part of user declarations. */
-#line 171 "parse_y.c" /* yacc.c:358 */
#ifdef short
# undef short
#endif
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+ <limits.h> and (if available) <stdint.h> are included
+ so that the code can choose integer types of a good width. */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_STDINT_H
+# endif
#endif
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+ signed or unsigned integer of at least N bits. In tables they can
+ save space and decrease cache pressure. Promoting to a signed type
+ helps avoid bugs in integer arithmetic. */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
#else
typedef signed char yytype_int8;
#endif
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
+#else
+typedef short yytype_int16;
+#endif
+
+/* Work around bug in HP-UX 11.23, which defines these macros
+ incorrectly for preprocessor constants. This workaround can likely
+ be removed in 2023, as HPE has promised support for HP-UX 11.23
+ (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+ <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
+#endif
+
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
#else
-typedef unsigned short int yytype_uint16;
+typedef short yytype_uint8;
#endif
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
#else
-typedef short int yytype_int16;
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+# define YYPTRDIFF_T __PTRDIFF_TYPE__
+# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+# ifndef ptrdiff_t
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# endif
+# define YYPTRDIFF_T ptrdiff_t
+# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+# define YYPTRDIFF_T long
+# define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
#endif
#ifndef YYSIZE_T
@@ -202,15 +298,28 @@ typedef short int yytype_int16;
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
-# define YYSIZE_T unsigned int
+# define YYSIZE_T unsigned
# endif
#endif
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM \
+ YY_CAST (YYPTRDIFF_T, \
+ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
+ ? YYPTRDIFF_MAXIMUM \
+ : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int8 yy_state_t;
+
+/* State numbers in computations. */
+typedef int yy_state_fast_t;
#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
@@ -224,47 +333,37 @@ typedef short int yytype_int16;
# endif
#endif
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__ \
- && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
- || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-# define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define YY_ATTRIBUTE_PURE
+# endif
#endif
#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
- && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-# define _Noreturn __declspec (noreturn)
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
# else
-# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+# define YY_ATTRIBUTE_UNUSED
# endif
#endif
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
+# define YY_USE(E) ((void) (E))
#else
-# define YYUSE(E) /* empty */
+# define YY_USE(E) /* empty */
#endif
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop")
#else
# define YY_INITIAL_VALUE(Value) Value
@@ -277,8 +376,22 @@ typedef short int yytype_int16;
# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END \
+ _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
-#if ! defined yyoverflow || YYERROR_VERBOSE
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if !defined yyoverflow
/* The parser invokes alloca or malloc; define the necessary symbols. */
@@ -343,8 +456,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
#if (! defined yyoverflow \
&& (! defined __cplusplus \
@@ -353,17 +465,17 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
/* A type that is properly aligned for any stack member. */
union yyalloc
{
- yytype_int16 yyss_alloc;
+ yy_state_t yyss_alloc;
YYSTYPE yyvs_alloc;
};
/* The size of the maximum gap between one aligned stack and the next. */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
- ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
# define YYCOPY_NEEDED 1
@@ -376,11 +488,11 @@ union yyalloc
# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
do \
{ \
- YYSIZE_T yynewbytes; \
+ YYPTRDIFF_T yynewbytes; \
YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
+ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / YYSIZEOF (*yyptr); \
} \
while (0)
@@ -392,12 +504,12 @@ union yyalloc
# ifndef YYCOPY
# if defined __GNUC__ && 1 < __GNUC__
# define YYCOPY(Dst, Src, Count) \
- __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
# else
# define YYCOPY(Dst, Src, Count) \
do \
{ \
- YYSIZE_T yyi; \
+ YYPTRDIFF_T yyi; \
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
@@ -420,17 +532,20 @@ union yyalloc
/* YYNSTATES -- Number of states. */
#define YYNSTATES 19
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
- by yylex, with out-of-bounds checking. */
-#define YYUNDEFTOK 2
+/* YYMAXUTOK -- Last valid token kind. */
#define YYMAXUTOK 264
-#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, with out-of-bounds checking. */
+#define YYTRANSLATE(YYX) \
+ (0 <= (YYX) && (YYX) <= YYMAXUTOK \
+ ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
+ : YYSYMBOL_YYUNDEF)
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
- as returned by yylex, without out-of-bounds checking. */
-static const yytype_uint8 yytranslate[] =
+ as returned by yylex. */
+static const yytype_int8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -470,33 +585,47 @@ static const yytype_uint8 yyrline[] =
};
#endif
-#if YYDEBUG || YYERROR_VERBOSE || 0
+/** Accessing symbol of state STATE. */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+ YYSYMBOL. No bounds checking. */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
- "$end", "error", "$undefined", "NEW_COUNTER", "LABEL", "HASH", "CHAR",
- "NEWLINE", "NO_INDENT", "RIGHT", "$accept", "doc", "stuff", "text", YY_NULLPTR
+ "\"end of file\"", "error", "\"invalid token\"", "NEW_COUNTER", "LABEL",
+ "HASH", "CHAR", "NEWLINE", "NO_INDENT", "RIGHT", "$accept", "doc",
+ "stuff", "text", YY_NULLPTR
};
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+ return yytname[yysymbol];
+}
#endif
-# ifdef YYPRINT
+#ifdef YYPRINT
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
(internal) symbol number NUM (which must be that of a token). */
-static const yytype_uint16 yytoknum[] =
+static const yytype_int16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264
};
-# endif
+#endif
-#define YYPACT_NINF -3
+#define YYPACT_NINF (-3)
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-3)))
+#define yypact_value_is_default(Yyn) \
+ ((Yyn) == YYPACT_NINF)
-#define YYTABLE_NINF -1
+#define YYTABLE_NINF (-1)
-#define yytable_value_is_error(Yytable_value) \
+#define yytable_value_is_error(Yyn) \
0
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -510,7 +639,7 @@ static const yytype_int8 yypact[] =
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
Performed when YYTABLE does not specify something else to do. Zero
means the default is an error. */
-static const yytype_uint8 yydefact[] =
+static const yytype_int8 yydefact[] =
{
2, 8, 1, 3, 0, 15, 14, 13, 10, 4,
12, 8, 9, 0, 11, 5, 8, 0, 6
@@ -525,13 +654,13 @@ static const yytype_int8 yypgoto[] =
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- -1, 1, 4, 12
+ 0, 1, 4, 12
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule whose
number is the opposite. If YYTABLE_NINF, syntax error. */
-static const yytype_uint8 yytable[] =
+static const yytype_int8 yytable[] =
{
2, 5, 6, 7, 8, 18, 10, 3, 5, 6,
7, 8, 9, 10, 11, 5, 6, 7, 8, 15,
@@ -547,31 +676,31 @@ static const yytype_int8 yycheck[] =
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
-static const yytype_uint8 yystos[] =
+static const yytype_int8 yystos[] =
{
0, 11, 0, 7, 12, 3, 4, 5, 6, 7,
8, 9, 13, 12, 6, 7, 9, 12, 7
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
+static const yytype_int8 yyr1[] =
{
0, 10, 11, 11, 11, 11, 11, 11, 12, 12,
13, 13, 13, 13, 13, 13
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
+static const yytype_int8 yyr2[] =
{
0, 2, 0, 2, 3, 5, 7, 7, 0, 2,
1, 2, 1, 1, 1, 1
};
+enum { YYENOMEM = -2 };
+
#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
@@ -580,27 +709,26 @@ static const yytype_uint8 yyr2[] =
#define YYRECOVERING() (!!yyerrstatus)
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- YYPOPSTACK (yylen); \
- yystate = *yyssp; \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (0)
-
-/* Error token number */
-#define YYTERROR 1
-#define YYERRCODE 256
-
+#define YYBACKUP(Token, Value) \
+ do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+ while (0)
+
+/* Backward compatibility with an undocumented macro.
+ Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
/* Enable debugging if requested. */
@@ -618,54 +746,58 @@ do { \
} while (0)
/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
+# ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yy_symbol_print (stderr, \
- Type, Value); \
+ Kind, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT. |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO. |
+`-----------------------------------*/
static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo,
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
{
- FILE *yyo = yyoutput;
- YYUSE (yyo);
+ FILE *yyoutput = yyo;
+ YY_USE (yyoutput);
if (!yyvaluep)
return;
# ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+ if (yykind < YYNTOKENS)
+ YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
# endif
- YYUSE (yytype);
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YY_USE (yykind);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
}
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO. |
+`---------------------------*/
static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo,
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
{
- YYFPRINTF (yyoutput, "%s %s (",
- yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+ YYFPRINTF (yyo, "%s %s (",
+ yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
+ yy_symbol_value_print (yyo, yykind, yyvaluep);
+ YYFPRINTF (yyo, ")");
}
/*------------------------------------------------------------------.
@@ -674,7 +806,7 @@ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
`------------------------------------------------------------------*/
static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
{
YYFPRINTF (stderr, "Stack now");
for (; yybottom <= yytop; yybottom++)
@@ -697,21 +829,21 @@ do { \
`------------------------------------------------*/
static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
+ int yyrule)
{
- unsigned long int yylno = yyrline[yyrule];
+ int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
- YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
yyrule - 1, yylno);
/* The symbols being reduced. */
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
yy_symbol_print (stderr,
- yystos[yyssp[yyi + 1 - yynrhs]],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
+ YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
+ &yyvsp[(yyi + 1) - (yynrhs)]);
YYFPRINTF (stderr, "\n");
}
}
@@ -726,8 +858,8 @@ do { \
multiple parsers can coexist. */
int yydebug;
#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
@@ -750,250 +882,30 @@ int yydebug;
#endif
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-# if defined __GLIBC__ && defined _STRING_H
-# define yystrlen strlen
-# else
-/* Return the length of YYSTR. */
-static YYSIZE_T
-yystrlen (const char *yystr)
-{
- YYSIZE_T yylen;
- for (yylen = 0; yystr[yylen]; yylen++)
- continue;
- return yylen;
-}
-# endif
-# endif
-
-# ifndef yystpcpy
-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-# define yystpcpy stpcpy
-# else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
- YYDEST. */
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-{
- char *yyd = yydest;
- const char *yys = yysrc;
-
- while ((*yyd++ = *yys++) != '\0')
- continue;
-
- return yyd - 1;
-}
-# endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
- quotes and backslashes, so that it's suitable for yyerror. The
- heuristic is that double-quoting is unnecessary unless the string
- contains an apostrophe, a comma, or backslash (other than
- backslash-backslash). YYSTR is taken from yytname. If YYRES is
- null, do not copy; instead, return the length of what the result
- would have been. */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
- if (*yystr == '"')
- {
- YYSIZE_T yyn = 0;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
- do_not_strip_quotes: ;
- }
-
- if (! yyres)
- return yystrlen (yystr);
-
- return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
- about the unexpected token YYTOKEN for the state stack whose top is
- YYSSP.
-
- Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
- not large enough to hold the message. In that case, also set
- *YYMSG_ALLOC to the required number of bytes. Return 2 if the
- required number of bytes is too large to store. */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
- yytype_int16 *yyssp, int yytoken)
-{
- YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
- YYSIZE_T yysize = yysize0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- /* Internationalized format string. */
- const char *yyformat = YY_NULLPTR;
- /* Arguments of yyformat. */
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- /* Number of reported tokens (one for the "unexpected", one per
- "expected"). */
- int yycount = 0;
-
- /* There are many possibilities here to consider:
- - If this state is a consistent state with a default action, then
- the only way this function was invoked is if the default action
- is an error action. In that case, don't check for expected
- tokens because there are none.
- - The only way there can be no lookahead present (in yychar) is if
- this state is a consistent state with a default action. Thus,
- detecting the absence of a lookahead is sufficient to determine
- that there is no unexpected or expected token to report. In that
- case, just report a simple "syntax error".
- - Don't assume there isn't a lookahead just because this state is a
- consistent state with a default action. There might have been a
- previous inconsistent state, consistent state with a non-default
- action, or user semantic action that manipulated yychar.
- - Of course, the expected token list depends on states to have
- correct lookahead information, and it depends on the parser not
- to perform extra reductions after fetching a lookahead from the
- scanner and before detecting a syntax error. Thus, state merging
- (from LALR or IELR) and default reductions corrupt the expected
- token list. However, the list is correct for canonical LR with
- one exception: it will still contain any token that will not be
- accepted due to an error action in a later state.
- */
- if (yytoken != YYEMPTY)
- {
- int yyn = yypact[*yyssp];
- yyarg[yycount++] = yytname[yytoken];
- if (!yypact_value_is_default (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yyx;
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
- && !yytable_value_is_error (yytable[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- {
- YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
- if (! (yysize <= yysize1
- && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
- return 2;
- yysize = yysize1;
- }
- }
- }
- }
-
- switch (yycount)
- {
-# define YYCASE_(N, S) \
- case N: \
- yyformat = S; \
- break
- default: /* Avoid compiler warnings. */
- YYCASE_(0, YY_("syntax error"));
- YYCASE_(1, YY_("syntax error, unexpected %s"));
- YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
- YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
- YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
- YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
- }
- {
- YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
- if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
- return 2;
- yysize = yysize1;
- }
- if (*yymsg_alloc < yysize)
- {
- *yymsg_alloc = 2 * yysize;
- if (! (yysize <= *yymsg_alloc
- && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
- *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
- return 1;
- }
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- {
- char *yyp = *yymsg;
- int yyi = 0;
- while ((*yyp = *yyformat) != '\0')
- if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyformat += 2;
- }
- else
- {
- yyp++;
- yyformat++;
- }
- }
- return 0;
-}
-#endif /* YYERROR_VERBOSE */
/*-----------------------------------------------.
| Release the memory associated to this symbol. |
`-----------------------------------------------*/
static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+yydestruct (const char *yymsg,
+ yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
{
- YYUSE (yyvaluep);
+ YY_USE (yyvaluep);
if (!yymsg)
yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
- YYUSE (yytype);
+ YY_USE (yykind);
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
-
-
-/* The lookahead symbol. */
+/* Lookahead token kind. */
int yychar;
/* The semantic value of the lookahead symbol. */
@@ -1002,6 +914,8 @@ YYSTYPE yylval;
int yynerrs;
+
+
/*----------.
| yyparse. |
`----------*/
@@ -1009,43 +923,36 @@ int yynerrs;
int
yyparse (void)
{
- int yystate;
+ yy_state_fast_t yystate = 0;
/* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
+ int yyerrstatus = 0;
- /* The stacks and their tools:
- 'yyss': related to states.
- 'yyvs': related to semantic values.
-
- Refer to the stacks through separate pointers, to allow yyoverflow
+ /* Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss;
- yytype_int16 *yyssp;
+ /* Their size. */
+ YYPTRDIFF_T yystacksize = YYINITDEPTH;
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs;
- YYSTYPE *yyvsp;
+ /* The state stack: array, bottom, top. */
+ yy_state_t yyssa[YYINITDEPTH];
+ yy_state_t *yyss = yyssa;
+ yy_state_t *yyssp = yyss;
- YYSIZE_T yystacksize;
+ /* The semantic value stack: array, bottom, top. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp = yyvs;
int yyn;
+ /* The return value of yyparse. */
int yyresult;
- /* Lookahead token as an internal (translated) token number. */
- int yytoken = 0;
+ /* Lookahead symbol kind. */
+ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
-#if YYERROR_VERBOSE
- /* Buffer for error messages, and its allocated size. */
- char yymsgbuf[128];
- char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
@@ -1053,58 +960,60 @@ yyparse (void)
Keep to zero when no symbol should be popped. */
int yylen = 0;
- yyssp = yyss = yyssa;
- yyvsp = yyvs = yyvsa;
- yystacksize = YYINITDEPTH;
-
YYDPRINTF ((stderr, "Starting parse\n"));
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
yychar = YYEMPTY; /* Cause a token to be read. */
goto yysetstate;
+
/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
+| yynewstate -- push a new state, which is found in yystate. |
`------------------------------------------------------------*/
- yynewstate:
+yynewstate:
/* In all cases, when you get here, the value and location stacks
have just been pushed. So pushing a state here evens the stacks. */
yyssp++;
- yysetstate:
- *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate. |
+`--------------------------------------------------------------------*/
+yysetstate:
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+ YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+ YY_IGNORE_USELESS_CAST_BEGIN
+ *yyssp = YY_CAST (yy_state_t, yystate);
+ YY_IGNORE_USELESS_CAST_END
+ YY_STACK_PRINT (yyss, yyssp);
if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+#else
{
/* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
+ YYPTRDIFF_T yysize = yyssp - yyss + 1;
-#ifdef yyoverflow
+# if defined yyoverflow
{
/* Give user a chance to reallocate the stack. Use copies of
these so that the &'s don't force the real ones into
memory. */
+ yy_state_t *yyss1 = yyss;
YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
data in use in that stack, in bytes. This used to be a
conditional around just the two extra args, but that might
be undefined if yyoverflow is a macro. */
yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
+ &yyss1, yysize * YYSIZEOF (*yyssp),
+ &yyvs1, yysize * YYSIZEOF (*yyvsp),
&yystacksize);
-
yyss = yyss1;
yyvs = yyvs1;
}
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
goto yyexhaustedlab;
@@ -1113,9 +1022,10 @@ yyparse (void)
yystacksize = YYMAXDEPTH;
{
- yytype_int16 *yyss1 = yyss;
+ yy_state_t *yyss1 = yyss;
union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ YY_CAST (union yyalloc *,
+ YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
if (! yyptr)
goto yyexhaustedlab;
YYSTACK_RELOCATE (yyss_alloc, yyss);
@@ -1125,30 +1035,30 @@ yyparse (void)
YYSTACK_FREE (yyss1);
}
# endif
-#endif /* no yyoverflow */
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
+ YY_IGNORE_USELESS_CAST_BEGIN
+ YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+ YY_CAST (long, yystacksize)));
+ YY_IGNORE_USELESS_CAST_END
if (yyss + yystacksize - 1 <= yyssp)
YYABORT;
}
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
if (yystate == YYFINAL)
YYACCEPT;
goto yybackup;
+
/*-----------.
| yybackup. |
`-----------*/
yybackup:
-
/* Do appropriate processing given the current state. Read a
lookahead token if we need one and don't already have one. */
@@ -1159,18 +1069,29 @@ yybackup:
/* Not known => get a lookahead token if don't already have one. */
- /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
if (yychar == YYEMPTY)
{
- YYDPRINTF ((stderr, "Reading a token: "));
+ YYDPRINTF ((stderr, "Reading a token\n"));
yychar = yylex ();
}
if (yychar <= YYEOF)
{
- yychar = yytoken = YYEOF;
+ yychar = YYEOF;
+ yytoken = YYSYMBOL_YYEOF;
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
+ else if (yychar == YYerror)
+ {
+ /* The scanner already issued an error message, process directly
+ to error recovery. But do not keep the error token as
+ lookahead, it is too special and may lead us to an endless
+ loop in error recovery. */
+ yychar = YYUNDEF;
+ yytoken = YYSYMBOL_YYerror;
+ goto yyerrlab1;
+ }
else
{
yytoken = YYTRANSLATE (yychar);
@@ -1198,15 +1119,13 @@ yybackup:
/* Shift the lookahead token. */
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token. */
- yychar = YYEMPTY;
-
yystate = yyn;
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
YY_IGNORE_MAYBE_UNINITIALIZED_END
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
goto yynewstate;
@@ -1221,7 +1140,7 @@ yydefault:
/*-----------------------------.
-| yyreduce -- Do a reduction. |
+| yyreduce -- do a reduction. |
`-----------------------------*/
yyreduce:
/* yyn is the number of a rule to reduce with. */
@@ -1241,18 +1160,18 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
- case 3:
-#line 40 "parse_y.y" /* yacc.c:1648 */
- {
+ case 3: /* doc: doc NEWLINE */
+#line 40 "parse_y.y"
+ {
printf("\n");
++line;
}
-#line 1251 "parse_y.c" /* yacc.c:1648 */
+#line 1170 "parse_y.c"
break;
- case 4:
-#line 44 "parse_y.y" /* yacc.c:1648 */
- {
+ case 4: /* doc: doc stuff NEWLINE */
+#line 44 "parse_y.y"
+ {
if (strlen((yyvsp[-1].string)) > (PAPER_WIDTH-(indent ? strlen(INDENT_STRING):0))) {
yyerror("line too long");
}
@@ -1261,12 +1180,12 @@ yyreduce:
indent = 1;
++line;
}
-#line 1265 "parse_y.c" /* yacc.c:1648 */
+#line 1184 "parse_y.c"
break;
- case 5:
-#line 53 "parse_y.y" /* yacc.c:1648 */
- {
+ case 5: /* doc: doc stuff RIGHT stuff NEWLINE */
+#line 53 "parse_y.y"
+ {
char fixed[PAPER_WIDTH+1];
int len;
@@ -1285,12 +1204,12 @@ yyreduce:
indent = 1;
++line;
}
-#line 1289 "parse_y.c" /* yacc.c:1648 */
+#line 1208 "parse_y.c"
break;
- case 6:
-#line 72 "parse_y.y" /* yacc.c:1648 */
- {
+ case 6: /* doc: doc stuff RIGHT stuff RIGHT stuff NEWLINE */
+#line 72 "parse_y.y"
+ {
char fixed[PAPER_WIDTH+1];
int len, l;
@@ -1317,12 +1236,12 @@ yyreduce:
indent = 1;
++line;
}
-#line 1321 "parse_y.c" /* yacc.c:1648 */
+#line 1240 "parse_y.c"
break;
- case 7:
-#line 99 "parse_y.y" /* yacc.c:1648 */
- {
+ case 7: /* doc: doc stuff RIGHT stuff RIGHT stuff NEWLINE */
+#line 99 "parse_y.y"
+ {
char fixed[PAPER_WIDTH+1];
int len, l;
@@ -1349,84 +1268,85 @@ yyreduce:
indent = 1;
++line;
}
-#line 1353 "parse_y.c" /* yacc.c:1648 */
+#line 1272 "parse_y.c"
break;
- case 8:
-#line 128 "parse_y.y" /* yacc.c:1648 */
- {
+ case 8: /* stuff: %empty */
+#line 128 "parse_y.y"
+ {
(yyval.string) = strdup("");
}
-#line 1361 "parse_y.c" /* yacc.c:1648 */
+#line 1280 "parse_y.c"
break;
- case 9:
-#line 131 "parse_y.y" /* yacc.c:1648 */
- {
+ case 9: /* stuff: stuff text */
+#line 131 "parse_y.y"
+ {
(yyval.string) = malloc(strlen((yyvsp[-1].string))+strlen((yyvsp[0].string))+1);
sprintf((yyval.string),"%s%s", (yyvsp[-1].string), (yyvsp[0].string));
free((yyvsp[-1].string));
free((yyvsp[0].string));
}
-#line 1372 "parse_y.c" /* yacc.c:1648 */
+#line 1291 "parse_y.c"
break;
- case 10:
-#line 139 "parse_y.y" /* yacc.c:1648 */
- {
+ case 10: /* text: CHAR */
+#line 139 "parse_y.y"
+ {
(yyval.string) = strdup(yytext);
}
-#line 1380 "parse_y.c" /* yacc.c:1648 */
+#line 1299 "parse_y.c"
break;
- case 11:
-#line 142 "parse_y.y" /* yacc.c:1648 */
- {
+ case 11: /* text: text CHAR */
+#line 142 "parse_y.y"
+ {
(yyval.string) = malloc(strlen((yyvsp[-1].string))+2);
sprintf((yyval.string),"%s%s", (yyvsp[-1].string), yytext);
free((yyvsp[-1].string));
}
-#line 1390 "parse_y.c" /* yacc.c:1648 */
+#line 1309 "parse_y.c"
break;
- case 12:
-#line 147 "parse_y.y" /* yacc.c:1648 */
- {
+ case 12: /* text: NO_INDENT */
+#line 147 "parse_y.y"
+ {
(yyval.string) = strdup("");
indent = 0;
}
-#line 1399 "parse_y.c" /* yacc.c:1648 */
+#line 1318 "parse_y.c"
break;
- case 13:
-#line 151 "parse_y.y" /* yacc.c:1648 */
- {
+ case 13: /* text: HASH */
+#line 151 "parse_y.y"
+ {
(yyval.string) = strdup("#");
}
-#line 1407 "parse_y.c" /* yacc.c:1648 */
+#line 1326 "parse_y.c"
break;
- case 14:
-#line 154 "parse_y.y" /* yacc.c:1648 */
- {
+ case 14: /* text: LABEL */
+#line 154 "parse_y.y"
+ {
if (((yyval.string) = get_label(yytext)) == NULL) {
set_label(yytext, last_label);
(yyval.string) = strdup("");
}
}
-#line 1418 "parse_y.c" /* yacc.c:1648 */
+#line 1337 "parse_y.c"
break;
- case 15:
-#line 160 "parse_y.y" /* yacc.c:1648 */
- {
+ case 15: /* text: NEW_COUNTER */
+#line 160 "parse_y.y"
+ {
(yyval.string) = new_counter(yytext);
}
-#line 1426 "parse_y.c" /* yacc.c:1648 */
+#line 1345 "parse_y.c"
break;
-#line 1430 "parse_y.c" /* yacc.c:1648 */
+#line 1349 "parse_y.c"
+
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -1440,25 +1360,23 @@ yyreduce:
case of YYERROR or YYBACKUP, subsequent parser actions might lead
to an incorrect destructor call or verbose syntax error message
before the lookahead is translated. */
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
YYPOPSTACK (yylen);
yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
*++yyvsp = yyval;
/* Now 'shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
+ {
+ const int yylhs = yyr1[yyn] - YYNTOKENS;
+ const int yyi = yypgoto[yylhs] + *yyssp;
+ yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+ ? yytable[yyi]
+ : yydefgoto[yylhs]);
+ }
goto yynewstate;
@@ -1469,50 +1387,14 @@ yyreduce:
yyerrlab:
/* Make sure we have latest lookahead translation. See comments at
user semantic actions for why this is necessary. */
- yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
+ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
/* If not already recovering from an error, report this error. */
if (!yyerrstatus)
{
++yynerrs;
-#if ! YYERROR_VERBOSE
yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
- yyssp, yytoken)
- {
- char const *yymsgp = YY_("syntax error");
- int yysyntax_error_status;
- yysyntax_error_status = YYSYNTAX_ERROR;
- if (yysyntax_error_status == 0)
- yymsgp = yymsg;
- else if (yysyntax_error_status == 1)
- {
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
- if (!yymsg)
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- yysyntax_error_status = 2;
- }
- else
- {
- yysyntax_error_status = YYSYNTAX_ERROR;
- yymsgp = yymsg;
- }
- }
- yyerror (yymsgp);
- if (yysyntax_error_status == 2)
- goto yyexhaustedlab;
- }
-# undef YYSYNTAX_ERROR
-#endif
}
-
-
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
@@ -1541,12 +1423,10 @@ yyerrlab:
| yyerrorlab -- error raised explicitly by YYERROR. |
`---------------------------------------------------*/
yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
+ /* Pacify compilers when the user code never invokes YYERROR and the
+ label yyerrorlab therefore never appears in user code. */
+ if (0)
+ YYERROR;
/* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
@@ -1563,13 +1443,14 @@ yyerrorlab:
yyerrlab1:
yyerrstatus = 3; /* Each real token shifted decrements this. */
+ /* Pop stack until we find a state that shifts the error token. */
for (;;)
{
yyn = yypact[yystate];
if (!yypact_value_is_default (yyn))
{
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ yyn += YYSYMBOL_YYerror;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
{
yyn = yytable[yyn];
if (0 < yyn)
@@ -1583,7 +1464,7 @@ yyerrlab1:
yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
+ YY_ACCESSING_SYMBOL (yystate), yyvsp);
YYPOPSTACK (1);
yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
@@ -1595,7 +1476,7 @@ yyerrlab1:
/* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
yystate = yyn;
goto yynewstate;
@@ -1608,6 +1489,7 @@ yyacceptlab:
yyresult = 0;
goto yyreturn;
+
/*-----------------------------------.
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
@@ -1615,16 +1497,21 @@ yyabortlab:
yyresult = 1;
goto yyreturn;
-#if !defined yyoverflow || YYERROR_VERBOSE
+
+#if !defined yyoverflow
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here. |
`-------------------------------------------------*/
yyexhaustedlab:
yyerror (YY_("memory exhausted"));
yyresult = 2;
- /* Fall through. */
+ goto yyreturn;
#endif
+
+/*-------------------------------------------------------.
+| yyreturn -- parsing is finished, clean up and return. |
+`-------------------------------------------------------*/
yyreturn:
if (yychar != YYEMPTY)
{
@@ -1641,20 +1528,18 @@ yyreturn:
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
+ YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
YYPOPSTACK (1);
}
#ifndef yyoverflow
if (yyss != yyssa)
YYSTACK_FREE (yyss);
#endif
-#if YYERROR_VERBOSE
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
-#endif
+
return yyresult;
}
-#line 165 "parse_y.y" /* yacc.c:1907 */
+
+#line 165 "parse_y.y"
typedef struct node_s {
diff --git a/doc/specs/parse_y.h b/doc/specs/parse_y.h
index 125010fa..7445ca81 100644
--- a/doc/specs/parse_y.h
+++ b/doc/specs/parse_y.h
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.5. */
+/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -30,6 +31,10 @@
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+ especially those whose name start with YY_ or yy_. They are
+ private implementation details that can be changed or removed. */
+
#ifndef YY_YY_PARSE_Y_H_INCLUDED
# define YY_YY_PARSE_Y_H_INCLUDED
/* Debug traces. */
@@ -40,21 +45,30 @@
extern int yydebug;
#endif
-/* Token type. */
+/* Token kinds. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
- NEW_COUNTER = 258,
- LABEL = 259,
- HASH = 260,
- CHAR = 261,
- NEWLINE = 262,
- NO_INDENT = 263,
- RIGHT = 264
+ YYEMPTY = -2,
+ YYEOF = 0, /* "end of file" */
+ YYerror = 256, /* error */
+ YYUNDEF = 257, /* "invalid token" */
+ NEW_COUNTER = 258, /* NEW_COUNTER */
+ LABEL = 259, /* LABEL */
+ HASH = 260, /* HASH */
+ CHAR = 261, /* CHAR */
+ NEWLINE = 262, /* NEWLINE */
+ NO_INDENT = 263, /* NO_INDENT */
+ RIGHT = 264 /* RIGHT */
};
+ typedef enum yytokentype yytoken_kind_t;
#endif
-/* Tokens. */
+/* Token kinds. */
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
#define NEW_COUNTER 258
#define LABEL 259
#define HASH 260
@@ -65,17 +79,16 @@ extern int yydebug;
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
union YYSTYPE
{
-#line 27 "parse_y.y" /* yacc.c:1910 */
+#line 27 "parse_y.y"
int def;
char *string;
-#line 77 "parse_y.h" /* yacc.c:1910 */
-};
+#line 90 "parse_y.h"
+};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
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 8ccf48f7..25bf4203 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -93,21 +93,24 @@ 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/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -130,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)
@@ -156,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)
@@ -176,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;; \
@@ -223,10 +232,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -236,12 +249,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -255,7 +272,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -274,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@
@@ -302,8 +320,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -314,11 +331,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -363,7 +385,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -371,9 +392,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -383,6 +401,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -446,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)
@@ -462,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
@@ -626,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
@@ -675,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 9252a837..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
@@ -35,7 +35,12 @@ libpam_la_SOURCES = pam_account.c pam_auth.c pam_data.c pam_delay.c \
pam_misc.c pam_password.c pam_prelude.c \
pam_session.c pam_start.c pam_strerror.c \
pam_vprompt.c pam_syslog.c pam_dynamic.c pam_audit.c \
+ pam_modutil_check_user.c \
pam_modutil_cleanup.c pam_modutil_getpwnam.c pam_modutil_ioloop.c \
pam_modutil_getgrgid.c pam_modutil_getpwuid.c pam_modutil_getgrnam.c \
pam_modutil_getspnam.c pam_modutil_getlogin.c pam_modutil_ingroup.c \
pam_modutil_priv.c pam_modutil_sanitize.c pam_modutil_searchkey.c
+
+# Pkg-config script.
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pam.pc
diff --git a/libpam/Makefile.in b/libpam/Makefile.in
index a1939ccf..597c8dcd 100644
--- a/libpam/Makefile.in
+++ b/libpam/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -19,6 +19,7 @@
#
+
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -96,25 +97,28 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libpam.map
subdir = libpam
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \
$(noinst_HEADERS) $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = pam.pc
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
@@ -143,7 +147,8 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
+ "$(DESTDIR)$(includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
am__DEPENDENCIES_1 =
libpam_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
@@ -152,12 +157,13 @@ am_libpam_la_OBJECTS = pam_account.lo pam_auth.lo pam_data.lo \
pam_get_authtok.lo pam_handlers.lo pam_item.lo pam_misc.lo \
pam_password.lo pam_prelude.lo pam_session.lo pam_start.lo \
pam_strerror.lo pam_vprompt.lo pam_syslog.lo pam_dynamic.lo \
- pam_audit.lo pam_modutil_cleanup.lo pam_modutil_getpwnam.lo \
- pam_modutil_ioloop.lo pam_modutil_getgrgid.lo \
- pam_modutil_getpwuid.lo pam_modutil_getgrnam.lo \
- pam_modutil_getspnam.lo pam_modutil_getlogin.lo \
- pam_modutil_ingroup.lo pam_modutil_priv.lo \
- pam_modutil_sanitize.lo pam_modutil_searchkey.lo
+ pam_audit.lo pam_modutil_check_user.lo pam_modutil_cleanup.lo \
+ pam_modutil_getpwnam.lo pam_modutil_ioloop.lo \
+ pam_modutil_getgrgid.lo pam_modutil_getpwuid.lo \
+ pam_modutil_getgrnam.lo pam_modutil_getspnam.lo \
+ pam_modutil_getlogin.lo pam_modutil_ingroup.lo \
+ pam_modutil_priv.lo pam_modutil_sanitize.lo \
+ pam_modutil_searchkey.lo
libpam_la_OBJECTS = $(am_libpam_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -188,6 +194,7 @@ am__depfiles_remade = ./$(DEPDIR)/pam_account.Plo \
./$(DEPDIR)/pam_end.Plo ./$(DEPDIR)/pam_env.Plo \
./$(DEPDIR)/pam_get_authtok.Plo ./$(DEPDIR)/pam_handlers.Plo \
./$(DEPDIR)/pam_item.Plo ./$(DEPDIR)/pam_misc.Plo \
+ ./$(DEPDIR)/pam_modutil_check_user.Plo \
./$(DEPDIR)/pam_modutil_cleanup.Plo \
./$(DEPDIR)/pam_modutil_getgrgid.Plo \
./$(DEPDIR)/pam_modutil_getgrnam.Plo \
@@ -230,6 +237,7 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+DATA = $(pkgconfig_DATA)
HEADERS = $(include_HEADERS) $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
@@ -250,7 +258,7 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in \
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/pam.pc.in \
$(top_srcdir)/build-aux/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
@@ -271,10 +279,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -284,12 +296,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -303,7 +319,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -322,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@
@@ -350,8 +367,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -362,11 +378,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -411,7 +432,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -419,9 +439,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -431,6 +448,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -453,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 \
@@ -461,11 +479,16 @@ libpam_la_SOURCES = pam_account.c pam_auth.c pam_data.c pam_delay.c \
pam_misc.c pam_password.c pam_prelude.c \
pam_session.c pam_start.c pam_strerror.c \
pam_vprompt.c pam_syslog.c pam_dynamic.c pam_audit.c \
+ pam_modutil_check_user.c \
pam_modutil_cleanup.c pam_modutil_getpwnam.c pam_modutil_ioloop.c \
pam_modutil_getgrgid.c pam_modutil_getpwuid.c pam_modutil_getgrnam.c \
pam_modutil_getspnam.c pam_modutil_getlogin.c pam_modutil_ingroup.c \
pam_modutil_priv.c pam_modutil_sanitize.c pam_modutil_searchkey.c
+
+# Pkg-config script.
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pam.pc
all: all-am
.SUFFIXES:
@@ -499,6 +522,8 @@ $(top_srcdir)/configure: $(am__configure_deps)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+pam.pc: $(top_builddir)/config.status $(srcdir)/pam.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@@ -557,6 +582,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_handlers.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_item.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_misc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_modutil_check_user.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_modutil_cleanup.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_modutil_getgrgid.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_modutil_getgrnam.Plo@am__quote@ # am--include-marker
@@ -609,6 +635,27 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || 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)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
install-includeHEADERS: $(include_HEADERS)
@$(NORMAL_INSTALL)
@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
@@ -718,9 +765,9 @@ distdir-am: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -773,6 +820,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/pam_handlers.Plo
-rm -f ./$(DEPDIR)/pam_item.Plo
-rm -f ./$(DEPDIR)/pam_misc.Plo
+ -rm -f ./$(DEPDIR)/pam_modutil_check_user.Plo
-rm -f ./$(DEPDIR)/pam_modutil_cleanup.Plo
-rm -f ./$(DEPDIR)/pam_modutil_getgrgid.Plo
-rm -f ./$(DEPDIR)/pam_modutil_getgrnam.Plo
@@ -808,7 +856,7 @@ info: info-am
info-am:
-install-data-am: install-includeHEADERS
+install-data-am: install-includeHEADERS install-pkgconfigDATA
install-dvi: install-dvi-am
@@ -850,6 +898,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/pam_handlers.Plo
-rm -f ./$(DEPDIR)/pam_item.Plo
-rm -f ./$(DEPDIR)/pam_misc.Plo
+ -rm -f ./$(DEPDIR)/pam_modutil_check_user.Plo
-rm -f ./$(DEPDIR)/pam_modutil_cleanup.Plo
-rm -f ./$(DEPDIR)/pam_modutil_getgrgid.Plo
-rm -f ./$(DEPDIR)/pam_modutil_getgrnam.Plo
@@ -885,7 +934,8 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
+uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+ uninstall-pkgconfigDATA
.MAKE: install-am install-strip
@@ -898,12 +948,12 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
install-exec-am install-html install-html-am \
install-includeHEADERS install-info install-info-am \
install-libLTLIBRARIES install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
+ install-pkgconfigDATA install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-includeHEADERS \
- uninstall-libLTLIBRARIES
+ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
.PRECIOUS: Makefile
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 ec05fe43..7721c0b7 100644
--- a/libpam/include/pam_inline.h
+++ b/libpam/include/pam_inline.h
@@ -9,7 +9,10 @@
#define PAM_INLINE_H
#include "pam_cc_compat.h"
+#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
+#include <errno.h>
/*
* Evaluates to
@@ -31,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_))
@@ -64,4 +73,106 @@ 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)
+{
+ /*
+ * The passwords array must contain npass preallocated
+ * buffers of length PAM_MAX_RESP_SIZE + 1.
+ */
+ int rbytes = 0;
+ int offset = 0;
+ int i = 0;
+ char *pptr;
+ while (npass > 0) {
+ rbytes = read(fd, passwords[i]+offset, PAM_MAX_RESP_SIZE+1-offset);
+
+ if (rbytes < 0) {
+ if (errno == EINTR) {
+ continue;
+ }
+ break;
+ }
+ if (rbytes == 0) {
+ break;
+ }
+
+ while (npass > 0 &&
+ (pptr = memchr(passwords[i] + offset, '\0', rbytes)) != NULL) {
+ ++pptr; /* skip the '\0' */
+ rbytes -= pptr - (passwords[i] + offset);
+ i++;
+ offset = 0;
+ npass--;
+ if (rbytes > 0) {
+ if (npass > 0) {
+ memcpy(passwords[i], pptr, rbytes);
+ }
+ pam_overwrite_n(pptr, rbytes);
+ }
+ }
+ offset += rbytes;
+ }
+
+ /* clear up */
+ if (offset > 0 && npass > 0) {
+ pam_overwrite_n(passwords[i], offset);
+ }
+
+ return i;
+}
+
#endif /* PAM_INLINE_H */
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 3a6aec6a..c2578323 100644
--- a/libpam/include/security/pam_modutil.h
+++ b/libpam/include/security/pam_modutil.h
@@ -58,6 +58,11 @@ extern "C" {
#include <security/_pam_types.h>
+extern int PAM_NONNULL((1,2))
+pam_modutil_check_user_in_passwd(pam_handle_t *pamh,
+ const char *user_name,
+ const char *file_name);
+
extern struct passwd * PAM_NONNULL((1,2))
pam_modutil_getpwnam(pam_handle_t *pamh, const char *user);
@@ -142,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/libpam.map b/libpam/libpam.map
index c9690a91..3cc7ef35 100644
--- a/libpam/libpam.map
+++ b/libpam/libpam.map
@@ -82,3 +82,8 @@ LIBPAM_1.4 {
global:
pam_start_confdir;
} LIBPAM_1.0;
+
+LIBPAM_MODUTIL_1.4.1 {
+ global:
+ pam_modutil_check_user_in_passwd;
+} LIBPAM_MODUTIL_1.3.2;
diff --git a/libpam/pam.pc.in b/libpam/pam.pc.in
new file mode 100644
index 00000000..c3fafe4b
--- /dev/null
+++ b/libpam/pam.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+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: @VERSION@
+Cflags: -I${includedir}
+Libs: -L${libdir} -lpam
diff --git a/libpam/pam_dispatch.c b/libpam/pam_dispatch.c
index cf632e8e..974104a2 100644
--- a/libpam/pam_dispatch.c
+++ b/libpam/pam_dispatch.c
@@ -424,7 +424,6 @@ int _pam_dispatch(pam_handle_t *pamh, int flags, int choice)
/* call the list of module functions */
pamh->choice = choice;
retval = _pam_dispatch_aux(pamh, flags, h, resumed, use_cached_chain);
- resumed = PAM_FALSE;
__PAM_TO_APP(pamh);
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 942253d8..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,31 +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->prompt);
+ pam_overwrite_string(pamh->confdir);
+ _pam_drop(pamh->confdir);
+
+ 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);
@@ -73,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_check_user.c b/libpam/pam_modutil_check_user.c
new file mode 100644
index 00000000..cf1bd1b5
--- /dev/null
+++ b/libpam/pam_modutil_check_user.c
@@ -0,0 +1,92 @@
+#include "pam_modutil_private.h"
+#include <security/pam_ext.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <syslog.h>
+
+int
+pam_modutil_check_user_in_passwd(pam_handle_t *pamh,
+ const char *user_name,
+ const char *file_name)
+{
+ int rc;
+ size_t user_len;
+ FILE *fp;
+ char line[BUFSIZ];
+
+ /* Validate the user name. */
+ if ((user_len = strlen(user_name)) == 0) {
+ pam_syslog(pamh, LOG_NOTICE, "user name is not valid");
+ return PAM_SERVICE_ERR;
+ }
+
+ if (user_len > sizeof(line) - sizeof(":")) {
+ pam_syslog(pamh, LOG_NOTICE, "user name is too long");
+ return PAM_SERVICE_ERR;
+ }
+
+ if (strchr(user_name, ':') != NULL) {
+ /*
+ * "root:x" is not a local user name even if the passwd file
+ * contains a line starting with "root:x:".
+ */
+ return PAM_PERM_DENIED;
+ }
+
+ /* Open the passwd file. */
+ if (file_name == NULL) {
+ file_name = "/etc/passwd";
+ }
+ if ((fp = fopen(file_name, "r")) == NULL) {
+ pam_syslog(pamh, LOG_ERR, "error opening %s: %m", file_name);
+ return PAM_SERVICE_ERR;
+ }
+
+ /*
+ * Scan the file using fgets() instead of fgetpwent_r() because
+ * the latter is not flexible enough in handling long lines
+ * in passwd files.
+ */
+ rc = PAM_PERM_DENIED;
+ while (fgets(line, sizeof(line), fp) != NULL) {
+ size_t line_len;
+ const char *str;
+
+ /*
+ * Does this line start with the user name
+ * followed by a colon?
+ */
+ if (strncmp(user_name, line, user_len) == 0 &&
+ line[user_len] == ':') {
+ rc = PAM_SUCCESS;
+ /*
+ * Continue reading the file to avoid timing attacks.
+ */
+ }
+ /* Has a newline been read? */
+ line_len = strlen(line);
+ if (line_len < sizeof(line) - 1 ||
+ line[line_len - 1] == '\n') {
+ /* Yes, continue with the next line. */
+ continue;
+ }
+
+ /* No, read till the end of this line first. */
+ while ((str = fgets(line, sizeof(line), fp)) != NULL) {
+ line_len = strlen(line);
+ if (line_len == 0 ||
+ line[line_len - 1] == '\n') {
+ break;
+ }
+ }
+ if (str == NULL) {
+ /* fgets returned NULL, we are done. */
+ break;
+ }
+ /* Continue with the next line. */
+ }
+
+ fclose(fp);
+ return rc;
+}
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_modutil_priv.c b/libpam/pam_modutil_priv.c
index e22fab1a..a463e06a 100644
--- a/libpam/pam_modutil_priv.c
+++ b/libpam/pam_modutil_priv.c
@@ -107,11 +107,20 @@ int pam_modutil_drop_priv(pam_handle_t *pamh,
* We should care to leave process credentials in consistent state.
* That is, e.g. if change_gid() succeeded but change_uid() failed,
* we should try to restore old gid.
+ *
+ * We try to add the supplementary groups on a best-effort
+ * basis. If it fails, it's not fatal: we fall back to using an
+ * empty list.
*/
- if (setgroups(0, NULL)) {
- pam_syslog(pamh, LOG_ERR,
- "pam_modutil_drop_priv: setgroups failed: %m");
- return cleanup(p);
+ if (initgroups(pw->pw_name, pw->pw_gid)) {
+ pam_syslog(pamh, LOG_WARNING,
+ "pam_modutil_drop_priv: initgroups failed: %m");
+
+ if (setgroups(0, NULL)) {
+ pam_syslog(pamh, LOG_ERR,
+ "pam_modutil_drop_priv: setgroups failed: %m");
+ return cleanup(p);
+ }
}
if (change_gid(pw->pw_gid, &p->old_gid)) {
pam_syslog(pamh, LOG_ERR,
diff --git a/libpam/pam_modutil_sanitize.c b/libpam/pam_modutil_sanitize.c
index 58b9537c..f26e8ec0 100644
--- a/libpam/pam_modutil_sanitize.c
+++ b/libpam/pam_modutil_sanitize.c
@@ -10,13 +10,6 @@
#include <fcntl.h>
#include <syslog.h>
#include <sys/resource.h>
-#include <dirent.h>
-#ifdef HAVE_SYS_VFS_H
-#include <sys/vfs.h>
-#endif
-#ifdef HAVE_LINUX_MAGIC_H
-#include <linux/magic.h>
-#endif
/*
* Creates a pipe, closes its write end, redirects fd to its read end.
@@ -91,69 +84,31 @@ redirect_out(pam_handle_t *pamh, enum pam_modutil_redirect_fd mode,
return fd;
}
-/* Check if path is in a procfs. */
-static int
-is_in_procfs(int fd)
-{
-#if defined HAVE_SYS_VFS_H && defined PROC_SUPER_MAGIC
- struct statfs stfs;
-
- if (fstatfs(fd, &stfs) == 0) {
- if (stfs.f_type == PROC_SUPER_MAGIC)
- return 1;
- } else {
- return 0;
- }
-#endif /* HAVE_SYS_VFS_H && PROC_SUPER_MAGIC */
-
- return -1;
-}
-
/* Closes all descriptors after stderr. */
static void
close_fds(void)
{
- DIR *dir = NULL;
- struct dirent *dent;
- int dfd = -1;
- int fd;
- struct rlimit rlim;
-
/*
* An arbitrary upper limit for the maximum file descriptor number
* returned by RLIMIT_NOFILE.
*/
- const unsigned int MAX_FD_NO = 65535;
+ const int MAX_FD_NO = 65535;
/* The lower limit is the same as for _POSIX_OPEN_MAX. */
- const unsigned int MIN_FD_NO = 20;
-
- /* If /proc is mounted, we can optimize which fd can be closed. */
- if ((dir = opendir("/proc/self/fd")) != NULL) {
- if ((dfd = dirfd(dir)) >= 0 && is_in_procfs(dfd) > 0) {
- while ((dent = readdir(dir)) != NULL) {
- fd = atoi(dent->d_name);
- if (fd > STDERR_FILENO && fd != dfd)
- close(fd);
- }
- } else {
- dfd = -1;
- }
- closedir(dir);
- }
+ const int MIN_FD_NO = 20;
- /* If /proc isn't available, fallback to the previous behavior. */
- if (dfd < 0) {
- if (getrlimit(RLIMIT_NOFILE, &rlim) || rlim.rlim_max > MAX_FD_NO)
- fd = MAX_FD_NO;
- else if (rlim.rlim_max < MIN_FD_NO)
- fd = MIN_FD_NO;
- else
- fd = rlim.rlim_max - 1;
-
- for (; fd > STDERR_FILENO; --fd)
- close(fd);
- }
+ int fd;
+ struct rlimit rlim;
+
+ if (getrlimit(RLIMIT_NOFILE, &rlim) || rlim.rlim_max > (rlim_t)MAX_FD_NO)
+ fd = MAX_FD_NO;
+ else if (rlim.rlim_max < (rlim_t)MIN_FD_NO)
+ fd = MIN_FD_NO;
+ else
+ fd = (int)rlim.rlim_max - 1;
+
+ for (; fd > STDERR_FILENO; --fd)
+ close(fd);
}
int
diff --git a/libpam/pam_start.c b/libpam/pam_start.c
index 59d06224..99dd0389 100644
--- a/libpam/pam_start.c
+++ b/libpam/pam_start.c
@@ -115,6 +115,7 @@ static int _pam_start_internal (
pam_syslog(*pamh, LOG_CRIT, "pam_start: malloc failed for pam_conv");
_pam_drop((*pamh)->service_name);
_pam_drop((*pamh)->user);
+ _pam_drop((*pamh)->confdir);
_pam_drop(*pamh);
return (PAM_BUF_ERR);
} else {
@@ -128,6 +129,7 @@ static int _pam_start_internal (
_pam_drop((*pamh)->pam_conversation);
_pam_drop((*pamh)->service_name);
_pam_drop((*pamh)->user);
+ _pam_drop((*pamh)->confdir);
_pam_drop(*pamh);
return PAM_ABORT;
}
@@ -145,6 +147,7 @@ static int _pam_start_internal (
_pam_drop((*pamh)->pam_conversation);
_pam_drop((*pamh)->service_name);
_pam_drop((*pamh)->user);
+ _pam_drop((*pamh)->confdir);
_pam_drop(*pamh);
return PAM_ABORT;
}
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.am b/libpam_misc/Makefile.am
index a4900bd9..4f01d322 100644
--- a/libpam_misc/Makefile.am
+++ b/libpam_misc/Makefile.am
@@ -20,3 +20,7 @@ libpam_misc_la_LIBADD = $(top_builddir)/libpam/libpam.la
lib_LTLIBRARIES = libpam_misc.la
libpam_misc_la_SOURCES = help_env.c misc_conv.c
+
+# Pkg-config script.
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pam_misc.pc
diff --git a/libpam_misc/Makefile.in b/libpam_misc/Makefile.in
index 5f6e92a9..1629e493 100644
--- a/libpam_misc/Makefile.in
+++ b/libpam_misc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -19,6 +19,7 @@
#
+
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -96,25 +97,28 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libpam_misc.map
subdir = libpam_misc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = pam_misc.pc
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
@@ -143,7 +147,8 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
+ "$(DESTDIR)$(includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libpam_misc_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
am_libpam_misc_la_OBJECTS = help_env.lo misc_conv.lo
@@ -199,6 +204,7 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+DATA = $(pkgconfig_DATA)
HEADERS = $(include_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
@@ -219,7 +225,7 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in \
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/pam_misc.pc.in \
$(top_srcdir)/build-aux/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
@@ -240,10 +246,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -253,12 +263,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -272,7 +286,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -291,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@
@@ -319,8 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -331,11 +345,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -380,7 +399,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -388,9 +406,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -400,6 +415,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -415,6 +431,10 @@ libpam_misc_la_LDFLAGS = -no-undefined -version-info 82:1:82 \
libpam_misc_la_LIBADD = $(top_builddir)/libpam/libpam.la
lib_LTLIBRARIES = libpam_misc.la
libpam_misc_la_SOURCES = help_env.c misc_conv.c
+
+# Pkg-config script.
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pam_misc.pc
all: all-am
.SUFFIXES:
@@ -448,6 +468,8 @@ $(top_srcdir)/configure: $(am__configure_deps)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+pam_misc.pc: $(top_builddir)/config.status $(srcdir)/pam_misc.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@@ -528,6 +550,27 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || 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)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
install-includeHEADERS: $(include_HEADERS)
@$(NORMAL_INSTALL)
@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
@@ -637,9 +680,9 @@ distdir-am: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -697,7 +740,7 @@ info: info-am
info-am:
-install-data-am: install-includeHEADERS
+install-data-am: install-includeHEADERS install-pkgconfigDATA
install-dvi: install-dvi-am
@@ -744,7 +787,8 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
+uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+ uninstall-pkgconfigDATA
.MAKE: install-am install-strip
@@ -757,12 +801,12 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
install-exec-am install-html install-html-am \
install-includeHEADERS install-info install-info-am \
install-libLTLIBRARIES install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
+ install-pkgconfigDATA install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-includeHEADERS \
- uninstall-libLTLIBRARIES
+ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
.PRECIOUS: Makefile
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 f6397af1..dbcd6aec 100644
--- a/libpam_misc/misc_conv.c
+++ b/libpam_misc/misc_conv.c
@@ -17,8 +17,9 @@
#include <security/pam_appl.h>
#include <security/pam_misc.h>
+#include "pam_inline.h"
-#define INPUTSIZE PAM_MAX_RESP_SIZE /* maximum length of input+1 */
+#define INPUTSIZE PAM_MISC_CONV_BUFSIZE /* maximum length of input+1 */
#define CONV_ECHO_ON 1 /* types of echo state */
#define CONV_ECHO_OFF 0
@@ -184,15 +185,17 @@ static int read_string(int echo, const char *prompt, char **retstr)
nc++) {
int rv;
if ((rv=read(STDIN_FILENO, line+nc, 1)) != 1) {
- if (rv < 0)
+ if (rv < 0) {
+ pam_overwrite_n(line, (unsigned int) nc);
nc = rv;
+ }
break;
}
}
if (have_term) {
(void) tcsetattr(STDIN_FILENO, TCSADRAIN, &term_before);
if (!echo || expired) /* do we need a newline? */
- fprintf(stderr,"\n");
+ fprintf(stderr, "\n");
}
if ( delay > 0 ) {
reset_alarm(&old_sig);
@@ -202,7 +205,7 @@ static int read_string(int echo, const char *prompt, char **retstr)
} else if (nc > 0) { /* we got some user input */
D(("we got some user input"));
- if (nc > 0 && line[nc-1] == '\n') { /* <NUL> terminate */
+ if (line[nc-1] == '\n') { /* <NUL> terminate */
line[--nc] = '\0';
} else {
if (echo) {
@@ -211,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;
@@ -244,13 +247,13 @@ static int read_string(int echo, const char *prompt, char **retstr)
D(("the timer appears to have expired"));
*retstr = NULL;
- _pam_overwrite(line);
+ pam_overwrite_array(line);
cleanexit:
if (have_term) {
(void) sigprocmask(SIG_SETMASK, &oset, NULL);
- (void) tcsetattr(STDIN_FILENO, TCSADRAIN, &term_before);
+ (void) tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_before);
}
return nc;
@@ -374,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
new file mode 100644
index 00000000..c3e03c4f
--- /dev/null
+++ b/libpam_misc/pam_misc.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: pam_misc
+Description: Miscellaneous functions that make the job of writing PAM-aware applications easier.
+URL: http://www.linux-pam.org/
+Version: @VERSION@
+Cflags: -I${includedir}
+Libs: -L${libdir} -lpam_misc
diff --git a/libpamc/Makefile.am b/libpamc/Makefile.am
index 85c9ce7f..2ebeadca 100644
--- a/libpamc/Makefile.am
+++ b/libpamc/Makefile.am
@@ -22,3 +22,7 @@ endif
lib_LTLIBRARIES = libpamc.la
libpamc_la_SOURCES = pamc_client.c pamc_converse.c pamc_load.c
+
+# Pkg-config script.
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pamc.pc
diff --git a/libpamc/Makefile.in b/libpamc/Makefile.in
index 47cb3034..c99f86cd 100644
--- a/libpamc/Makefile.in
+++ b/libpamc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -19,6 +19,7 @@
#
+
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -96,25 +97,28 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libpamc.map
subdir = libpamc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \
$(noinst_HEADERS) $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = pamc.pc
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
@@ -143,7 +147,8 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
+ "$(DESTDIR)$(includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libpamc_la_LIBADD =
am_libpamc_la_OBJECTS = pamc_client.lo pamc_converse.lo pamc_load.lo
@@ -206,6 +211,7 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+DATA = $(pkgconfig_DATA)
HEADERS = $(include_HEADERS) $(noinst_HEADERS)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
@@ -235,7 +241,7 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/pamc.pc.in \
$(top_srcdir)/build-aux/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
@@ -281,10 +287,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -294,12 +304,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -313,7 +327,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -332,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@
@@ -360,8 +375,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -372,11 +386,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -421,7 +440,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -429,9 +447,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -441,6 +456,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -455,6 +471,10 @@ libpamc_la_LDFLAGS = -no-undefined -version-info 82:1:82 \
$(am__append_1)
lib_LTLIBRARIES = libpamc.la
libpamc_la_SOURCES = pamc_client.c pamc_converse.c pamc_load.c
+
+# Pkg-config script.
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pamc.pc
all: all-recursive
.SUFFIXES:
@@ -488,6 +508,8 @@ $(top_srcdir)/configure: $(am__configure_deps)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+pamc.pc: $(top_builddir)/config.status $(srcdir)/pamc.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@@ -569,6 +591,27 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || 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)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
install-includeHEADERS: $(include_HEADERS)
@$(NORMAL_INSTALL)
@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
@@ -750,10 +793,10 @@ distdir-am: $(DISTFILES)
done
check-am: all-am
check: check-recursive
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-recursive
@@ -812,7 +855,7 @@ info: info-recursive
info-am:
-install-data-am: install-includeHEADERS
+install-data-am: install-includeHEADERS install-pkgconfigDATA
install-dvi: install-dvi-recursive
@@ -860,7 +903,8 @@ ps: ps-recursive
ps-am:
-uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
+uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+ uninstall-pkgconfigDATA
.MAKE: $(am__recursive_targets) install-am install-strip
@@ -874,12 +918,13 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
install-exec-am install-html install-html-am \
install-includeHEADERS install-info install-info-am \
install-libLTLIBRARIES install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs installdirs-am maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am uninstall-includeHEADERS \
- uninstall-libLTLIBRARIES
+ install-pkgconfigDATA install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+ uninstall-pkgconfigDATA
.PRECIOUS: Makefile
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
new file mode 100644
index 00000000..2d841ebb
--- /dev/null
+++ b/libpamc/pamc.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libpamc
+URL: http://www.linux-pam.org/
+Description: The PAM client API library and binary prompt support. Rarely used.
+Version: @VERSION@
+Cflags: -I${includedir}
+Libs: -L${libdir} -lpamc
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 a88da2f1..bedb16b7 100644
--- a/libpamc/test/Makefile.in
+++ b/libpamc/test/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -93,18 +93,21 @@ build_triplet = @build@
host_triplet = @host@
subdir = libpamc/test
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -152,10 +155,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -165,12 +172,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -184,7 +195,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -203,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@
@@ -231,8 +243,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -243,11 +254,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -292,7 +308,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -300,9 +315,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -312,6 +324,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
diff --git a/m4/attribute.m4 b/m4/attribute.m4
new file mode 100644
index 00000000..3aa2e5fc
--- /dev/null
+++ b/m4/attribute.m4
@@ -0,0 +1,16 @@
+#!/usr/bin/m4
+dnl Check for compiler attributes
+
+AC_DEFUN([PAM_ATTRIBUTE_UNUSED], [
+ AC_CACHE_CHECK([for __attribute__((unused))], [pam_cv_attribute_unused],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[int fun(int i __attribute__((unused)));]],
+ [[return fun(0);]])],
+ [pam_cv_attribute_unused=yes],
+ [pam_cv_attribute_unused=no])])
+ AS_IF([test "$pam_cv_attribute_unused" = yes],
+ [unused='__attribute__((unused))'],
+ [unused=])
+ AC_DEFINE_UNQUOTED([UNUSED], [$unused],
+ [Define if the compiler supports __attribute__((unused))])
+])
diff --git a/m4/japhar_grep_cflags.m4 b/m4/japhar_grep_cflags.m4
deleted file mode 100644
index cf2ea4a5..00000000
--- a/m4/japhar_grep_cflags.m4
+++ /dev/null
@@ -1,47 +0,0 @@
-dnl
-dnl JAPHAR_GREP_CFLAGS(flag, cmd_if_missing, cmd_if_present)
-dnl
-dnl From Japhar. Report changes to japhar@hungry.com
-dnl
-AC_DEFUN([JAPHAR_GREP_CFLAGS],
-[case "$CFLAGS" in
-"$1" | "$1 "* | *" $1" | *" $1 "* )
- ifelse($#, 3, [$3], [:])
- ;;
-*)
- $2
- ;;
-esac
-])
-
-dnl
-dnl Test for __attribute__ ((unused))
-dnl Based on code from the tcpdump version 3.7.2 source.
-dnl
-
-AC_DEFUN([AC_C___ATTRIBUTE__], [
-AC_MSG_CHECKING(for __attribute__)
-AC_CACHE_VAL(ac_cv___attribute__, [
-AC_TRY_COMPILE([
-#include <stdlib.h>
-static void foo (void) __attribute__ ((unused));
-
-static void
-foo (void)
-{
- exit(1);
-}
-],
-[
- exit (0);
-],
-ac_cv___attribute__=yes,
-ac_cv___attribute__=no)])
-if test "$ac_cv___attribute__" = "yes"; then
- AC_DEFINE(UNUSED, __attribute__ ((unused)), [define if your compiler has __att
-ribute__ ((unused))])
-else
- AC_DEFINE(UNUSED,,)
-fi
-AC_MSG_RESULT($ac_cv___attribute__)
-])
diff --git a/m4/jh_path_xml_catalog.m4 b/m4/jh_path_xml_catalog.m4
index dd01f165..1f2eff3a 100644
--- a/m4/jh_path_xml_catalog.m4
+++ b/m4/jh_path_xml_catalog.m4
@@ -6,8 +6,8 @@ AC_DEFUN([JH_PATH_XML_CATALOG],
[
# check for the presence of the XML catalog
AC_ARG_WITH([xml-catalog],
- AC_HELP_STRING([--with-xml-catalog=CATALOG],
- [path to xml catalog to use]),,
+ [AS_HELP_STRING([--with-xml-catalog=CATALOG],
+ [path to xml catalog to use])],,
[with_xml_catalog=/etc/xml/catalog])
jh_found_xmlcatalog=true
XML_CATALOG_FILE="$with_xml_catalog"
diff --git a/m4/ld-O1.m4 b/m4/ld-O1.m4
index f67b959b..64593280 100644
--- a/m4/ld-O1.m4
+++ b/m4/ld-O1.m4
@@ -1,24 +1,15 @@
-# ld-O1.m4 serial 3
+#!/usr/bin/m4
+dnl Check whether ld supports -O1
-# Test if ld supports -O1
-
-AC_DEFUN([PAM_LD_O1],
- [
- AC_CACHE_CHECK(whether ld supports -O1,
- pam_cv_ld_O1, [ dnl
- cat > conftest.c <<EOF
-int main (void) { return 0; }
-EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -o conftest.o conftest.c
- -Wl,-O1 1>&AS_MESSAGE_LOG_FD])
- then
- pam_cv_ld_O1=yes
- LDFLAGS="$LDFLAGS -Wl,-O1"
- else
- pam_cv_ld_O1=no
- fi
- rm -f conftest*])
- AC_SUBST(pam_cv_ld_O1)
- ]
-)
+AC_DEFUN([PAM_LD_O1], [dnl
+ AC_CACHE_CHECK([whether ld supports -O1],
+ [pam_cv_ld_O1],
+ [saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,-O1"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
+ [pam_cv_ld_O1=yes],
+ [pam_cv_ld_O1=no])
+ LDFLAGS="$saved_LDFLAGS"])
+ AS_IF([test $pam_cv_ld_O1 = yes],
+ [LDFLAGS="$LDFLAGS -Wl,-O1"])
+])
diff --git a/m4/ld-as-needed.m4 b/m4/ld-as-needed.m4
index 5ba6e0f9..d6590192 100644
--- a/m4/ld-as-needed.m4
+++ b/m4/ld-as-needed.m4
@@ -1,24 +1,15 @@
-# ld-as-needed.m4 serial 2
+#!/usr/bin/m4
+dnl Check whether ld supports --as-needed
-# Test if ld supports --as-needed
-
-AC_DEFUN([PAM_LD_AS_NEEDED],
- [
- AC_CACHE_CHECK(whether ld supports --as-needed,
- pam_cv_ld_as_needed, [ dnl
- cat > conftest.c <<EOF
-int main (void) { return 0; }
-EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -o conftest.o conftest.c
- -Wl,--as-needed 1>&AS_MESSAGE_LOG_FD])
- then
- pam_cv_ld_as_needed=yes
- LDFLAGS="$LDFLAGS -Wl,--as-needed"
- else
- pam_cv_ld_as_needed=no
- fi
- rm -f conftest*])
- AC_SUBST(pam_cv_ld_as_needed)
- ]
-)
+AC_DEFUN([PAM_LD_AS_NEEDED], [dnl
+ AC_CACHE_CHECK([whether ld supports --as-needed],
+ [pam_cv_ld_as_needed],
+ [saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--as-needed"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
+ [pam_cv_ld_as_needed=yes],
+ [pam_cv_ld_as_needed=no])
+ LDFLAGS="$saved_LDFLAGS"])
+ AS_IF([test $pam_cv_ld_as_needed = yes],
+ [LDFLAGS="$LDFLAGS -Wl,--as-needed"])
+])
diff --git a/m4/ld-no-undefined.m4 b/m4/ld-no-undefined.m4
index b6db946a..6f342d00 100644
--- a/m4/ld-no-undefined.m4
+++ b/m4/ld-no-undefined.m4
@@ -1,24 +1,15 @@
-# ld-no-undefined.m4 serial 1
+#!/usr/bin/m4
+dnl Check whether ld supports --no-undefined
-# Test if ld supports --no-undefined
-
-AC_DEFUN([PAM_LD_NO_UNDEFINED],
- [
- AC_CACHE_CHECK(whether ld supports --no-undefined,
- pam_cv_ld_no_undefined, [ dnl
- cat > conftest.c <<EOF
-int main (void) { return 0; }
-EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -o conftest.o conftest.c
- -Wl,--no-undefined 1>&AS_MESSAGE_LOG_FD])
- then
- pam_cv_ld_no_undefined=yes
- LDFLAGS="$LDFLAGS -Wl,--no-undefined"
- else
- pam_cv_ld_no_undefined=no
- fi
- rm -f conftest*])
- AC_SUBST(pam_cv_ld_no_undefined)
- ]
-)
+AC_DEFUN([PAM_LD_NO_UNDEFINED], [dnl
+ AC_CACHE_CHECK([whether ld supports --no-undefined],
+ [pam_cv_ld_no_undefined],
+ [saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--no-undefined"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
+ [pam_cv_ld_no_undefined=yes],
+ [pam_cv_ld_no_undefined=no])
+ LDFLAGS="$saved_LDFLAGS"])
+ AS_IF([test $pam_cv_ld_no_undefined = yes],
+ [LDFLAGS="$LDFLAGS -Wl,--no-undefined"])
+])
diff --git a/m4/ld-z-now.m4 b/m4/ld-z-now.m4
new file mode 100644
index 00000000..1bc82594
--- /dev/null
+++ b/m4/ld-z-now.m4
@@ -0,0 +1,16 @@
+#!/usr/bin/m4
+dnl Check whether ld supports "-z now"
+
+AC_DEFUN([PAM_LD_Z_NOW], [dnl
+ AC_CACHE_CHECK([whether ld supports "-z now"],
+ [pam_cv_ld_z_now],
+ [saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,-z,now"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
+ [pam_cv_ld_z_now=yes],
+ [pam_cv_ld_z_now=no])
+ LDFLAGS="$saved_LDFLAGS"])
+ AS_IF([test $pam_cv_ld_z_now = yes],
+ [ZNOW_LDFLAGS="-Wl,-z,now"],
+ [ZNOW_LDFLAGS=])
+])
diff --git a/m4/libprelude.m4 b/m4/libprelude.m4
index a9ea404c..d6a1efd9 100644
--- a/m4/libprelude.m4
+++ b/m4/libprelude.m4
@@ -15,8 +15,8 @@ AC_DEFUN([AM_PATH_LIBPRELUDE],
[dnl
dnl Get the cflags and libraries from the libprelude-config script
dnl
-AC_ARG_WITH(libprelude-prefix, AC_HELP_STRING(--with-libprelude-prefix=PFX,
- Prefix where libprelude is installed (optional)),
+AC_ARG_WITH(libprelude-prefix, [AS_HELP_STRING([--with-libprelude-prefix=PFX],
+ [Prefix where libprelude is installed (optional)])],
libprelude_config_prefix="$withval", libprelude_config_prefix="")
if test x$libprelude_config_prefix != x ; then
@@ -52,7 +52,8 @@ dnl Now check if the installed libprelude is sufficiently new. Also sanity
dnl checks the results of libprelude-config to some extent
dnl
rm -f conf.libpreludetest
- AC_TRY_RUN([
+ AC_RUN_IFELSE([
+ AC_LANG_SOURCE([[
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -106,7 +107,7 @@ main ()
}
return 1;
}
-],, no_libprelude=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+]])],[],[no_libprelude=yes],[echo $ac_n "cross compiling; assumed OK... $ac_c"])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
LDFLAGS="$ac_save_LDFLAGS"
@@ -122,24 +123,28 @@ main ()
AC_MSG_RESULT(no)
fi
if test "$LIBPRELUDE_CONFIG" = "no" ; then
- echo "*** The libprelude-config script installed by LIBPRELUDE could not be found"
- echo "*** If LIBPRELUDE was installed in PREFIX, make sure PREFIX/bin is in"
- echo "*** your path, or set the LIBPRELUDE_CONFIG environment variable to the"
- echo "*** full path to libprelude-config."
+ if test x$libprelude_config_prefix != x ; then
+ echo "*** The libprelude-config script installed by LIBPRELUDE could not be found"
+ echo "*** If LIBPRELUDE was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the LIBPRELUDE_CONFIG environment variable to the"
+ echo "*** full path to libprelude-config."
+ fi
else
if test -f conf.libpreludetest ; then
:
else
echo "*** Could not run libprelude test program, checking why..."
CFLAGS="$CFLAGS $LIBPRELUDE_CFLAGS"
- LDFLAGS="$LDFLAGS $LIBPRELUDE_LDFLAGS"
+ LDFLAGS="$LDFLAGS $LIBPRELUDE_LDFLAGS"
LIBS="$LIBS $LIBPRELUDE_LIBS"
- AC_TRY_LINK([
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libprelude/prelude.h>
-], [ return !!prelude_check_version(NULL); ],
+]],
+ [[ return !!prelude_check_version(NULL); ]])],
[ echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding LIBPRELUDE or finding the wrong"
echo "*** version of LIBPRELUDE. If it is not finding LIBPRELUDE, you'll need to set your"
@@ -155,7 +160,7 @@ main ()
echo "*** or that you have moved LIBPRELUDE since it was installed. In the latter case, you"
echo "*** may want to edit the libprelude-config script: $LIBPRELUDE_CONFIG" ])
CFLAGS="$ac_save_CFLAGS"
- LDFLAGS="$ac_save_LDFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
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
new file mode 100644
index 00000000..a4d6022f
--- /dev/null
+++ b/m4/warn_lang_flags.m4
@@ -0,0 +1,38 @@
+#!/usr/bin/m4
+
+AC_DEFUN([pam_WARN_LANG_FLAGS], [dnl
+gl_WARN_ADD([-W])
+gl_WARN_ADD([-Wall])
+gl_WARN_ADD([-Wbad-function-cast])
+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])],
+ [case $enableval in
+ yes) gl_WARN_ADD([-Werror]) ;;
+ no) ;;
+ *) AC_MSG_ERROR([bad value $enableval for Werror option]) ;;
+ esac])
+AS_VAR_PUSHDEF([pam_WARN_FLAGS], [WARN_[]_AC_LANG_PREFIX[]FLAGS])dnl
+AC_SUBST(pam_WARN_FLAGS)
+AS_VAR_POPDEF([pam_WARN_FLAGS])dnl
+])
diff --git a/m4/warnings.m4 b/m4/warnings.m4
new file mode 100644
index 00000000..628627d0
--- /dev/null
+++ b/m4/warnings.m4
@@ -0,0 +1,85 @@
+# warnings.m4 serial 11
+# modified for strace project
+dnl Copyright (C) 2008-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_AS_VAR_APPEND(VAR, VALUE)
+# ----------------------------
+# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
+m4_ifdef([AS_VAR_APPEND],
+[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
+[m4_define([gl_AS_VAR_APPEND],
+[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
+
+
+# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED],
+# [PROGRAM = AC_LANG_PROGRAM()])
+# -----------------------------------------------------------------
+# Check if the compiler supports OPTION when compiling PROGRAM.
+#
+# FIXME: gl_Warn must be used unquoted until we can assume Autoconf
+# 2.64 or newer.
+AC_DEFUN([gl_COMPILER_OPTION_IF],
+[AS_VAR_PUSHDEF([gl_Flags], _AC_LANG_PREFIX[]FLAGS)dnl
+AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]gl_Flags[]_$1])dnl
+AS_LITERAL_IF([$1],
+ [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))],
+ [gl_positive="$1"
+case $gl_positive in
+ -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
+m4_pushdef([gl_Positive], [$gl_positive])])dnl
+AC_CACHE_CHECK([whether $[]_AC_CC[] handles $1], m4_defn([gl_Warn]), [
+ gl_save_compiler_FLAGS="$gl_Flags"
+ gl_AS_VAR_APPEND(m4_defn([gl_Flags]),
+ [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["])
+ AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])],
+ [AS_VAR_SET(gl_Warn, [yes])],
+ [AS_VAR_SET(gl_Warn, [no])])
+ gl_Flags="$gl_save_compiler_FLAGS"
+])
+AS_VAR_IF(gl_Warn, [yes], [$2], [$3])
+m4_popdef([gl_Positive])dnl
+AS_VAR_POPDEF([gl_Flags])dnl
+AS_VAR_POPDEF([gl_Warn])dnl
+])
+
+# gl_UNKNOWN_WARNINGS_ARE_ERRORS
+# ------------------------------
+# Clang doesn't complain about unknown warning options unless one also
+# specifies -Wunknown-warning-option -Werror. Detect this.
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS],
+[AS_IF([test x${gl_unknown_warnings_are_errors+set} = x],
+ [gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option],
+ [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'],
+ [gl_unknown_warnings_are_errors=])
+ ])
+])
+
+# gl_WARN_ADD(OPTION, [VARIABLE = WARN_[]_AC_LANG_PREFIX[]FLAGS],
+# [PROGRAM = AC_LANG_PROGRAM()])
+# ---------------------------------------------
+# Adds parameter to WARN_[]_AC_LANG_PREFIX[]FLAGS if the compiler supports it
+# when compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]).
+#
+# If VARIABLE is a variable name, AC_SUBST it.
+AC_DEFUN([gl_WARN_ADD],
+[AS_VAR_PUSHDEF([gl_WARN_FLAGS], [WARN_[]_AC_LANG_PREFIX[]FLAGS])dnl
+gl_UNKNOWN_WARNINGS_ARE_ERRORS
+gl_COMPILER_OPTION_IF([$1],
+ [gl_AS_VAR_APPEND(m4_if([$2], [], [gl_WARN_FLAGS], [[$2]]), [" $1"])],
+ [],
+ [$3])
+m4_ifval([$2],
+ [AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
+ [AC_SUBST(gl_WARN_FLAGS)])dnl
+AS_VAR_POPDEF([gl_WARN_FLAGS])dnl
+])
+
+# Local Variables:
+# mode: autoconf
+# End:
diff --git a/modules/Makefile.am b/modules/Makefile.am
index c57ccc44..8da46410 100644
--- a/modules/Makefile.am
+++ b/modules/Makefile.am
@@ -2,10 +2,6 @@
# Copyright (c) 2005, 2006, 2008 Thorsten Kukuk <kukuk@thkukuk.de>
#
-if COND_BUILD_PAM_CRACKLIB
- MAYBE_PAM_CRACKLIB = pam_cracklib
-endif
-
if COND_BUILD_PAM_KEYINIT
MAYBE_PAM_KEYINIT = pam_keyinit
endif
@@ -34,25 +30,20 @@ if COND_BUILD_PAM_SETQUOTA
MAYBE_PAM_SETQUOTA = pam_setquota
endif
-if COND_BUILD_PAM_TALLY
- MAYBE_PAM_TALLY = pam_tally
-endif
-
-if COND_BUILD_PAM_TALLY2
- MAYBE_PAM_TALLY2 = pam_tally2
-endif
-
if COND_BUILD_PAM_TTY_AUDIT
MAYBE_PAM_TTY_AUDIT = pam_tty_audit
endif
+if COND_BUILD_PAM_UNIX
+ MAYBE_PAM_UNIX = pam_unix
+endif
+
if COND_BUILD_PAM_USERDB
MAYBE_PAM_USERDB = pam_userdb
endif
SUBDIRS := \
pam_access \
- $(MAYBE_PAM_CRACKLIB) \
pam_debug \
pam_deny \
pam_echo \
@@ -86,13 +77,11 @@ SUBDIRS := \
pam_shells \
pam_stress \
pam_succeed_if \
- $(MAYBE_PAM_TALLY) \
- $(MAYBE_PAM_TALLY2) \
pam_time \
pam_timestamp \
$(MAYBE_PAM_TTY_AUDIT) \
pam_umask \
- pam_unix \
+ $(MAYBE_PAM_UNIX) \
$(MAYBE_PAM_USERDB) \
pam_usertype \
pam_warn \
diff --git a/modules/Makefile.in b/modules/Makefile.in
index d3e319bd..9ac4d669 100644
--- a/modules/Makefile.in
+++ b/modules/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -93,18 +93,21 @@ build_triplet = @build@
host_triplet = @host@
subdir = modules
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -166,15 +169,15 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-DIST_SUBDIRS = pam_access pam_cracklib pam_debug pam_deny pam_echo \
- pam_env pam_exec pam_faildelay pam_faillock pam_filter pam_ftp \
- pam_group pam_issue pam_keyinit pam_lastlog pam_limits \
- pam_listfile pam_localuser pam_loginuid pam_mail pam_mkhomedir \
- pam_motd pam_namespace pam_nologin pam_permit pam_pwhistory \
- pam_rhosts pam_rootok pam_securetty pam_selinux pam_sepermit \
- pam_setquota pam_shells pam_stress pam_succeed_if pam_tally \
- pam_tally2 pam_time pam_timestamp pam_tty_audit pam_umask \
- pam_unix pam_userdb pam_usertype pam_warn pam_wheel pam_xauth
+DIST_SUBDIRS = pam_access pam_debug pam_deny pam_echo pam_env pam_exec \
+ pam_faildelay pam_faillock pam_filter pam_ftp pam_group \
+ pam_issue pam_keyinit pam_lastlog pam_limits pam_listfile \
+ pam_localuser pam_loginuid pam_mail pam_mkhomedir pam_motd \
+ pam_namespace pam_nologin pam_permit pam_pwhistory pam_rhosts \
+ pam_rootok pam_securetty pam_selinux pam_sepermit pam_setquota \
+ pam_shells pam_stress pam_succeed_if pam_time pam_timestamp \
+ pam_tty_audit pam_umask pam_unix pam_userdb pam_usertype \
+ pam_warn pam_wheel pam_xauth
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
@@ -220,10 +223,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -233,12 +240,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -252,7 +263,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -271,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@
@@ -299,8 +311,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -311,11 +322,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -360,7 +376,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -368,9 +383,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -380,11 +392,11 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-@COND_BUILD_PAM_CRACKLIB_TRUE@MAYBE_PAM_CRACKLIB = pam_cracklib
@COND_BUILD_PAM_KEYINIT_TRUE@MAYBE_PAM_KEYINIT = pam_keyinit
@COND_BUILD_PAM_LASTLOG_TRUE@MAYBE_PAM_LASTLOG = pam_lastlog
@COND_BUILD_PAM_NAMESPACE_TRUE@MAYBE_PAM_NAMESPACE = pam_namespace
@@ -392,13 +404,11 @@ top_srcdir = @top_srcdir@
@COND_BUILD_PAM_SELINUX_TRUE@MAYBE_PAM_SELINUX = pam_selinux
@COND_BUILD_PAM_SEPERMIT_TRUE@MAYBE_PAM_SEPERMIT = pam_sepermit
@COND_BUILD_PAM_SETQUOTA_TRUE@MAYBE_PAM_SETQUOTA = pam_setquota
-@COND_BUILD_PAM_TALLY_TRUE@MAYBE_PAM_TALLY = pam_tally
-@COND_BUILD_PAM_TALLY2_TRUE@MAYBE_PAM_TALLY2 = pam_tally2
@COND_BUILD_PAM_TTY_AUDIT_TRUE@MAYBE_PAM_TTY_AUDIT = pam_tty_audit
+@COND_BUILD_PAM_UNIX_TRUE@MAYBE_PAM_UNIX = pam_unix
@COND_BUILD_PAM_USERDB_TRUE@MAYBE_PAM_USERDB = pam_userdb
SUBDIRS := \
pam_access \
- $(MAYBE_PAM_CRACKLIB) \
pam_debug \
pam_deny \
pam_echo \
@@ -432,13 +442,11 @@ SUBDIRS := \
pam_shells \
pam_stress \
pam_succeed_if \
- $(MAYBE_PAM_TALLY) \
- $(MAYBE_PAM_TALLY2) \
pam_time \
pam_timestamp \
$(MAYBE_PAM_TTY_AUDIT) \
pam_umask \
- pam_unix \
+ $(MAYBE_PAM_UNIX) \
$(MAYBE_PAM_USERDB) \
pam_usertype \
pam_warn \
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 dc7db3c3..9dadd2d3 100644
--- a/modules/pam_access/Makefile.in
+++ b/modules/pam_access/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_access
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -376,6 +379,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -420,10 +424,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -433,12 +441,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -452,7 +464,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -471,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@
@@ -499,8 +512,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -511,11 +523,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -560,7 +577,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -568,9 +584,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -580,6 +593,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -592,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
@@ -981,7 +995,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 1c217b9f..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: 06/08/2020
+.\" 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" "06/08/2020" "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 c091642d..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: 06/08/2020
+.\" 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" "06/08/2020" "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 98848c54..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 *);
@@ -160,6 +256,7 @@ static int list_match (pam_handle_t *, char *, char *, struct login_info *,
static int user_match (pam_handle_t *, char *, struct login_info *);
static int group_match (pam_handle_t *, const char *, const char *, int);
static int from_match (pam_handle_t *, char *, struct login_info *);
+static int remote_match (pam_handle_t *, char *, struct login_info *);
static int string_match (pam_handle_t *, const char *, const char *, int);
static int network_netmask_match (pam_handle_t *, const char *, const char *, struct login_info *);
@@ -566,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,
@@ -576,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))
@@ -589,11 +685,9 @@ group_match (pam_handle_t *pamh, const char *tok, const char* usr,
/* from_match - match a host or tty against a list of tokens */
static int
-from_match (pam_handle_t *pamh UNUSED, char *tok, struct login_info *item)
+from_match (pam_handle_t *pamh, char *tok, struct login_info *item)
{
const char *string = item->from;
- int tok_len;
- int str_len;
int rv;
if (item->debug)
@@ -616,14 +710,29 @@ from_match (pam_handle_t *pamh UNUSED, char *tok, struct login_info *item)
} else if ((rv = string_match(pamh, tok, string, item->debug)) != NO) {
/* ALL or exact match */
return rv;
- } else if (tok[0] == '.') { /* domain: match last fields */
- if ((str_len = strlen(string)) > (tok_len = strlen(tok))
- && strcasecmp(tok, string + str_len - tok_len) == 0)
- return (YES);
- } else if (item->from_remote_host == 0) { /* local: no PAM_RHOSTS */
- if (strcasecmp(tok, "LOCAL") == 0)
- return (YES);
- } else if (tok[(tok_len = strlen(tok)) - 1] == '.') {
+ } else if (strcasecmp(tok, "LOCAL") == 0) {
+ /* LOCAL matches only local accesses */
+ if (!item->from_remote_host)
+ return YES;
+ return NO;
+ } else if (item->from_remote_host) {
+ return remote_match(pamh, tok, item);
+ }
+ return NO;
+}
+
+static int
+remote_match (pam_handle_t *pamh, char *tok, struct login_info *item)
+{
+ const char *string = item->from;
+ size_t tok_len = strlen(tok);
+ size_t str_len;
+
+ if (tok[0] == '.') { /* domain: match last fields */
+ if ((str_len = strlen(string)) > tok_len
+ && strcasecmp(tok, string + str_len - tok_len) == 0)
+ return YES;
+ } else if (tok[tok_len - 1] == '.') { /* internet network numbers (end with ".") */
struct addrinfo hint;
memset (&hint, '\0', sizeof (hint));
@@ -661,13 +770,11 @@ from_match (pam_handle_t *pamh UNUSED, char *tok, struct login_info *item)
runp = runp->ai_next;
}
}
- } else {
- /* Assume network/netmask with a IP of a host. */
- if (network_netmask_match(pamh, tok, string, item))
- return YES;
+ return NO;
}
- return NO;
+ /* Assume network/netmask, IP address or hostname. */
+ return network_netmask_match(pamh, tok, string, item);
}
/* string_match - match a string against one token */
@@ -684,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 */
@@ -702,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,
@@ -711,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)
{
@@ -748,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;
}
@@ -816,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) {
@@ -841,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)
@@ -904,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_cracklib/Makefile.am b/modules/pam_cracklib/Makefile.am
deleted file mode 100644
index e11c42d7..00000000
--- a/modules/pam_cracklib/Makefile.am
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright (c) 2005, 2006, 2009 Thorsten Kukuk <kukuk@suse.de>
-#
-
-CLEANFILES = *~
-MAINTAINERCLEANFILES = $(MANS) README
-
-EXTRA_DIST = $(XMLS)
-
-if HAVE_DOC
-dist_man_MANS = pam_cracklib.8
-endif
-XMLS = README.xml pam_cracklib.8.xml
-dist_check_SCRIPTS = tst-pam_cracklib
-TESTS = $(dist_check_SCRIPTS)
-
-securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
-
-AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
-AM_LDFLAGS = -no-undefined -avoid-version -module
-if HAVE_VERSIONING
- AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
-endif
-pam_cracklib_la_LIBADD = $(top_builddir)/libpam/libpam.la \
- @LIBCRACK@ @LIBCRYPT@
-securelib_LTLIBRARIES = pam_cracklib.la
-
-if ENABLE_REGENERATE_MAN
-dist_noinst_DATA = README
--include $(top_srcdir)/Make.xml.rules
-endif
diff --git a/modules/pam_cracklib/Makefile.in b/modules/pam_cracklib/Makefile.in
deleted file mode 100644
index 9cd1afc5..00000000
--- a/modules/pam_cracklib/Makefile.in
+++ /dev/null
@@ -1,1148 +0,0 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-#
-# Copyright (c) 2005, 2006, 2009 Thorsten Kukuk <kukuk@suse.de>
-#
-
-
-VPATH = @srcdir@
-am__is_gnu_make = { \
- if test -z '$(MAKELEVEL)'; then \
- false; \
- elif test -n '$(MAKE_HOST)'; then \
- true; \
- elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
- true; \
- else \
- false; \
- fi; \
-}
-am__make_running_with_option = \
- case $${target_option-} in \
- ?) ;; \
- *) echo "am__make_running_with_option: internal error: invalid" \
- "target option '$${target_option-}' specified" >&2; \
- exit 1;; \
- esac; \
- has_opt=no; \
- sane_makeflags=$$MAKEFLAGS; \
- if $(am__is_gnu_make); then \
- sane_makeflags=$$MFLAGS; \
- else \
- case $$MAKEFLAGS in \
- *\\[\ \ ]*) \
- bs=\\; \
- sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
- | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
- esac; \
- fi; \
- skip_next=no; \
- strip_trailopt () \
- { \
- flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
- }; \
- for flg in $$sane_makeflags; do \
- test $$skip_next = yes && { skip_next=no; continue; }; \
- case $$flg in \
- *=*|--*) continue;; \
- -*I) strip_trailopt 'I'; skip_next=yes;; \
- -*I?*) strip_trailopt 'I';; \
- -*O) strip_trailopt 'O'; skip_next=yes;; \
- -*O?*) strip_trailopt 'O';; \
- -*l) strip_trailopt 'l'; skip_next=yes;; \
- -*l?*) strip_trailopt 'l';; \
- -[dEDm]) skip_next=yes;; \
- -[JT]) skip_next=yes;; \
- esac; \
- case $$flg in \
- *$$target_option*) has_opt=yes; break;; \
- esac; \
- done; \
- test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
-subdir = modules/pam_cracklib
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
- $(top_srcdir)/m4/jh_path_xml_catalog.m4 \
- $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
- $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
- $(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
- $(am__dist_noinst_DATA_DIST) $(am__DIST_COMMON)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
- test -z "$$files" \
- || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
- || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
- $(am__cd) "$$dir" && rm -f $$files; }; \
- }
-am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)"
-LTLIBRARIES = $(securelib_LTLIBRARIES)
-pam_cracklib_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
-pam_cracklib_la_SOURCES = pam_cracklib.c
-pam_cracklib_la_OBJECTS = pam_cracklib.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 =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo " GEN " $@;
-am__v_GEN_1 =
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-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_cracklib.Plo
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo " CC " $@;
-am__v_CC_1 =
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-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_cracklib.c
-DIST_SOURCES = pam_cracklib.c
-am__can_run_installinfo = \
- case $$AM_UPDATE_INFO_DIR in \
- n|no|NO) false;; \
- *) (install-info --version) >/dev/null 2>&1;; \
- esac
-man8dir = $(mandir)/man8
-NROFF = nroff
-MANS = $(dist_man_MANS)
-am__dist_noinst_DATA_DIST = README
-DATA = $(dist_noinst_DATA)
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates. Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
- BEGIN { nonempty = 0; } \
- { items[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique. This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
- list='$(am__tagged_files)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-am__tty_colors_dummy = \
- mgn= red= grn= lgn= blu= brg= std=; \
- am__color_tests=no
-am__tty_colors = { \
- $(am__tty_colors_dummy); \
- if test "X$(AM_COLOR_TESTS)" = Xno; then \
- am__color_tests=no; \
- elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
- am__color_tests=yes; \
- elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
- am__color_tests=yes; \
- fi; \
- if test $$am__color_tests = yes; then \
- red=''; \
- grn=''; \
- lgn=''; \
- blu=''; \
- mgn=''; \
- brg=''; \
- std=''; \
- fi; \
-}
-am__recheck_rx = ^[ ]*:recheck:[ ]*
-am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
-am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
-# A command that, given a newline-separated list of test names on the
-# standard input, print the name of the tests that are to be re-run
-# upon "make recheck".
-am__list_recheck_tests = $(AWK) '{ \
- recheck = 1; \
- while ((rc = (getline line < ($$0 ".trs"))) != 0) \
- { \
- if (rc < 0) \
- { \
- if ((getline line2 < ($$0 ".log")) < 0) \
- recheck = 0; \
- break; \
- } \
- else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
- { \
- recheck = 0; \
- break; \
- } \
- else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
- { \
- break; \
- } \
- }; \
- if (recheck) \
- print $$0; \
- close ($$0 ".trs"); \
- close ($$0 ".log"); \
-}'
-# A command that, given a newline-separated list of test names on the
-# standard input, create the global log from their .trs and .log files.
-am__create_global_log = $(AWK) ' \
-function fatal(msg) \
-{ \
- print "fatal: making $@: " msg | "cat >&2"; \
- exit 1; \
-} \
-function rst_section(header) \
-{ \
- print header; \
- len = length(header); \
- for (i = 1; i <= len; i = i + 1) \
- printf "="; \
- printf "\n\n"; \
-} \
-{ \
- copy_in_global_log = 1; \
- global_test_result = "RUN"; \
- while ((rc = (getline line < ($$0 ".trs"))) != 0) \
- { \
- if (rc < 0) \
- fatal("failed to read from " $$0 ".trs"); \
- if (line ~ /$(am__global_test_result_rx)/) \
- { \
- sub("$(am__global_test_result_rx)", "", line); \
- sub("[ ]*$$", "", line); \
- global_test_result = line; \
- } \
- else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
- copy_in_global_log = 0; \
- }; \
- if (copy_in_global_log) \
- { \
- rst_section(global_test_result ": " $$0); \
- while ((rc = (getline line < ($$0 ".log"))) != 0) \
- { \
- if (rc < 0) \
- fatal("failed to read from " $$0 ".log"); \
- print line; \
- }; \
- printf "\n"; \
- }; \
- close ($$0 ".trs"); \
- close ($$0 ".log"); \
-}'
-# Restructured Text title.
-am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
-# Solaris 10 'make', and several other traditional 'make' implementations,
-# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
-# by disabling -e (using the XSI extension "set +e") if it's set.
-am__sh_e_setup = case $$- in *e*) set +e;; esac
-# Default flags passed to test drivers.
-am__common_driver_flags = \
- --color-tests "$$am__color_tests" \
- --enable-hard-errors "$$am__enable_hard_errors" \
- --expect-failure "$$am__expect_failure"
-# To be inserted before the command running the test. Creates the
-# directory for the log if needed. Stores in $dir the directory
-# containing $f, in $tst the test, in $log the log. Executes the
-# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
-# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
-# will run the test scripts (or their associated LOG_COMPILER, if
-# thy have one).
-am__check_pre = \
-$(am__sh_e_setup); \
-$(am__vpath_adj_setup) $(am__vpath_adj) \
-$(am__tty_colors); \
-srcdir=$(srcdir); export srcdir; \
-case "$@" in \
- */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
- *) am__odir=.;; \
-esac; \
-test "x$$am__odir" = x"." || test -d "$$am__odir" \
- || $(MKDIR_P) "$$am__odir" || exit $$?; \
-if test -f "./$$f"; then dir=./; \
-elif test -f "$$f"; then dir=; \
-else dir="$(srcdir)/"; fi; \
-tst=$$dir$$f; log='$@'; \
-if test -n '$(DISABLE_HARD_ERRORS)'; then \
- am__enable_hard_errors=no; \
-else \
- am__enable_hard_errors=yes; \
-fi; \
-case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
- am__expect_failure=yes;; \
- *) \
- am__expect_failure=no;; \
-esac; \
-$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
-# A shell command to get the names of the tests scripts with any registered
-# extension removed (i.e., equivalently, the names of the test logs, with
-# the '.log' extension removed). The result is saved in the shell variable
-# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
-# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
-# since that might cause problem with VPATH rewrites for suffix-less tests.
-# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
-am__set_TESTS_bases = \
- bases='$(TEST_LOGS)'; \
- bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
- bases=`echo $$bases`
-RECHECK_LOGS = $(TEST_LOGS)
-AM_RECURSIVE_TARGETS = check recheck
-TEST_SUITE_LOG = test-suite.log
-TEST_EXTENSIONS = @EXEEXT@ .test
-LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
-LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
-am__set_b = \
- case '$@' in \
- */*) \
- case '$*' in \
- */*) b='$*';; \
- *) b=`echo '$@' | sed 's/\.log$$//'`; \
- esac;; \
- *) \
- b='$*';; \
- esac
-am__test_logs1 = $(TESTS:=.log)
-am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
-TEST_LOGS = $(am__test_logs2:.test.log=.log)
-TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
-TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
- $(TEST_LOG_FLAGS)
-am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
- $(top_srcdir)/build-aux/depcomp \
- $(top_srcdir)/build-aux/test-driver
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BROWSER = @BROWSER@
-BUILD_CFLAGS = @BUILD_CFLAGS@
-BUILD_CPPFLAGS = @BUILD_CPPFLAGS@
-BUILD_LDFLAGS = @BUILD_LDFLAGS@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CC_FOR_BUILD = @CC_FOR_BUILD@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-ECONF_CFLAGS = @ECONF_CFLAGS@
-ECONF_LIBS = @ECONF_LIBS@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-FO2PDF = @FO2PDF@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTLLIBS = @INTLLIBS@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
-LIBCRYPT = @LIBCRYPT@
-LIBDB = @LIBDB@
-LIBDL = @LIBDL@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
-LIBOBJS = @LIBOBJS@
-LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@
-LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@
-LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@
-LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@
-LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@
-LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@
-LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@
-LIBS = @LIBS@
-LIBSELINUX = @LIBSELINUX@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
-LTLIBOBJS = @LTLIBOBJS@
-LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-NIS_CFLAGS = @NIS_CFLAGS@
-NIS_LIBS = @NIS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NSL_CFLAGS = @NSL_CFLAGS@
-NSL_LIBS = @NSL_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-POSUB = @POSUB@
-RANLIB = @RANLIB@
-SCONFIGDIR = @SCONFIGDIR@
-SECUREDIR = @SECUREDIR@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
-STRIP = @STRIP@
-TIRPC_CFLAGS = @TIRPC_CFLAGS@
-TIRPC_LIBS = @TIRPC_LIBS@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMLCATALOG = @XMLCATALOG@
-XMLLINT = @XMLLINT@
-XML_CATALOG_FILE = @XML_CATALOG_FILE@
-XSLTPROC = @XSLTPROC@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
-pam_xauth_path = @pam_xauth_path@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-CLEANFILES = *~
-MAINTAINERCLEANFILES = $(MANS) README
-EXTRA_DIST = $(XMLS)
-@HAVE_DOC_TRUE@dist_man_MANS = pam_cracklib.8
-XMLS = README.xml pam_cracklib.8.xml
-dist_check_SCRIPTS = tst-pam_cracklib
-TESTS = $(dist_check_SCRIPTS)
-securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
-AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
-
-AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
-pam_cracklib_la_LIBADD = $(top_builddir)/libpam/libpam.la \
- @LIBCRACK@ @LIBCRYPT@
-
-securelib_LTLIBRARIES = pam_cracklib.la
-@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_cracklib/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu modules/pam_cracklib/Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES)
- @$(NORMAL_INSTALL)
- @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \
- list2=; for p in $$list; do \
- if test -f $$p; then \
- list2="$$list2 $$p"; \
- else :; fi; \
- done; \
- test -z "$$list2" || { \
- echo " $(MKDIR_P) '$(DESTDIR)$(securelibdir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(securelibdir)" || exit 1; \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \
- }
-
-uninstall-securelibLTLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \
- for p in $$list; do \
- $(am__strip_dir) \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \
- done
-
-clean-securelibLTLIBRARIES:
- -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES)
- @list='$(securelib_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
-pam_cracklib.la: $(pam_cracklib_la_OBJECTS) $(pam_cracklib_la_DEPENDENCIES) $(EXTRA_pam_cracklib_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(securelibdir) $(pam_cracklib_la_OBJECTS) $(pam_cracklib_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_cracklib.Plo@am__quote@ # am--include-marker
-
-$(am__depfiles_remade):
- @$(MKDIR_P) $(@D)
- @echo '# dummy' >$@-t && $(am__mv) $@-t $@
-
-am--depfiles: $(am__depfiles_remade)
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-man8: $(dist_man_MANS)
- @$(NORMAL_INSTALL)
- @list1=''; \
- list2='$(dist_man_MANS)'; \
- test -n "$(man8dir)" \
- && test -n "`echo $$list1$$list2`" \
- || exit 0; \
- echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(man8dir)" || 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'; \
- 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' \
- -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 $$?; \
- 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 $$?; }; \
- done; }
-
-uninstall-man8:
- @$(NORMAL_UNINSTALL)
- @list=''; test -n "$(man8dir)" || 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 '/\.8[a-z]*$$/p'; \
- } | 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)
-
-ID: $(am__tagged_files)
- $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- set x; \
- here=`pwd`; \
- $(am__define_uniq_tagged_files); \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- $(am__define_uniq_tagged_files); \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
- list='$(am__tagged_files)'; \
- case "$(srcdir)" in \
- [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
- *) sdir=$(subdir)/$(srcdir) ;; \
- esac; \
- for i in $$list; do \
- if test -f "$$i"; then \
- echo "$(subdir)/$$i"; \
- else \
- echo "$$sdir/$$i"; \
- fi; \
- done >> $(top_builddir)/cscope.files
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-# Recover from deleted '.trs' file; this should ensure that
-# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
-# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
-# to avoid problems with "make -n".
-.log.trs:
- rm -f $< $@
- $(MAKE) $(AM_MAKEFLAGS) $<
-
-# Leading 'am--fnord' is there to ensure the list of targets does not
-# expand to empty, as could happen e.g. with make check TESTS=''.
-am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
-am--force-recheck:
- @:
-
-$(TEST_SUITE_LOG): $(TEST_LOGS)
- @$(am__set_TESTS_bases); \
- am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
- redo_bases=`for i in $$bases; do \
- am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
- done`; \
- if test -n "$$redo_bases"; then \
- redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
- redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
- if $(am__make_dryrun); then :; else \
- rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
- fi; \
- fi; \
- if test -n "$$am__remaking_logs"; then \
- echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
- "recursion detected" >&2; \
- elif test -n "$$redo_logs"; then \
- am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
- fi; \
- if $(am__make_dryrun); then :; else \
- st=0; \
- errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
- for i in $$redo_bases; do \
- test -f $$i.trs && test -r $$i.trs \
- || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
- test -f $$i.log && test -r $$i.log \
- || { echo "$$errmsg $$i.log" >&2; st=1; }; \
- done; \
- test $$st -eq 0 || exit 1; \
- fi
- @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
- ws='[ ]'; \
- results=`for b in $$bases; do echo $$b.trs; done`; \
- test -n "$$results" || results=/dev/null; \
- all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
- pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
- fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
- skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
- xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
- xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
- error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
- if test `expr $$fail + $$xpass + $$error` -eq 0; then \
- success=true; \
- else \
- success=false; \
- fi; \
- br='==================='; br=$$br$$br$$br$$br; \
- result_count () \
- { \
- if test x"$$1" = x"--maybe-color"; then \
- maybe_colorize=yes; \
- elif test x"$$1" = x"--no-color"; then \
- maybe_colorize=no; \
- else \
- echo "$@: invalid 'result_count' usage" >&2; exit 4; \
- fi; \
- shift; \
- desc=$$1 count=$$2; \
- if test $$maybe_colorize = yes && test $$count -gt 0; then \
- color_start=$$3 color_end=$$std; \
- else \
- color_start= color_end=; \
- fi; \
- echo "$${color_start}# $$desc $$count$${color_end}"; \
- }; \
- create_testsuite_report () \
- { \
- result_count $$1 "TOTAL:" $$all "$$brg"; \
- result_count $$1 "PASS: " $$pass "$$grn"; \
- result_count $$1 "SKIP: " $$skip "$$blu"; \
- result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
- result_count $$1 "FAIL: " $$fail "$$red"; \
- result_count $$1 "XPASS:" $$xpass "$$red"; \
- result_count $$1 "ERROR:" $$error "$$mgn"; \
- }; \
- { \
- echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
- $(am__rst_title); \
- create_testsuite_report --no-color; \
- echo; \
- echo ".. contents:: :depth: 2"; \
- echo; \
- for b in $$bases; do echo $$b; done \
- | $(am__create_global_log); \
- } >$(TEST_SUITE_LOG).tmp || exit 1; \
- mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
- if $$success; then \
- col="$$grn"; \
- else \
- col="$$red"; \
- test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
- fi; \
- echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
- echo "$${col}$$br$${std}"; \
- create_testsuite_report --maybe-color; \
- echo "$$col$$br$$std"; \
- if $$success; then :; else \
- echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
- if test -n "$(PACKAGE_BUGREPORT)"; then \
- echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
- fi; \
- echo "$$col$$br$$std"; \
- fi; \
- $$success || exit 1
-
-check-TESTS: $(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)
- @set +e; $(am__set_TESTS_bases); \
- log_list=`for i in $$bases; do echo $$i.log; done`; \
- trs_list=`for i in $$bases; do echo $$i.trs; done`; \
- 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)
- @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 \
- | $(am__list_recheck_tests)` || exit 1; \
- log_list=`for i in $$bases; do echo $$i.log; done`; \
- log_list=`echo $$log_list`; \
- $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
- am__force_recheck=am--force-recheck \
- TEST_LOGS="$$log_list"; \
- exit $$?
-tst-pam_cracklib.log: tst-pam_cracklib
- @p='tst-pam_cracklib'; \
- b='tst-pam_cracklib'; \
- $(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); \
- $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
-@am__EXEEXT_TRUE@.test$(EXEEXT).log:
-@am__EXEEXT_TRUE@ @p='$<'; \
-@am__EXEEXT_TRUE@ $(am__set_b); \
-@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
-@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
-@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
-@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
-
-distdir: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) distdir-am
-
-distdir-am: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
- $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: check-am
-all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- if test -z '$(STRIP)'; then \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- install; \
- else \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
- fi
-mostlyclean-generic:
- -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
- -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
- -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -f ./$(DEPDIR)/pam_cracklib.Plo
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man install-securelibLTLIBRARIES
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man: install-man8
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f ./$(DEPDIR)/pam_cracklib.Plo
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES
-
-uninstall-man: 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-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-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 \
- uninstall-man8 uninstall-securelibLTLIBRARIES
-
-.PRECIOUS: Makefile
-
-@ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/modules/pam_cracklib/README b/modules/pam_cracklib/README
deleted file mode 100644
index d0745160..00000000
--- a/modules/pam_cracklib/README
+++ /dev/null
@@ -1,254 +0,0 @@
-pam_cracklib — PAM module to check the password against dictionary words
-
-â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”
-
-DESCRIPTION
-
-This module can be plugged into the password stack of a given application to
-provide some plug-in strength-checking for passwords.
-
-The action of this module is to prompt the user for a password and check its
-strength against a system dictionary and a set of rules for identifying poor
-choices.
-
-The first action is to prompt for a single password, check its strength and
-then, if it is considered strong, prompt for the password a second time (to
-verify that it was typed correctly on the first occasion). All being well, the
-password is passed on to subsequent modules to be installed as the new
-authentication token.
-
-The strength checks works in the following manner: at first the Cracklib
-routine is called to check if the password is part of a dictionary; if this is
-not the case an additional set of strength checks is done. These checks are:
-
-Palindrome
-
- Is the new password a palindrome?
-
-Case Change Only
-
- Is the new password the old one with only a change of case?
-
-Similar
-
- Is the new password too much like the old one? This is primarily controlled
- by one argument, difok which is a number of character changes (inserts,
- removals, or replacements) between the old and new password that are enough
- to accept the new password. This defaults to 5 changes.
-
-Simple
-
- Is the new password too small? This is controlled by 6 arguments minlen,
- maxclassrepeat, dcredit, ucredit, lcredit, and ocredit. See the section on
- the arguments for the details of how these work and there defaults.
-
-Rotated
-
- Is the new password a rotated version of the old password?
-
-Same consecutive characters
-
- Optional check for same consecutive characters.
-
-Too long monotonic character sequence
-
- Optional check for too long monotonic character sequence.
-
-Contains user name
-
- Optional check whether the password contains the user's name in some form.
-
-This module with no arguments will work well for standard unix password
-encryption. With md5 encryption, passwords can be longer than 8 characters and
-the default settings for this module can make it hard for the user to choose a
-satisfactory new password. Notably, the requirement that the new password
-contain no more than 1/2 of the characters in the old password becomes a
-non-trivial constraint. For example, an old password of the form "the quick
-brown fox jumped over the lazy dogs" would be difficult to change... In
-addition, the default action is to allow passwords as small as 5 characters in
-length. For a md5 systems it can be a good idea to increase the required
-minimum size of a password. One can then allow more credit for different kinds
-of characters but accept that the new password may share most of these
-characters with the old password.
-
-OPTIONS
-
-debug
-
- This option makes the module write information to syslog(3) indicating the
- behavior of the module (this option does not write password information to
- the log file).
-
-authtok_type=XXX
-
- 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 UNIX can be replaced with this option, by default it is
- empty.
-
-retry=N
-
- Prompt user at most N times before returning with error. The default is 1.
-
-difok=N
-
- This argument will change the default of 5 for the number of character
- changes in the new password that differentiate it from the old password.
-
-minlen=N
-
- The minimum acceptable size for the new password (plus one if credits are
- not disabled which is the default). In addition to the number of characters
- in the new password, credit (of +1 in length) is given for each different
- kind of character (other, upper, lower and digit). The default for this
- parameter is 9 which is good for a old style UNIX password all of the same
- type of character but may be too low to exploit the added security of a md5
- system. Note that there is a pair of length limits in Cracklib itself, a
- "way too short" limit of 4 which is hard coded in and a defined limit (6)
- that will be checked without reference to minlen. If you want to allow
- passwords as short as 5 characters you should not use this module.
-
-dcredit=N
-
- (N >= 0) This is the maximum credit for having digits in the new password.
- If you have less than or N digits, each digit will count +1 towards meeting
- the current minlen value. The default for dcredit is 1 which is the
- recommended value for minlen less than 10.
-
- (N < 0) This is the minimum number of digits that must be met for a new
- password.
-
-ucredit=N
-
- (N >= 0) This is the maximum credit for having upper case letters in the
- new password. If you have less than or N upper case letters each letter
- will count +1 towards meeting the current minlen value. The default for
- ucredit is 1 which is the recommended value for minlen less than 10.
-
- (N < 0) This is the minimum number of upper case letters that must be met
- for a new password.
-
-lcredit=N
-
- (N >= 0) This is the maximum credit for having lower case letters in the
- new password. If you have less than or N lower case letters, each letter
- will count +1 towards meeting the current minlen value. The default for
- lcredit is 1 which is the recommended value for minlen less than 10.
-
- (N < 0) This is the minimum number of lower case letters that must be met
- for a new password.
-
-ocredit=N
-
- (N >= 0) This is the maximum credit for having other characters in the new
- password. If you have less than or N other characters, each character will
- count +1 towards meeting the current minlen value. The default for ocredit
- is 1 which is the recommended value for minlen less than 10.
-
- (N < 0) This is the minimum number of other characters that must be met for
- a new password.
-
-minclass=N
-
- The minimum number of required classes of characters for the new password.
- The default number is zero. The four classes are digits, upper and lower
- letters and other characters. The difference to the credit check is that a
- specific class if of characters is not required. Instead N out of four of
- the classes are required.
-
-maxrepeat=N
-
- Reject passwords which contain more than N same consecutive characters. The
- default is 0 which means that this check is disabled.
-
-maxsequence=N
-
- Reject passwords which contain monotonic character sequences longer than N.
- The default is 0 which means that this check is disabled. Examples of such
- sequence are '12345' or 'fedcb'. Note that most such passwords will not
- pass the simplicity check unless the sequence is only a minor part of the
- password.
-
-maxclassrepeat=N
-
- Reject passwords which contain more than N consecutive characters of the
- same class. The default is 0 which means that this check is disabled.
-
-reject_username
-
- Check whether the name of the user in straight or reversed form is
- contained in the new password. If it is found the new password is rejected.
-
-gecoscheck
-
- Check whether the words from the GECOS field (usually full name of the
- user) longer than 3 characters in straight or reversed form are contained
- in the new password. If any such word is found the new password is
- rejected.
-
-enforce_for_root
-
- The module will return error on failed check also if the user changing the
- password is root. This option is off by default which means that just the
- message about the failed check is printed but root can change the password
- anyway. Note that root is not asked for an old password so the checks that
- compare the old and new password are not performed.
-
-use_authtok
-
- This argument is used to force the module to not prompt the user for a new
- password but use the one provided by the previously stacked password
- module.
-
-dictpath=/path/to/dict
-
- Path to the cracklib dictionaries.
-
-EXAMPLES
-
-For an example of the use of this module, we show how it may be stacked with
-the password component of pam_unix(8)
-
-#
-# These lines stack two password type modules. In this example the
-# user is given 3 opportunities to enter a strong password. The
-# "use_authtok" argument ensures that the pam_unix module does not
-# prompt for a password, but instead uses the one provided by
-# pam_cracklib.
-#
-passwd password required pam_cracklib.so retry=3
-passwd password required pam_unix.so use_authtok
-
-
-Another example (in the /etc/pam.d/passwd format) is for the case that you want
-to use md5 password encryption:
-
-#%PAM-1.0
-#
-# These lines allow a md5 systems to support passwords of at least 14
-# bytes with extra credit of 2 for digits and 2 for others the new
-# password must have at least three bytes that are not present in the
-# old password
-#
-password required pam_cracklib.so \
- difok=3 minlen=15 dcredit= 2 ocredit=2
-password required pam_unix.so use_authtok nullok md5
-
-
-And here is another example in case you don't want to use credits:
-
-#%PAM-1.0
-#
-# These lines require the user to select a password with a minimum
-# length of 8 and with at least 1 digit number, 1 upper case letter,
-# and 1 other character
-#
-password required pam_cracklib.so \
- dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8
-password required pam_unix.so use_authtok nullok md5
-
-
-AUTHOR
-
-pam_cracklib was written by Cristian Gafton <gafton@redhat.com>
-
diff --git a/modules/pam_cracklib/README.xml b/modules/pam_cracklib/README.xml
deleted file mode 100644
index c4a7b54c..00000000
--- a/modules/pam_cracklib/README.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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_cracklib.8.xml">
--->
-]>
-
-<article>
-
- <articleinfo>
-
- <title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_cracklib.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_cracklib-name"]/*)'/>
- </title>
-
- </articleinfo>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-description"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-options"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-examples"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-author"]/*)'/>
- </section>
-
-</article>
diff --git a/modules/pam_cracklib/pam_cracklib.8 b/modules/pam_cracklib/pam_cracklib.8
deleted file mode 100644
index b7a60536..00000000
--- a/modules/pam_cracklib/pam_cracklib.8
+++ /dev/null
@@ -1,363 +0,0 @@
-'\" t
-.\" Title: pam_cracklib
-.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 06/08/2020
-.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
-.\" Language: English
-.\"
-.TH "PAM_CRACKLIB" "8" "06/08/2020" "Linux-PAM Manual" "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_cracklib \- PAM module to check the password against dictionary words
-.SH "SYNOPSIS"
-.HP \w'\fBpam_cracklib\&.so\fR\ 'u
-\fBpam_cracklib\&.so\fR [\fI\&.\&.\&.\fR]
-.SH "DESCRIPTION"
-.PP
-This module can be plugged into the
-\fIpassword\fR
-stack of a given application to provide some plug\-in strength\-checking for passwords\&.
-.PP
-The action of this module is to prompt the user for a password and check its strength against a system dictionary and a set of rules for identifying poor choices\&.
-.PP
-The first action is to prompt for a single password, check its strength and then, if it is considered strong, prompt for the password a second time (to verify that it was typed correctly on the first occasion)\&. All being well, the password is passed on to subsequent modules to be installed as the new authentication token\&.
-.PP
-The strength checks works in the following manner: at first the
-\fBCracklib\fR
-routine is called to check if the password is part of a dictionary; if this is not the case an additional set of strength checks is done\&. These checks are:
-.PP
-Palindrome
-.RS 4
-Is the new password a palindrome?
-.RE
-.PP
-Case Change Only
-.RS 4
-Is the new password the old one with only a change of case?
-.RE
-.PP
-Similar
-.RS 4
-Is the new password too much like the old one? This is primarily controlled by one argument,
-\fBdifok\fR
-which is a number of character changes (inserts, removals, or replacements) between the old and new password that are enough to accept the new password\&. This defaults to 5 changes\&.
-.RE
-.PP
-Simple
-.RS 4
-Is the new password too small? This is controlled by 6 arguments
-\fBminlen\fR,
-\fBmaxclassrepeat\fR,
-\fBdcredit\fR,
-\fBucredit\fR,
-\fBlcredit\fR, and
-\fBocredit\fR\&. See the section on the arguments for the details of how these work and there defaults\&.
-.RE
-.PP
-Rotated
-.RS 4
-Is the new password a rotated version of the old password?
-.RE
-.PP
-Same consecutive characters
-.RS 4
-Optional check for same consecutive characters\&.
-.RE
-.PP
-Too long monotonic character sequence
-.RS 4
-Optional check for too long monotonic character sequence\&.
-.RE
-.PP
-Contains user name
-.RS 4
-Optional check whether the password contains the user\*(Aqs name in some form\&.
-.RE
-.PP
-This module with no arguments will work well for standard unix password encryption\&. With md5 encryption, passwords can be longer than 8 characters and the default settings for this module can make it hard for the user to choose a satisfactory new password\&. Notably, the requirement that the new password contain no more than 1/2 of the characters in the old password becomes a non\-trivial constraint\&. For example, an old password of the form "the quick brown fox jumped over the lazy dogs" would be difficult to change\&.\&.\&. In addition, the default action is to allow passwords as small as 5 characters in length\&. For a md5 systems it can be a good idea to increase the required minimum size of a password\&. One can then allow more credit for different kinds of characters but accept that the new password may share most of these characters with the old password\&.
-.SH "OPTIONS"
-.PP
-.PP
-\fBdebug\fR
-.RS 4
-This option makes the module write information to
-\fBsyslog\fR(3)
-indicating the behavior of the module (this option does not write password information to the log file)\&.
-.RE
-.PP
-\fBauthtok_type=\fR\fB\fIXXX\fR\fR
-.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
-can be replaced with this option, by default it is empty\&.
-.RE
-.PP
-\fBretry=\fR\fB\fIN\fR\fR
-.RS 4
-Prompt user at most
-\fIN\fR
-times before returning with error\&. The default is
-\fI1\fR\&.
-.RE
-.PP
-\fBdifok=\fR\fB\fIN\fR\fR
-.RS 4
-This argument will change the default of
-\fI5\fR
-for the number of character changes in the new password that differentiate it from the old password\&.
-.RE
-.PP
-\fBminlen=\fR\fB\fIN\fR\fR
-.RS 4
-The minimum acceptable size for the new password (plus one if credits are not disabled which is the default)\&. In addition to the number of characters in the new password, credit (of +1 in length) is given for each different kind of character (\fIother\fR,
-\fIupper\fR,
-\fIlower\fR
-and
-\fIdigit\fR)\&. The default for this parameter is
-\fI9\fR
-which is good for a old style UNIX password all of the same type of character but may be too low to exploit the added security of a md5 system\&. Note that there is a pair of length limits in
-\fICracklib\fR
-itself, a "way too short" limit of 4 which is hard coded in and a defined limit (6) that will be checked without reference to
-\fBminlen\fR\&. If you want to allow passwords as short as 5 characters you should not use this module\&.
-.RE
-.PP
-\fBdcredit=\fR\fB\fIN\fR\fR
-.RS 4
-(N >= 0) This is the maximum credit for having digits in the new password\&. If you have less than or
-\fIN\fR
-digits, each digit will count +1 towards meeting the current
-\fBminlen\fR
-value\&. The default for
-\fBdcredit\fR
-is 1 which is the recommended value for
-\fBminlen\fR
-less than 10\&.
-.sp
-(N < 0) This is the minimum number of digits that must be met for a new password\&.
-.RE
-.PP
-\fBucredit=\fR\fB\fIN\fR\fR
-.RS 4
-(N >= 0) This is the maximum credit for having upper case letters in the new password\&. If you have less than or
-\fIN\fR
-upper case letters each letter will count +1 towards meeting the current
-\fBminlen\fR
-value\&. The default for
-\fBucredit\fR
-is
-\fI1\fR
-which is the recommended value for
-\fBminlen\fR
-less than 10\&.
-.sp
-(N < 0) This is the minimum number of upper case letters that must be met for a new password\&.
-.RE
-.PP
-\fBlcredit=\fR\fB\fIN\fR\fR
-.RS 4
-(N >= 0) This is the maximum credit for having lower case letters in the new password\&. If you have less than or
-\fIN\fR
-lower case letters, each letter will count +1 towards meeting the current
-\fBminlen\fR
-value\&. The default for
-\fBlcredit\fR
-is 1 which is the recommended value for
-\fBminlen\fR
-less than 10\&.
-.sp
-(N < 0) This is the minimum number of lower case letters that must be met for a new password\&.
-.RE
-.PP
-\fBocredit=\fR\fB\fIN\fR\fR
-.RS 4
-(N >= 0) This is the maximum credit for having other characters in the new password\&. If you have less than or
-\fIN\fR
-other characters, each character will count +1 towards meeting the current
-\fBminlen\fR
-value\&. The default for
-\fBocredit\fR
-is 1 which is the recommended value for
-\fBminlen\fR
-less than 10\&.
-.sp
-(N < 0) This is the minimum number of other characters that must be met for a new password\&.
-.RE
-.PP
-\fBminclass=\fR\fB\fIN\fR\fR
-.RS 4
-The minimum number of required classes of characters for the new password\&. The default number is zero\&. The four classes are digits, upper and lower letters and other characters\&. The difference to the
-\fBcredit\fR
-check is that a specific class if of characters is not required\&. Instead
-\fIN\fR
-out of four of the classes are required\&.
-.RE
-.PP
-\fBmaxrepeat=\fR\fB\fIN\fR\fR
-.RS 4
-Reject passwords which contain more than N same consecutive characters\&. The default is 0 which means that this check is disabled\&.
-.RE
-.PP
-\fBmaxsequence=\fR\fB\fIN\fR\fR
-.RS 4
-Reject passwords which contain monotonic character sequences longer than N\&. The default is 0 which means that this check is disabled\&. Examples of such sequence are \*(Aq12345\*(Aq or \*(Aqfedcb\*(Aq\&. Note that most such passwords will not pass the simplicity check unless the sequence is only a minor part of the password\&.
-.RE
-.PP
-\fBmaxclassrepeat=\fR\fB\fIN\fR\fR
-.RS 4
-Reject passwords which contain more than N consecutive characters of the same class\&. The default is 0 which means that this check is disabled\&.
-.RE
-.PP
-\fBreject_username\fR
-.RS 4
-Check whether the name of the user in straight or reversed form is contained in the new password\&. If it is found the new password is rejected\&.
-.RE
-.PP
-\fBgecoscheck\fR
-.RS 4
-Check whether the words from the GECOS field (usually full name of the user) longer than 3 characters in straight or reversed form are contained in the new password\&. If any such word is found the new password is rejected\&.
-.RE
-.PP
-\fBenforce_for_root\fR
-.RS 4
-The module will return error on failed check also if the user changing the password is root\&. This option is off by default which means that just the message about the failed check is printed but root can change the password anyway\&. Note that root is not asked for an old password so the checks that compare the old and new password are not performed\&.
-.RE
-.PP
-\fBuse_authtok\fR
-.RS 4
-This argument is used to
-\fIforce\fR
-the module to not prompt the user for a new password but use the one provided by the previously stacked
-\fIpassword\fR
-module\&.
-.RE
-.PP
-\fBdictpath=\fR\fB\fI/path/to/dict\fR\fR
-.RS 4
-Path to the cracklib dictionaries\&.
-.RE
-.SH "MODULE TYPES PROVIDED"
-.PP
-Only the
-\fBpassword\fR
-module type is provided\&.
-.SH "RETURN VALUES"
-.PP
-.PP
-PAM_SUCCESS
-.RS 4
-The new password passes all checks\&.
-.RE
-.PP
-PAM_AUTHTOK_ERR
-.RS 4
-No new password was entered, the username could not be determined or the new password fails the strength checks\&.
-.RE
-.PP
-PAM_AUTHTOK_RECOVERY_ERR
-.RS 4
-The old password was not supplied by a previous stacked module or got not requested from the user\&. The first error can happen if
-\fBuse_authtok\fR
-is specified\&.
-.RE
-.PP
-PAM_SERVICE_ERR
-.RS 4
-A internal error occurred\&.
-.RE
-.SH "EXAMPLES"
-.PP
-For an example of the use of this module, we show how it may be stacked with the password component of
-\fBpam_unix\fR(8)
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-#
-# These lines stack two password type modules\&. In this example the
-# user is given 3 opportunities to enter a strong password\&. The
-# "use_authtok" argument ensures that the pam_unix module does not
-# prompt for a password, but instead uses the one provided by
-# pam_cracklib\&.
-#
-passwd password required pam_cracklib\&.so retry=3
-passwd password required pam_unix\&.so use_authtok
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-Another example (in the
-/etc/pam\&.d/passwd
-format) is for the case that you want to use md5 password encryption:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-#%PAM\-1\&.0
-#
-# These lines allow a md5 systems to support passwords of at least 14
-# bytes with extra credit of 2 for digits and 2 for others the new
-# password must have at least three bytes that are not present in the
-# old password
-#
-password required pam_cracklib\&.so \e
- difok=3 minlen=15 dcredit= 2 ocredit=2
-password required pam_unix\&.so use_authtok nullok md5
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-And here is another example in case you don\*(Aqt want to use credits:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-#%PAM\-1\&.0
-#
-# These lines require the user to select a password with a minimum
-# length of 8 and with at least 1 digit number, 1 upper case letter,
-# and 1 other character
-#
-password required pam_cracklib\&.so \e
- dcredit=\-1 ucredit=\-1 ocredit=\-1 lcredit=0 minlen=8
-password required pam_unix\&.so use_authtok nullok md5
-
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.SH "SEE ALSO"
-.PP
-\fBpam.conf\fR(5),
-\fBpam.d\fR(5),
-\fBpam\fR(8)
-.SH "AUTHOR"
-.PP
-pam_cracklib was written by Cristian Gafton <gafton@redhat\&.com>
diff --git a/modules/pam_cracklib/pam_cracklib.8.xml b/modules/pam_cracklib/pam_cracklib.8.xml
deleted file mode 100644
index 75e44e2d..00000000
--- a/modules/pam_cracklib/pam_cracklib.8.xml
+++ /dev/null
@@ -1,592 +0,0 @@
-<?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_cracklib">
-
- <refmeta>
- <refentrytitle>pam_cracklib</refentrytitle>
- <manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
- </refmeta>
-
- <refnamediv id="pam_cracklib-name">
- <refname>pam_cracklib</refname>
- <refpurpose>PAM module to check the password against dictionary words</refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis id="pam_cracklib-cmdsynopsis">
- <command>pam_cracklib.so</command>
- <arg choice="opt">
- <replaceable>...</replaceable>
- </arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1 id="pam_cracklib-description">
-
- <title>DESCRIPTION</title>
-
- <para>
- This module can be plugged into the <emphasis>password</emphasis> stack of
- a given application to provide some plug-in strength-checking for passwords.
- </para>
-
- <para>
- The action of this module is to prompt the user for a password and
- check its strength against a system dictionary and a set of rules for
- identifying poor choices.
- </para>
-
- <para>
- The first action is to prompt for a single password, check its
- strength and then, if it is considered strong, prompt for the password
- a second time (to verify that it was typed correctly on the first
- occasion). All being well, the password is passed on to subsequent
- modules to be installed as the new authentication token.
- </para>
-
- <para>
- The strength checks works in the following manner: at first the
- <function>Cracklib</function> routine is called to check if the password
- is part of a dictionary; if this is not the case an additional set of
- strength checks is done. These checks are:
- </para>
-
- <variablelist>
- <varlistentry>
- <term>Palindrome</term>
- <listitem>
- <para>
- Is the new password a palindrome?
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Case Change Only</term>
- <listitem>
- <para>
- Is the new password the old one with only a change of case?
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Similar</term>
- <listitem>
- <para>
- Is the new password too much like the old one?
- This is primarily controlled by one argument,
- <option>difok</option> which is a number of character changes
- (inserts, removals, or replacements) between the old and new
- password that are enough to accept the new password.
- This defaults to 5 changes.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Simple</term>
- <listitem>
- <para>
- Is the new password too small?
- This is controlled by 6 arguments <option>minlen</option>,
- <option>maxclassrepeat</option>,
- <option>dcredit</option>, <option>ucredit</option>,
- <option>lcredit</option>, and <option>ocredit</option>. See the section
- on the arguments for the details of how these work and there defaults.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Rotated</term>
- <listitem>
- <para>
- Is the new password a rotated version of the old password?
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Same consecutive characters</term>
- <listitem>
- <para>
- Optional check for same consecutive characters.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Too long monotonic character sequence</term>
- <listitem>
- <para>
- Optional check for too long monotonic character sequence.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Contains user name</term>
- <listitem>
- <para>
- Optional check whether the password contains the user's name
- in some form.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <para>
- This module with no arguments will work well for standard unix
- password encryption. With md5 encryption, passwords can be longer
- than 8 characters and the default settings for this module can make it
- hard for the user to choose a satisfactory new password. Notably, the
- requirement that the new password contain no more than 1/2 of the
- characters in the old password becomes a non-trivial constraint. For
- example, an old password of the form "the quick brown fox jumped over
- the lazy dogs" would be difficult to change... In addition, the
- default action is to allow passwords as small as 5 characters in
- length. For a md5 systems it can be a good idea to increase the
- required minimum size of a password. One can then allow more credit
- for different kinds of characters but accept that the new password may
- share most of these characters with the old password.
- </para>
-
- </refsect1>
-
- <refsect1 id="pam_cracklib-options">
-
- <title>OPTIONS</title>
- <para>
- <variablelist>
-
- <varlistentry>
- <term>
- <option>debug</option>
- </term>
- <listitem>
- <para>
- This option makes the module write information to
- <citerefentry>
- <refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry>
- indicating the behavior of the module (this option does
- not write password information to the log file).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>authtok_type=<replaceable>XXX</replaceable></option>
- </term>
- <listitem>
- <para>
- 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 <emphasis>UNIX</emphasis> can
- be replaced with this option, by default it is empty.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>retry=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- Prompt user at most <replaceable>N</replaceable> times
- before returning with error. The default is
- <emphasis>1</emphasis>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>difok=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- This argument will change the default of
- <emphasis>5</emphasis> for the number of character
- changes in the new password that differentiate it
- from the old password.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>minlen=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- The minimum acceptable size for the new password (plus
- one if credits are not disabled which is the default).
- In addition to the number of characters in the new password,
- credit (of +1 in length) is given for each different kind
- of character (<emphasis>other</emphasis>,
- <emphasis>upper</emphasis>, <emphasis>lower</emphasis> and
- <emphasis>digit</emphasis>). The default for this parameter
- is <emphasis>9</emphasis> which is good for a old style UNIX
- password all of the same type of character but may be too low
- to exploit the added security of a md5 system. Note that
- there is a pair of length limits in
- <emphasis>Cracklib</emphasis> itself, a "way too short" limit
- of 4 which is hard coded in and a defined limit (6) that will
- be checked without reference to <option>minlen</option>.
- If you want to allow passwords as short as 5 characters you
- should not use this module.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>dcredit=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- (N &gt;= 0) This is the maximum credit for having digits in
- the new password. If you have less than or
- <replaceable>N</replaceable>
- digits, each digit will count +1 towards meeting the current
- <option>minlen</option> value. The default for
- <option>dcredit</option> is 1 which is the recommended
- value for <option>minlen</option> less than 10.
- </para>
- <para>
- (N &lt; 0) This is the minimum number of digits that must
- be met for a new password.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>ucredit=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- (N &gt;= 0) This is the maximum credit for having upper
- case letters in the new password. If you have less than
- or <replaceable>N</replaceable> upper case letters each
- letter will count +1 towards meeting the current
- <option>minlen</option> value. The default for
- <option>ucredit</option> is <emphasis>1</emphasis> which
- is the recommended value for <option>minlen</option> less
- than 10.
- </para>
- <para>
- (N &lt; 0) This is the minimum number of upper
- case letters that must be met for a new password.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lcredit=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- (N &gt;= 0) This is the maximum credit for having
- lower case letters in the new password. If you have
- less than or <replaceable>N</replaceable> lower case
- letters, each letter will count +1 towards meeting the
- current <option>minlen</option> value. The default for
- <option>lcredit</option> is 1 which is the recommended
- value for <option>minlen</option> less than 10.
- </para>
- <para>
- (N &lt; 0) This is the minimum number of lower
- case letters that must be met for a new password.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>ocredit=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- (N &gt;= 0) This is the maximum credit for having other
- characters in the new password. If you have less than or
- <replaceable>N</replaceable> other characters, each
- character will count +1 towards meeting the current
- <option>minlen</option> value. The default for
- <option>ocredit</option> is 1 which is the recommended
- value for <option>minlen</option> less than 10.
- </para>
- <para>
- (N &lt; 0) This is the minimum number of other
- characters that must be met for a new password.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>minclass=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- The minimum number of required classes of characters for
- the new password. The default number is zero. The four
- classes are digits, upper and lower letters and other
- characters.
- The difference to the <option>credit</option> check is
- that a specific class if of characters is not required.
- Instead <replaceable>N</replaceable> out of four of the
- classes are required.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>maxrepeat=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- Reject passwords which contain more than N same consecutive
- characters. The default is 0 which means that this check
- is disabled.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>maxsequence=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- Reject passwords which contain monotonic character sequences
- longer than N. The default is 0 which means that this check
- is disabled. Examples of such sequence are '12345' or 'fedcb'.
- Note that most such passwords will not pass the simplicity
- check unless the sequence is only a minor part of the password.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>maxclassrepeat=<replaceable>N</replaceable></option>
- </term>
- <listitem>
- <para>
- Reject passwords which contain more than N consecutive
- characters of the same class. The default is 0 which means
- that this check is disabled.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>reject_username</option>
- </term>
- <listitem>
- <para>
- Check whether the name of the user in straight or reversed
- form is contained in the new password. If it is found the
- new password is rejected.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>gecoscheck</option>
- </term>
- <listitem>
- <para>
- Check whether the words from the GECOS field (usually full name
- of the user) longer than 3 characters in straight or reversed
- form are contained in the new password. If any such word is
- found the new password is rejected.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>enforce_for_root</option>
- </term>
- <listitem>
- <para>
- The module will return error on failed check also if the user
- changing the password is root. This option is off by default
- which means that just the message about the failed check is
- printed but root can change the password anyway.
- Note that root is not asked for an old password so the checks
- that compare the old and new password are not performed.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>use_authtok</option>
- </term>
- <listitem>
- <para>
- This argument is used to <emphasis>force</emphasis> the
- module to not prompt the user for a new password but use
- the one provided by the previously stacked
- <emphasis>password</emphasis> module.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>dictpath=<replaceable>/path/to/dict</replaceable></option>
- </term>
- <listitem>
- <para>
- Path to the cracklib dictionaries.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </para>
- </refsect1>
-
- <refsect1 id="pam_cracklib-types">
- <title>MODULE TYPES PROVIDED</title>
- <para>
- Only the <option>password</option> module type is provided.
- </para>
- </refsect1>
-
- <refsect1 id='pam_cracklib-return_values'>
- <title>RETURN VALUES</title>
- <para>
- <variablelist>
-
- <varlistentry>
- <term>PAM_SUCCESS</term>
- <listitem>
- <para>
- The new password passes all checks.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>PAM_AUTHTOK_ERR</term>
- <listitem>
- <para>
- No new password was entered,
- the username could not be determined or the new
- password fails the strength checks.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>PAM_AUTHTOK_RECOVERY_ERR</term>
- <listitem>
- <para>
- The old password was not supplied by a previous stacked
- module or got not requested from the user.
- The first error can happen if <option>use_authtok</option>
- is specified.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>PAM_SERVICE_ERR</term>
- <listitem>
- <para>
- A internal error occurred.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </para>
- </refsect1>
-
- <refsect1 id='pam_cracklib-examples'>
- <title>EXAMPLES</title>
- <para>
- For an example of the use of this module, we show how it may be
- stacked with the password component of
- <citerefentry>
- <refentrytitle>pam_unix</refentrytitle><manvolnum>8</manvolnum>
- </citerefentry>
- <programlisting>
-#
-# These lines stack two password type modules. In this example the
-# user is given 3 opportunities to enter a strong password. The
-# "use_authtok" argument ensures that the pam_unix module does not
-# prompt for a password, but instead uses the one provided by
-# pam_cracklib.
-#
-passwd password required pam_cracklib.so retry=3
-passwd password required pam_unix.so use_authtok
- </programlisting>
- </para>
-
- <para>
- Another example (in the <filename>/etc/pam.d/passwd</filename> format)
- is for the case that you want to use md5 password encryption:
- <programlisting>
-#%PAM-1.0
-#
-# These lines allow a md5 systems to support passwords of at least 14
-# bytes with extra credit of 2 for digits and 2 for others the new
-# password must have at least three bytes that are not present in the
-# old password
-#
-password required pam_cracklib.so \
- difok=3 minlen=15 dcredit= 2 ocredit=2
-password required pam_unix.so use_authtok nullok md5
- </programlisting>
- </para>
-
- <para>
- And here is another example in case you don't want to use credits:
- <programlisting>
-#%PAM-1.0
-#
-# These lines require the user to select a password with a minimum
-# length of 8 and with at least 1 digit number, 1 upper case letter,
-# and 1 other character
-#
-password required pam_cracklib.so \
- dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8
-password required pam_unix.so use_authtok nullok md5
- </programlisting>
- </para>
-
- </refsect1>
-
- <refsect1 id='pam_cracklib-see_also'>
- <title>SEE ALSO</title>
- <para>
- <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 id='pam_cracklib-author'>
- <title>AUTHOR</title>
- <para>
- pam_cracklib was written by Cristian Gafton &lt;gafton@redhat.com&gt;
- </para>
- </refsect1>
-
-</refentry>
diff --git a/modules/pam_cracklib/pam_cracklib.c b/modules/pam_cracklib/pam_cracklib.c
deleted file mode 100644
index 01291305..00000000
--- a/modules/pam_cracklib/pam_cracklib.c
+++ /dev/null
@@ -1,899 +0,0 @@
-/*
- * pam_cracklib module
- *
- * 0.9. switch to using a distance algorithm in similar()
- * 0.86. added support for setting minimum numbers of digits, uppers,
- * lowers, and others
- * 0.85. added six new options to use this with long passwords.
- * 0.8. tidied output and improved D(()) usage for debugging.
- * 0.7. added support for more obscure checks for new passwd.
- * 0.6. root can reset user passwd to any values (it's only warned)
- * 0.5. supports retries - 'retry=N' argument
- * 0.4. added argument 'type=XXX' for 'New XXX password' prompt
- * 0.3. Added argument 'debug'
- * 0.2. new password is fed to cracklib for verify after typed once
- * 0.1. First release
- *
- * Written by Cristian Gafton <gafton@redhat.com> 1996/09/10
- * Long password support by Philip W. Dalrymple <pwd@mdtsoft.com> 1997/07/18
- * See the end of the file for Copyright Information
- *
- * Modification for long password systems (>8 chars). The original
- * module had problems when used in a md5 password system in that it
- * allowed too short passwords but required that at least half of the
- * bytes in the new password did not appear in the old one. this
- * action is still the default and the changes should not break any
- * current user. This modification adds 6 new options, one to set the
- * number of bytes in the new password that are not in the old one,
- * the other five to control the length checking, these are all
- * documented (or will be before anyone else sees this code) in the PAM
- * S.A.G. in the section on the cracklib module.
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#ifdef HAVE_LIBXCRYPT
-# include <xcrypt.h>
-#elif defined(HAVE_CRYPT_H)
-# include <crypt.h>
-#endif
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <stdarg.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <ctype.h>
-#include <limits.h>
-#include <pwd.h>
-#include <security/pam_modutil.h>
-
-#ifdef HAVE_CRACK_H
-#include <crack.h>
-#else
-extern char *FascistCheck(char *pw, const char *dictpath);
-#endif
-
-#ifndef CRACKLIB_DICTS
-#define CRACKLIB_DICTS NULL
-#endif
-
-#ifdef MIN
-#undef MIN
-#endif
-#define MIN(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
-
-#include <security/pam_modules.h>
-#include <security/_pam_macros.h>
-#include <security/pam_ext.h>
-#include "pam_inline.h"
-
-/* argument parsing */
-#define PAM_DEBUG_ARG 0x0001
-
-struct cracklib_options {
- int retry_times;
- int diff_ok;
- int min_length;
- int dig_credit;
- int up_credit;
- int low_credit;
- int oth_credit;
- int min_class;
- int max_repeat;
- int max_sequence;
- int max_class_repeat;
- int reject_user;
- int gecos_check;
- int enforce_for_root;
- const char *cracklib_dictpath;
-};
-
-#define CO_RETRY_TIMES 1
-#define CO_DIFF_OK 5
-#define CO_MIN_LENGTH 9
-# define CO_MIN_LENGTH_BASE 5
-#define CO_DIG_CREDIT 1
-#define CO_UP_CREDIT 1
-#define CO_LOW_CREDIT 1
-#define CO_OTH_CREDIT 1
-#define CO_MIN_WORD_LENGTH 4
-
-static int
-_pam_parse (pam_handle_t *pamh, struct cracklib_options *opt,
- int argc, const char **argv)
-{
- int ctrl=0;
-
- /* step through arguments */
- for (ctrl=0; argc-- > 0; ++argv) {
- const char *str;
- char *ep = NULL;
-
- /* generic options */
-
- if (!strcmp(*argv,"debug"))
- ctrl |= PAM_DEBUG_ARG;
- else if ((str = pam_str_skip_prefix(*argv, "type=")) != NULL)
- pam_set_item (pamh, PAM_AUTHTOK_TYPE, str);
- else if ((str = pam_str_skip_prefix(*argv, "retry=")) != NULL) {
- opt->retry_times = strtol(str, &ep, 10);
- if (!ep || (opt->retry_times < 1))
- opt->retry_times = CO_RETRY_TIMES;
- } else if ((str = pam_str_skip_prefix(*argv, "difok=")) != NULL) {
- opt->diff_ok = strtol(str, &ep, 10);
- if (!ep || (opt->diff_ok < 0))
- opt->diff_ok = CO_DIFF_OK;
- } else if (pam_str_skip_prefix(*argv, "difignore=") != NULL) {
- /* just ignore */
- } else if ((str = pam_str_skip_prefix(*argv, "minlen=")) != NULL) {
- opt->min_length = strtol(str, &ep, 10);
- if (!ep || (opt->min_length < CO_MIN_LENGTH_BASE))
- opt->min_length = CO_MIN_LENGTH_BASE;
- } else if ((str = pam_str_skip_prefix(*argv, "dcredit=")) != NULL) {
- opt->dig_credit = strtol(str, &ep, 10);
- if (!ep)
- opt->dig_credit = 0;
- } else if ((str = pam_str_skip_prefix(*argv, "ucredit=")) != NULL) {
- opt->up_credit = strtol(str, &ep, 10);
- if (!ep)
- opt->up_credit = 0;
- } else if ((str = pam_str_skip_prefix(*argv, "lcredit=")) != NULL) {
- opt->low_credit = strtol(str, &ep, 10);
- if (!ep)
- opt->low_credit = 0;
- } else if ((str = pam_str_skip_prefix(*argv, "ocredit=")) != NULL) {
- opt->oth_credit = strtol(str, &ep, 10);
- if (!ep)
- opt->oth_credit = 0;
- } else if ((str = pam_str_skip_prefix(*argv, "minclass=")) != NULL) {
- opt->min_class = strtol(str, &ep, 10);
- if (!ep)
- opt->min_class = 0;
- if (opt->min_class > 4)
- opt->min_class = 4;
- } else if ((str = pam_str_skip_prefix(*argv, "maxrepeat=")) != NULL) {
- opt->max_repeat = strtol(str, &ep, 10);
- if (!ep)
- opt->max_repeat = 0;
- } else if ((str = pam_str_skip_prefix(*argv, "maxsequence=")) != NULL) {
- opt->max_sequence = strtol(str, &ep, 10);
- if (!ep)
- opt->max_sequence = 0;
- } else if ((str = pam_str_skip_prefix(*argv, "maxclassrepeat=")) != NULL) {
- opt->max_class_repeat = strtol(str, &ep, 10);
- if (!ep)
- opt->max_class_repeat = 0;
- } else if (!strcmp(*argv, "reject_username")) {
- opt->reject_user = 1;
- } else if (!strcmp(*argv, "gecoscheck")) {
- opt->gecos_check = 1;
- } else if (!strcmp(*argv, "enforce_for_root")) {
- opt->enforce_for_root = 1;
- } else if (pam_str_skip_prefix(*argv, "authtok_type=") != NULL) {
- /* for pam_get_authtok, ignore */;
- } else if (!strcmp(*argv, "use_authtok")) {
- /* for pam_get_authtok, ignore */;
- } else if (!strcmp(*argv, "use_first_pass")) {
- /* for pam_get_authtok, ignore */;
- } else if (!strcmp(*argv, "try_first_pass")) {
- /* for pam_get_authtok, ignore */;
- } else if ((str = pam_str_skip_prefix(*argv, "dictpath=")) != NULL) {
- opt->cracklib_dictpath = str;
- if (!*(opt->cracklib_dictpath)) {
- opt->cracklib_dictpath = CRACKLIB_DICTS;
- }
- } else {
- pam_syslog(pamh,LOG_ERR,"pam_parse: unknown option; %s",*argv);
- }
- }
-
- return ctrl;
-}
-
-/* Helper functions */
-
-/*
- * can't be a palindrome - like `R A D A R' or `M A D A M'
- */
-static int palindrome(const char *new)
-{
- int i, j;
-
- i = strlen (new);
-
- for (j = 0;j < i;j++)
- if (new[i - j - 1] != new[j])
- return 0;
-
- return 1;
-}
-
-/*
- * Calculate how different two strings are in terms of the number of
- * character removals, additions, and changes needed to go from one to
- * the other
- */
-
-static int distdifferent(const char *old, const char *new,
- size_t i, size_t j)
-{
- char c, d;
-
- if ((i == 0) || (strlen(old) < i)) {
- c = 0;
- } else {
- c = old[i - 1];
- }
- if ((j == 0) || (strlen(new) < j)) {
- d = 0;
- } else {
- d = new[j - 1];
- }
- return (c != d);
-}
-
-static int distcalculate(int **distances, const char *old, const char *new,
- size_t i, size_t j)
-{
- int tmp = 0;
-
- if (distances[i][j] != -1) {
- return distances[i][j];
- }
-
- tmp = distcalculate(distances, old, new, i - 1, j - 1);
- tmp = MIN(tmp, distcalculate(distances, old, new, i, j - 1));
- tmp = MIN(tmp, distcalculate(distances, old, new, i - 1, j));
- tmp += distdifferent(old, new, i, j);
-
- distances[i][j] = tmp;
-
- return tmp;
-}
-
-static int distance(const char *old, const char *new)
-{
- int **distances = NULL;
- size_t m, n, i, j, r;
-
- m = strlen(old);
- n = strlen(new);
- distances = malloc(sizeof(int*) * (m + 1));
-
- for (i = 0; i <= m; i++) {
- distances[i] = malloc(sizeof(int) * (n + 1));
- for(j = 0; j <= n; j++) {
- distances[i][j] = -1;
- }
- }
- for (i = 0; i <= m; i++) {
- distances[i][0] = i;
- }
- for (j = 0; j <= n; j++) {
- distances[0][j] = j;
- }
- distances[0][0] = 0;
-
- r = distcalculate(distances, old, new, m, n);
-
- for (i = 0; i <= m; i++) {
- memset(distances[i], 0, sizeof(int) * (n + 1));
- free(distances[i]);
- }
- free(distances);
-
- return r;
-}
-
-static int similar(struct cracklib_options *opt,
- const char *old, const char *new)
-{
- if (distance(old, new) >= opt->diff_ok) {
- return 0;
- }
-
- if (strlen(new) >= (strlen(old) * 2)) {
- return 0;
- }
-
- /* passwords are too similar */
- return 1;
-}
-
-/*
- * enough classes of characters
- */
-
-static int minclass (struct cracklib_options *opt,
- const char *new)
-{
- int digits = 0;
- int uppers = 0;
- int lowers = 0;
- int others = 0;
- int total_class;
- int i;
- int retval;
-
- D(( "called" ));
- for (i = 0; new[i]; i++)
- {
- if (isdigit (new[i]))
- digits = 1;
- else if (isupper (new[i]))
- uppers = 1;
- else if (islower (new[i]))
- lowers = 1;
- else
- others = 1;
- }
-
- total_class = digits + uppers + lowers + others;
-
- D (("total class: %d\tmin_class: %d", total_class, opt->min_class));
-
- if (total_class >= opt->min_class)
- retval = 0;
- else
- retval = 1;
-
- return retval;
-}
-
-
-/*
- * a nice mix of characters.
- */
-static int simple(struct cracklib_options *opt, const char *new)
-{
- int digits = 0;
- int uppers = 0;
- int lowers = 0;
- int others = 0;
- int size;
- int i;
- enum { NONE, DIGIT, UCASE, LCASE, OTHER } prevclass = NONE;
- int sameclass = 0;
-
- for (i = 0;new[i];i++) {
- if (isdigit (new[i])) {
- digits++;
- if (prevclass != DIGIT) {
- prevclass = DIGIT;
- sameclass = 1;
- } else
- sameclass++;
- }
- else if (isupper (new[i])) {
- uppers++;
- if (prevclass != UCASE) {
- prevclass = UCASE;
- sameclass = 1;
- } else
- sameclass++;
- }
- else if (islower (new[i])) {
- lowers++;
- if (prevclass != LCASE) {
- prevclass = LCASE;
- sameclass = 1;
- } else
- sameclass++;
- }
- else {
- others++;
- if (prevclass != OTHER) {
- prevclass = OTHER;
- sameclass = 1;
- } else
- sameclass++;
- }
- if (opt->max_class_repeat > 0 && sameclass > opt->max_class_repeat) {
- return 1;
- }
- }
-
- /*
- * The scam was this - a password of only one character type
- * must be 8 letters long. Two types, 7, and so on.
- * This is now changed, the base size and the credits or defaults
- * see the docs on the module for info on these parameters, the
- * defaults cause the effect to be the same as before the change
- */
-
- if ((opt->dig_credit >= 0) && (digits > opt->dig_credit))
- digits = opt->dig_credit;
-
- if ((opt->up_credit >= 0) && (uppers > opt->up_credit))
- uppers = opt->up_credit;
-
- if ((opt->low_credit >= 0) && (lowers > opt->low_credit))
- lowers = opt->low_credit;
-
- if ((opt->oth_credit >= 0) && (others > opt->oth_credit))
- others = opt->oth_credit;
-
- size = opt->min_length;
-
- if (opt->dig_credit >= 0)
- size -= digits;
- else if (digits < opt->dig_credit * -1)
- return 1;
-
- if (opt->up_credit >= 0)
- size -= uppers;
- else if (uppers < opt->up_credit * -1)
- return 1;
-
- if (opt->low_credit >= 0)
- size -= lowers;
- else if (lowers < opt->low_credit * -1)
- return 1;
-
- if (opt->oth_credit >= 0)
- size -= others;
- else if (others < opt->oth_credit * -1)
- return 1;
-
- if (size <= i)
- return 0;
-
- return 1;
-}
-
-static int consecutive(struct cracklib_options *opt, const char *new)
-{
- char c;
- int i;
- int same;
-
- if (opt->max_repeat == 0)
- return 0;
-
- for (i = 0; new[i]; i++) {
- if (i > 0 && new[i] == c) {
- ++same;
- if (same > opt->max_repeat)
- return 1;
- } else {
- c = new[i];
- same = 1;
- }
- }
- return 0;
-}
-
-static int sequence(struct cracklib_options *opt, const char *new)
-{
- char c;
- int i;
- int sequp = 1;
- int seqdown = 1;
-
- if (opt->max_sequence == 0)
- return 0;
-
- if (new[0] == '\0')
- return 0;
-
- for (i = 1; new[i]; i++) {
- c = new[i-1];
- if (new[i] == c+1) {
- ++sequp;
- if (sequp > opt->max_sequence)
- return 1;
- seqdown = 1;
- } else if (new[i] == c-1) {
- ++seqdown;
- if (seqdown > opt->max_sequence)
- return 1;
- sequp = 1;
- } else {
- sequp = 1;
- seqdown = 1;
- }
- }
- return 0;
-}
-
-static int wordcheck(const char *new, char *word)
-{
- char *f, *b;
-
- if (strstr(new, word) != NULL)
- return 1;
-
- /* now reverse the word, we can do that in place
- as it is strdup-ed */
- f = word;
- b = word+strlen(word)-1;
- while (f < b) {
- char c;
-
- c = *f;
- *f = *b;
- *b = c;
- --b;
- ++f;
- }
-
- if (strstr(new, word) != NULL)
- return 1;
- return 0;
-}
-
-static int usercheck(struct cracklib_options *opt, const char *new,
- char *user)
-{
- if (!opt->reject_user)
- return 0;
-
- return wordcheck(new, user);
-}
-
-static char * str_lower(char *string)
-{
- char *cp;
-
- if (!string)
- return NULL;
-
- for (cp = string; *cp; cp++)
- *cp = tolower(*cp);
- return string;
-}
-
-static int gecoscheck(pam_handle_t *pamh, struct cracklib_options *opt, const char *new,
- const char *user)
-{
- struct passwd *pwd;
- char *list;
- char *p;
- char *next;
-
- if (!opt->gecos_check)
- return 0;
-
- if ((pwd = pam_modutil_getpwnam(pamh, user)) == NULL) {
- return 0;
- }
-
- list = strdup(pwd->pw_gecos);
-
- if (list == NULL || *list == '\0') {
- free(list);
- return 0;
- }
-
- for (p = list;;p = next + 1) {
- next = strchr(p, ' ');
- if (next)
- *next = '\0';
-
- if (strlen(p) >= CO_MIN_WORD_LENGTH) {
- str_lower(p);
- if (wordcheck(new, p)) {
- free(list);
- return 1;
- }
- }
-
- if (!next)
- break;
- }
-
- free(list);
- return 0;
-}
-
-static const char *password_check(pam_handle_t *pamh, struct cracklib_options *opt,
- const char *old, const char *new,
- const char *user)
-{
- const char *msg = NULL;
- char *oldmono = NULL, *newmono, *wrapped = NULL;
- char *usermono = NULL;
-
- if (old && strcmp(new, old) == 0) {
- msg = _("is the same as the old one");
- return msg;
- }
-
- newmono = str_lower(strdup(new));
- if (!newmono)
- msg = _("memory allocation error");
-
- usermono = str_lower(strdup(user));
- if (!usermono)
- msg = _("memory allocation error");
-
- if (!msg && old) {
- oldmono = str_lower(strdup(old));
- if (oldmono)
- wrapped = malloc(strlen(oldmono) * 2 + 1);
- if (wrapped) {
- strcpy (wrapped, oldmono);
- strcat (wrapped, oldmono);
- } else {
- msg = _("memory allocation error");
- }
- }
-
- if (!msg && palindrome(newmono))
- msg = _("is a palindrome");
-
- if (!msg && oldmono && strcmp(oldmono, newmono) == 0)
- msg = _("case changes only");
-
- if (!msg && oldmono && similar(opt, oldmono, newmono))
- msg = _("is too similar to the old one");
-
- if (!msg && simple(opt, new))
- msg = _("is too simple");
-
- if (!msg && wrapped && strstr(wrapped, newmono))
- msg = _("is rotated");
-
- if (!msg && minclass (opt, new))
- msg = _("not enough character classes");
-
- if (!msg && consecutive(opt, new))
- msg = _("contains too many same characters consecutively");
-
- if (!msg && sequence(opt, new))
- msg = _("contains too long of a monotonic character sequence");
-
- if (!msg && (usercheck(opt, newmono, usermono) || gecoscheck(pamh, opt, newmono, user)))
- msg = _("contains the user name in some form");
-
- free(usermono);
- if (newmono) {
- memset(newmono, 0, strlen(newmono));
- free(newmono);
- }
- if (oldmono) {
- memset(oldmono, 0, strlen(oldmono));
- free(oldmono);
- }
- if (wrapped) {
- memset(wrapped, 0, strlen(wrapped));
- free(wrapped);
- }
-
- return msg;
-}
-
-
-static int _pam_unix_approve_pass(pam_handle_t *pamh,
- unsigned int ctrl,
- struct cracklib_options *opt,
- const char *pass_old,
- const char *pass_new)
-{
- const char *msg = NULL;
- const char *user;
- int retval;
-
- if (pass_new == NULL || (pass_old && !strcmp(pass_old,pass_new))) {
- if (ctrl & PAM_DEBUG_ARG)
- pam_syslog(pamh, LOG_DEBUG, "bad authentication token");
- pam_error(pamh, "%s", pass_new == NULL ?
- _("No password has been supplied.") :
- _("The password has not been changed."));
- return PAM_AUTHTOK_ERR;
- }
-
- retval = pam_get_user(pamh, &user, NULL);
- if (retval != PAM_SUCCESS) {
- if (ctrl & PAM_DEBUG_ARG)
- pam_syslog(pamh, LOG_NOTICE, "cannot determine user name: %s",
- pam_strerror(pamh, retval));
- return PAM_AUTHTOK_ERR;
- }
- /*
- * if one wanted to hardwire authentication token strength
- * checking this would be the place
- */
- msg = password_check(pamh, opt, pass_old, pass_new, user);
-
- if (msg) {
- if (ctrl & PAM_DEBUG_ARG)
- pam_syslog(pamh, LOG_NOTICE,
- "new passwd fails strength check: %s", msg);
- pam_error(pamh, _("BAD PASSWORD: %s"), msg);
- return PAM_AUTHTOK_ERR;
- };
- return PAM_SUCCESS;
-
-}
-
-/* The Main Thing (by Cristian Gafton, CEO at this module :-)
- * (stolen from http://home.netscape.com)
- */
-int
-pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv)
-{
- unsigned int ctrl;
- struct cracklib_options options;
-
- D(("called."));
-
- memset(&options, 0, sizeof(options));
- options.retry_times = CO_RETRY_TIMES;
- options.diff_ok = CO_DIFF_OK;
- options.min_length = CO_MIN_LENGTH;
- options.dig_credit = CO_DIG_CREDIT;
- options.up_credit = CO_UP_CREDIT;
- options.low_credit = CO_LOW_CREDIT;
- options.oth_credit = CO_OTH_CREDIT;
- options.cracklib_dictpath = CRACKLIB_DICTS;
-
- ctrl = _pam_parse(pamh, &options, argc, argv);
-
- if (flags & PAM_PRELIM_CHECK) {
- /* Check for passwd dictionary */
- /* We cannot do that, since the original path is compiled
- into the cracklib library and we don't know it. */
- return PAM_SUCCESS;
- } else if (flags & PAM_UPDATE_AUTHTOK) {
- int retval;
- const void *oldtoken;
- int tries;
-
- D(("do update"));
-
-
- retval = pam_get_item (pamh, PAM_OLDAUTHTOK, &oldtoken);
- if (retval != PAM_SUCCESS) {
- if (ctrl & PAM_DEBUG_ARG)
- pam_syslog(pamh,LOG_ERR,"Can not get old passwd");
- oldtoken = NULL;
- }
-
- tries = 0;
- while (tries < options.retry_times) {
- const char *crack_msg;
- const char *newtoken = NULL;
-
-
- tries++;
-
- /* Planned modus operandi:
- * Get a passwd.
- * Verify it against cracklib.
- * If okay get it a second time.
- * Check to be the same with the first one.
- * set PAM_AUTHTOK and return
- */
-
- retval = pam_get_authtok_noverify (pamh, &newtoken, NULL);
- if (retval != PAM_SUCCESS) {
- pam_syslog(pamh, LOG_ERR, "pam_get_authtok_noverify returned error: %s",
- pam_strerror (pamh, retval));
- continue;
- } else if (newtoken == NULL) { /* user aborted password change, quit */
- return PAM_AUTHTOK_ERR;
- }
-
- D(("testing password"));
- /* now test this passwd against cracklib */
-
- D(("against cracklib"));
- if ((crack_msg = FascistCheck (newtoken, options.cracklib_dictpath))) {
- if (ctrl & PAM_DEBUG_ARG)
- pam_syslog(pamh,LOG_DEBUG,"bad password: %s",crack_msg);
- pam_error (pamh, _("BAD PASSWORD: %s"), crack_msg);
- if (getuid() || options.enforce_for_root || (flags & PAM_CHANGE_EXPIRED_AUTHTOK))
- {
- pam_set_item (pamh, PAM_AUTHTOK, NULL);
- retval = PAM_AUTHTOK_ERR;
- continue;
- }
- }
-
- /* check it for strength too... */
- D(("for strength"));
- retval = _pam_unix_approve_pass (pamh, ctrl, &options,
- oldtoken, newtoken);
- if (retval != PAM_SUCCESS) {
- if (getuid() || options.enforce_for_root || (flags & PAM_CHANGE_EXPIRED_AUTHTOK))
- {
- pam_set_item(pamh, PAM_AUTHTOK, NULL);
- retval = PAM_AUTHTOK_ERR;
- continue;
- }
- }
-
- retval = pam_get_authtok_verify (pamh, &newtoken, NULL);
- if (retval != PAM_SUCCESS) {
- pam_syslog(pamh, LOG_ERR, "pam_get_authtok_verify returned error: %s",
- pam_strerror (pamh, retval));
- pam_set_item(pamh, PAM_AUTHTOK, NULL);
- continue;
- } else if (newtoken == NULL) { /* user aborted password change, quit */
- return PAM_AUTHTOK_ERR;
- }
-
- return PAM_SUCCESS;
- }
-
- D(("returning because maxtries reached"));
-
- pam_set_item (pamh, PAM_AUTHTOK, NULL);
-
- /* if we have only one try, we can use the real reason,
- else say that there were too many tries. */
- if (options.retry_times > 1)
- return PAM_MAXTRIES;
- else
- return retval;
-
- } else {
- if (ctrl & PAM_DEBUG_ARG)
- pam_syslog(pamh, LOG_NOTICE, "UNKNOWN flags setting %02X",flags);
- return PAM_SERVICE_ERR;
- }
-
- /* Not reached */
- return PAM_SERVICE_ERR;
-}
-
-
-
-/*
- * Copyright (c) Cristian Gafton <gafton@redhat.com>, 1996.
- * All rights reserved
- *
- * 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.
- *
- * The following copyright was appended for the long password support
- * added with the libpam 0.58 release:
- *
- * Modificaton Copyright (c) Philip W. Dalrymple III <pwd@mdtsoft.com>
- * 1997. All rights reserved
- *
- * THE MODIFICATION THAT PROVIDES SUPPORT FOR LONG PASSWORD TYPE CHECKING TO
- * 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.
- */
diff --git a/modules/pam_cracklib/tst-pam_cracklib b/modules/pam_cracklib/tst-pam_cracklib
deleted file mode 100755
index 46a7060d..00000000
--- a/modules/pam_cracklib/tst-pam_cracklib
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-../../tests/tst-dlopen .libs/pam_cracklib.so
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 abc2a9d2..32fa197d 100644
--- a/modules/pam_debug/Makefile.in
+++ b/modules/pam_debug/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_debug-retval$(EXEEXT)
subdir = modules/pam_debug
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -378,6 +381,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -422,10 +426,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -435,12 +443,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -454,7 +466,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -473,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@
@@ -501,8 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -513,11 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -562,7 +579,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -570,9 +586,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -582,6 +595,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -594,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)
@@ -932,7 +947,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 552da6b3..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: 06/08/2020
+.\" 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" "06/08/2020" "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 7622e003..98bc5b1c 100644
--- a/modules/pam_deny/Makefile.in
+++ b/modules/pam_deny/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_deny-retval$(EXEEXT)
subdir = modules/pam_deny
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -378,6 +381,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -422,10 +426,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -435,12 +443,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -454,7 +466,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -473,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@
@@ -501,8 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -513,11 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -562,7 +579,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -570,9 +586,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -582,6 +595,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -594,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)
@@ -932,7 +947,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 e4c4ec56..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: 06/08/2020
+.\" 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" "06/08/2020" "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 67e226d4..f1b3f7ef 100644
--- a/modules/pam_echo/Makefile.in
+++ b/modules/pam_echo/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_echo-retval$(EXEEXT)
subdir = modules/pam_echo
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -378,6 +381,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -422,10 +426,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -435,12 +443,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -454,7 +466,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -473,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@
@@ -501,8 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -513,11 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -562,7 +579,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -570,9 +586,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -582,6 +595,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -594,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)
@@ -932,7 +947,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 625eb848..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b422c591..dd3fd05f 100644
--- a/modules/pam_env/Makefile.in
+++ b/modules/pam_env/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -94,20 +94,24 @@ 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/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -148,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
@@ -170,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)
@@ -190,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;; \
@@ -378,6 +388,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -422,10 +433,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -435,12 +450,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -454,7 +473,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -473,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@
@@ -501,8 +521,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -513,11 +532,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -562,7 +586,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -570,9 +593,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -582,6 +602,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -592,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
@@ -638,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=; \
@@ -676,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)
@@ -683,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)
@@ -1004,7 +1041,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -1017,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)
@@ -1027,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 \
@@ -1045,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); \
@@ -1094,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)
@@ -1139,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
@@ -1191,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
@@ -1215,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 1542f6d7..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.
@@ -57,7 +85,12 @@ user_envfile=filename
user_readenv=0|1
Turns on or off the reading of the user specific environment file. 0 is
- off, 1 is on. By default this option is off.
+ 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.
+
+ Due to problematic security this functionality is deprecated since the
+ 1.5.0 version and will be removed completely at some point in the future.
EXAMPLES
@@ -83,7 +116,7 @@ Now some simple variables
NNTPSERVER DEFAULT=localhost
PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
- XDG_DATA_HOME @{HOME}/share/
+ XDG_DATA_HOME DEFAULT=@{HOME}/share/
Silly examples of escaped variables, just to show how they work.
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 f674024c..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: 06/08/2020
+.\" 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" "06/08/2020" "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,9 +99,11 @@ 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\&.
+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
+Due to problematic security this functionality is deprecated since the 1\&.5\&.0 version and will be removed completely at some point in the future\&.
.RE
.SH "MODULE TYPES PROVIDED"
.PP
diff --git a/modules/pam_env/pam_env.8.xml b/modules/pam_env/pam_env.8.xml
index b765e527..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,12 +192,20 @@
<varlistentry>
<term>
- <option>user_readenv=<replaceable>0|1</replaceable></option>
+ user_readenv=0|1
</term>
<listitem>
<para>
Turns on or off the reading of the user specific environment
- file. 0 is off, 1 is on. By default this option is off.
+ 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.
+ </para>
+ <para>
+ Due to problematic security this functionality is deprecated
+ since the 1.5.0 version and will be removed completely at some
+ point in the future.
</para>
</listitem>
</varlistentry>
@@ -166,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
@@ -174,7 +221,7 @@
</para>
</refsect1>
- <refsect1 id="pam_env-return_values">
+ <refsect1 xml:id="pam_env-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -212,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>
@@ -236,7 +285,7 @@
</variablelist>
</refsect1>
- <refsect1 id="pam_env-see_also">
+ <refsect1 xml:id="pam_env-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -254,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 79d43722..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) {
@@ -120,169 +133,161 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv,
pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv);
}
+ if (*user_readenv)
+ pam_syslog(pamh, LOG_DEBUG, "deprecated reading of user environment enabled");
+
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;
@@ -311,7 +316,7 @@ static int _assemble_line(FILE *f, char *buffer, int buf_len)
D(("_assemble_line: corrupted or binary file"));
return -1;
}
- if (p[strlen(p)-1] != '\n') {
+ if (p[strlen(p)-1] != '\n' && !feof(f)) {
D(("_assemble_line: line too long"));
return -1;
}
@@ -370,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
@@ -451,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 */
@@ -466,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; /*
@@ -547,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
@@ -577,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;
}
@@ -602,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';
@@ -628,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) {
@@ -641,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++) */
@@ -653,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;) */
@@ -664,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 */
@@ -744,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 */
@@ -755,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 3a7155b0..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: 06/08/2020
+.\" 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" "06/08/2020" "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 and 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]
@@ -99,7 +99,7 @@ Now some simple variables
NNTPSERVER DEFAULT=localhost
PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\e
:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
- XDG_DATA_HOME @{HOME}/share/
+ XDG_DATA_HOME DEFAULT=@{HOME}/share/
.fi
.if n \{\
diff --git a/modules/pam_env/pam_env.conf.5.xml b/modules/pam_env/pam_env.conf.5.xml
index c47f17d9..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>.
@@ -29,11 +34,11 @@
</para>
<para>
Each line starts with the variable name, there are then two possible
- options for each variable DEFAULT and OVERRIDE. DEFAULT allows and
+ 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
+ (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
@@ -103,7 +116,7 @@
NNTPSERVER DEFAULT=localhost
PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
- XDG_DATA_HOME @{HOME}/share/
+ XDG_DATA_HOME DEFAULT=@{HOME}/share/
</programlisting>
<para>
@@ -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 84bc31ab..f738998d 100644
--- a/modules/pam_exec/Makefile.in
+++ b/modules/pam_exec/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_exec
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_exec/README b/modules/pam_exec/README
index 57147c80..39591625 100644
--- a/modules/pam_exec/README
+++ b/modules/pam_exec/README
@@ -47,6 +47,11 @@ quiet
Per default pam_exec.so will echo the exit status of the external command
if it fails. Specifying this option will suppress the message.
+quiet_log
+
+ 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.
+
seteuid
Per default pam_exec.so will execute the external command with the real
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 8e9093e0..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: 06/08/2020
+.\" 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" "06/08/2020" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_EXEC" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -31,7 +31,7 @@
pam_exec \- PAM module which calls an external command
.SH "SYNOPSIS"
.HP \w'\fBpam_exec\&.so\fR\ 'u
-\fBpam_exec\&.so\fR [debug] [expose_authtok] [seteuid] [quiet] [stdout] [log=\fIfile\fR] [type=\fItype\fR] \fIcommand\fR [\fI\&.\&.\&.\fR]
+\fBpam_exec\&.so\fR [debug] [expose_authtok] [seteuid] [quiet] [quiet_log] [stdout] [log=\fIfile\fR] [type=\fItype\fR] \fIcommand\fR [\fI\&.\&.\&.\fR]
.SH "DESCRIPTION"
.PP
pam_exec is a PAM module that can be used to run an external command\&.
@@ -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,12 +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
-\fBseteuid\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
+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 1f217339..13abe6e6 100644
--- a/modules/pam_exec/pam_exec.8.xml
+++ b/modules/pam_exec/pam_exec.8.xml
@@ -1,54 +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" 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>
@@ -80,7 +80,7 @@
</refsect1>
- <refsect1 id="pam_exec-options">
+ <refsect1 xml:id="pam_exec-options">
<title>OPTIONS</title>
<para>
@@ -88,7 +88,7 @@
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -99,7 +99,7 @@
<varlistentry>
<term>
- <option>expose_authtok</option>
+ expose_authtok
</term>
<listitem>
<para>
@@ -114,7 +114,7 @@
<varlistentry>
<term>
- <option>log=<replaceable>file</replaceable></option>
+ log=file
</term>
<listitem>
<para>
@@ -126,7 +126,7 @@
<varlistentry>
<term>
- <option>type=<replaceable>type</replaceable></option>
+ type=type
</term>
<listitem>
<para>
@@ -137,7 +137,7 @@
<varlistentry>
<term>
- <option>stdout</option>
+ stdout
</term>
<listitem>
<para>
@@ -148,7 +148,7 @@
<varlistentry>
<term>
- <option>quiet</option>
+ quiet
</term>
<listitem>
<para>
@@ -161,7 +161,20 @@
<varlistentry>
<term>
- <option>seteuid</option>
+ quiet_log
+ </term>
+ <listitem>
+ <para>
+ 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.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ seteuid
</term>
<listitem>
<para>
@@ -178,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>,
@@ -186,7 +199,7 @@
</para>
</refsect1>
- <refsect1 id='pam_exec-return_values'>
+ <refsect1 xml:id="pam_exec-return_values">
<title>RETURN VALUES</title>
<para>
<variablelist>
@@ -262,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
@@ -277,7 +290,7 @@
</para>
</refsect1>
- <refsect1 id='pam_exec-see_also'>
+ <refsect1 xml:id="pam_exec-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -292,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
@@ -300,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 5ca85ab3..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>
@@ -93,6 +94,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
int debug = 0;
int call_setuid = 0;
int quiet = 0;
+ int quiet_log = 0;
int expose_authtok = 0;
int use_stdout = 0;
int optargc;
@@ -104,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,
@@ -133,6 +136,8 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
call_setuid = 1;
else if (strcasecmp (argv[optargc], "quiet") == 0)
quiet = 1;
+ else if (strcasecmp (argv[optargc], "quiet_log") == 0)
+ quiet_log = 1;
else if (strcasecmp (argv[optargc], "expose_authtok") == 0)
expose_authtok = 1;
else
@@ -179,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;
@@ -189,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);
}
}
@@ -197,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;
}
@@ -207,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;
@@ -243,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];
@@ -260,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");
@@ -269,6 +293,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
{
if (WIFEXITED(status))
{
+ if (!quiet_log)
pam_syslog (pamh, LOG_ERR, "%s failed: exit code %d",
argv[optargc], WEXITSTATUS(status));
if (!quiet)
@@ -277,6 +302,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
}
else if (WIFSIGNALED(status))
{
+ if (!quiet_log)
pam_syslog (pamh, LOG_ERR, "%s failed: caught signal %d%s",
argv[optargc], WTERMSIG(status),
WCOREDUMP(status) ? " (core dumped)" : "");
@@ -287,6 +313,7 @@ call_exec (const char *pam_type, pam_handle_t *pamh,
}
else
{
+ if (!quiet_log)
pam_syslog (pamh, LOG_ERR, "%s failed: unknown status 0x%x",
argv[optargc], status);
if (!quiet)
@@ -299,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 =
@@ -309,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. */
@@ -412,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;
/*
@@ -424,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;
@@ -440,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);
}
@@ -450,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);
}
@@ -460,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 6eddb0c0..3f526dfb 100644
--- a/modules/pam_faildelay/Makefile.in
+++ b/modules/pam_faildelay/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_faildelay-retval$(EXEEXT)
subdir = modules/pam_faildelay
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -379,6 +382,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -423,10 +427,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -436,12 +444,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -455,7 +467,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -474,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@
@@ -502,8 +515,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,11 +526,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -563,7 +580,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -571,9 +587,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -583,6 +596,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -595,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)
@@ -933,7 +948,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 4cefeed0..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b1f2b3e5..ec61aeb0 100644
--- a/modules/pam_faillock/Makefile.am
+++ b/modules/pam_faillock/Makefile.am
@@ -15,17 +15,21 @@ 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)
-faillock_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@
+faillock_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@
pam_faillock_la_LDFLAGS = -no-undefined -avoid-version -module
pam_faillock_la_LIBADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT)
@@ -33,7 +37,10 @@ if HAVE_VERSIONING
pam_faillock_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
endif
-faillock_LDFLAGS = @PIE_LDFLAGS@
+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)
dist_secureconf_DATA = faillock.conf
@@ -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 b2a80262..e9b62c30 100644
--- a/modules/pam_faillock/Makefile.in
+++ b/modules/pam_faillock/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -98,21 +98,25 @@ 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
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -157,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@)
@@ -168,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
@@ -191,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)
@@ -212,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;; \
@@ -400,6 +413,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -444,10 +458,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -457,12 +475,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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,7 +498,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -495,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@
@@ -523,8 +546,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -535,11 +557,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -584,7 +611,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -592,9 +618,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -604,6 +627,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -614,23 +638,25 @@ 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)
-faillock_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@
+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)
-faillock_LDFLAGS = @PIE_LDFLAGS@
+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
@@ -665,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=; \
@@ -757,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)
@@ -764,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)
@@ -823,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
@@ -1095,7 +1151,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -1108,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)
@@ -1118,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 \
@@ -1136,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); \
@@ -1185,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)
@@ -1230,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
@@ -1285,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
@@ -1312,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 c88705ad..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.
@@ -66,7 +70,7 @@ screensaver.
Note that using the module in preauth without the silent option specified in /
etc/security/faillock.conf or with requisite control field leaks an information
-about existence or non-existence of an user account in the system because the
+about existence or non-existence of a user account in the system because the
failures are not recorded for the unknown users. The message about the user
account being locked is never displayed for non-existing user accounts allowing
the adversary to infer that a particular account is not existing on a system.
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 3ba58aa0..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: 06/08/2020
+.\" 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" "06/08/2020" "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.c b/modules/pam_faillock/faillock.c
index e492f5f9..091f253a 100644
--- a/modules/pam_faillock/faillock.c
+++ b/modules/pam_faillock/faillock.c
@@ -74,9 +74,12 @@ open_tally (const char *dir, const char *user, uid_t uid, int create)
if (create) {
flags |= O_CREAT;
+ if (access(dir, F_OK) != 0) {
+ mkdir(dir, 0755);
+ }
}
- fd = open(path, flags, 0600);
+ fd = open(path, flags, 0660);
free(path);
@@ -88,6 +91,18 @@ open_tally (const char *dir, const char *user, uid_t uid, int create)
if (st.st_uid != uid) {
ignore_return(fchown(fd, uid, -1));
}
+
+ /*
+ * If umask is set to 022, as will probably in most systems, then the
+ * group will not be able to write to the file. So, change the file
+ * permissions just in case.
+ * Note: owners of this file are user:root, so if the permissions are
+ * not changed the root process writing to this file will require
+ * CAP_DAC_OVERRIDE.
+ */
+ if (!(st.st_mode & S_IWGRP)) {
+ ignore_return(fchmod(fd, 0660));
+ }
}
}
diff --git a/modules/pam_faillock/faillock.conf.5 b/modules/pam_faillock/faillock.conf.5
index 7870153d..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: 06/08/2020
+.\" 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" "06/08/2020" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "FAILLOCK\&.CONF" "5" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -47,49 +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
-\fBdeny=\fR\fB\fIn\fR\fR
+nodelay
+.RS 4
+Don\*(Aqt enforce a delay after authentication failures\&.
+.RE
+.PP
+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
@@ -108,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
@@ -124,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 aa8500b9..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,17 @@
</varlistentry>
<varlistentry>
<term>
- <option>deny=<replaceable>n</replaceable></option>
+ nodelay
+ </term>
+ <listitem>
+ <para>
+ Don't enforce a delay after authentication failures.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ deny=n
</term>
<listitem>
<para>
@@ -108,7 +119,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>fail_interval=<replaceable>n</replaceable></option>
+ fail_interval=n
</term>
<listitem>
<para>
@@ -121,7 +132,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>unlock_time=<replaceable>n</replaceable></option>
+ unlock_time=n
</term>
<listitem>
<para>
@@ -149,7 +160,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>even_deny_root</option>
+ even_deny_root
</term>
<listitem>
<para>
@@ -159,7 +170,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>root_unlock_time=<replaceable>n</replaceable></option>
+ root_unlock_time=n
</term>
<listitem>
<para>
@@ -173,7 +184,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>admin_group=<replaceable>name</replaceable></option>
+ admin_group=name
</term>
<listitem>
<para>
@@ -188,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:
@@ -200,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>
@@ -212,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>
@@ -233,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 c5780166..136be834 100644
--- a/modules/pam_faillock/main.c
+++ b/modules/pam_faillock/main.c
@@ -51,33 +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 directory supplied.\n", argv[0]);
+ fprintf(stderr, "%s: No configuration file supplied.\n",
+ argv[0]);
return -1;
}
- opts->dir = argv[i];
+ conf = argv[i];
+ }
+ else if (strcmp(argv[i], "--dir") == 0) {
+ ++i;
+ if (i >= argc || strlen(argv[i]) == 0) {
+ fprintf(stderr, "%s: No records directory supplied.\n",
+ argv[0]);
+ return -1;
+ }
+ dir = argv[i];
}
else if (strcmp(argv[i], "--user") == 0) {
++i;
@@ -85,24 +92,118 @@ args_parse(int argc, char **argv, struct options *opts)
fprintf(stderr, "%s: No user name supplied.\n", argv[0]);
return -1;
}
- opts->user = argv[i];
+ opts->user = argv[i];
}
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
@@ -112,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) {
@@ -154,10 +260,8 @@ do_user(struct options *opts, const char *user)
}
}
else {
- unsigned int i;
-
memset(&tallies, 0, sizeof(tallies));
- if ((rv=read_tally(fd, &tallies)) == -1) {
+ if (read_tally(fd, &tallies) == -1) {
fprintf(stderr, "%s: Error reading the tally file for %s:",
opts->progname, user);
perror(NULL);
@@ -165,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);
@@ -191,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 593b1fec..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: 06/08/2020
+.\" 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" "06/08/2020" "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\&.
@@ -145,7 +145,7 @@ option specified in
/etc/security/faillock\&.conf
or with
\fIrequisite\fR
-control field leaks an information about existence or non\-existence of an user account in the system because the failures are not recorded for the unknown users\&. The message about the user account being locked is never displayed for non\-existing user accounts allowing the adversary to infer that a particular account is not existing on a system\&.
+control field leaks an information about existence or non\-existence of a user account in the system because the failures are not recorded for the unknown users\&. The message about the user account being locked is never displayed for non\-existing user accounts allowing the adversary to infer that a particular account is not existing on a system\&.
.SH "EXAMPLES"
.PP
Here are two possible configuration examples for
@@ -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 f43b4015..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,14 +230,14 @@
</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>
Note that using the module in <option>preauth</option> without the
<option>silent</option> option specified in <filename>/etc/security/faillock.conf</filename>
or with <emphasis>requisite</emphasis> control field leaks an information about
- existence or non-existence of an user account in the system because
+ existence or non-existence of a user account in the system because
the failures are not recorded for the unknown users. The message
about the user account being locked is never displayed for non-existing
user accounts allowing the adversary to infer that a particular account
@@ -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 f592d0a2..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,77 +55,35 @@
#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 MAX_TIME_INTERVAL 604800 /* 7 days */
-#define FAILLOCK_CONF_MAX_LINELEN 1023
-
-#define PATH_PASSWD "/etc/passwd"
-
-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)
{
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;
opts->root_unlock_time = MAX_TIME_INTERVAL+1;
for (i = 0; i < argc; ++i) {
- const char *str;
+ const char *str = pam_str_skip_prefix(argv[i], "conf=");
- if ((str = pam_str_skip_prefix(argv[i], "conf=")) != NULL)
+ if (str != NULL) {
conf = str;
+ config_arg_index = i;
+ }
}
if ((rv = read_config_file(pamh, opts, conf)) != PAM_SUCCESS) {
@@ -136,7 +93,10 @@ args_parse(pam_handle_t *pamh, int argc, const char **argv,
}
for (i = 0; i < argc; ++i) {
- if (strcmp(argv[i], "preauth") == 0) {
+ if (i == config_arg_index) {
+ continue;
+ }
+ else if (strcmp(argv[i], "preauth") == 0) {
opts->action = FAILLOCK_ACTION_PREAUTH;
}
else if (strcmp(argv[i], "authfail") == 0) {
@@ -169,221 +129,15 @@ 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 {
- pam_syslog(pamh, LOG_ERR, "Unknown option: %s", name);
- }
-}
-
static int
check_local_user (pam_handle_t *pamh, const char *user)
{
- struct passwd pw, *pwp;
- char buf[16384];
- int found = 0;
- FILE *fp;
- int errn;
-
- fp = fopen(PATH_PASSWD, "r");
- if (fp == NULL) {
- pam_syslog(pamh, LOG_ERR, "unable to open %s: %m",
- PATH_PASSWD);
- return -1;
- }
-
- for (;;) {
- errn = fgetpwent_r(fp, &pw, buf, sizeof (buf), &pwp);
- if (errn == ERANGE) {
- pam_syslog(pamh, LOG_WARNING, "%s contains very long lines; corrupted?",
- PATH_PASSWD);
- break;
- }
- if (errn != 0)
- break;
- if (strcmp(pwp->pw_name, user) == 0) {
- found = 1;
- break;
- }
- }
-
- fclose (fp);
-
- if (errn != 0 && errn != ENOENT) {
- pam_syslog(pamh, LOG_ERR, "unable to enumerate local accounts: %m");
- return -1;
- } else {
- return found;
- }
+ return pam_modutil_check_user_in_passwd(pamh, user, NULL) == PAM_SUCCESS;
}
static int
@@ -433,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;
@@ -510,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);
@@ -531,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) {
@@ -617,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);
}
}
@@ -647,7 +406,21 @@ faillock_message(pam_handle_t *pamh, struct options *opts)
if (left > 0) {
left = (left + 59)/60; /* minutes */
- pam_info(pamh, _("(%d minutes left to unlock)"), (int)left);
+#if defined HAVE_DNGETTEXT && defined ENABLE_NLS
+ pam_info(
+ pamh,
+ dngettext(PACKAGE,
+ "(%d minute left to unlock)",
+ "(%d minutes left to unlock)",
+ (int)left),
+ (int)left);
+#else
+ if (left == 1)
+ pam_info(pamh, _("(%d minute left to unlock)"), (int)left);
+ else
+ /* TRANSLATORS: only used if dngettext is not supported. */
+ pam_info(pamh, _("(%d minutes left to unlock)"), (int)left);
+#endif
}
}
}
@@ -685,7 +458,9 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags,
if (rv != PAM_SUCCESS)
goto err;
- pam_fail_delay(pamh, 2000000); /* 2 sec delay on failure */
+ if (!(opts.flags & FAILLOCK_FLAG_NO_DELAY)) {
+ pam_fail_delay(pamh, 2000000); /* 2 sec delay on failure */
+ }
if ((rv=get_pam_user(pamh, &opts)) != PAM_SUCCESS) {
goto err;
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 76fc4684..33a3de48 100644
--- a/modules/pam_filter/Makefile.in
+++ b/modules/pam_filter/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_filter
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -393,6 +396,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
TEST_SUITE_LOG = test-suite.log
TEST_EXTENSIONS = @EXEEXT@ .test
@@ -462,10 +466,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -475,12 +483,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -494,7 +506,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -513,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@
@@ -541,8 +554,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -553,11 +565,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -602,7 +619,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -610,9 +626,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -622,6 +635,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -635,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)
@@ -1027,7 +1042,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 b4e4104a..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: 06/08/2020
+.\" 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" "06/08/2020" "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/pam_filter.c b/modules/pam_filter/pam_filter.c
index 2f0af4fb..6e6def37 100644
--- a/modules/pam_filter/pam_filter.c
+++ b/modules/pam_filter/pam_filter.c
@@ -354,7 +354,7 @@ set_filter (pam_handle_t *pamh, int flags UNUSED, int ctrl,
int t = open("/dev/tty", O_RDWR|O_NOCTTY);
#else
int t = open("/dev/tty",O_RDWR);
- if (t > 0) {
+ if (t >= 0) {
(void) ioctl(t, TIOCNOTTY, NULL);
close(t);
}
diff --git a/modules/pam_filter/upperLOWER/Makefile.am b/modules/pam_filter/upperLOWER/Makefile.am
index 34391e89..f65c462b 100644
--- a/modules/pam_filter/upperLOWER/Makefile.am
+++ b/modules/pam_filter/upperLOWER/Makefile.am
@@ -8,8 +8,8 @@ securelibfilterdir = $(SECUREDIR)/pam_filter
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -I$(srcdir)/.. @PIE_CFLAGS@ $(WARN_CFLAGS)
-AM_LDFLAGS = @PIE_LDFLAGS@
+ -I$(srcdir)/.. @EXE_CFLAGS@ $(WARN_CFLAGS)
+AM_LDFLAGS = @EXE_LDFLAGS@
LDADD = $(top_builddir)/libpam/libpam.la
securelibfilter_PROGRAMS = upperLOWER
diff --git a/modules/pam_filter/upperLOWER/Makefile.in b/modules/pam_filter/upperLOWER/Makefile.in
index 4b3d5b6c..c25f53e2 100644
--- a/modules/pam_filter/upperLOWER/Makefile.in
+++ b/modules/pam_filter/upperLOWER/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -95,18 +95,21 @@ host_triplet = @host@
securelibfilter_PROGRAMS = upperLOWER$(EXEEXT)
subdir = modules/pam_filter/upperLOWER
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -206,10 +209,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -219,12 +226,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -238,7 +249,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -257,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@
@@ -285,8 +297,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -297,11 +308,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -346,7 +362,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -354,9 +369,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -366,6 +378,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -373,9 +386,9 @@ top_srcdir = @top_srcdir@
CLEANFILES = *~
securelibfilterdir = $(SECUREDIR)/pam_filter
AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- -I$(srcdir)/.. @PIE_CFLAGS@ $(WARN_CFLAGS)
+ -I$(srcdir)/.. @EXE_CFLAGS@ $(WARN_CFLAGS)
-AM_LDFLAGS = @PIE_LDFLAGS@
+AM_LDFLAGS = @EXE_LDFLAGS@
LDADD = $(top_builddir)/libpam/libpam.la
all: all-am
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 b9d1b2bb..442fb494 100644
--- a/modules/pam_ftp/Makefile.in
+++ b/modules/pam_ftp/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_ftp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 a7b97ec8..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b2c32b74..41fb9f48 100644
--- a/modules/pam_ftp/pam_ftp.c
+++ b/modules/pam_ftp/pam_ftp.c
@@ -133,6 +133,8 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
retval = pam_set_item(pamh, PAM_USER, (const void *)anon_user);
if (retval != PAM_SUCCESS || anon_user == NULL) {
pam_syslog(pamh, LOG_ERR, "user resetting failed");
+ free(anon_user);
+
return PAM_USER_UNKNOWN;
}
free(anon_user);
@@ -155,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);
@@ -194,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 1761ebfd..66e4ed95 100644
--- a/modules/pam_group/Makefile.in
+++ b/modules/pam_group/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_group
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -376,6 +379,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -420,10 +424,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -433,12 +441,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -452,7 +464,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -471,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@
@@ -499,8 +512,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -511,11 +523,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -560,7 +577,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -568,9 +584,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -580,6 +593,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -592,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
@@ -980,7 +995,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 8e359a78..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: 06/08/2020
+.\" 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" "06/08/2020" "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 94b4afb0..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: 06/08/2020
+.\" 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" "06/08/2020" "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 ea74d07e..02a3cc16 100644
--- a/modules/pam_issue/Makefile.in
+++ b/modules/pam_issue/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_issue
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -145,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@)
@@ -373,6 +378,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +423,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +440,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +463,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +511,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +522,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +576,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +583,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +592,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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
@@ -912,7 +929,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 abe2585f..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: 06/08/2020
+.\" 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" "06/08/2020" "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 a1a11625..7da83525 100644
--- a/modules/pam_keyinit/Makefile.in
+++ b/modules/pam_keyinit/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_keyinit
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 814008c3..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: 06/08/2020
+.\" 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" "06/08/2020" "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 85de1bb0..0811a233 100644
--- a/modules/pam_lastlog/Makefile.in
+++ b/modules/pam_lastlog/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_lastlog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_lastlog/README b/modules/pam_lastlog/README
index c0feca04..9b0cff9c 100644
--- a/modules/pam_lastlog/README
+++ b/modules/pam_lastlog/README
@@ -76,7 +76,7 @@ unlimited
EXAMPLES
-Add the following line to /etc/pam.d/login to display the last login time of an
+Add the following line to /etc/pam.d/login to display the last login time of a
user:
session required pam_lastlog.so nowtmp
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 f21038e7..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: 06/08/2020
+.\" 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" "06/08/2020" "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
@@ -153,7 +153,7 @@ There was an error during reading the lastlog file in the auth or account phase
.PP
Add the following line to
/etc/pam\&.d/login
-to display the last login time of an user:
+to display the last login time of a user:
.sp
.if n \{\
.RS 4
diff --git a/modules/pam_lastlog/pam_lastlog.8.xml b/modules/pam_lastlog/pam_lastlog.8.xml
index a2f14fc2..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,11 +279,11 @@
</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
- display the last login time of an user:
+ display the last login time of a user:
</para>
<programlisting>
session required pam_lastlog.so nowtmp
@@ -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 ac06d6c0..7b515b83 100644
--- a/modules/pam_limits/Makefile.in
+++ b/modules/pam_limits/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_limits
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -376,6 +379,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -420,10 +424,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -433,12 +441,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -452,7 +464,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -471,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@
@@ -499,8 +512,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -511,11 +523,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -560,7 +577,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -568,9 +584,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -580,6 +593,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -592,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
@@ -982,7 +997,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_limits/README b/modules/pam_limits/README
index 6aabd54f..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
@@ -62,6 +74,7 @@ limits.conf.
@faculty hard nproc 50
ftp hard nproc 0
@student - maxlogins 4
+@student - nonewprivs 1
:123 hard cpu 5000
@500: soft cpu 10000
600:700 hard locks 10
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 b/modules/pam_limits/limits.conf
index be621a7c..e8a746cc 100644
--- a/modules/pam_limits/limits.conf
+++ b/modules/pam_limits/limits.conf
@@ -1,5 +1,16 @@
# /etc/security/limits.conf
#
+#This file sets the resource limits for the users logged in via PAM.
+#It does not affect resource limits of the system services.
+#
+#Also note that configuration files in /etc/security/limits.d directory,
+#which are read in alphabetical order, override the settings in this
+#file in case the domain is the same or more specific.
+#That means, for example, that setting a limit for wildcard domain here
+#can be overridden with a wildcard setting in a config file in the
+#subdirectory, but a user specific setting here can be overridden only
+#with a user specific setting in the subdirectory.
+#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
diff --git a/modules/pam_limits/limits.conf.5 b/modules/pam_limits/limits.conf.5
index f527fec8..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: 06/08/2020
+.\" 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" "06/08/2020" "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,97 +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
-\fBpriority\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
+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
@@ -282,9 +287,11 @@ All items support the values
or
\fIinfinity\fR
indicating no limit, except for
-\fBpriority\fR
-and
-\fBnice\fR\&.
+\fBpriority\fR,
+\fBnice\fR, and
+\fBnonewprivs\fR\&. If
+\fBnofile\fR
+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))\&.
.PP
If a hard limit or soft limit of a resource is set to a valid value, but outside of the supported range of the local system, the system may reject the new limit or unexpected behavior may occur\&. If the control value
\fIrequired\fR
@@ -321,6 +328,7 @@ These are some example lines which might be specified in
@faculty hard nproc 50
ftp hard nproc 0
@student \- maxlogins 4
+@student \- nonewprivs 1
:123 hard cpu 5000
@500: soft cpu 10000
600:700 hard locks 10
diff --git a/modules/pam_limits/limits.conf.5.xml b/modules/pam_limits/limits.conf.5.xml
index 380a1399..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,39 +221,46 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><option>priority</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>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>
@@ -274,7 +274,10 @@
<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> and <emphasis remap='B'>nice</emphasis>.
+ 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>
If a hard limit or soft limit of a resource is set to a valid value,
@@ -299,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>
@@ -309,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
@@ -323,13 +326,14 @@
@faculty hard nproc 50
ftp hard nproc 0
@student - maxlogins 4
+@student - nonewprivs 1
:123 hard cpu 5000
@500: soft cpu 10000
600:700 hard locks 10
</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>,
@@ -340,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 fbbacc66..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b791cdce..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
@@ -28,6 +28,7 @@
#include <syslog.h>
#include <stdarg.h>
#include <signal.h>
+#include <sys/prctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/resource.h>
@@ -46,10 +47,14 @@
#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
-#define LIMITS_DEF_USER 0 /* limit was set by an user entry */
+#define LIMITS_DEF_USER 0 /* limit was set by a user entry */
#define LIMITS_DEF_GROUP 1 /* limit was set by a group entry */
#define LIMITS_DEF_ALLGROUP 2 /* limit was set by a group entry */
#define LIMITS_DEF_ALL 3 /* limit was set by an all entry */
@@ -88,6 +93,7 @@ struct pam_limit_s {
int flag_numsyslogins; /* whether to limit logins only for a
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) */
struct user_limits_struct limits[RLIM_NLIMITS];
const char *conf_file;
int utmp_after_pam_call;
@@ -98,6 +104,7 @@ struct pam_limit_s {
#define LIMIT_NUMSYSLOGINS RLIM_NLIMITS+2
#define LIMIT_PRI RLIM_NLIMITS+3
+#define LIMIT_NONEWPRIVS RLIM_NLIMITS+4
#define LIMIT_SOFT 1
#define LIMIT_HARD 2
@@ -116,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 CONF_FILE (pl->conf_file != NULL)?pl->conf_file:LIMITS_FILE
+#define LIMITS_FILE (SCONFIGDIR "/limits.conf")
+
+#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,
@@ -271,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)
@@ -484,6 +496,41 @@ static int init_limits(pam_handle_t *pamh, struct pam_limit_s *pl, int ctrl)
return retval;
}
+/*
+ * Read the contents of <pathname> and return it in *valuep
+ * return 1 if conversion succeeds, result is in *valuep
+ * return 0 if conversion fails, *valuep is untouched.
+ */
+static int
+value_from_file(const char *pathname, rlim_t *valuep)
+{
+ char buf[128];
+ FILE *fp;
+ int retval;
+
+ retval = 0;
+
+ if ((fp = fopen(pathname, "r")) != NULL) {
+ if (fgets(buf, sizeof(buf), fp) != NULL) {
+ char *endptr;
+ unsigned long long value;
+
+ errno = 0;
+ value = strtoull(buf, &endptr, 10);
+ if (endptr != buf &&
+ (value != ULLONG_MAX || errno == 0) &&
+ (unsigned long long) (rlim_t) value == value) {
+ *valuep = (rlim_t) value;
+ retval = 1;
+ }
+ }
+
+ fclose(fp);
+ }
+
+ return retval;
+}
+
static void
process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
const char *lim_item, const char *lim_value,
@@ -551,6 +598,8 @@ process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
pl->flag_numsyslogins = 1;
} else if (strcmp(lim_item, "priority") == 0) {
limit_item = LIMIT_PRI;
+ } else if (strcmp(lim_item, "nonewprivs") == 0) {
+ limit_item = LIMIT_NONEWPRIVS;
} else {
pam_syslog(pamh, LOG_DEBUG, "unknown limit item '%s'", lim_item);
return;
@@ -562,11 +611,23 @@ process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
limit_type=LIMIT_HARD;
else if (strcmp(lim_type,"-")==0)
limit_type=LIMIT_SOFT | LIMIT_HARD;
- else if (limit_item != LIMIT_LOGIN && limit_item != LIMIT_NUMSYSLOGINS) {
+ else if (limit_item != LIMIT_LOGIN && limit_item != LIMIT_NUMSYSLOGINS
+ && limit_item != LIMIT_NONEWPRIVS) {
pam_syslog(pamh, LOG_DEBUG, "unknown limit type '%s'", lim_type);
return;
}
- if (limit_item != LIMIT_PRI
+ if (limit_item == LIMIT_NONEWPRIVS) {
+ /* just require a bool-style 0 or 1 */
+ if (strcmp(lim_value, "0") == 0) {
+ int_value = 0;
+ } else if (strcmp(lim_value, "1") == 0) {
+ int_value = 1;
+ } else {
+ pam_syslog(pamh, LOG_DEBUG,
+ "wrong limit value '%s' for limit type '%s'",
+ lim_value, lim_type);
+ }
+ } else if (limit_item != LIMIT_PRI
#ifdef RLIMIT_NICE
&& limit_item != RLIMIT_NICE
#endif
@@ -649,11 +710,26 @@ process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
rlimit_value = 20 - int_value;
break;
#endif
+ case RLIMIT_NOFILE:
+ /*
+ * If nofile is to be set to "unlimited", try to set it to
+ * the value in /proc/sys/fs/nr_open instead.
+ */
+ if (rlimit_value == RLIM_INFINITY) {
+ if (!value_from_file("/proc/sys/fs/nr_open", &rlimit_value))
+ pam_syslog(pamh, LOG_WARNING,
+ "Cannot set \"nofile\" to a sensible value");
+ else if (ctrl & PAM_DEBUG_ARG)
+ pam_syslog(pamh, LOG_DEBUG, "Setting \"nofile\" limit to %llu",
+ (unsigned long long) rlimit_value);
+ }
+ break;
}
if ( (limit_item != LIMIT_LOGIN)
&& (limit_item != LIMIT_NUMSYSLOGINS)
- && (limit_item != LIMIT_PRI) ) {
+ && (limit_item != LIMIT_PRI)
+ && (limit_item != LIMIT_NONEWPRIVS) ) {
if (limit_type & LIMIT_SOFT) {
if (pl->limits[limit_item].src_soft < source) {
return;
@@ -674,14 +750,16 @@ process_limit (const pam_handle_t *pamh, int source, const char *lim_type,
/* recent kernels support negative priority limits (=raise priority) */
if (limit_item == LIMIT_PRI) {
- pl->priority = int_value;
+ pl->priority = int_value;
+ } else if (limit_item == LIMIT_NONEWPRIVS) {
+ pl->nonewprivs = int_value;
} else {
- if (pl->login_limit_def < source) {
- return;
- } else {
- pl->login_limit = int_value;
- pl->login_limit_def = source;
- }
+ if (pl->login_limit_def < source) {
+ return;
+ } else {
+ pl->login_limit = int_value;
+ pl->login_limit_def = source;
+ }
}
}
return;
@@ -737,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;
}
@@ -995,36 +1077,142 @@ static int setup_limits(pam_handle_t *pamh,
retval |= LOGIN_ERR;
}
+ if (pl->nonewprivs) {
+ if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) < 0) {
+ pam_syslog(pamh, LOG_ERR, "Could not set prctl(PR_SET_NO_NEW_PRIVS): %m");
+ retval |= LIMIT_ERR;
+ }
+ }
+
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) {
@@ -1040,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 5cf383d2..ffe0df6a 100644
--- a/modules/pam_listfile/Makefile.in
+++ b/modules/pam_listfile/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_listfile
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 18cf0f83..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: 06/08/2020
+.\" 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" "06/08/2020" "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 81aa2789..57ea3071 100644
--- a/modules/pam_localuser/Makefile.in
+++ b/modules/pam_localuser/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_localuser-retval$(EXEEXT)
subdir = modules/pam_localuser
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -379,6 +382,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -423,10 +427,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -436,12 +444,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -455,7 +467,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -474,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@
@@ -502,8 +515,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,11 +526,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -563,7 +580,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -571,9 +587,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -583,6 +596,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -595,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)
@@ -933,7 +948,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 65e49990..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: 06/08/2020
+.\" 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" "06/08/2020" "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_localuser/pam_localuser.c b/modules/pam_localuser/pam_localuser.c
index cb507524..a9f2233c 100644
--- a/modules/pam_localuser/pam_localuser.c
+++ b/modules/pam_localuser/pam_localuser.c
@@ -45,92 +45,10 @@
#include <unistd.h>
#include <security/pam_modules.h>
+#include <security/pam_modutil.h>
#include <security/pam_ext.h>
#include "pam_inline.h"
-static int
-check_user_in_passwd(pam_handle_t *pamh, const char *user_name,
- const char *file_name)
-{
- int rc;
- size_t user_len;
- FILE *fp;
- char line[BUFSIZ];
-
- /* Validate the user name. */
- if ((user_len = strlen(user_name)) == 0) {
- pam_syslog(pamh, LOG_NOTICE, "user name is not valid");
- return PAM_SERVICE_ERR;
- }
-
- if (user_len > sizeof(line) - sizeof(":")) {
- pam_syslog(pamh, LOG_NOTICE, "user name is too long");
- return PAM_SERVICE_ERR;
- }
-
- if (strchr(user_name, ':') != NULL) {
- /*
- * "root:x" is not a local user name even if the passwd file
- * contains a line starting with "root:x:".
- */
- return PAM_PERM_DENIED;
- }
-
- /* Open the passwd file. */
- if (file_name == NULL) {
- file_name = "/etc/passwd";
- }
- if ((fp = fopen(file_name, "r")) == NULL) {
- pam_syslog(pamh, LOG_ERR, "error opening %s: %m", file_name);
- return PAM_SERVICE_ERR;
- }
-
- /*
- * Scan the file using fgets() instead of fgetpwent_r() because
- * the latter is not flexible enough in handling long lines
- * in passwd files.
- */
- rc = PAM_PERM_DENIED;
- while (fgets(line, sizeof(line), fp) != NULL) {
- size_t line_len;
- const char *str;
-
- /*
- * Does this line start with the user name
- * followed by a colon?
- */
- if (strncmp(user_name, line, user_len) == 0 &&
- line[user_len] == ':') {
- rc = PAM_SUCCESS;
- break;
- }
- /* Has a newline been read? */
- line_len = strlen(line);
- if (line_len < sizeof(line) - 1 ||
- line[line_len - 1] == '\n') {
- /* Yes, continue with the next line. */
- continue;
- }
-
- /* No, read till the end of this line first. */
- while ((str = fgets(line, sizeof(line), fp)) != NULL) {
- line_len = strlen(line);
- if (line_len == 0 ||
- line[line_len - 1] == '\n') {
- break;
- }
- }
- if (str == NULL) {
- /* fgets returned NULL, we are done. */
- break;
- }
- /* Continue with the next line. */
- }
-
- fclose(fp);
- return rc;
-}
-
int
pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED,
int argc, const char **argv)
@@ -173,7 +91,7 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED,
return rc == PAM_CONV_AGAIN ? PAM_INCOMPLETE : rc;
}
- return check_user_in_passwd(pamh, user_name, file_name);
+ return pam_modutil_check_user_in_passwd(pamh, user_name, file_name);
}
int
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 2bd0872d..fbb16ac9 100644
--- a/modules/pam_loginuid/Makefile.in
+++ b/modules/pam_loginuid/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_loginuid
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 e2f45e63..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: 06/08/2020
+.\" 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" "06/08/2020" "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_loginuid/pam_loginuid.c b/modules/pam_loginuid/pam_loginuid.c
index 62dd3d59..6f5a6380 100644
--- a/modules/pam_loginuid/pam_loginuid.c
+++ b/modules/pam_loginuid/pam_loginuid.c
@@ -65,7 +65,7 @@ static int set_loginuid(pam_handle_t *pamh, uid_t uid)
fd = open("/proc/self/uid_map", O_RDONLY);
if (fd >= 0) {
count = pam_modutil_read(fd, uid_map, sizeof(uid_map));
- if (strncmp(uid_map, host_uid_map, count) != 0)
+ if (count <= 0 || strncmp(uid_map, host_uid_map, count) != 0)
rc = PAM_IGNORE;
close(fd);
}
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 9f7d8228..36df81cd 100644
--- a/modules/pam_mail/Makefile.in
+++ b/modules/pam_mail/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_mail
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 4761b122..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: 06/08/2020
+.\" 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" "06/08/2020" "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 973bc336..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)
@@ -31,6 +35,8 @@ endif
sbin_PROGRAMS = mkhomedir_helper
mkhomedir_helper_SOURCES = mkhomedir_helper.c
+mkhomedir_helper_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@
+mkhomedir_helper_LDFLAGS = @EXE_LDFLAGS@
mkhomedir_helper_LDADD = $(top_builddir)/libpam/libpam.la
check_PROGRAMS = tst-pam_mkhomedir-retval
diff --git a/modules/pam_mkhomedir/Makefile.in b/modules/pam_mkhomedir/Makefile.in
index 8776cb58..3e5cb170 100644
--- a/modules/pam_mkhomedir/Makefile.in
+++ b/modules/pam_mkhomedir/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -100,18 +100,21 @@ sbin_PROGRAMS = mkhomedir_helper$(EXEEXT)
check_PROGRAMS = tst-pam_mkhomedir-retval$(EXEEXT)
subdir = modules/pam_mkhomedir
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -162,9 +165,14 @@ pam_mkhomedir_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(pam_mkhomedir_la_LDFLAGS) $(LDFLAGS) \
-o $@
-am_mkhomedir_helper_OBJECTS = mkhomedir_helper.$(OBJEXT)
+am_mkhomedir_helper_OBJECTS = \
+ mkhomedir_helper-mkhomedir_helper.$(OBJEXT)
mkhomedir_helper_OBJECTS = $(am_mkhomedir_helper_OBJECTS)
mkhomedir_helper_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+mkhomedir_helper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(mkhomedir_helper_CFLAGS) $(CFLAGS) \
+ $(mkhomedir_helper_LDFLAGS) $(LDFLAGS) -o $@
tst_pam_mkhomedir_retval_SOURCES = tst-pam_mkhomedir-retval.c
tst_pam_mkhomedir_retval_OBJECTS = tst-pam_mkhomedir-retval.$(OBJEXT)
tst_pam_mkhomedir_retval_DEPENDENCIES = \
@@ -184,7 +192,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)/mkhomedir_helper.Po \
+am__depfiles_remade = \
+ ./$(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Po \
./$(DEPDIR)/pam_mkhomedir.Plo \
./$(DEPDIR)/tst-pam_mkhomedir-retval.Po
am__mv = mv -f
@@ -394,6 +403,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -438,10 +448,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -451,12 +465,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -470,7 +488,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -489,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@
@@ -517,8 +536,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -529,11 +547,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -578,7 +601,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -586,9 +608,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -598,6 +617,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -610,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)
@@ -620,6 +641,8 @@ pam_mkhomedir_la_LIBADD = $(top_builddir)/libpam/libpam.la
pam_mkhomedir_la_LDFLAGS = -no-undefined -avoid-version -module \
$(am__append_1)
mkhomedir_helper_SOURCES = mkhomedir_helper.c
+mkhomedir_helper_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@
+mkhomedir_helper_LDFLAGS = @EXE_LDFLAGS@
mkhomedir_helper_LDADD = $(top_builddir)/libpam/libpam.la
tst_pam_mkhomedir_retval_LDADD = $(top_builddir)/libpam/libpam.la
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
@@ -755,7 +778,7 @@ pam_mkhomedir.la: $(pam_mkhomedir_la_OBJECTS) $(pam_mkhomedir_la_DEPENDENCIES) $
mkhomedir_helper$(EXEEXT): $(mkhomedir_helper_OBJECTS) $(mkhomedir_helper_DEPENDENCIES) $(EXTRA_mkhomedir_helper_DEPENDENCIES)
@rm -f mkhomedir_helper$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(mkhomedir_helper_OBJECTS) $(mkhomedir_helper_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(mkhomedir_helper_LINK) $(mkhomedir_helper_OBJECTS) $(mkhomedir_helper_LDADD) $(LIBS)
tst-pam_mkhomedir-retval$(EXEEXT): $(tst_pam_mkhomedir_retval_OBJECTS) $(tst_pam_mkhomedir_retval_DEPENDENCIES) $(EXTRA_tst_pam_mkhomedir_retval_DEPENDENCIES)
@rm -f tst-pam_mkhomedir-retval$(EXEEXT)
@@ -767,7 +790,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkhomedir_helper.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_mkhomedir.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_mkhomedir-retval.Po@am__quote@ # am--include-marker
@@ -798,6 +821,20 @@ am--depfiles: $(am__depfiles_remade)
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+mkhomedir_helper-mkhomedir_helper.o: mkhomedir_helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mkhomedir_helper_CFLAGS) $(CFLAGS) -MT mkhomedir_helper-mkhomedir_helper.o -MD -MP -MF $(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Tpo -c -o mkhomedir_helper-mkhomedir_helper.o `test -f 'mkhomedir_helper.c' || echo '$(srcdir)/'`mkhomedir_helper.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Tpo $(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkhomedir_helper.c' object='mkhomedir_helper-mkhomedir_helper.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) $(mkhomedir_helper_CFLAGS) $(CFLAGS) -c -o mkhomedir_helper-mkhomedir_helper.o `test -f 'mkhomedir_helper.c' || echo '$(srcdir)/'`mkhomedir_helper.c
+
+mkhomedir_helper-mkhomedir_helper.obj: mkhomedir_helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mkhomedir_helper_CFLAGS) $(CFLAGS) -MT mkhomedir_helper-mkhomedir_helper.obj -MD -MP -MF $(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Tpo -c -o mkhomedir_helper-mkhomedir_helper.obj `if test -f 'mkhomedir_helper.c'; then $(CYGPATH_W) 'mkhomedir_helper.c'; else $(CYGPATH_W) '$(srcdir)/mkhomedir_helper.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Tpo $(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkhomedir_helper.c' object='mkhomedir_helper-mkhomedir_helper.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) $(mkhomedir_helper_CFLAGS) $(CFLAGS) -c -o mkhomedir_helper-mkhomedir_helper.obj `if test -f 'mkhomedir_helper.c'; then $(CYGPATH_W) 'mkhomedir_helper.c'; else $(CYGPATH_W) '$(srcdir)/mkhomedir_helper.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -1006,7 +1043,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -1153,7 +1190,7 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
clean-sbinPROGRAMS clean-securelibLTLIBRARIES mostlyclean-am
distclean: distclean-am
- -rm -f ./$(DEPDIR)/mkhomedir_helper.Po
+ -rm -f ./$(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Po
-rm -f ./$(DEPDIR)/pam_mkhomedir.Plo
-rm -f ./$(DEPDIR)/tst-pam_mkhomedir-retval.Po
-rm -f Makefile
@@ -1201,7 +1238,7 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -f ./$(DEPDIR)/mkhomedir_helper.Po
+ -rm -f ./$(DEPDIR)/mkhomedir_helper-mkhomedir_helper.Po
-rm -f ./$(DEPDIR)/pam_mkhomedir.Plo
-rm -f ./$(DEPDIR)/tst-pam_mkhomedir-retval.Po
-rm -f Makefile
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 5ac40fbd..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: 06/08/2020
+.\" 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" "06/08/2020" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "MKHOMEDIR_HELPER" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -31,7 +31,7 @@
mkhomedir_helper \- Helper binary that creates home directories
.SH "SYNOPSIS"
.HP \w'\fBmkhomedir_helper\fR\ 'u
-\fBmkhomedir_helper\fR {\fIuser\fR} [\fIumask\fR\ [\ \fIpath\-to\-skel\fR\ ]]
+\fBmkhomedir_helper\fR {\fIuser\fR} [\fIumask\fR\ [\ \fIpath\-to\-skel\fR\ [\ \fIhome_mode\fR\ ]\ ]]
.SH "DESCRIPTION"
.PP
\fImkhomedir_helper\fR
@@ -44,7 +44,10 @@ The default value of
is 0022 and the default value of
\fIpath\-to\-skel\fR
is
-\fI/etc/skel\fR\&.
+\fI/etc/skel\fR\&. The default value of
+\fIhome_mode\fR
+is computed from the value of
+\fIumask\fR\&.
.PP
The helper is separated from the module to not require direct access from login SELinux domains to the contents of user home directories\&. The SELinux domain transition happens when the module is executing the
\fImkhomedir_helper\fR\&.
diff --git a/modules/pam_mkhomedir/mkhomedir_helper.8.xml b/modules/pam_mkhomedir/mkhomedir_helper.8.xml
index c834eddd..0f4c4b40 100644
--- a/modules/pam_mkhomedir/mkhomedir_helper.8.xml
+++ b/modules/pam_mkhomedir/mkhomedir_helper.8.xml
@@ -1,36 +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="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" rep="norepeat">
+ <replaceable>home_mode</replaceable>
+ </arg>
</arg>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
- <refsect1 id="mkhomedir_helper-description">
+ <refsect1 xml:id="mkhomedir_helper-description">
<title>DESCRIPTION</title>
@@ -43,7 +43,9 @@
<para>
The default value of <replaceable>umask</replaceable> is 0022 and the
default value of <replaceable>path-to-skel</replaceable> is
- <emphasis>/etc/skel</emphasis>.
+ <emphasis>/etc/skel</emphasis>. The default value of
+ <replaceable>home_mode</replaceable> is computed from the value of
+ <replaceable>umask</replaceable>.
</para>
<para>
@@ -58,7 +60,7 @@
</para>
</refsect1>
- <refsect1 id='mkhomedir_helper-see_also'>
+ <refsect1 xml:id="mkhomedir_helper-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -67,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
@@ -75,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 8969da52..3213f028 100644
--- a/modules/pam_mkhomedir/mkhomedir_helper.c
+++ b/modules/pam_mkhomedir/mkhomedir_helper.c
@@ -27,6 +27,7 @@
#include <security/pam_modutil.h>
static unsigned long u_mask = 0022;
+static unsigned long home_mode = 0;
static char skeldir[BUFSIZ] = "/etc/skel";
/* Do the actual work of creating a home dir */
@@ -183,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
@@ -232,6 +232,8 @@ create_homedir(const struct passwd *pwd,
{
pam_syslog(NULL, LOG_DEBUG,
"unable to open or stat src file %s: %m", newsource);
+ if (srcfd >= 0)
+ close(srcfd);
closedir(d);
#ifndef PATH_MAX
@@ -258,7 +260,7 @@ create_homedir(const struct passwd *pwd,
}
/* Set the proper ownership and permissions for the module. We make
- the file a+w and then mask it with the set mask. This preseves
+ the file a+w and then mask it with the set mask. This preserves
execute bits */
if (fchmod(destfd, (st.st_mode | 0222) & (~u_mask)) != 0 ||
fchown(destfd, pwd->pw_uid, pwd->pw_gid) != 0)
@@ -332,6 +334,24 @@ create_homedir(const struct passwd *pwd,
}
static int
+create_homedir_helper(const struct passwd *_pwd,
+ const char *_skeldir, const char *_homedir)
+{
+ int retval = PAM_SESSION_ERR;
+
+ retval = create_homedir(_pwd, _skeldir, _homedir);
+
+ if (chmod(_homedir, home_mode) != 0)
+ {
+ pam_syslog(NULL, LOG_DEBUG,
+ "unable to change perms on home directory %s: %m", _homedir);
+ return PAM_PERM_DENIED;
+ }
+
+ return retval;
+}
+
+static int
make_parent_dirs(char *dir, int make)
{
int rc = PAM_SUCCESS;
@@ -364,9 +384,10 @@ main(int argc, char *argv[])
{
struct passwd *pwd;
struct stat st;
+ char *eptr;
if (argc < 2) {
- fprintf(stderr, "Usage: %s <username> [<umask> [<skeldir>]]\n", argv[0]);
+ fprintf(stderr, "Usage: %s <username> [<umask> [<skeldir> [<home_mode>]]]\n", argv[0]);
return PAM_SESSION_ERR;
}
@@ -377,7 +398,6 @@ main(int argc, char *argv[])
}
if (argc >= 3) {
- char *eptr;
errno = 0;
u_mask = strtoul(argv[2], &eptr, 0);
if (errno != 0 || *eptr != '\0') {
@@ -394,6 +414,18 @@ main(int argc, char *argv[])
strcpy(skeldir, argv[3]);
}
+ if (argc >= 5) {
+ errno = 0;
+ home_mode = strtoul(argv[4], &eptr, 0);
+ if (errno != 0 || *eptr != '\0') {
+ pam_syslog(NULL, LOG_ERR, "Bogus home_mode value %s", argv[4]);
+ return PAM_SESSION_ERR;
+ }
+ }
+
+ if (home_mode == 0)
+ home_mode = 0777 & ~u_mask;
+
/* Stat the home directory, if something exists then we assume it is
correct and return a success */
if (stat(pwd->pw_dir, &st) == 0)
@@ -402,5 +434,5 @@ main(int argc, char *argv[])
if (make_parent_dirs(pwd->pw_dir, 0) != PAM_SUCCESS)
return PAM_PERM_DENIED;
- return create_homedir(pwd, skeldir, pwd->pw_dir);
+ return create_homedir_helper(pwd, skeldir, pwd->pw_dir);
}
diff --git a/modules/pam_mkhomedir/pam_mkhomedir.8 b/modules/pam_mkhomedir/pam_mkhomedir.8
index 4889135f..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: 06/08/2020
+.\" 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" "06/08/2020" "Linux-PAM Manual" "Linux-PAM Manual"
+.TH "PAM_MKHOMEDIR" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -40,24 +40,29 @@ 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 user file\-creation mask is set to
-\fImask\fR\&. The default value of mask is 0022\&.
+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
+\fBHOME_MODE\fR
+configuration item from
+/etc/login\&.defs\&. If there is no such configuration item then the value is computed from the value of
+\fBUMASK\fR
+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 19744de8..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,20 +83,27 @@
<varlistentry>
<term>
- <option>umask=<replaceable>mask</replaceable></option>
+ umask=mask
</term>
<listitem>
<para>
- The user file-creation mask is set to
- <replaceable>mask</replaceable>. The default value of mask is
- 0022.
+ The file mode creation mask is set to
+ <replaceable>mask</replaceable>. 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
+ <option>HOME_MODE</option> configuration item from
+ <filename>/etc/login.defs</filename>. If there is no such
+ configuration item then the value is computed from the
+ value of <option>UMASK</option> in the same file. If
+ there is no such configuration option either the default
+ value of 0755 is used for the mode.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- <option>skel=<replaceable>/path/to/skel/directory</replaceable></option>
+ skel=/path/to/skel/directory
</term>
<listitem>
<para>
@@ -112,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>
@@ -158,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>
@@ -170,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:
@@ -191,7 +195,7 @@
</refsect1>
- <refsect1 id="pam_mkhomedir-see_also">
+ <refsect1 xml:id="pam_mkhomedir-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -203,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 cb773e8f..6ddcd5a8 100644
--- a/modules/pam_mkhomedir/pam_mkhomedir.c
+++ b/modules/pam_mkhomedir/pam_mkhomedir.c
@@ -56,6 +56,9 @@
#define MKHOMEDIR_DEBUG 020 /* be verbose about things */
#define MKHOMEDIR_QUIET 040 /* keep quiet about things */
+#define LOGIN_DEFS "/etc/login.defs"
+#define UMASK_DEFAULT "0022"
+
struct options_t {
int ctrl;
const char *umask;
@@ -68,7 +71,7 @@ _pam_parse (const pam_handle_t *pamh, int flags, int argc, const char **argv,
options_t *opt)
{
opt->ctrl = 0;
- opt->umask = "0022";
+ opt->umask = NULL;
opt->skeldir = "/etc/skel";
/* does the application require quiet? */
@@ -94,6 +97,17 @@ _pam_parse (const pam_handle_t *pamh, int flags, int argc, const char **argv,
}
}
+static char*
+_pam_conv_str_umask_to_homemode(const char *umask)
+{
+ unsigned int m = 0;
+ char tmp[5];
+
+ m = 0777 & ~strtoul(umask, NULL, 8);
+ (void) snprintf(tmp, sizeof(tmp), "0%o", m);
+ return strdup(tmp);
+}
+
/* Do the actual work of creating a home dir */
static int
create_homedir (pam_handle_t *pamh, options_t *opt,
@@ -101,6 +115,8 @@ create_homedir (pam_handle_t *pamh, options_t *opt,
{
int retval, child;
struct sigaction newsa, oldsa;
+ char *login_umask = NULL;
+ char *login_homemode = NULL;
/* Mention what is happening, if the notification fails that is OK */
if (!(opt->ctrl & MKHOMEDIR_QUIET))
@@ -109,6 +125,25 @@ create_homedir (pam_handle_t *pamh, options_t *opt,
D(("called."));
+ if (opt->ctrl & MKHOMEDIR_DEBUG) {
+ pam_syslog(pamh, LOG_DEBUG, "Executing mkhomedir_helper.");
+ }
+
+ /* fetch UMASK from /etc/login.defs if not in argv */
+ if (opt->umask == NULL) {
+ login_umask = pam_modutil_search_key(pamh, LOGIN_DEFS, "UMASK");
+ login_homemode = pam_modutil_search_key(pamh, LOGIN_DEFS, "HOME_MODE");
+ if (login_homemode == NULL) {
+ if (login_umask != NULL) {
+ login_homemode = _pam_conv_str_umask_to_homemode(login_umask);
+ } else {
+ login_homemode = _pam_conv_str_umask_to_homemode(UMASK_DEFAULT);
+ }
+ }
+ } else {
+ 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
@@ -118,15 +153,11 @@ create_homedir (pam_handle_t *pamh, options_t *opt,
newsa.sa_handler = SIG_DFL;
sigaction(SIGCHLD, &newsa, &oldsa);
- if (opt->ctrl & MKHOMEDIR_DEBUG) {
- pam_syslog(pamh, LOG_DEBUG, "Executing mkhomedir_helper.");
- }
-
/* fork */
child = fork();
if (child == 0) {
static char *envp[] = { NULL };
- const char *args[] = { NULL, NULL, NULL, NULL, NULL };
+ const char *args[] = { NULL, NULL, NULL, NULL, NULL, NULL };
if (pam_modutil_sanitize_helper_fds(pamh, PAM_MODUTIL_PIPE_FD,
PAM_MODUTIL_PIPE_FD,
@@ -136,8 +167,9 @@ create_homedir (pam_handle_t *pamh, options_t *opt,
/* exec the mkhomedir helper */
args[0] = MKHOMEDIR_HELPER;
args[1] = user;
- args[2] = opt->umask;
+ args[2] = opt->umask ? opt->umask : UMASK_DEFAULT;
args[3] = opt->skeldir;
+ args[4] = login_homemode;
DIAG_PUSH_IGNORE_CAST_QUAL;
execve(MKHOMEDIR_HELPER, (char **)args, envp);
@@ -175,6 +207,9 @@ create_homedir (pam_handle_t *pamh, options_t *opt,
dir);
}
+ free(login_umask);
+ free(login_homemode);
+
D(("returning %d", retval));
return retval;
}
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 9ed9e2e4..4116d988 100644
--- a/modules/pam_motd/Makefile.in
+++ b/modules/pam_motd/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_motd
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_motd/README b/modules/pam_motd/README
index cd1e27e9..01bc64e9 100644
--- a/modules/pam_motd/README
+++ b/modules/pam_motd/README
@@ -24,8 +24,9 @@ Similar overriding behavior applies to the directories. Files in /etc/motd.d/
override files with the same name in /run/motd.d/ and /usr/lib/motd.d/. Files
in /run/motd.d/ override files with the same name in /usr/lib/motd.d/.
-Files the in the directories listed above are displayed in lexicographic order
-by name.
+Files in the directories listed above are displayed in lexicographic order by
+name. Moreover, the files are filtered by reading them with the credentials of
+the target user authenticating on the system.
To silence a message, a symbolic link with target /dev/null may be placed in /
etc/motd.d with the same filename as the message to be silenced. Example:
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 63da02fa..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: 06/08/2020
+.\" 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" "06/08/2020" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_MOTD" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -77,7 +77,7 @@ and
override files with the same name in
/usr/lib/motd\&.d/\&.
.PP
-Files the in the directories listed above are displayed in lexicographic order by name\&.
+Files in the directories listed above are displayed in lexicographic order by name\&. Moreover, the files are filtered by reading them with the credentials of the target user authenticating on the system\&.
.PP
To silence a message, a symbolic link with target
/dev/null
@@ -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 b533530b..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>
@@ -64,8 +61,9 @@
override files with the same name in <filename>/usr/lib/motd.d/</filename>.
</para>
<para>
- Files the in the directories listed above are displayed in
- lexicographic order by name.
+ Files in the directories listed above are displayed in lexicographic
+ order by name. Moreover, the files are filtered by reading them with the
+ credentials of the target user authenticating on the system.
</para>
<para>
To silence a message,
@@ -78,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>
@@ -103,7 +101,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>motd_dir=<replaceable>/path/dirname.d</replaceable></option>
+ motd_dir=/path/dirname.d
</term>
<listitem>
<para>
@@ -122,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>
@@ -159,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:
@@ -182,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>
@@ -200,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;.
@@ -211,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 46f4fe61..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++;
+ }
}
}
@@ -282,6 +313,72 @@ static void try_to_display_directories_with_overrides(pam_handle_t *pamh,
_pam_drop(dirscans);
}
+static int drop_privileges(pam_handle_t *pamh, struct pam_modutil_privs *privs)
+{
+ struct passwd *pw;
+ const char *username;
+ int retval;
+
+ retval = pam_get_user(pamh, &username, NULL);
+
+ if (retval == PAM_SUCCESS) {
+ pw = pam_modutil_getpwnam (pamh, username);
+ } else {
+ return PAM_SESSION_ERR;
+ }
+
+ if (pw == NULL || pam_modutil_drop_priv(pamh, privs, pw)) {
+ return PAM_SESSION_ERR;
+ }
+
+ return PAM_SUCCESS;
+}
+
+static int try_to_display(pam_handle_t *pamh, char **motd_path_split,
+ unsigned int num_motd_paths,
+ char **motd_dir_path_split,
+ unsigned int num_motd_dir_paths, int report_missing)
+{
+ PAM_MODUTIL_DEF_PRIVS(privs);
+
+ if (drop_privileges(pamh, &privs) != PAM_SUCCESS) {
+ pam_syslog(pamh, LOG_ERR, "Unable to drop privileges");
+ return PAM_SESSION_ERR;
+ }
+
+ if (motd_path_split != NULL) {
+ unsigned int i;
+
+ for (i = 0; i < num_motd_paths; i++) {
+ int fd = open(motd_path_split[i], O_RDONLY, 0);
+
+ if (fd >= 0) {
+ try_to_display_fd(pamh, fd);
+ close(fd);
+
+ /* We found and displayed a file,
+ * move onto next filename.
+ */
+ break;
+ }
+ }
+ }
+
+ if (motd_dir_path_split != NULL) {
+ try_to_display_directories_with_overrides(pamh,
+ motd_dir_path_split,
+ num_motd_dir_paths,
+ report_missing);
+ }
+
+ if (pam_modutil_regain_priv(pamh, &privs)) {
+ pam_syslog(pamh, LOG_ERR, "Unable to regain privileges");
+ return PAM_SESSION_ERR;
+ }
+
+ return PAM_SUCCESS;
+}
+
int pam_sm_open_session(pam_handle_t *pamh, int flags,
int argc, const char **argv)
{
@@ -358,25 +455,9 @@ int pam_sm_open_session(pam_handle_t *pamh, int flags,
}
}
- if (motd_path_split != NULL) {
- unsigned int i;
-
- for (i = 0; i < num_motd_paths; i++) {
- int fd = open(motd_path_split[i], O_RDONLY, 0);
-
- if (fd >= 0) {
- try_to_display_fd(pamh, fd);
- close(fd);
-
- /* We found and displayed a file, move onto next filename. */
- break;
- }
- }
- }
-
- if (motd_dir_path_split != NULL)
- try_to_display_directories_with_overrides(pamh, motd_dir_path_split,
- num_motd_dir_paths, report_missing);
+ retval = try_to_display(pamh, motd_path_split, num_motd_paths,
+ motd_dir_path_split, num_motd_dir_paths,
+ report_missing);
out:
_pam_drop(motd_path_copy);
@@ -384,9 +465,12 @@ int pam_sm_open_session(pam_handle_t *pamh, int flags,
_pam_drop(motd_dir_path_copy);
_pam_drop(motd_dir_path_split);
- retval = pam_putenv(pamh, "MOTD_SHOWN=pam");
-
- return retval == PAM_SUCCESS ? PAM_IGNORE : retval;
+ if (retval == PAM_SUCCESS) {
+ retval = pam_putenv(pamh, "MOTD_SHOWN=pam");
+ return retval == PAM_SUCCESS ? PAM_IGNORE : retval;
+ } else {
+ return retval;
+ }
}
/* end of module definition */
diff --git a/modules/pam_namespace/Makefile.am b/modules/pam_namespace/Makefile.am
index 21e1b33a..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 = $(prefix)/lib/systemd/system
+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 7524287e..8fc29dc1 100644
--- a/modules/pam_namespace/Makefile.in
+++ b/modules/pam_namespace/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -99,18 +99,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_namespace
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -384,6 +387,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -430,10 +434,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -443,12 +451,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -462,7 +474,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -481,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@
@@ -509,8 +522,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -521,11 +533,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -570,7 +587,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -578,9 +594,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -590,6 +603,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -602,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 = $(prefix)/lib/systemd/system
+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
@@ -1094,7 +1109,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 b9a7f084..07ad9a02 100644
--- a/modules/pam_namespace/md5.c
+++ b/modules/pam_namespace/md5.c
@@ -18,14 +18,14 @@
*
*/
-#include <string.h>
#include "md5.h"
+#include <string.h>
+
+#include "pam_inline.h"
#define MD5Name(x) x
-#if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
-#define byteReverse(buf, len) /* Nothing */
-#else
+#ifdef WORDS_BIGENDIAN
typedef unsigned char PAM_ATTRIBUTE_ALIGNED(4) uint8_aligned;
static void byteReverse(uint8_aligned *buf, unsigned longs);
@@ -43,6 +43,8 @@ static void byteReverse(uint8_aligned *buf, unsigned longs)
buf += 4;
} while (--longs);
}
+#else
+#define byteReverse(buf, len) /* Nothing */
#endif
/*
@@ -51,10 +53,10 @@ static void byteReverse(uint8_aligned *buf, unsigned longs)
*/
void MD5Name(MD5Init)(struct MD5Context *ctx)
{
- ctx->buf[0] = 0x67452301U;
- ctx->buf[1] = 0xefcdab89U;
- ctx->buf[2] = 0x98badcfeU;
- ctx->buf[3] = 0x10325476U;
+ ctx->buf.i[0] = 0x67452301U;
+ ctx->buf.i[1] = 0xefcdab89U;
+ ctx->buf.i[2] = 0x98badcfeU;
+ ctx->buf.i[3] = 0x10325476U;
ctx->bits[0] = 0;
ctx->bits[1] = 0;
@@ -80,7 +82,7 @@ void MD5Name(MD5Update)(struct MD5Context *ctx, unsigned const char *buf, unsign
/* Handle any leading odd-sized chunks */
if (t) {
- unsigned char *p = (unsigned char *) ctx->in + t;
+ unsigned char *p = ctx->in.c + t;
t = 64 - t;
if (len < t) {
@@ -88,24 +90,24 @@ void MD5Name(MD5Update)(struct MD5Context *ctx, unsigned const char *buf, unsign
return;
}
memcpy(p, buf, t);
- byteReverse(ctx->in, 16);
- MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ byteReverse(ctx->in.c, 16);
+ MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
buf += t;
len -= t;
}
/* Process data in 64-byte chunks */
while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- byteReverse(ctx->in, 16);
- MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ memcpy(ctx->in.c, buf, 64);
+ byteReverse(ctx->in.c, 16);
+ MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
buf += 64;
len -= 64;
}
/* Handle any remaining bytes of data. */
- memcpy(ctx->in, buf, len);
+ memcpy(ctx->in.c, buf, len);
}
/*
@@ -122,7 +124,7 @@ void MD5Name(MD5Final)(unsigned char digest[16], struct MD5Context *ctx)
/* Set the first char of padding to 0x80. This is safe since there is
always at least one byte free */
- p = ctx->in + count;
+ p = ctx->in.c + count;
*p++ = 0x80;
/* Bytes of padding needed to make 64 bytes */
@@ -132,24 +134,24 @@ 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, 16);
- MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ byteReverse(ctx->in.c, 16);
+ MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
/* Now fill the next block with 56 bytes */
- memset(ctx->in, 0, 56);
+ memset(ctx->in.c, 0, 56);
} else {
/* Pad block to 56 bytes */
memset(p, 0, count - 8);
}
- byteReverse(ctx->in, 14);
+ byteReverse(ctx->in.c, 14);
/* Append length in bits and transform */
- memcpy((uint32 *)ctx->in + 14, ctx->bits, 2*sizeof(uint32));
+ memcpy(ctx->in.i + 14, ctx->bits, 2*sizeof(uint32));
- MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
- byteReverse((unsigned char *) ctx->buf, 4);
- memcpy(digest, ctx->buf, 16);
- memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
+ MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
+ byteReverse(ctx->buf.c, 4);
+ memcpy(digest, ctx->buf.c, 16);
+ pam_overwrite_object(ctx); /* In case it's sensitive */
}
/* The four core functions - F1 is optimized somewhat */
diff --git a/modules/pam_namespace/md5.h b/modules/pam_namespace/md5.h
index bded3302..501aab4b 100644
--- a/modules/pam_namespace/md5.h
+++ b/modules/pam_namespace/md5.h
@@ -7,9 +7,15 @@
typedef unsigned int uint32;
struct MD5Context {
- uint32 buf[4];
+ union {
+ uint32 i[4];
+ unsigned char c[16] PAM_ATTRIBUTE_ALIGNED(4);
+ } buf;
uint32 bits[2];
- unsigned char in[64] PAM_ATTRIBUTE_ALIGNED(4);
+ union {
+ uint32 i[16];
+ unsigned char c[64] PAM_ATTRIBUTE_ALIGNED(4);
+ } in;
};
#define MD5_DIGEST_LENGTH 16
diff --git a/modules/pam_namespace/namespace.conf.5 b/modules/pam_namespace/namespace.conf.5
index be186c9d..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: 06/08/2020
+.\" 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" "06/08/2020" "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 6fca41f4..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: 06/08/2020
+.\" 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" "06/08/2020" "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
@@ -142,37 +142,7 @@ For the <service>s you need polyinstantiation (login for example) put the follow
.PP
session required pam_namespace\&.so [arguments]
.PP
-To use polyinstantiation with graphical display manager gdm, insert the following line, before exit 0, in /etc/gdm/PostSession/Default:
-.PP
-/usr/sbin/gdm\-safe\-restart
-.PP
-This allows gdm to restart after each session and appropriately adjust namespaces of display manager and the X server\&. If polyinstantiation of /tmp is desired along with the graphical environment, then additional configuration changes are needed to address the interaction of X server and font server namespaces with their use of /tmp to create communication sockets\&. Please use the initialization script
-/etc/security/namespace\&.init
-to ensure that the X server and its clients can appropriately access the communication socket X0\&. Please refer to the sample instructions provided in the comment section of the instance initialization script
-/etc/security/namespace\&.init\&. In addition, perform the following changes to use graphical environment with polyinstantiation of /tmp:
-.PP
-.if n \{\
-.RS 4
-.\}
-.nf
- 1\&. Disable the use of font server by commenting out "FontPath"
- line in /etc/X11/xorg\&.conf\&. If you do want to use the font server
- then you will have to augment the instance initialization
- script to appropriately provide /tmp/\&.font\-unix from the
- polyinstantiated /tmp\&.
- 2\&. Ensure that the gdm service is setup to use pam_namespace,
- as described above, by modifying /etc/pam\&.d/gdm\&.
- 3\&. Ensure that the display manager is configured to restart X server
- with each new session\&. This default setup can be verified by
- making sure that /usr/share/gdm/defaults\&.conf contains
- "AlwaysRestartServer=true", and it is not overridden by
- /etc/gdm/custom\&.conf\&.
-
-.fi
-.if n \{\
-.RE
-.\}
-.sp
+To use polyinstantiation with graphical display manager gdm, please refer to gdm\*(Aqs documentation\&.
.SH "SEE ALSO"
.PP
\fBnamespace.conf\fR(5),
diff --git a/modules/pam_namespace/pam_namespace.8.xml b/modules/pam_namespace/pam_namespace.8.xml
index f0f80d33..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>
@@ -343,50 +370,13 @@
</para>
<para>
- To use polyinstantiation with graphical display manager gdm, insert the
- following line, before exit 0, in /etc/gdm/PostSession/Default:
- </para>
-
- <para>
- /usr/sbin/gdm-safe-restart
- </para>
-
- <para>
- This allows gdm to restart after each session and appropriately adjust
- namespaces of display manager and the X server. If polyinstantiation
- of /tmp is desired along with the graphical environment, then additional
- configuration changes are needed to address the interaction of X server
- and font server namespaces with their use of /tmp to create
- communication sockets. Please use the initialization script
- <filename>/etc/security/namespace.init</filename> to ensure that
- the X server and its clients can appropriately access the
- communication socket X0. Please refer to the sample instructions
- provided in the comment section of the instance initialization script
- <filename>/etc/security/namespace.init</filename>. In addition,
- perform the following changes to use graphical environment with
- polyinstantiation of /tmp:
- </para>
-
- <para>
- <literallayout>
- 1. Disable the use of font server by commenting out "FontPath"
- line in /etc/X11/xorg.conf. If you do want to use the font server
- then you will have to augment the instance initialization
- script to appropriately provide /tmp/.font-unix from the
- polyinstantiated /tmp.
- 2. Ensure that the gdm service is setup to use pam_namespace,
- as described above, by modifying /etc/pam.d/gdm.
- 3. Ensure that the display manager is configured to restart X server
- with each new session. This default setup can be verified by
- making sure that /usr/share/gdm/defaults.conf contains
- "AlwaysRestartServer=true", and it is not overridden by
- /etc/gdm/custom.conf.
- </literallayout>
+ To use polyinstantiation with graphical display manager gdm, please refer
+ to gdm's documentation.
</para>
</refsect1>
- <refsect1 id="pam_namespace-see_also">
+ <refsect1 xml:id="pam_namespace-see_also">
<title>SEE ALSO</title>
<para>
<citerefentry>
@@ -404,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
@@ -415,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 63b5c665..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);
@@ -797,11 +888,11 @@ static char *md5hash(const char *instname, struct instance_data *idata)
#ifdef WITH_SELINUX
static int form_context(const struct polydir_s *polyptr,
- security_context_t *i_context, security_context_t *origcon,
+ char **i_context, char **origcon,
struct instance_data *idata)
{
int rc = PAM_SUCCESS;
- security_context_t scon = NULL;
+ char *scon = NULL;
security_class_t tclass;
/*
@@ -844,6 +935,12 @@ static int form_context(const struct polydir_s *polyptr,
if (polyptr->method == CONTEXT) {
tclass = string_to_security_class("dir");
+ if (tclass == 0) {
+ pam_syslog(idata->pamh, LOG_ERR,
+ "Error getting dir security class");
+ freecon(scon);
+ return PAM_SESSION_ERR;
+ }
if (security_compute_member(scon, *origcon, tclass,
i_context) < 0) {
@@ -910,7 +1007,7 @@ static int form_context(const struct polydir_s *polyptr,
*/
#ifdef WITH_SELINUX
static int poly_name(const struct polydir_s *polyptr, char **i_name,
- security_context_t *i_context, security_context_t *origcon,
+ char **i_context, char **origcon,
struct instance_data *idata)
#else
static int poly_name(const struct polydir_s *polyptr, char **i_name,
@@ -921,7 +1018,7 @@ static int poly_name(const struct polydir_s *polyptr, char **i_name,
char *hash = NULL;
enum polymethod pm;
#ifdef WITH_SELINUX
- security_context_t rawcon = NULL;
+ char *rawcon = NULL;
#endif
*i_name = NULL;
@@ -1244,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;
@@ -1263,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 };
@@ -1303,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,
@@ -1318,7 +1424,8 @@ static int create_polydir(struct polydir_s *polyptr,
mode_t mode;
int rc;
#ifdef WITH_SELINUX
- security_context_t dircon, oldcon = NULL;
+ char *dircon_raw, *oldcon_raw = NULL;
+ struct selabel_handle *label_handle;
#endif
const char *dir = polyptr->dir;
uid_t uid;
@@ -1331,21 +1438,28 @@ static int create_polydir(struct polydir_s *polyptr,
#ifdef WITH_SELINUX
if (idata->flags & PAMNS_SELINUX_ENABLED) {
- getfscreatecon(&oldcon);
- rc = matchpathcon(dir, S_IFDIR, &dircon);
- if (rc) {
- pam_syslog(idata->pamh, LOG_NOTICE,
- "Unable to get default context for directory %s, check your policy: %m", dir);
- } else {
- if (idata->flags & PAMNS_DEBUG)
- pam_syslog(idata->pamh, LOG_DEBUG,
- "Polydir %s context: %s", dir, (char *)dircon);
- if (setfscreatecon(dircon) != 0)
+ getfscreatecon_raw(&oldcon_raw);
+
+ label_handle = selabel_open(SELABEL_CTX_FILE, NULL, 0);
+ if (!label_handle) {
+ pam_syslog(idata->pamh, LOG_NOTICE,
+ "Unable to initialize SELinux labeling handle: %m");
+ } else {
+ rc = selabel_lookup_raw(label_handle, &dircon_raw, dir, S_IFDIR);
+ if (rc) {
pam_syslog(idata->pamh, LOG_NOTICE,
- "Error setting context for directory %s: %m", dir);
- freecon(dircon);
- }
- matchpathcon_fini();
+ "Unable to get default context for directory %s, check your policy: %m", dir);
+ } else {
+ if (idata->flags & PAMNS_DEBUG)
+ pam_syslog(idata->pamh, LOG_DEBUG,
+ "Polydir %s context: %s", dir, dircon_raw);
+ if (setfscreatecon_raw(dircon_raw) != 0)
+ pam_syslog(idata->pamh, LOG_NOTICE,
+ "Error setting context for directory %s: %m", dir);
+ freecon(dircon_raw);
+ }
+ selabel_close(label_handle);
+ }
}
#endif
@@ -1358,10 +1472,10 @@ static int create_polydir(struct polydir_s *polyptr,
#ifdef WITH_SELINUX
if (idata->flags & PAMNS_SELINUX_ENABLED) {
- if (setfscreatecon(oldcon) != 0)
+ if (setfscreatecon_raw(oldcon_raw) != 0)
pam_syslog(idata->pamh, LOG_NOTICE,
"Error resetting fs create context: %m");
- freecon(oldcon);
+ freecon(oldcon_raw);
}
#endif
@@ -1413,7 +1527,7 @@ static int create_polydir(struct polydir_s *polyptr,
*/
#ifdef WITH_SELINUX
static int create_instance(struct polydir_s *polyptr, char *ipath, struct stat *statbuf,
- security_context_t icontext, security_context_t ocontext,
+ const char *icontext, const char *ocontext,
struct instance_data *idata)
#else
static int create_instance(struct polydir_s *polyptr, char *ipath, struct stat *statbuf,
@@ -1488,6 +1602,7 @@ static int create_instance(struct polydir_s *polyptr, char *ipath, struct stat *
if (fstat(fd, &newstatbuf) < 0) {
pam_syslog(idata->pamh, LOG_ERR, "Error stating %s, %m",
ipath);
+ close(fd);
rmdir(ipath);
return PAM_SESSION_ERR;
}
@@ -1530,7 +1645,7 @@ static int ns_setup(struct polydir_s *polyptr,
char *instname = NULL;
struct stat statbuf;
#ifdef WITH_SELINUX
- security_context_t instcontext = NULL, origcontext = NULL;
+ char *instcontext = NULL, *origcontext = NULL;
#endif
if (idata->flags & PAMNS_DEBUG)
@@ -1965,7 +2080,7 @@ static int orig_namespace(struct instance_data *idata)
*/
static int ctxt_based_inst_needed(void)
{
- security_context_t scon = NULL;
+ char *scon = NULL;
int rc = 0;
rc = getexeccon(&scon);
diff --git a/modules/pam_namespace/pam_namespace.h b/modules/pam_namespace/pam_namespace.h
index 3a1e4ba3..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
@@ -68,6 +68,7 @@
#include <selinux/selinux.h>
#include <selinux/get_context_list.h>
#include <selinux/context.h>
+#include <selinux/label.h>
#endif
#ifndef CLONE_NEWNS
@@ -89,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 88fbe71f..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: 06/08/2020
+.\" 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" "06/08/2020" "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 7b8690ac..ebfa09b3 100644
--- a/modules/pam_nologin/Makefile.in
+++ b/modules/pam_nologin/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_nologin-retval$(EXEEXT)
subdir = modules/pam_nologin
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -379,6 +382,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -423,10 +427,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -436,12 +444,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -455,7 +467,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -474,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@
@@ -502,8 +515,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -514,11 +526,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -563,7 +580,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -571,9 +587,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -583,6 +596,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -595,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)
@@ -933,7 +948,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 200f6a60..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: 06/08/2020
+.\" 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" "06/08/2020" "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 372ba94d..47e8fac8 100644
--- a/modules/pam_permit/Makefile.in
+++ b/modules/pam_permit/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_permit-retval$(EXEEXT)
subdir = modules/pam_permit
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -378,6 +381,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -422,10 +426,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -435,12 +443,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -454,7 +466,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -473,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@
@@ -501,8 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -513,11 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -562,7 +579,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -570,9 +586,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -582,6 +595,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -594,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)
@@ -932,7 +947,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 dc184eb0..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: 06/08/2020
+.\" 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" "06/08/2020" "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 bd9f1ea9..6cd5ffd3 100644
--- a/modules/pam_pwhistory/Makefile.am
+++ b/modules/pam_pwhistory/Makefile.am
@@ -1,5 +1,6 @@
#
# Copyright (c) 2008, 2009 Thorsten Kukuk <kukuk@suse.de>
+# Copyright (c) 2013 Red Hat, Inc.
#
CLEANFILES = *~
@@ -8,27 +9,45 @@ MAINTAINERCLEANFILES = $(MANS) README
EXTRA_DIST = $(XMLS)
if HAVE_DOC
-dist_man_MANS = pam_pwhistory.8
+dist_man_MANS = pam_pwhistory.8 pwhistory_helper.8 pwhistory.conf.5
endif
-XMLS = README.xml pam_pwhistory.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)
-AM_LDFLAGS = -no-undefined -avoid-version -module
+ $(WARN_CFLAGS) -DPWHISTORY_HELPER=\"$(sbindir)/pwhistory_helper\"
+
+pam_pwhistory_la_LDFLAGS = -no-undefined -avoid-version -module
if HAVE_VERSIONING
- AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
+ 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_LIBADD = $(top_builddir)/libpam/libpam.la @LIBCRYPT@
-pam_pwhistory_la_SOURCES = pam_pwhistory.c opasswd.c
+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 pwhistory_config.c
+
+sbin_PROGRAMS = pwhistory_helper
+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@
+
+check_PROGRAMS = tst-pam_pwhistory-retval
+tst_pam_pwhistory_retval_LDADD = $(top_builddir)/libpam/libpam.la
if ENABLE_REGENERATE_MAN
dist_noinst_DATA = README
diff --git a/modules/pam_pwhistory/Makefile.in b/modules/pam_pwhistory/Makefile.in
index 42a6907d..dcb969ac 100644
--- a/modules/pam_pwhistory/Makefile.in
+++ b/modules/pam_pwhistory/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -16,10 +16,12 @@
#
# Copyright (c) 2008, 2009 Thorsten Kukuk <kukuk@suse.de>
+# Copyright (c) 2013 Red Hat, Inc.
#
+
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -95,29 +97,38 @@ POST_UNINSTALL = :
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/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
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)$(man5dir)" "$(DESTDIR)$(man8dir)" \
+ "$(DESTDIR)$(secureconfdir)"
+PROGRAMS = $(sbin_PROGRAMS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -145,15 +156,33 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)"
LTLIBRARIES = $(securelib_LTLIBRARIES)
pam_pwhistory_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
-am_pam_pwhistory_la_OBJECTS = pam_pwhistory.lo opasswd.lo
+am_pam_pwhistory_la_OBJECTS = pam_pwhistory_la-pam_pwhistory.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@)
am__v_lt_0 = --silent
am__v_lt_1 =
+pam_pwhistory_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(pam_pwhistory_la_CFLAGS) $(CFLAGS) \
+ $(pam_pwhistory_la_LDFLAGS) $(LDFLAGS) -o $@
+am_pwhistory_helper_OBJECTS = \
+ pwhistory_helper-pwhistory_helper.$(OBJEXT) \
+ pwhistory_helper-opasswd.$(OBJEXT)
+pwhistory_helper_OBJECTS = $(am_pwhistory_helper_OBJECTS)
+pwhistory_helper_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
+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
@@ -169,8 +198,12 @@ 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)/opasswd.Plo \
- ./$(DEPDIR)/pam_pwhistory.Plo
+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)/tst-pam_pwhistory-retval.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -190,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)
-DIST_SOURCES = $(pam_pwhistory_la_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,
@@ -377,6 +413,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -421,10 +458,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -434,12 +475,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -453,7 +498,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -472,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@
@@ -500,8 +546,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -512,11 +557,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -561,7 +611,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -569,9 +618,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -581,6 +627,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -588,20 +635,31 @@ top_srcdir = @top_srcdir@
CLEANFILES = *~
MAINTAINERCLEANFILES = $(MANS) README
EXTRA_DIST = $(XMLS)
-@HAVE_DOC_TRUE@dist_man_MANS = pam_pwhistory.8
-XMLS = README.xml pam_pwhistory.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)
+ $(WARN_CFLAGS) -DPWHISTORY_HELPER=\"$(sbindir)/pwhistory_helper\"
-AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
-noinst_HEADERS = opasswd.h
+pam_pwhistory_la_LDFLAGS = -no-undefined -avoid-version -module \
+ $(am__append_1)
+noinst_HEADERS = opasswd.h pwhistory_config.h
+dist_secureconf_DATA = pwhistory.conf
securelib_LTLIBRARIES = pam_pwhistory.la
-pam_pwhistory_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBCRYPT@
-pam_pwhistory_la_SOURCES = pam_pwhistory.c opasswd.c
+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 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
@@ -637,6 +695,64 @@ $(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=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-sbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files
+
+clean-sbinPROGRAMS:
+ @list='$(sbin_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=; \
@@ -673,7 +789,15 @@ clean-securelibLTLIBRARIES:
}
pam_pwhistory.la: $(pam_pwhistory_la_OBJECTS) $(pam_pwhistory_la_DEPENDENCIES) $(EXTRA_pam_pwhistory_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(securelibdir) $(pam_pwhistory_la_OBJECTS) $(pam_pwhistory_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(pam_pwhistory_la_LINK) -rpath $(securelibdir) $(pam_pwhistory_la_OBJECTS) $(pam_pwhistory_la_LIBADD) $(LIBS)
+
+pwhistory_helper$(EXEEXT): $(pwhistory_helper_OBJECTS) $(pwhistory_helper_DEPENDENCIES) $(EXTRA_pwhistory_helper_DEPENDENCIES)
+ @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)
@@ -681,8 +805,12 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opasswd.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_pwhistory.Plo@am__quote@ # am--include-marker
+@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)
@@ -711,11 +839,103 @@ am--depfiles: $(am__depfiles_remade)
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+pam_pwhistory_la-pam_pwhistory.lo: pam_pwhistory.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-pam_pwhistory.lo -MD -MP -MF $(DEPDIR)/pam_pwhistory_la-pam_pwhistory.Tpo -c -o pam_pwhistory_la-pam_pwhistory.lo `test -f 'pam_pwhistory.c' || echo '$(srcdir)/'`pam_pwhistory.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pam_pwhistory_la-pam_pwhistory.Tpo $(DEPDIR)/pam_pwhistory_la-pam_pwhistory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pam_pwhistory.c' object='pam_pwhistory_la-pam_pwhistory.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-pam_pwhistory.lo `test -f 'pam_pwhistory.c' || echo '$(srcdir)/'`pam_pwhistory.c
+
+pam_pwhistory_la-opasswd.lo: opasswd.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-opasswd.lo -MD -MP -MF $(DEPDIR)/pam_pwhistory_la-opasswd.Tpo -c -o pam_pwhistory_la-opasswd.lo `test -f 'opasswd.c' || echo '$(srcdir)/'`opasswd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pam_pwhistory_la-opasswd.Tpo $(DEPDIR)/pam_pwhistory_la-opasswd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opasswd.c' object='pam_pwhistory_la-opasswd.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-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
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwhistory_helper.c' object='pwhistory_helper-pwhistory_helper.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) $(pwhistory_helper_CFLAGS) $(CFLAGS) -c -o pwhistory_helper-pwhistory_helper.o `test -f 'pwhistory_helper.c' || echo '$(srcdir)/'`pwhistory_helper.c
+
+pwhistory_helper-pwhistory_helper.obj: 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.obj -MD -MP -MF $(DEPDIR)/pwhistory_helper-pwhistory_helper.Tpo -c -o pwhistory_helper-pwhistory_helper.obj `if test -f 'pwhistory_helper.c'; then $(CYGPATH_W) 'pwhistory_helper.c'; else $(CYGPATH_W) '$(srcdir)/pwhistory_helper.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pwhistory_helper-pwhistory_helper.Tpo $(DEPDIR)/pwhistory_helper-pwhistory_helper.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwhistory_helper.c' object='pwhistory_helper-pwhistory_helper.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) $(pwhistory_helper_CFLAGS) $(CFLAGS) -c -o pwhistory_helper-pwhistory_helper.obj `if test -f 'pwhistory_helper.c'; then $(CYGPATH_W) 'pwhistory_helper.c'; else $(CYGPATH_W) '$(srcdir)/pwhistory_helper.c'; fi`
+
+pwhistory_helper-opasswd.o: opasswd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwhistory_helper_CFLAGS) $(CFLAGS) -MT pwhistory_helper-opasswd.o -MD -MP -MF $(DEPDIR)/pwhistory_helper-opasswd.Tpo -c -o pwhistory_helper-opasswd.o `test -f 'opasswd.c' || echo '$(srcdir)/'`opasswd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pwhistory_helper-opasswd.Tpo $(DEPDIR)/pwhistory_helper-opasswd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opasswd.c' object='pwhistory_helper-opasswd.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) $(pwhistory_helper_CFLAGS) $(CFLAGS) -c -o pwhistory_helper-opasswd.o `test -f 'opasswd.c' || echo '$(srcdir)/'`opasswd.c
+
+pwhistory_helper-opasswd.obj: opasswd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwhistory_helper_CFLAGS) $(CFLAGS) -MT pwhistory_helper-opasswd.obj -MD -MP -MF $(DEPDIR)/pwhistory_helper-opasswd.Tpo -c -o pwhistory_helper-opasswd.obj `if test -f 'opasswd.c'; then $(CYGPATH_W) 'opasswd.c'; else $(CYGPATH_W) '$(srcdir)/opasswd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pwhistory_helper-opasswd.Tpo $(DEPDIR)/pwhistory_helper-opasswd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opasswd.c' object='pwhistory_helper-opasswd.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) $(pwhistory_helper_CFLAGS) $(CFLAGS) -c -o pwhistory_helper-opasswd.obj `if test -f 'opasswd.c'; then $(CYGPATH_W) 'opasswd.c'; else $(CYGPATH_W) '$(srcdir)/opasswd.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
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=''; \
@@ -759,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
@@ -919,7 +1160,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -932,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)
@@ -942,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 \
@@ -960,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); \
@@ -1009,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 $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS)
+all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS)
installdirs:
- for dir in "$(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
@@ -1054,12 +1303,16 @@ 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-sbinPROGRAMS clean-securelibLTLIBRARIES mostlyclean-am
distclean: distclean-am
- -rm -f ./$(DEPDIR)/opasswd.Plo
- -rm -f ./$(DEPDIR)/pam_pwhistory.Plo
+ -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
@@ -1076,13 +1329,14 @@ 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
install-dvi-am:
-install-exec-am:
+install-exec-am: install-sbinPROGRAMS
install-html: install-html-am
@@ -1092,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
@@ -1105,8 +1359,12 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -f ./$(DEPDIR)/opasswd.Plo
- -rm -f ./$(DEPDIR)/pam_pwhistory.Plo
+ -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
@@ -1123,28 +1381,32 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-man 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-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-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 \
- uninstall-man8 uninstall-securelibLTLIBRARIES
+ recheck tags tags-am uninstall uninstall-am \
+ uninstall-dist_secureconfDATA uninstall-man uninstall-man5 \
+ uninstall-man8 uninstall-sbinPROGRAMS \
+ uninstall-securelibLTLIBRARIES
.PRECIOUS: Makefile
diff --git a/modules/pam_pwhistory/README b/modules/pam_pwhistory/README
index 1634249b..b4868767 100644
--- a/modules/pam_pwhistory/README
+++ b/modules/pam_pwhistory/README
@@ -23,7 +23,7 @@ use_authtok
When password changing enforce the module to use the new password provided
by a previously stacked password module (this is used in the example of the
- stacking of the pam_cracklib module documented below).
+ stacking of the pam_passwdqc module documented below).
enforce_for_root
@@ -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:
@@ -52,10 +66,10 @@ password required pam_pwhistory.so
password required pam_unix.so use_authtok
-In combination with pam_cracklib:
+In combination with pam_passwdqc:
#%PAM-1.0
-password required pam_cracklib.so retry=3
+password required pam_passwdqc.so config=/etc/passwdqc.conf
password required pam_pwhistory.so use_authtok
password required pam_unix.so use_authtok
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 77142f2c..859b3da4 100644
--- a/modules/pam_pwhistory/opasswd.c
+++ b/modules/pam_pwhistory/opasswd.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2008 Thorsten Kukuk <kukuk@suse.de>
+ * Copyright (c) 2013 Red Hat, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -38,25 +39,36 @@
#endif
#include <pwd.h>
+#include <shadow.h>
#include <time.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
+#include <limits.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <syslog.h>
+#ifdef HELPER_COMPILE
+#include <stdarg.h>
+#endif
#include <sys/stat.h>
-#if defined HAVE_LIBXCRYPT
-#include <xcrypt.h>
-#elif defined (HAVE_CRYPT_H)
+#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
+#ifdef HELPER_COMPILE
+#define pam_modutil_getpwnam(h,n) getpwnam(n)
+#define pam_modutil_getspnam(h,n) getspnam(n)
+#define pam_syslog(h,a,...) helper_log_err(a,__VA_ARGS__)
+#else
+#include <security/pam_modutil.h>
#include <security/pam_ext.h>
+#endif
#include <security/pam_modules.h>
+#include "pam_inline.h"
#include "opasswd.h"
@@ -64,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
@@ -76,6 +87,20 @@ typedef struct {
char *old_passwords;
} opwd;
+#ifdef HELPER_COMPILE
+PAM_FORMAT((printf, 2, 3))
+void
+helper_log_err(int err, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ openlog(HELPER_COMPILE, LOG_CONS | LOG_PID, LOG_AUTHPRIV);
+ vsyslog(err, format, args);
+ va_end(args);
+ closelog();
+}
+#endif
static int
parse_entry (char *line, opwd *data)
@@ -105,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;
@@ -113,13 +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. */
-int
-check_old_pass (pam_handle_t *pamh, 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)
{
int retval = PAM_SUCCESS;
FILE *oldpf;
@@ -128,10 +155,18 @@ check_old_pass (pam_handle_t *pamh, const char *user,
opwd entry;
int found = 0;
- if ((oldpf = fopen (OLD_PASSWORDS_FILE, "r")) == NULL)
+#ifndef HELPER_COMPILE
+ if (SELINUX_ENABLED)
+ return PAM_PWHISTORY_RUN_HELPER;
+#endif
+
+ 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;
}
@@ -207,17 +242,15 @@ check_old_pass (pam_handle_t *pamh, const char *user,
} while (oldpass != NULL);
}
- if (buf)
- free (buf);
+ pam_overwrite_n(buf, buflen);
+ free (buf);
return retval;
}
-int
-save_old_pass (pam_handle_t *pamh, const char *user, uid_t uid,
- const char *oldpass, int howmany, int debug UNUSED)
+PAMH_ARG_DECL(int
+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;
@@ -226,31 +259,63 @@ save_old_pass (pam_handle_t *pamh, const char *user, uid_t uid,
char *buf = NULL;
size_t buflen = 0;
int found = 0;
+ 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;
if (howmany <= 0)
return PAM_SUCCESS;
+#ifndef HELPER_COMPILE
+ if (SELINUX_ENABLED)
+ return PAM_PWHISTORY_RUN_HELPER;
+#endif
+
+ if ((strcmp(pwd->pw_passwd, "x") == 0) ||
+ ((pwd->pw_passwd[0] == '#') &&
+ (pwd->pw_passwd[1] == '#') &&
+ (strcmp(pwd->pw_name, pwd->pw_passwd + 2) == 0)))
+ {
+ struct spwd *spw = pam_modutil_getspnam (pamh, user);
+
+ if (spw == NULL)
+ return PAM_USER_UNKNOWN;
+ oldpass = spw->sp_pwdp;
+ }
+ else
+ oldpass = pwd->pw_passwd;
+
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;
}
@@ -260,7 +325,7 @@ save_old_pass (pam_handle_t *pamh, const char *user, uid_t uid,
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;
@@ -269,23 +334,19 @@ save_old_pass (pam_handle_t *pamh, const char *user, uid_t uid,
{
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)
@@ -452,7 +513,7 @@ save_old_pass (pam_handle_t *pamh, const char *user, uid_t uid,
{
char *out;
- if (asprintf (&out, "%s:%d:1:%s\n", user, uid, oldpass) < 0)
+ if (asprintf (&out, "%s:%d:1:%s\n", user, pwd->pw_uid, oldpass) < 0)
{
retval = PAM_AUTHTOK_ERR;
if (oldpf)
@@ -462,6 +523,7 @@ save_old_pass (pam_handle_t *pamh, const char *user, uid_t uid,
}
if (fputs (out, newpf) < 0)
{
+ pam_overwrite_string(out);
free (out);
retval = PAM_AUTHTOK_ERR;
if (oldpf)
@@ -469,6 +531,7 @@ save_old_pass (pam_handle_t *pamh, const char *user, uid_t uid,
fclose (newpf);
goto error_opasswd;
}
+ pam_overwrite_string(out);
free (out);
}
@@ -498,14 +561,23 @@ save_old_pass (pam_handle_t *pamh, const char *user, uid_t uid,
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 db3e6568..19a4062c 100644
--- a/modules/pam_pwhistory/opasswd.h
+++ b/modules/pam_pwhistory/opasswd.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2008 Thorsten Kukuk <kukuk@suse.de>
+ * Copyright (c) 2013 Red Hat, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -36,10 +37,30 @@
#ifndef __OPASSWD_H__
#define __OPASSWD_H__
-extern int check_old_pass (pam_handle_t *pamh, const char *user,
- const char *newpass, int debug);
-extern int save_old_pass (pam_handle_t *pamh, const char *user,
- uid_t uid, const char *oldpass,
- int howmany, int debug);
+#define PAM_PWHISTORY_RUN_HELPER PAM_CRED_INSUFFICIENT
+
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#define SELINUX_ENABLED (is_selinux_enabled()>0)
+#else
+#define SELINUX_ENABLED 0
+#endif
+
+#ifdef HELPER_COMPILE
+#define PAMH_ARG_DECL(fname, ...) fname(__VA_ARGS__)
+#else
+#define PAMH_ARG_DECL(fname, ...) fname(pam_handle_t *pamh, __VA_ARGS__)
+#endif
+
+#ifdef HELPER_COMPILE
+void
+helper_log_err(int err, const char *format, ...);
+#endif
+
+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,
+ 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 ba5c3235..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: 06/08/2020
+.\" 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" "06/08/2020" "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,32 +39,31 @@ 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
module (this is used in the example of the stacking of the
-\fBpam_cracklib\fR
+\fBpam_passwdqc\fR
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
@@ -130,14 +147,14 @@ password required pam_unix\&.so use_authtok
.\}
.PP
In combination with
-\fBpam_cracklib\fR:
+\fBpam_passwdqc\fR:
.sp
.if n \{\
.RS 4
.\}
.nf
#%PAM\-1\&.0
-password required pam_cracklib\&.so retry=3
+password required pam_passwdqc\&.so config=/etc/passwdqc\&.conf
password required pam_pwhistory\&.so use_authtok
password required pam_unix\&.so use_authtok
@@ -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 9e1056b2..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,20 +79,20 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_authtok</option>
+ use_authtok
</term>
<listitem>
<para>
When password changing enforce the module to use the new password
provided by a previously stacked <option>password</option>
module (this is used in the example of the stacking of the
- <command>pam_cracklib</command> module documented below).
+ <command>pam_passwdqc</command> module documented below).
</para>
</listitem>
</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:
@@ -197,32 +232,50 @@ password required pam_unix.so use_authtok
</programlisting>
</para>
<para>
- In combination with <command>pam_cracklib</command>:
+ In combination with <command>pam_passwdqc</command>:
<programlisting>
#%PAM-1.0
-password required pam_cracklib.so retry=3
+password required pam_passwdqc.so config=/etc/passwdqc.conf
password required pam_pwhistory.so use_authtok
password required pam_unix.so use_authtok
</programlisting>
</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 cf4fc078..5a7fb811 100644
--- a/modules/pam_pwhistory/pam_pwhistory.c
+++ b/modules/pam_pwhistory/pam_pwhistory.c
@@ -3,6 +3,7 @@
*
* Copyright (c) 2008, 2012 Thorsten Kukuk
* Author: Thorsten Kukuk <kukuk@thkukuk.de>
+ * Copyright (c) 2013 Red Hat, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -46,10 +47,14 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <shadow.h>
#include <syslog.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <fcntl.h>
#include <security/pam_modules.h>
#include <security/pam_modutil.h>
@@ -58,16 +63,8 @@
#include "opasswd.h"
#include "pam_inline.h"
+#include "pwhistory_config.h"
-#define DEFAULT_BUFLEN 2048
-
-struct options_t {
- int debug;
- int enforce_for_root;
- int remember;
- int tries;
-};
-typedef struct options_t options_t;
static void
@@ -101,18 +98,202 @@ 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, const char *filename, int debug)
+{
+ int retval, child;
+ struct sigaction newsa, oldsa;
+
+ memset(&newsa, '\0', sizeof(newsa));
+ newsa.sa_handler = SIG_DFL;
+ sigaction(SIGCHLD, &newsa, &oldsa);
+
+ child = fork();
+ if (child == 0)
+ {
+ static char *envp[] = { 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,
+ PAM_MODUTIL_PIPE_FD) < 0)
+ {
+ _exit(PAM_SYSTEM_ERR);
+ }
+
+ /* exec binary helper */
+ DIAG_PUSH_IGNORE_CAST_QUAL;
+ 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[4], "%d", howmany) < 0 ||
+ asprintf(&args[5], "%d", debug) < 0)
+ {
+ pam_syslog(pamh, LOG_ERR, "asprintf: %m");
+ _exit(PAM_SYSTEM_ERR);
+ }
+
+ execve(args[0], args, envp);
+
+ pam_syslog(pamh, LOG_ERR, "helper binary execve failed: %s: %m", args[0]);
+
+ _exit(PAM_SYSTEM_ERR);
+ }
+ else if (child > 0)
+ {
+ /* wait for child */
+ int rc = 0;
+ while ((rc = waitpid (child, &retval, 0)) == -1 &&
+ errno == EINTR);
+ if (rc < 0)
+ {
+ pam_syslog(pamh, LOG_ERR, "pwhistory_helper save: waitpid: %m");
+ retval = PAM_SYSTEM_ERR;
+ }
+ else if (!WIFEXITED(retval))
+ {
+ pam_syslog(pamh, LOG_ERR, "pwhistory_helper save abnormal exit: %d", retval);
+ retval = PAM_SYSTEM_ERR;
+ }
+ else
+ {
+ retval = WEXITSTATUS(retval);
+ }
+ }
+ else
+ {
+ pam_syslog(pamh, LOG_ERR, "fork failed: %m");
+ retval = PAM_SYSTEM_ERR;
+ }
+
+ sigaction(SIGCHLD, &oldsa, NULL); /* restore old signal handler */
+
+ return retval;
+}
+
+static int
+run_check_helper(pam_handle_t *pamh, const char *user,
+ const char *newpass, const char *filename, int debug)
+{
+ int retval, child, fds[2];
+ struct sigaction newsa, oldsa;
+
+ /* create a pipe for the password */
+ if (pipe(fds) != 0)
+ return PAM_SYSTEM_ERR;
+
+ memset(&newsa, '\0', sizeof(newsa));
+ newsa.sa_handler = SIG_DFL;
+ sigaction(SIGCHLD, &newsa, &oldsa);
+
+ child = fork();
+ if (child == 0)
+ {
+ static char *envp[] = { NULL };
+ char *args[] = { NULL, NULL, NULL, NULL, NULL, NULL };
+
+ /* reopen stdin as pipe */
+ if (dup2(fds[0], STDIN_FILENO) != STDIN_FILENO)
+ {
+ pam_syslog(pamh, LOG_ERR, "dup2 of %s failed: %m", "stdin");
+ _exit(PAM_SYSTEM_ERR);
+ }
-/* This module saves the current crypted password in /etc/security/opasswd
+ if (pam_modutil_sanitize_helper_fds(pamh, PAM_MODUTIL_IGNORE_FD,
+ PAM_MODUTIL_PIPE_FD,
+ PAM_MODUTIL_PIPE_FD) < 0)
+ {
+ _exit(PAM_SYSTEM_ERR);
+ }
+
+ /* exec binary helper */
+ DIAG_PUSH_IGNORE_CAST_QUAL;
+ 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[4], "%d", debug) < 0)
+ {
+ pam_syslog(pamh, LOG_ERR, "asprintf: %m");
+ _exit(PAM_SYSTEM_ERR);
+ }
+
+ execve(args[0], args, envp);
+
+ pam_syslog(pamh, LOG_ERR, "helper binary execve failed: %s: %m", args[0]);
+
+ _exit(PAM_SYSTEM_ERR);
+ }
+ else if (child > 0)
+ {
+ /* wait for child */
+ int rc = 0;
+ if (newpass == NULL)
+ newpass = "";
+
+ /* send the password to the child */
+ if (write(fds[1], newpass, strlen(newpass)+1) == -1)
+ {
+ pam_syslog(pamh, LOG_ERR, "Cannot send password to helper: %m");
+ retval = PAM_SYSTEM_ERR;
+ }
+ newpass = NULL;
+ close(fds[0]); /* close here to avoid possible SIGPIPE above */
+ close(fds[1]);
+ while ((rc = waitpid (child, &retval, 0)) == -1 &&
+ errno == EINTR);
+ if (rc < 0)
+ {
+ pam_syslog(pamh, LOG_ERR, "pwhistory_helper check: waitpid: %m");
+ retval = PAM_SYSTEM_ERR;
+ }
+ else if (!WIFEXITED(retval))
+ {
+ pam_syslog(pamh, LOG_ERR, "pwhistory_helper check abnormal exit: %d", retval);
+ retval = PAM_SYSTEM_ERR;
+ }
+ else
+ {
+ retval = WEXITSTATUS(retval);
+ }
+ }
+ else
+ {
+ pam_syslog(pamh, LOG_ERR, "fork failed: %m");
+ close(fds[0]);
+ close(fds[1]);
+ retval = PAM_SYSTEM_ERR;
+ }
+
+ sigaction(SIGCHLD, &oldsa, NULL); /* restore old signal handler */
+
+ return retval;
+}
+
+/* This module saves the current hashed password in /etc/security/opasswd
and then compares the new password with all entries in this file. */
int
pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv)
{
- struct passwd *pwd;
const char *newpass;
const char *user;
int retval, tries;
@@ -124,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);
@@ -131,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;
@@ -148,31 +330,13 @@ pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv)
return PAM_SUCCESS;
}
- pwd = pam_modutil_getpwnam (pamh, user);
- if (pwd == NULL)
- return PAM_USER_UNKNOWN;
+ retval = save_old_pass (pamh, user, options.remember, options.filename, options.debug);
- if ((strcmp(pwd->pw_passwd, "x") == 0) ||
- ((pwd->pw_passwd[0] == '#') &&
- (pwd->pw_passwd[1] == '#') &&
- (strcmp(pwd->pw_name, pwd->pw_passwd + 2) == 0)))
- {
- struct spwd *spw = pam_modutil_getspnam (pamh, user);
- if (spw == NULL)
- return PAM_USER_UNKNOWN;
+ if (retval == PAM_PWHISTORY_RUN_HELPER)
+ retval = run_save_helper(pamh, user, options.remember, options.filename, options.debug);
- retval = save_old_pass (pamh, user, pwd->pw_uid, spw->sp_pwdp,
- options.remember, options.debug);
- if (retval != PAM_SUCCESS)
- return retval;
- }
- else
- {
- retval = save_old_pass (pamh, user, pwd->pw_uid, pwd->pw_passwd,
- options.remember, options.debug);
- if (retval != PAM_SUCCESS)
- return retval;
- }
+ if (retval != PAM_SUCCESS)
+ return retval;
newpass = NULL;
tries = 0;
@@ -201,8 +365,11 @@ 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");
- if (check_old_pass (pamh, user, newpass,
- options.debug) != PAM_SUCCESS)
+ 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.filename, options.debug);
+
+ if (retval != PAM_SUCCESS)
{
if (getuid() || options.enforce_for_root ||
(flags & PAM_CHANGE_EXPIRED_AUTHTOK))
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
new file mode 100644
index 00000000..0b837d32
--- /dev/null
+++ b/modules/pam_pwhistory/pwhistory_helper.8
@@ -0,0 +1,54 @@
+'\" t
+.\" Title: pwhistory_helper
+.\" 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_HELPER" "8" "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_helper \- Helper binary that transfers password hashes from passwd or shadow to opasswd
+.SH "SYNOPSIS"
+.HP \w'\fBpwhistory_helper\fR\ 'u
+\fBpwhistory_helper\fR [\&.\&.\&.]
+.SH "DESCRIPTION"
+.PP
+\fIpwhistory_helper\fR
+is a helper program for the
+\fIpam_pwhistory\fR
+module that transfers password hashes from passwd or shadow file to the opasswd file and checks a password supplied by user against the existing hashes in the opasswd file\&.
+.PP
+The purpose of the helper is to enable tighter confinement of login and password changing services\&. The helper is thus called only when SELinux is enabled on the system\&.
+.PP
+The interface of the helper \- command line options, and input/output data format are internal to the
+\fIpam_pwhistory\fR
+module and it should not be called directly from applications\&.
+.SH "SEE ALSO"
+.PP
+\fBpam_pwhistory\fR(8)
+.SH "AUTHOR"
+.PP
+Written by Tomas Mraz based on the code originally in
+\fIpam_pwhistory and pam_unix\fR
+modules\&.
diff --git a/modules/pam_pwhistory/pwhistory_helper.8.xml b/modules/pam_pwhistory/pwhistory_helper.8.xml
new file mode 100644
index 00000000..8370a485
--- /dev/null
+++ b/modules/pam_pwhistory/pwhistory_helper.8.xml
@@ -0,0 +1,65 @@
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pwhistory_helper">
+
+ <refmeta>
+ <refentrytitle>pwhistory_helper</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
+ </refmeta>
+
+ <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 xml:id="pwhistory_helper-cmdsynopsis" sepchar=" ">
+ <command>pwhistory_helper</command>
+ <arg choice="opt" rep="norepeat">
+ ...
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 xml:id="pwhistory_helper-description">
+
+ <title>DESCRIPTION</title>
+
+ <para>
+ <emphasis>pwhistory_helper</emphasis> is a helper program for the
+ <emphasis>pam_pwhistory</emphasis> module that transfers password hashes
+ from passwd or shadow file to the opasswd file and checks a password
+ supplied by user against the existing hashes in the opasswd file.
+ </para>
+
+ <para>
+ The purpose of the helper is to enable tighter confinement of
+ login and password changing services. The helper is thus called only
+ when SELinux is enabled on the system.
+ </para>
+
+ <para>
+ The interface of the helper - command line options, and input/output
+ data format are internal to the <emphasis>pam_pwhistory</emphasis>
+ module and it should not be called directly from applications.
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pwhistory_helper-see_also">
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>pam_pwhistory</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pwhistory_helper-author">
+ <title>AUTHOR</title>
+ <para>
+ Written by Tomas Mraz based on the code originally in
+ <emphasis>pam_pwhistory and pam_unix</emphasis> modules.
+ </para>
+ </refsect1>
+
+</refentry> \ No newline at end of file
diff --git a/modules/pam_pwhistory/pwhistory_helper.c b/modules/pam_pwhistory/pwhistory_helper.c
new file mode 100644
index 00000000..469d95fa
--- /dev/null
+++ b/modules/pam_pwhistory/pwhistory_helper.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2013 Red Hat, Inc.
+ * Author: Tomas Mraz <tmraz@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 <errno.h>
+#include <unistd.h>
+#include <signal.h>
+#include <security/_pam_types.h>
+#include <security/_pam_macros.h>
+#include <security/pam_modutil.h>
+#include "opasswd.h"
+#include "pam_inline.h"
+
+
+static int
+check_history(const char *user, const char *filename, const char *debug)
+{
+ char pass[PAM_MAX_RESP_SIZE + 1];
+ char *passwords[] = { pass };
+ int npass;
+ int dbg = atoi(debug); /* no need to be too fancy here */
+ int retval;
+
+ /* read the password from stdin (a pipe from the pam_pwhistory module) */
+ npass = pam_read_passwords(STDIN_FILENO, 1, passwords);
+
+ if (npass != 1)
+ { /* is it a valid password? */
+ helper_log_err(LOG_DEBUG, "no password supplied");
+ return PAM_AUTHTOK_ERR;
+ }
+
+ retval = check_old_pass(user, pass, filename, dbg);
+
+ pam_overwrite_array(pass); /* clear memory of the password */
+
+ return retval;
+}
+
+static int
+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, filename, dbg);
+
+ return retval;
+}
+
+int
+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 < 5)
+ {
+ fprintf(stderr,
+ "This binary is not designed for running in this way.\n");
+ return PAM_SYSTEM_ERR;
+ }
+
+ option = argv[1];
+ user = argv[2];
+ filename = argv[3];
+
+ 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");
+
+ return PAM_SYSTEM_ERR;
+}
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 c1732dd5..f67159cd 100644
--- a/modules/pam_rhosts/Makefile.in
+++ b/modules/pam_rhosts/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_rhosts
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 3a4e5d95..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: 06/08/2020
+.\" 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" "06/08/2020" "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 fc13baf8..64b6de13 100644
--- a/modules/pam_rootok/Makefile.in
+++ b/modules/pam_rootok/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_rootok-retval$(EXEEXT)
subdir = modules/pam_rootok
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -378,6 +381,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -422,10 +426,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -435,12 +443,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -454,7 +466,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -473,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@
@@ -501,8 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -513,11 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -562,7 +579,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -570,9 +586,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -582,6 +595,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -594,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)
@@ -932,7 +947,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 a1f4cecf..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: 06/08/2020
+.\" 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" "06/08/2020" "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 3a00d545..9bc15abf 100644
--- a/modules/pam_rootok/pam_rootok.c
+++ b/modules/pam_rootok/pam_rootok.c
@@ -50,20 +50,22 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv)
#ifdef WITH_SELINUX
static int
+PAM_FORMAT((printf, 2, 3))
log_callback (int type UNUSED, const char *fmt, ...)
{
- int audit_fd;
va_list ap;
- va_start(ap, fmt);
#ifdef HAVE_LIBAUDIT
- audit_fd = audit_open();
+ int audit_fd = audit_open();
if (audit_fd >= 0) {
char *buf;
+ int ret;
- if (vasprintf (&buf, fmt, ap) < 0) {
- va_end(ap);
+ va_start(ap, fmt);
+ ret = vasprintf (&buf, fmt, ap);
+ va_end(ap);
+ if (ret < 0) {
return 0;
}
audit_log_user_avc_message(audit_fd, AUDIT_USER_AVC, buf, NULL, NULL,
@@ -75,6 +77,7 @@ log_callback (int type UNUSED, const char *fmt, ...)
}
#endif
+ va_start(ap, fmt);
vsyslog (LOG_USER | LOG_INFO, fmt, ap);
va_end(ap);
return 0;
@@ -84,7 +87,7 @@ static int
selinux_check_root (void)
{
int status = -1;
- security_context_t user_context;
+ char *user_context_raw;
union selinux_callback old_callback;
if (is_selinux_enabled() < 1)
@@ -93,15 +96,15 @@ selinux_check_root (void)
old_callback = selinux_get_callback(SELINUX_CB_LOG);
/* setup callbacks */
selinux_set_callback(SELINUX_CB_LOG, (union selinux_callback) &log_callback);
- if ((status = getprevcon(&user_context)) < 0) {
+ if ((status = getprevcon_raw(&user_context_raw)) < 0) {
selinux_set_callback(SELINUX_CB_LOG, old_callback);
return status;
}
- status = selinux_check_access(user_context, user_context, "passwd", "rootok", NULL);
+ status = selinux_check_access(user_context_raw, user_context_raw, "passwd", "rootok", NULL);
selinux_set_callback(SELINUX_CB_LOG, old_callback);
- freecon(user_context);
+ freecon(user_context_raw);
return status;
}
#endif
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 87245e61..f207cf98 100644
--- a/modules/pam_securetty/Makefile.in
+++ b/modules/pam_securetty/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_securetty
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 011f9409..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: 06/08/2020
+.\" 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" "06/08/2020" "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_securetty/pam_securetty.c b/modules/pam_securetty/pam_securetty.c
index b4d71751..47a5cd9f 100644
--- a/modules/pam_securetty/pam_securetty.c
+++ b/modules/pam_securetty/pam_securetty.c
@@ -111,7 +111,8 @@ securetty_perform_check (pam_handle_t *pamh, int ctrl,
#ifdef VENDORDIR
if (errno == ENOENT) {
if (stat(SECURETTY2_FILE, &ttyfileinfo)) {
- pam_syslog(pamh, LOG_NOTICE,
+ if (ctrl & PAM_DEBUG_ARG)
+ pam_syslog(pamh, LOG_DEBUG,
"Couldn't open %s: %m", SECURETTY2_FILE);
return PAM_SUCCESS; /* for compatibility with old securetty handling,
this needs to succeed. But we still log the
@@ -120,7 +121,8 @@ securetty_perform_check (pam_handle_t *pamh, int ctrl,
securettyfile = SECURETTY2_FILE;
} else {
#endif
- pam_syslog(pamh, LOG_NOTICE, "Couldn't open %s: %m", SECURETTY_FILE);
+ if (ctrl & PAM_DEBUG_ARG)
+ pam_syslog(pamh, LOG_DEBUG, "Couldn't open %s: %m", SECURETTY_FILE);
return PAM_SUCCESS; /* for compatibility with old securetty handling,
this needs to succeed. But we still log the
error. */
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 8d047146..cad48d6c 100644
--- a/modules/pam_selinux/Makefile.in
+++ b/modules/pam_selinux/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -98,18 +98,21 @@ host_triplet = @host@
noinst_PROGRAMS = pam_selinux_check$(EXEEXT)
subdir = modules/pam_selinux
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -385,6 +388,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -429,10 +433,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -442,12 +450,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -461,7 +473,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -480,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@
@@ -508,8 +521,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -520,11 +532,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -569,7 +586,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -577,9 +593,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -589,6 +602,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -601,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)
@@ -942,7 +957,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 2745a478..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: 06/08/2020
+.\" 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" "06/08/2020" "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 06c3ce65..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);
}
@@ -519,6 +518,7 @@ static int
compute_tty_context(const pam_handle_t *pamh, module_data_t *data)
{
const char *tty = get_item(pamh, PAM_TTY);
+ security_class_t tclass;
if (!tty || !*tty || !strcmp(tty, "ssh")
|| pam_str_skip_prefix(tty, "NODEV") != NULL) {
@@ -552,11 +552,21 @@ 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");
+ if (tclass == 0) {
+ pam_syslog(pamh, LOG_ERR, "Failed to get chr_file security class");
+ freecon(data->prev_tty_context);
+ data->prev_tty_context = NULL;
+ free(data->tty_path);
+ data->tty_path = NULL;
+ return (security_getenforce() != 0) ? PAM_SESSION_ERR : PAM_SUCCESS;
}
if (security_compute_relabel(data->exec_context, data->prev_tty_context,
- string_to_security_class("chr_file"), &data->tty_context)) {
+ tclass, &data->tty_context)) {
data->tty_context = NULL;
pam_syslog(pamh, LOG_ERR, "Failed to compute new context for %s: %m",
data->tty_path);
@@ -564,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;
@@ -595,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;
@@ -647,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;
@@ -706,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 0de1354a..4fb5cbf7 100644
--- a/modules/pam_sepermit/Makefile.in
+++ b/modules/pam_sepermit/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -95,20 +95,24 @@ 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/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -159,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
@@ -174,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)
@@ -194,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;; \
@@ -381,6 +390,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -425,10 +435,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -438,12 +452,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -457,7 +475,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -476,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@
@@ -504,8 +523,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -516,11 +534,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -565,7 +588,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -573,9 +595,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -585,6 +604,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -595,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@
@@ -609,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
@@ -644,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=; \
@@ -682,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)
@@ -689,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)
@@ -989,7 +1024,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -1002,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)
@@ -1012,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 \
@@ -1030,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); \
@@ -1079,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)
@@ -1124,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
@@ -1176,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
@@ -1200,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 37460ab6..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: 06/08/2020
+.\" 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" "06/08/2020" "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 b/modules/pam_sepermit/sepermit.conf
index 951f3dfe..0a12cd83 100644
--- a/modules/pam_sepermit/sepermit.conf
+++ b/modules/pam_sepermit/sepermit.conf
@@ -1,7 +1,7 @@
# /etc/security/sepermit.conf
#
# Each line contains either:
-# - an user name
+# - a user name
# - a group name, with @group syntax
# - a SELinux user name, with %seuser syntax
# Each line can contain optional arguments separated by :
diff --git a/modules/pam_sepermit/sepermit.conf.5 b/modules/pam_sepermit/sepermit.conf.5
index f2b5d092..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: 06/08/2020
+.\" 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" "06/08/2020" "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 c7e66dad..5e4375a9 100644
--- a/modules/pam_setquota/Makefile.in
+++ b/modules/pam_setquota/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -92,18 +92,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_setquota
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -369,6 +372,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -413,10 +417,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -426,12 +434,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -445,7 +457,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -464,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@
@@ -492,8 +505,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -504,11 +516,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -553,7 +570,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -561,9 +577,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -573,6 +586,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -585,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)
@@ -908,7 +923,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_setquota/README b/modules/pam_setquota/README
index dbab1ccc..fd00da7d 100644
--- a/modules/pam_setquota/README
+++ b/modules/pam_setquota/README
@@ -31,7 +31,7 @@ startuid=1000
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)
+ UID_MIN is undefined.)
enduid=0
@@ -75,6 +75,6 @@ AUTHOR
pam_setquota was originally written by Ruslan Savchenko <savrus@mexmat.net>.
-Further modifications were made by Shane Tzen<shane@ict.usc.edu>, Sven Hartge
-<sven@svenharte.de> and Keller Fuchs <kellerfuchs@hashbang.sh>
+Further modifications were made by Shane Tzen <shane@ict.usc.edu>, Sven Hartge
+<sven@svenhartge.de> and Keller Fuchs <kellerfuchs@hashbang.sh>.
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 a4222bf3..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: 06/08/2020
+.\" 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" "06/08/2020" "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)
+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:
@@ -130,7 +130,7 @@ The quota was set successfully\&.
.PP
PAM_IGNORE
.RS 4
-No action was taken because either the UID of the user was outside of the specifed range, a quota already existed and
+No action was taken because either the UID of the user was outside of the specified range, a quota already existed and
\fBoverwrite=1\fR
was not configured or no limits were configured at all\&.
.RE
@@ -183,4 +183,4 @@ A single invocation of `pam_setquota` applies a specific policy to a UID range\&
.PP
pam_setquota was originally written by Ruslan Savchenko <savrus@mexmat\&.net>\&.
.PP
-Further modifications were made by Shane Tzen<shane@ict\&.usc\&.edu>, Sven Hartge <sven@svenharte\&.de> and Keller Fuchs <kellerfuchs@hashbang\&.sh>
+Further modifications were made by Shane Tzen <shane@ict\&.usc\&.edu>, Sven Hartge <sven@svenhartge\&.de> and Keller Fuchs <kellerfuchs@hashbang\&.sh>\&.
diff --git a/modules/pam_setquota/pam_setquota.8.xml b/modules/pam_setquota/pam_setquota.8.xml
index bb878e8c..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,19 +101,19 @@
</varlistentry>
<varlistentry>
<term>
- <option>startuid=<replaceable>1000</replaceable></option>
+ startuid=1000
</term>
<listitem>
<para>
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)
+ at compile-time if UID_MIN is undefined.)
</para>
</listitem>
</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>
@@ -210,7 +208,7 @@
<listitem>
<para>
No action was taken because either the UID of the user was outside
- of the specifed range, a quota already existed and
+ of the specified range, a quota already existed and
<option>overwrite=1</option> was not configured or no limits were
configured at all.
</para>
@@ -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,17 +283,17 @@
</para>
</refsect1>
- <refsect1 id='pam_setquota-author'>
+ <refsect1 xml:id="pam_setquota-author">
<title>AUTHOR</title>
<para>
pam_setquota was originally written by
Ruslan Savchenko &lt;savrus@mexmat.net&gt;.
</para>
<para>
- Further modifications were made by Shane Tzen&lt;shane@ict.usc.edu&gt;,
- Sven Hartge &lt;sven@svenharte.de&gt;
- and Keller Fuchs &lt;kellerfuchs@hashbang.sh&gt;
+ Further modifications were made by Shane Tzen &lt;shane@ict.usc.edu&gt;,
+ Sven Hartge &lt;sven@svenhartge.de&gt;
+ and Keller Fuchs &lt;kellerfuchs@hashbang.sh&gt;.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_setquota/pam_setquota.c b/modules/pam_setquota/pam_setquota.c
index 01b05e38..ec45baac 100644
--- a/modules/pam_setquota/pam_setquota.c
+++ b/modules/pam_setquota/pam_setquota.c
@@ -288,7 +288,7 @@ pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED,
"with suffix=\"%s\" on device=\"%s\"", pwd->pw_dir,
mnt->mnt_dir, s, mntdevice);
}
- /* param.fs has been specified, find exactly matching fileystem */
+ /* param.fs has been specified, find exactly matching filesystem */
} else if ((strncmp(param.fs, mnt->mnt_dir, param.fs_len) == 0
&& mnt->mnt_dir[param.fs_len] == '\0') ||
(strncmp(param.fs, mnt->mnt_fsname, param.fs_len) == 0
@@ -332,7 +332,7 @@ pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED,
/* Parse new limits
* Exit with an error should only the hard- or softlimit be
* configured but not both.
- * This avoids errors, inconsistencies and possible race conditons
+ * This avoids errors, inconsistencies and possible race conditions
* during setquota.
*/
ndqblk.dqb_valid = 0;
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 bc203c58..3c236b33 100644
--- a/modules/pam_shells/Makefile.in
+++ b/modules/pam_shells/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_shells
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -145,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@)
@@ -373,6 +378,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +423,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +440,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +463,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +511,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +522,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +576,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +583,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +592,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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
@@ -912,7 +929,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 ec9adf08..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: 06/08/2020
+.\" 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" "06/08/2020" "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 10671ad4..ee78daef 100644
--- a/modules/pam_stress/Makefile.am
+++ b/modules/pam_stress/Makefile.am
@@ -3,14 +3,23 @@
#
CLEANFILES = *~
+MAINTAINERCLEANFILES = $(MANS) README
-EXTRA_DIST =
+EXTRA_DIST = $(XMLS)
+if HAVE_DOC
+dist_man_MANS = pam_stress.8
+endif
+XMLS = README.xml pam_stress.8.xml
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)
@@ -20,3 +29,8 @@ if HAVE_VERSIONING
endif
securelib_LTLIBRARIES = pam_stress.la
pam_stress_la_LIBADD = $(top_builddir)/libpam/libpam.la
+
+if ENABLE_REGENERATE_MAN
+dist_noinst_DATA = README
+-include $(top_srcdir)/Make.xml.rules
+endif
diff --git a/modules/pam_stress/Makefile.in b/modules/pam_stress/Makefile.in
index 36c9b3c2..4788de54 100644
--- a/modules/pam_stress/Makefile.in
+++ b/modules/pam_stress/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -18,6 +18,7 @@
# Copyright (c) 2005, 2006, 2009 Thorsten Kukuk <kukuk@suse.de>
#
+
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -95,22 +96,25 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_stress
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
- $(am__DIST_COMMON)
+ $(am__dist_noinst_DATA_DIST) $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@@ -142,7 +146,7 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(securelibdir)"
+am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)"
LTLIBRARIES = $(securelib_LTLIBRARIES)
pam_stress_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
pam_stress_la_SOURCES = pam_stress.c
@@ -193,6 +197,11 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__dist_noinst_DATA_DIST = README
+DATA = $(dist_noinst_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -367,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -389,9 +399,9 @@ TEST_LOGS = $(am__test_logs2:.test.log=.log)
TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
$(TEST_LOG_FLAGS)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
$(top_srcdir)/build-aux/depcomp \
- $(top_srcdir)/build-aux/test-driver README
+ $(top_srcdir)/build-aux/test-driver
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -411,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -424,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -443,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -462,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@
@@ -490,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -502,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -551,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -559,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -571,22 +590,28 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
CLEANFILES = *~
-EXTRA_DIST =
+MAINTAINERCLEANFILES = $(MANS) README
+EXTRA_DIST = $(XMLS)
+@HAVE_DOC_TRUE@dist_man_MANS = pam_stress.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)
AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1)
securelib_LTLIBRARIES = pam_stress.la
pam_stress_la_LIBADD = $(top_builddir)/libpam/libpam.la
+@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
.SUFFIXES:
@@ -699,6 +724,49 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-man8: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(dist_man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || 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'; \
+ 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' \
+ -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 $$?; \
+ 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 $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || 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 '/\.8[a-z]*$$/p'; \
+ } | 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)
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -859,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -952,9 +1020,9 @@ check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
-all-am: Makefile $(LTLIBRARIES)
+all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA)
installdirs:
- for dir in "$(DESTDIR)$(securelibdir)"; do \
+ for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -991,6 +1059,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \
@@ -1014,7 +1083,7 @@ info: info-am
info-am:
-install-data-am: install-securelibLTLIBRARIES
+install-data-am: install-man install-securelibLTLIBRARIES
install-dvi: install-dvi-am
@@ -1030,7 +1099,7 @@ install-info: install-info-am
install-info-am:
-install-man:
+install-man: install-man8
install-pdf: install-pdf-am
@@ -1060,7 +1129,9 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-securelibLTLIBRARIES
+uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES
+
+uninstall-man: uninstall-man8
.MAKE: check-am install-am install-strip
@@ -1072,16 +1143,18 @@ uninstall-am: uninstall-securelibLTLIBRARIES
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-pdf install-pdf-am \
- install-ps install-ps-am 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-securelibLTLIBRARIES
+ install-info-am install-man install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am \
+ 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 \
+ uninstall-man8 uninstall-securelibLTLIBRARIES
.PRECIOUS: Makefile
+@ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/modules/pam_stress/README b/modules/pam_stress/README
index ed56ae58..230e8621 100644
--- a/modules/pam_stress/README
+++ b/modules/pam_stress/README
@@ -1,64 +1,61 @@
-#
-# This describes the behavior of this module with respect to the
-# /etc/pam.conf file.
-#
-# written by Andrew Morgan <morgan@parc.power.net>
-#
+pam_stress — The stress-testing PAM module
-This module recognizes the following arguments.
+â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”
-debug put lots of information in syslog.
- *NOTE* this option writes passwords to syslog, so
- don't use anything sensitive when testing.
+DESCRIPTION
-no_warn don't give warnings about things (otherwise warnings are issued
- via the conversation function)
+The pam_stress PAM module is mainly intended to give the impression of failing
+as a fully functioning module might.
-use_first_pass don't prompt for a password, for pam_sm_authentication
- function just use item PAM_AUTHTOK.
+OPTIONS
-try_first_pass don't prompt for a password unless there has been no
- previous authentication token (item PAM_AUTHTOK is NULL)
+debug
-rootok This is intended for the pam_sm_chauthtok function and
- it instructs this function to permit root to change
- the user's password without entering the old password.
+ Put lots of information in syslog. *NOTE* this option writes passwords to
+ syslog, so don't use anything sensitive when testing.
-The following arguments are acted on by the module. They are intended
-to make the module give the impression of failing as a fully
-functioning module might.
+no_warn
-expired an argument intended for the account and chauthtok module
- parts. It instructs the module to act as if the user's
- password has expired
+ Do not give warnings about things (otherwise warnings are issued via the
+ conversation function)
-fail_1 this instructs the module to make its first function fail.
+use_first_pass
-fail_2 this instructs the module to make its second function (if there
- is one) fail.
+ Do not prompt for a password, for pam_sm_authentication function just use
+ item PAM_AUTHTOK.
- The function break up is indicated in the Module
- Developers' Guide. Listed here it is:
+try_first_pass
- service function 1 function 2
- ------- ---------- ----------
- auth pam_sm_authenticate pam_sm_setcred
- password pam_sm_chauthtok
- session pam_sm_open_session pam_sm_close_session
- account pam_sm_acct_mgmt
+ Do not prompt for a password unless there has been no previous
+ authentication token (item PAM_AUTHTOK is NULL)
-prelim for pam_sm_chauthtok, means fail on PAM_PRELIM_CHECK.
+rootok
-required for pam_sm_chauthtok, means fail if the user hasn't already
- been authenticated by this module. (See stress_new_pwd data
- item below.)
+ This is intended for the pam_sm_chauthtok function and it instructs this
+ function to permit root to change the user's password without entering the
+ old password.
-#
-# data strings that this module uses are the following:
-#
+expired
+
+ An argument intended for the account and chauthtok module parts. It
+ instructs the module to act as if the user's password has expired
+
+fail_1
+
+ This instructs the module to make its first function fail.
+
+fail_2
+
+ This instructs the module to make its second function (if there is one)
+ fail.
+
+prelim
+
+ For pam_sm_chauthtok, means fail on PAM_PRELIM_CHECK.
+
+required
+
+ For pam_sm_chauthtok, means fail if the user hasn't already been
+ authenticated by this module. (See stress_new_pwd data string in the
+ NOTES.)
-data name value(s) Comments
---------- -------- --------
-stress_new_pwd yes tells pam_sm_chauthtok that
- pam_sm_acct_mgmt says we need a new
- password
diff --git a/modules/pam_stress/README.xml b/modules/pam_stress/README.xml
new file mode 100644
index 00000000..cc7a1848
--- /dev/null
+++ b/modules/pam_stress/README.xml
@@ -0,0 +1,19 @@
+<article xmlns="http://docbook.org/ns/docbook" version="5.0">
+
+ <info>
+
+ <title>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_stress.8.xml" xpointer='xpointer(id("pam_stress-name")/*)'/>
+ </title>
+
+ </info>
+
+ <section>
+ <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(id("pam_stress-options")/*)'/>
+ </section>
+
+</article> \ No newline at end of file
diff --git a/modules/pam_stress/pam_stress.8 b/modules/pam_stress/pam_stress.8
new file mode 100644
index 00000000..a522b7fb
--- /dev/null
+++ b/modules/pam_stress/pam_stress.8
@@ -0,0 +1,190 @@
+'\" t
+.\" Title: pam_stress
+.\" Author: [see the "AUTHORS" 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 "PAM_STRESS" "8" "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"
+pam_stress \- The stress\-testing PAM module
+.SH "SYNOPSIS"
+.HP \w'\fBpam_stress\&.so\fR\ 'u
+\fBpam_stress\&.so\fR [debug] [no_warn] [use_first_pass] [try_first_pass] [rootok] [expired] [fail_1] [fail_2] [prelim] [required]
+.SH "DESCRIPTION"
+.PP
+The pam_stress PAM module is mainly intended to give the impression of failing as a fully functioning module might\&.
+.SH "OPTIONS"
+.PP
+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
+no_warn
+.RS 4
+Do not give warnings about things (otherwise warnings are issued via the conversation function)
+.RE
+.PP
+use_first_pass
+.RS 4
+Do not prompt for a password, for pam_sm_authentication function just use item PAM_AUTHTOK\&.
+.RE
+.PP
+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
+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
+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
+fail_1
+.RS 4
+This instructs the module to make its first function fail\&.
+.RE
+.PP
+fail_2
+.RS 4
+This instructs the module to make its second function (if there is one) fail\&.
+.RE
+.PP
+prelim
+.RS 4
+For pam_sm_chauthtok, means fail on PAM_PRELIM_CHECK\&.
+.RE
+.PP
+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
+.SH "MODULE TYPES PROVIDED"
+.PP
+All module types (\fBauth\fR,
+\fBaccount\fR,
+\fBpassword\fR
+and
+\fBsession\fR) are provided\&.
+.SH "RETURN VALUES"
+.PP
+PAM_BUF_ERR
+.RS 4
+Memory buffer error\&.
+.RE
+.PP
+PAM_PERM_DENIED
+.RS 4
+Permission denied\&.
+.RE
+.PP
+PAM_AUTH_ERR
+.RS 4
+Access to the system was denied\&.
+.RE
+.PP
+PAM_CONV_ERR
+.RS 4
+Conversation failure\&.
+.RE
+.PP
+PAM_SUCCESS
+.RS 4
+The function passes all checks\&.
+.RE
+.PP
+PAM_USER_UNKNOWN
+.RS 4
+The user is not known to the system\&.
+.RE
+.PP
+PAM_CRED_ERR
+.RS 4
+Failure involving user credentials\&.
+.RE
+.PP
+PAM_NEW_AUTHTOK_REQD
+.RS 4
+Authentication token is no longer valid; new one required\&.
+.RE
+.PP
+PAM_SESSION_ERR
+.RS 4
+Session failure\&.
+.RE
+.PP
+PAM_TRY_AGAIN
+.RS 4
+Failed preliminary check by service\&.
+.RE
+.PP
+PAM_AUTHTOK_LOCK_BUSY
+.RS 4
+Authentication token lock busy\&.
+.RE
+.PP
+PAM_AUTHTOK_ERR
+.RS 4
+Authentication token manipulation error\&.
+.RE
+.PP
+PAM_SYSTEM_ERR
+.RS 4
+System error\&.
+.RE
+.SH "NOTES"
+.PP
+This module uses the stress_new_pwd data string which tells pam_sm_chauthtok that pam_sm_acct_mgmt says we need a new password\&. The only possible value for this data string is \*(Aqyes\*(Aq\&.
+.SH "EXAMPLES"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#%PAM\-1\&.0
+#
+# Any of the following will suffice
+account required pam_stress\&.so
+auth required pam_stress\&.so
+password required pam_stress\&.so
+session required pam_stress\&.so
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBpam.conf\fR(5),
+\fBpam.d\fR(5),
+\fBpam\fR(8)\&.
+.SH "AUTHORS"
+.PP
+The pam_stress PAM module was developed by Andrew Morgan <morgan@linux\&.kernel\&.org>\&. The man page for pam_stress was written by Lucas Ramage <ramage\&.lucas@protonmail\&.com>\&.
diff --git a/modules/pam_stress/pam_stress.8.xml b/modules/pam_stress/pam_stress.8.xml
new file mode 100644
index 00000000..617b7aae
--- /dev/null
+++ b/modules/pam_stress/pam_stress.8.xml
@@ -0,0 +1,353 @@
+<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_stress">
+
+ <refmeta>
+ <refentrytitle>pam_stress</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="source">Linux-PAM</refmiscinfo>
+ <refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
+ </refmeta>
+
+ <refnamediv xml:id="pam_stress-name">
+ <refname>pam_stress</refname>
+ <refpurpose>The stress-testing PAM module</refpurpose>
+ </refnamediv>
+
+<!-- body begins here -->
+
+ <refsynopsisdiv>
+ <cmdsynopsis xml:id="pam_stress-cmdsynopsis" sepchar=" ">
+ <command>pam_stress.so</command>
+ <arg choice="opt" rep="norepeat">
+ debug
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ no_warn
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ use_first_pass
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ try_first_pass
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ rootok
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ expired
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ fail_1
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ fail_2
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ prelim
+ </arg>
+ <arg choice="opt" rep="norepeat">
+ required
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <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
+functioning module might.
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pam_stress-options">
+ <title>OPTIONS</title>
+ <variablelist>
+
+ <varlistentry>
+ <term>
+ debug
+ </term>
+ <listitem>
+ <para>
+ Put lots of information in syslog.
+ *NOTE* this option writes passwords to syslog, so don't use anything sensitive when testing.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ no_warn
+ </term>
+ <listitem>
+ <para>
+ Do not give warnings about things (otherwise warnings are issued
+ via the conversation function)
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ use_first_pass
+ </term>
+ <listitem>
+ <para>
+ Do not prompt for a password, for pam_sm_authentication
+ function just use item PAM_AUTHTOK.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ try_first_pass
+ </term>
+ <listitem>
+ <para>
+ Do not prompt for a password unless there has been no
+ previous authentication token (item PAM_AUTHTOK is NULL)
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ rootok
+ </term>
+ <listitem>
+ <para>
+ This is intended for the pam_sm_chauthtok function and
+ it instructs this function to permit root to change
+ the user's password without entering the old password.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ expired
+ </term>
+ <listitem>
+ <para>
+ An argument intended for the account and chauthtok module
+ parts. It instructs the module to act as if the user's
+ password has expired
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ fail_1
+ </term>
+ <listitem>
+ <para>
+ This instructs the module to make its first function fail.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ fail_2
+ </term>
+ <listitem>
+ <para>
+ This instructs the module to make its second function (if there
+ is one) fail.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ prelim
+ </term>
+ <listitem>
+ <para>
+ For pam_sm_chauthtok, means fail on PAM_PRELIM_CHECK.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ required
+ </term>
+ <listitem>
+ <para>
+ For pam_sm_chauthtok, means fail if the user hasn't already
+ been authenticated by this module. (See stress_new_pwd data
+ string in the NOTES.)
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1 xml:id="pam_stress-types">
+ <title>MODULE TYPES PROVIDED</title>
+ <para>
+ All module types (<option>auth</option>, <option>account</option>,
+ <option>password</option> and <option>session</option>) are provided.
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pam_stress-return_values">
+ <title>RETURN VALUES</title>
+ <variablelist>
+ <varlistentry>
+ <term>PAM_BUF_ERR</term>
+ <listitem>
+ <para>
+ Memory buffer error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_PERM_DENIED</term>
+ <listitem>
+ <para>
+ Permission denied.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_AUTH_ERR</term>
+ <listitem>
+ <para>
+ Access to the system was denied.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_CONV_ERR</term>
+ <listitem>
+ <para>
+ Conversation failure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_SUCCESS</term>
+ <listitem>
+ <para>
+ The function passes all checks.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_USER_UNKNOWN</term>
+ <listitem>
+ <para>
+ The user is not known to the system.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_CRED_ERR</term>
+ <listitem>
+ <para>
+ Failure involving user credentials.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_NEW_AUTHTOK_REQD</term>
+ <listitem>
+ <para>
+ Authentication token is no longer valid; new one required.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_SESSION_ERR</term>
+ <listitem>
+ <para>
+ Session failure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_TRY_AGAIN</term>
+ <listitem>
+ <para>
+ Failed preliminary check by service.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_AUTHTOK_LOCK_BUSY</term>
+ <listitem>
+ <para>
+ Authentication token lock busy.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_AUTHTOK_ERR</term>
+ <listitem>
+ <para>
+ Authentication token manipulation error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>PAM_SYSTEM_ERR</term>
+ <listitem>
+ <para>
+ System error.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 xml:id="pam_stress-notes">
+ <title>NOTES</title>
+ <para>
+ This module uses the stress_new_pwd data string which tells
+ pam_sm_chauthtok that pam_sm_acct_mgmt says we need a new password.
+ The only possible value for this data string is 'yes'.
+ </para>
+ </refsect1>
+
+ <refsect1 xml:id="pam_stress-examples">
+ <title>EXAMPLES</title>
+ <programlisting>
+#%PAM-1.0
+#
+# Any of the following will suffice
+account required pam_stress.so
+auth required pam_stress.so
+password required pam_stress.so
+session required pam_stress.so
+ </programlisting>
+ </refsect1>
+
+ <refsect1 xml:id="pam_stress-see_also">
+ <title>SEE ALSO</title>
+ <para>
+ <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="pam_stress-authors">
+ <title>AUTHORS</title>
+ <para>
+ The pam_stress PAM module was developed by
+ Andrew Morgan &lt;morgan@linux.kernel.org&gt;.
+ The man page for pam_stress was written by
+ Lucas Ramage &lt;ramage.lucas@protonmail.com&gt;.
+ </para>
+ </refsect1>
+</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 fa26cbea..5028fe07 100644
--- a/modules/pam_succeed_if/Makefile.in
+++ b/modules/pam_succeed_if/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_succeed_if
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 aa8ecdbd..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: 06/08/2020
-.\" 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" "06/08/2020" "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_tally/Makefile.am b/modules/pam_tally/Makefile.am
deleted file mode 100644
index 3a973943..00000000
--- a/modules/pam_tally/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk <kukuk@thkukuk.de>
-#
-
-CLEANFILES = *~
-MAINTAINERCLEANFILES = $(MANS) README
-
-EXTRA_DIST = $(XMLS)
-
-if HAVE_DOC
-dist_man_MANS = pam_tally.8
-endif
-XMLS = README.xml pam_tally.8.xml
-dist_check_SCRIPTS = tst-pam_tally
-TESTS = $(dist_check_SCRIPTS)
-
-securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
-
-noinst_HEADERS = faillog.h
-
-AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
-
-pam_tally_la_LDFLAGS = -no-undefined -avoid-version -module
-pam_tally_la_LIBADD = $(top_builddir)/libpam/libpam.la
-if HAVE_VERSIONING
- pam_tally_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
-endif
-
-securelib_LTLIBRARIES = pam_tally.la
-sbin_PROGRAMS = pam_tally
-
-pam_tally_SOURCES = pam_tally_app.c
-
-if ENABLE_REGENERATE_MAN
-dist_noinst_DATA = README
--include $(top_srcdir)/Make.xml.rules
-endif
diff --git a/modules/pam_tally/Makefile.in b/modules/pam_tally/Makefile.in
deleted file mode 100644
index 3d11dd95..00000000
--- a/modules/pam_tally/Makefile.in
+++ /dev/null
@@ -1,1221 +0,0 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-#
-# Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk <kukuk@thkukuk.de>
-#
-
-
-
-
-VPATH = @srcdir@
-am__is_gnu_make = { \
- if test -z '$(MAKELEVEL)'; then \
- false; \
- elif test -n '$(MAKE_HOST)'; then \
- true; \
- elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
- true; \
- else \
- false; \
- fi; \
-}
-am__make_running_with_option = \
- case $${target_option-} in \
- ?) ;; \
- *) echo "am__make_running_with_option: internal error: invalid" \
- "target option '$${target_option-}' specified" >&2; \
- exit 1;; \
- esac; \
- has_opt=no; \
- sane_makeflags=$$MAKEFLAGS; \
- if $(am__is_gnu_make); then \
- sane_makeflags=$$MFLAGS; \
- else \
- case $$MAKEFLAGS in \
- *\\[\ \ ]*) \
- bs=\\; \
- sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
- | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
- esac; \
- fi; \
- skip_next=no; \
- strip_trailopt () \
- { \
- flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
- }; \
- for flg in $$sane_makeflags; do \
- test $$skip_next = yes && { skip_next=no; continue; }; \
- case $$flg in \
- *=*|--*) continue;; \
- -*I) strip_trailopt 'I'; skip_next=yes;; \
- -*I?*) strip_trailopt 'I';; \
- -*O) strip_trailopt 'O'; skip_next=yes;; \
- -*O?*) strip_trailopt 'O';; \
- -*l) strip_trailopt 'l'; skip_next=yes;; \
- -*l?*) strip_trailopt 'l';; \
- -[dEDm]) skip_next=yes;; \
- -[JT]) skip_next=yes;; \
- esac; \
- case $$flg in \
- *$$target_option*) has_opt=yes; break;; \
- esac; \
- done; \
- test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
-sbin_PROGRAMS = pam_tally$(EXEEXT)
-subdir = modules/pam_tally
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
- $(top_srcdir)/m4/jh_path_xml_catalog.m4 \
- $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
- $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
- $(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-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)
-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)"
-PROGRAMS = $(sbin_PROGRAMS)
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
- test -z "$$files" \
- || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
- || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
- $(am__cd) "$$dir" && rm -f $$files; }; \
- }
-LTLIBRARIES = $(securelib_LTLIBRARIES)
-pam_tally_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la
-pam_tally_la_SOURCES = pam_tally.c
-pam_tally_la_OBJECTS = pam_tally.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 =
-pam_tally_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(pam_tally_la_LDFLAGS) $(LDFLAGS) -o $@
-am_pam_tally_OBJECTS = pam_tally_app.$(OBJEXT)
-pam_tally_OBJECTS = $(am_pam_tally_OBJECTS)
-pam_tally_LDADD = $(LDADD)
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo " GEN " $@;
-am__v_GEN_1 =
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-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_tally.Plo \
- ./$(DEPDIR)/pam_tally_app.Po
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo " CC " $@;
-am__v_CC_1 =
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-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_tally.c $(pam_tally_SOURCES)
-DIST_SOURCES = pam_tally.c $(pam_tally_SOURCES)
-am__can_run_installinfo = \
- case $$AM_UPDATE_INFO_DIR in \
- n|no|NO) false;; \
- *) (install-info --version) >/dev/null 2>&1;; \
- esac
-man8dir = $(mandir)/man8
-NROFF = nroff
-MANS = $(dist_man_MANS)
-am__dist_noinst_DATA_DIST = README
-DATA = $(dist_noinst_DATA)
-HEADERS = $(noinst_HEADERS)
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates. Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
- BEGIN { nonempty = 0; } \
- { items[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique. This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
- list='$(am__tagged_files)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-am__tty_colors_dummy = \
- mgn= red= grn= lgn= blu= brg= std=; \
- am__color_tests=no
-am__tty_colors = { \
- $(am__tty_colors_dummy); \
- if test "X$(AM_COLOR_TESTS)" = Xno; then \
- am__color_tests=no; \
- elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
- am__color_tests=yes; \
- elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
- am__color_tests=yes; \
- fi; \
- if test $$am__color_tests = yes; then \
- red=''; \
- grn=''; \
- lgn=''; \
- blu=''; \
- mgn=''; \
- brg=''; \
- std=''; \
- fi; \
-}
-am__recheck_rx = ^[ ]*:recheck:[ ]*
-am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
-am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
-# A command that, given a newline-separated list of test names on the
-# standard input, print the name of the tests that are to be re-run
-# upon "make recheck".
-am__list_recheck_tests = $(AWK) '{ \
- recheck = 1; \
- while ((rc = (getline line < ($$0 ".trs"))) != 0) \
- { \
- if (rc < 0) \
- { \
- if ((getline line2 < ($$0 ".log")) < 0) \
- recheck = 0; \
- break; \
- } \
- else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
- { \
- recheck = 0; \
- break; \
- } \
- else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
- { \
- break; \
- } \
- }; \
- if (recheck) \
- print $$0; \
- close ($$0 ".trs"); \
- close ($$0 ".log"); \
-}'
-# A command that, given a newline-separated list of test names on the
-# standard input, create the global log from their .trs and .log files.
-am__create_global_log = $(AWK) ' \
-function fatal(msg) \
-{ \
- print "fatal: making $@: " msg | "cat >&2"; \
- exit 1; \
-} \
-function rst_section(header) \
-{ \
- print header; \
- len = length(header); \
- for (i = 1; i <= len; i = i + 1) \
- printf "="; \
- printf "\n\n"; \
-} \
-{ \
- copy_in_global_log = 1; \
- global_test_result = "RUN"; \
- while ((rc = (getline line < ($$0 ".trs"))) != 0) \
- { \
- if (rc < 0) \
- fatal("failed to read from " $$0 ".trs"); \
- if (line ~ /$(am__global_test_result_rx)/) \
- { \
- sub("$(am__global_test_result_rx)", "", line); \
- sub("[ ]*$$", "", line); \
- global_test_result = line; \
- } \
- else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
- copy_in_global_log = 0; \
- }; \
- if (copy_in_global_log) \
- { \
- rst_section(global_test_result ": " $$0); \
- while ((rc = (getline line < ($$0 ".log"))) != 0) \
- { \
- if (rc < 0) \
- fatal("failed to read from " $$0 ".log"); \
- print line; \
- }; \
- printf "\n"; \
- }; \
- close ($$0 ".trs"); \
- close ($$0 ".log"); \
-}'
-# Restructured Text title.
-am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
-# Solaris 10 'make', and several other traditional 'make' implementations,
-# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
-# by disabling -e (using the XSI extension "set +e") if it's set.
-am__sh_e_setup = case $$- in *e*) set +e;; esac
-# Default flags passed to test drivers.
-am__common_driver_flags = \
- --color-tests "$$am__color_tests" \
- --enable-hard-errors "$$am__enable_hard_errors" \
- --expect-failure "$$am__expect_failure"
-# To be inserted before the command running the test. Creates the
-# directory for the log if needed. Stores in $dir the directory
-# containing $f, in $tst the test, in $log the log. Executes the
-# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
-# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
-# will run the test scripts (or their associated LOG_COMPILER, if
-# thy have one).
-am__check_pre = \
-$(am__sh_e_setup); \
-$(am__vpath_adj_setup) $(am__vpath_adj) \
-$(am__tty_colors); \
-srcdir=$(srcdir); export srcdir; \
-case "$@" in \
- */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
- *) am__odir=.;; \
-esac; \
-test "x$$am__odir" = x"." || test -d "$$am__odir" \
- || $(MKDIR_P) "$$am__odir" || exit $$?; \
-if test -f "./$$f"; then dir=./; \
-elif test -f "$$f"; then dir=; \
-else dir="$(srcdir)/"; fi; \
-tst=$$dir$$f; log='$@'; \
-if test -n '$(DISABLE_HARD_ERRORS)'; then \
- am__enable_hard_errors=no; \
-else \
- am__enable_hard_errors=yes; \
-fi; \
-case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
- am__expect_failure=yes;; \
- *) \
- am__expect_failure=no;; \
-esac; \
-$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
-# A shell command to get the names of the tests scripts with any registered
-# extension removed (i.e., equivalently, the names of the test logs, with
-# the '.log' extension removed). The result is saved in the shell variable
-# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
-# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
-# since that might cause problem with VPATH rewrites for suffix-less tests.
-# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
-am__set_TESTS_bases = \
- bases='$(TEST_LOGS)'; \
- bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
- bases=`echo $$bases`
-RECHECK_LOGS = $(TEST_LOGS)
-AM_RECURSIVE_TARGETS = check recheck
-TEST_SUITE_LOG = test-suite.log
-TEST_EXTENSIONS = @EXEEXT@ .test
-LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
-LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
-am__set_b = \
- case '$@' in \
- */*) \
- case '$*' in \
- */*) b='$*';; \
- *) b=`echo '$@' | sed 's/\.log$$//'`; \
- esac;; \
- *) \
- b='$*';; \
- esac
-am__test_logs1 = $(TESTS:=.log)
-am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
-TEST_LOGS = $(am__test_logs2:.test.log=.log)
-TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
-TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
- $(TEST_LOG_FLAGS)
-am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
- $(top_srcdir)/build-aux/depcomp \
- $(top_srcdir)/build-aux/test-driver
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BROWSER = @BROWSER@
-BUILD_CFLAGS = @BUILD_CFLAGS@
-BUILD_CPPFLAGS = @BUILD_CPPFLAGS@
-BUILD_LDFLAGS = @BUILD_LDFLAGS@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CC_FOR_BUILD = @CC_FOR_BUILD@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-ECONF_CFLAGS = @ECONF_CFLAGS@
-ECONF_LIBS = @ECONF_LIBS@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-FO2PDF = @FO2PDF@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTLLIBS = @INTLLIBS@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
-LIBCRYPT = @LIBCRYPT@
-LIBDB = @LIBDB@
-LIBDL = @LIBDL@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
-LIBOBJS = @LIBOBJS@
-LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@
-LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@
-LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@
-LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@
-LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@
-LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@
-LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@
-LIBS = @LIBS@
-LIBSELINUX = @LIBSELINUX@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
-LTLIBOBJS = @LTLIBOBJS@
-LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-NIS_CFLAGS = @NIS_CFLAGS@
-NIS_LIBS = @NIS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NSL_CFLAGS = @NSL_CFLAGS@
-NSL_LIBS = @NSL_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-POSUB = @POSUB@
-RANLIB = @RANLIB@
-SCONFIGDIR = @SCONFIGDIR@
-SECUREDIR = @SECUREDIR@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
-STRIP = @STRIP@
-TIRPC_CFLAGS = @TIRPC_CFLAGS@
-TIRPC_LIBS = @TIRPC_LIBS@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMLCATALOG = @XMLCATALOG@
-XMLLINT = @XMLLINT@
-XML_CATALOG_FILE = @XML_CATALOG_FILE@
-XSLTPROC = @XSLTPROC@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
-pam_xauth_path = @pam_xauth_path@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-CLEANFILES = *~
-MAINTAINERCLEANFILES = $(MANS) README
-EXTRA_DIST = $(XMLS)
-@HAVE_DOC_TRUE@dist_man_MANS = pam_tally.8
-XMLS = README.xml pam_tally.8.xml
-dist_check_SCRIPTS = tst-pam_tally
-TESTS = $(dist_check_SCRIPTS)
-securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
-noinst_HEADERS = faillog.h
-AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
-
-pam_tally_la_LDFLAGS = -no-undefined -avoid-version -module \
- $(am__append_1)
-pam_tally_la_LIBADD = $(top_builddir)/libpam/libpam.la
-securelib_LTLIBRARIES = pam_tally.la
-pam_tally_SOURCES = pam_tally_app.c
-@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_tally/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu modules/pam_tally/Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
- @$(NORMAL_INSTALL)
- @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
- fi; \
- for p in $$list; do echo "$$p $$p"; done | \
- sed 's/$(EXEEXT)$$//' | \
- while read p p1; do if test -f $$p \
- || test -f $$p1 \
- ; then echo "$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n;h' \
- -e 's|.*|.|' \
- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
- sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) files[d] = files[d] " " $$1; \
- else { print "f", $$3 "/" $$4, $$1; } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
- } \
- ; done
-
-uninstall-sbinPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
- -e 's/$$/$(EXEEXT)/' \
- `; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(sbindir)" && rm -f $$files
-
-clean-sbinPROGRAMS:
- @list='$(sbin_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=; \
- list2=; for p in $$list; do \
- if test -f $$p; then \
- list2="$$list2 $$p"; \
- else :; fi; \
- done; \
- test -z "$$list2" || { \
- echo " $(MKDIR_P) '$(DESTDIR)$(securelibdir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(securelibdir)" || exit 1; \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \
- }
-
-uninstall-securelibLTLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \
- for p in $$list; do \
- $(am__strip_dir) \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \
- done
-
-clean-securelibLTLIBRARIES:
- -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES)
- @list='$(securelib_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
-pam_tally.la: $(pam_tally_la_OBJECTS) $(pam_tally_la_DEPENDENCIES) $(EXTRA_pam_tally_la_DEPENDENCIES)
- $(AM_V_CCLD)$(pam_tally_la_LINK) -rpath $(securelibdir) $(pam_tally_la_OBJECTS) $(pam_tally_la_LIBADD) $(LIBS)
-
-pam_tally$(EXEEXT): $(pam_tally_OBJECTS) $(pam_tally_DEPENDENCIES) $(EXTRA_pam_tally_DEPENDENCIES)
- @rm -f pam_tally$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(pam_tally_OBJECTS) $(pam_tally_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tally.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tally_app.Po@am__quote@ # am--include-marker
-
-$(am__depfiles_remade):
- @$(MKDIR_P) $(@D)
- @echo '# dummy' >$@-t && $(am__mv) $@-t $@
-
-am--depfiles: $(am__depfiles_remade)
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-man8: $(dist_man_MANS)
- @$(NORMAL_INSTALL)
- @list1=''; \
- list2='$(dist_man_MANS)'; \
- test -n "$(man8dir)" \
- && test -n "`echo $$list1$$list2`" \
- || exit 0; \
- echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(man8dir)" || 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'; \
- 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' \
- -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 $$?; \
- 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 $$?; }; \
- done; }
-
-uninstall-man8:
- @$(NORMAL_UNINSTALL)
- @list=''; test -n "$(man8dir)" || 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 '/\.8[a-z]*$$/p'; \
- } | 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)
-
-ID: $(am__tagged_files)
- $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- set x; \
- here=`pwd`; \
- $(am__define_uniq_tagged_files); \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- $(am__define_uniq_tagged_files); \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
- list='$(am__tagged_files)'; \
- case "$(srcdir)" in \
- [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
- *) sdir=$(subdir)/$(srcdir) ;; \
- esac; \
- for i in $$list; do \
- if test -f "$$i"; then \
- echo "$(subdir)/$$i"; \
- else \
- echo "$$sdir/$$i"; \
- fi; \
- done >> $(top_builddir)/cscope.files
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-# Recover from deleted '.trs' file; this should ensure that
-# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
-# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
-# to avoid problems with "make -n".
-.log.trs:
- rm -f $< $@
- $(MAKE) $(AM_MAKEFLAGS) $<
-
-# Leading 'am--fnord' is there to ensure the list of targets does not
-# expand to empty, as could happen e.g. with make check TESTS=''.
-am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
-am--force-recheck:
- @:
-
-$(TEST_SUITE_LOG): $(TEST_LOGS)
- @$(am__set_TESTS_bases); \
- am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
- redo_bases=`for i in $$bases; do \
- am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
- done`; \
- if test -n "$$redo_bases"; then \
- redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
- redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
- if $(am__make_dryrun); then :; else \
- rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
- fi; \
- fi; \
- if test -n "$$am__remaking_logs"; then \
- echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
- "recursion detected" >&2; \
- elif test -n "$$redo_logs"; then \
- am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
- fi; \
- if $(am__make_dryrun); then :; else \
- st=0; \
- errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
- for i in $$redo_bases; do \
- test -f $$i.trs && test -r $$i.trs \
- || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
- test -f $$i.log && test -r $$i.log \
- || { echo "$$errmsg $$i.log" >&2; st=1; }; \
- done; \
- test $$st -eq 0 || exit 1; \
- fi
- @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
- ws='[ ]'; \
- results=`for b in $$bases; do echo $$b.trs; done`; \
- test -n "$$results" || results=/dev/null; \
- all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
- pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
- fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
- skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
- xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
- xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
- error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
- if test `expr $$fail + $$xpass + $$error` -eq 0; then \
- success=true; \
- else \
- success=false; \
- fi; \
- br='==================='; br=$$br$$br$$br$$br; \
- result_count () \
- { \
- if test x"$$1" = x"--maybe-color"; then \
- maybe_colorize=yes; \
- elif test x"$$1" = x"--no-color"; then \
- maybe_colorize=no; \
- else \
- echo "$@: invalid 'result_count' usage" >&2; exit 4; \
- fi; \
- shift; \
- desc=$$1 count=$$2; \
- if test $$maybe_colorize = yes && test $$count -gt 0; then \
- color_start=$$3 color_end=$$std; \
- else \
- color_start= color_end=; \
- fi; \
- echo "$${color_start}# $$desc $$count$${color_end}"; \
- }; \
- create_testsuite_report () \
- { \
- result_count $$1 "TOTAL:" $$all "$$brg"; \
- result_count $$1 "PASS: " $$pass "$$grn"; \
- result_count $$1 "SKIP: " $$skip "$$blu"; \
- result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
- result_count $$1 "FAIL: " $$fail "$$red"; \
- result_count $$1 "XPASS:" $$xpass "$$red"; \
- result_count $$1 "ERROR:" $$error "$$mgn"; \
- }; \
- { \
- echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
- $(am__rst_title); \
- create_testsuite_report --no-color; \
- echo; \
- echo ".. contents:: :depth: 2"; \
- echo; \
- for b in $$bases; do echo $$b; done \
- | $(am__create_global_log); \
- } >$(TEST_SUITE_LOG).tmp || exit 1; \
- mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
- if $$success; then \
- col="$$grn"; \
- else \
- col="$$red"; \
- test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
- fi; \
- echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
- echo "$${col}$$br$${std}"; \
- create_testsuite_report --maybe-color; \
- echo "$$col$$br$$std"; \
- if $$success; then :; else \
- echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
- if test -n "$(PACKAGE_BUGREPORT)"; then \
- echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
- fi; \
- echo "$$col$$br$$std"; \
- fi; \
- $$success || exit 1
-
-check-TESTS: $(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)
- @set +e; $(am__set_TESTS_bases); \
- log_list=`for i in $$bases; do echo $$i.log; done`; \
- trs_list=`for i in $$bases; do echo $$i.trs; done`; \
- 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)
- @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 \
- | $(am__list_recheck_tests)` || exit 1; \
- log_list=`for i in $$bases; do echo $$i.log; done`; \
- log_list=`echo $$log_list`; \
- $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
- am__force_recheck=am--force-recheck \
- TEST_LOGS="$$log_list"; \
- exit $$?
-tst-pam_tally.log: tst-pam_tally
- @p='tst-pam_tally'; \
- b='tst-pam_tally'; \
- $(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); \
- $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
-@am__EXEEXT_TRUE@.test$(EXEEXT).log:
-@am__EXEEXT_TRUE@ @p='$<'; \
-@am__EXEEXT_TRUE@ $(am__set_b); \
-@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
-@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
-@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
-@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
-
-distdir: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) distdir-am
-
-distdir-am: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(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 \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- if test -z '$(STRIP)'; then \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- install; \
- else \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
- fi
-mostlyclean-generic:
- -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
- -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
- -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \
- clean-securelibLTLIBRARIES mostlyclean-am
-
-distclean: distclean-am
- -rm -f ./$(DEPDIR)/pam_tally.Plo
- -rm -f ./$(DEPDIR)/pam_tally_app.Po
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man install-securelibLTLIBRARIES
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-sbinPROGRAMS
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man: install-man8
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f ./$(DEPDIR)/pam_tally.Plo
- -rm -f ./$(DEPDIR)/pam_tally_app.Po
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-man uninstall-sbinPROGRAMS \
- uninstall-securelibLTLIBRARIES
-
-uninstall-man: 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 \
- 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-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 \
- uninstall-man8 uninstall-sbinPROGRAMS \
- uninstall-securelibLTLIBRARIES
-
-.PRECIOUS: Makefile
-
-@ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/modules/pam_tally/README b/modules/pam_tally/README
deleted file mode 100644
index c88e2a24..00000000
--- a/modules/pam_tally/README
+++ /dev/null
@@ -1,145 +0,0 @@
-pam_tally — The login counter (tallying) module
-
-â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”
-
-DESCRIPTION
-
-This module maintains a count of attempted accesses, can reset count on
-success, can deny access if too many attempts fail.
-
-pam_tally has several limitations, which are solved with pam_tally2. For this
-reason pam_tally is deprecated and will be removed in a future release.
-
-pam_tally comes in two parts: pam_tally.so and pam_tally. The former is the PAM
-module and the latter, a stand-alone program. pam_tally is an (optional)
-application which can be used to interrogate and manipulate the counter file.
-It can display user counts, set individual counts, or clear all counts. Setting
-artificially high counts may be useful for blocking users without changing
-their passwords. For example, one might find it useful to clear all counts
-every midnight from a cron job. The faillog(8) command can be used instead of
-pam_tally to to maintain the counter file.
-
-Normally, failed attempts to access root will not 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 su or at the machine console (not telnet/
-rsh, etc), this is safe.
-
-OPTIONS
-
-GLOBAL OPTIONS
-
- This can be used for auth and account module types.
-
- onerr=[fail|succeed]
-
- If something weird happens (like unable to open the file), return with
- PAM_SUCCESS if onerr=succeed is given, else with the corresponding PAM
- error code.
-
- file=/path/to/counter
-
- File where to keep counts. Default is /var/log/faillog.
-
- audit
-
- Will log the user name into the system log if the user is not found.
-
- silent
-
- Don't print informative messages. The messages printed without the
- silent option leak presence of accounts on the system because they are
- not printed for non-existing accounts.
-
- no_log_info
-
- Don't log informative messages via syslog(3).
-
-AUTH OPTIONS
-
- Authentication phase first checks if user should be denied access and if
- not it increments attempted login counter. Then on call to pam_setcred(3)
- it resets the attempts counter.
-
- deny=n
-
- Deny access if tally for this user exceeds n.
-
- lock_time=n
-
- Always deny for n seconds after failed attempt.
-
- unlock_time=n
-
- Allow access after n seconds after failed attempt. If this option is
- used the user will be locked out for the specified amount of time after
- he exceeded his maximum allowed attempts. Otherwise the account is
- locked until the lock is removed by a manual intervention of the system
- administrator.
-
- magic_root
-
- If the module is invoked by a user with uid=0 the counter is not
- incremented. The sysadmin should use this for user launched services,
- like su, otherwise this argument should be omitted.
-
- no_lock_time
-
- Do not use the .fail_locktime field in /var/log/faillog for this user.
-
- no_reset
-
- Don't reset count on successful entry, only decrement.
-
- even_deny_root_account
-
- Root account can become unavailable.
-
- per_user
-
- If /var/log/faillog contains a non-zero .fail_max/.fail_locktime field
- for this user then use it instead of deny=n/ lock_time=n parameter.
-
- no_lock_time
-
- Don't use .fail_locktime filed in /var/log/faillog for this user.
-
-ACCOUNT OPTIONS
-
- Account phase resets attempts counter if the user is not magic root. This
- phase can be used optionally for services which don't call pam_setcred(3)
- correctly or if the reset should be done regardless of the failure of the
- account phase of other modules.
-
- magic_root
-
- If the module is invoked by a user with uid=0 the counter is not
- incremented. The sysadmin should use this for user launched services,
- like su, otherwise this argument should be omitted.
-
- no_reset
-
- Don't reset count on successful entry, only decrement.
-
-EXAMPLES
-
-Add the following line to /etc/pam.d/login to lock the account after too many
-failed logins. The number of allowed fails is specified by /var/log/faillog and
-needs to be set with pam_tally or faillog(8) before.
-
-auth required pam_securetty.so
-auth required pam_tally.so per_user
-auth required pam_env.so
-auth required pam_unix.so
-auth required pam_nologin.so
-account required pam_unix.so
-password required pam_unix.so
-session required pam_limits.so
-session required pam_unix.so
-session required pam_lastlog.so nowtmp
-session optional pam_mail.so standard
-
-
-AUTHOR
-
-pam_tally was written by Tim Baverstock and Tomas Mraz.
-
diff --git a/modules/pam_tally/README.xml b/modules/pam_tally/README.xml
deleted file mode 100644
index 3c6de50e..00000000
--- a/modules/pam_tally/README.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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_tally.8.xml">
--->
-]>
-
-<article>
-
- <articleinfo>
-
- <title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_tally-name"]/*)'/>
- </title>
-
- </articleinfo>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-description"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-options"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-examples"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-author"]/*)'/>
- </section>
-
-</article>
diff --git a/modules/pam_tally/faillog.h b/modules/pam_tally/faillog.h
deleted file mode 100644
index 90756394..00000000
--- a/modules/pam_tally/faillog.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 1989 - 1994, Julianne Frances Haugh
- * All rights reserved.
- *
- * 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, this list of conditions and the following disclaimer.
- * 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. Neither the name of Julianne F. Haugh nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``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 JULIE HAUGH OR CONTRIBUTORS 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.
- */
-
-/*
- * faillog.h - login failure logging file format
- *
- * $Id$
- *
- * The login failure file is maintained by login(1) and faillog(8)
- * Each record in the file represents a separate UID and the file
- * is indexed in that fashion.
- */
-
-#ifndef _FAILLOG_H
-#define _FAILLOG_H
-
-struct faillog {
- short fail_cnt; /* failures since last success */
- short fail_max; /* failures before turning account off */
- char fail_line[12]; /* last failure occurred here */
- time_t fail_time; /* last failure occurred then */
- /*
- * If nonzero, the account will be re-enabled if there are no
- * failures for fail_locktime seconds since last failure.
- */
- long fail_locktime;
-};
-
-#endif
diff --git a/modules/pam_tally/pam_tally.8 b/modules/pam_tally/pam_tally.8
deleted file mode 100644
index f4d33502..00000000
--- a/modules/pam_tally/pam_tally.8
+++ /dev/null
@@ -1,256 +0,0 @@
-'\" t
-.\" Title: pam_tally
-.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 06/08/2020
-.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
-.\" Language: English
-.\"
-.TH "PAM_TALLY" "8" "06/08/2020" "Linux-PAM Manual" "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_tally \- The login counter (tallying) module
-.SH "SYNOPSIS"
-.HP \w'\fBpam_tally\&.so\fR\ 'u
-\fBpam_tally\&.so\fR [file=\fI/path/to/counter\fR] [onerr=[\fIfail\fR|\fIsucceed\fR]] [magic_root] [even_deny_root_account] [deny=\fIn\fR] [lock_time=\fIn\fR] [unlock_time=\fIn\fR] [per_user] [no_lock_time] [no_reset] [audit] [silent] [no_log_info]
-.HP \w'\fBpam_tally\fR\ 'u
-\fBpam_tally\fR [\-\-file\ \fI/path/to/counter\fR] [\-\-user\ \fIusername\fR] [\-\-reset[=\fIn\fR]] [\-\-quiet]
-.SH "DESCRIPTION"
-.PP
-This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail\&.
-.PP
-pam_tally has several limitations, which are solved with pam_tally2\&. For this reason pam_tally is deprecated and will be removed in a future release\&.
-.PP
-pam_tally comes in two parts:
-\fBpam_tally\&.so\fR
-and
-\fBpam_tally\fR\&. The former is the PAM module and the latter, a stand\-alone program\&.
-\fBpam_tally\fR
-is an (optional) application which can be used to interrogate and manipulate the counter file\&. It can display user counts, set individual counts, or clear all counts\&. Setting artificially high counts may be useful for blocking users without changing their passwords\&. For example, one might find it useful to clear all counts every midnight from a cron job\&. The
-\fBfaillog\fR(8)
-command can be used instead of pam_tally to to maintain the counter file\&.
-.PP
-Normally, failed attempts to access
-\fIroot\fR
-will
-\fBnot\fR
-cause the root account to become blocked, to prevent denial\-of\-service: if your users aren\*(Aqt given shell accounts and root may only login via
-\fBsu\fR
-or at the machine console (not telnet/rsh, etc), this is safe\&.
-.SH "OPTIONS"
-.PP
-GLOBAL OPTIONS
-.RS 4
-This can be used for
-\fIauth\fR
-and
-\fIaccount\fR
-module types\&.
-.PP
-\fBonerr=[\fR\fB\fIfail\fR\fR\fB|\fR\fB\fIsucceed\fR\fR\fB]\fR
-.RS 4
-If something weird happens (like unable to open the file), return with
-\fBPAM_SUCCESS\fR
-if
-\fBonerr=\fR\fB\fIsucceed\fR\fR
-is given, else with the corresponding PAM error code\&.
-.RE
-.PP
-\fBfile=\fR\fB\fI/path/to/counter\fR\fR
-.RS 4
-File where to keep counts\&. Default is
-/var/log/faillog\&.
-.RE
-.PP
-\fBaudit\fR
-.RS 4
-Will log the user name into the system log if the user is not found\&.
-.RE
-.PP
-\fBsilent\fR
-.RS 4
-Don\*(Aqt print informative messages\&. The messages printed without the
-\fIsilent\fR
-option leak presence of accounts on the system because they are not printed for non\-existing accounts\&.
-.RE
-.PP
-\fBno_log_info\fR
-.RS 4
-Don\*(Aqt log informative messages via
-\fBsyslog\fR(3)\&.
-.RE
-.RE
-.PP
-AUTH OPTIONS
-.RS 4
-Authentication phase first checks if user should be denied access and if not it increments attempted login counter\&. Then on call to
-\fBpam_setcred\fR(3)
-it resets the attempts counter\&.
-.PP
-\fBdeny=\fR\fB\fIn\fR\fR
-.RS 4
-Deny access if tally for this user exceeds
-\fIn\fR\&.
-.RE
-.PP
-\fBlock_time=\fR\fB\fIn\fR\fR
-.RS 4
-Always deny for
-\fIn\fR
-seconds after failed attempt\&.
-.RE
-.PP
-\fBunlock_time=\fR\fB\fIn\fR\fR
-.RS 4
-Allow access after
-\fIn\fR
-seconds after failed attempt\&. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts\&. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator\&.
-.RE
-.PP
-\fBmagic_root\fR
-.RS 4
-If the module is invoked by a user with uid=0 the counter is not incremented\&. The sysadmin should use this for user launched services, like
-\fBsu\fR, otherwise this argument should be omitted\&.
-.RE
-.PP
-\fBno_lock_time\fR
-.RS 4
-Do not use the \&.fail_locktime field in
-/var/log/faillog
-for this user\&.
-.RE
-.PP
-\fBno_reset\fR
-.RS 4
-Don\*(Aqt reset count on successful entry, only decrement\&.
-.RE
-.PP
-\fBeven_deny_root_account\fR
-.RS 4
-Root account can become unavailable\&.
-.RE
-.PP
-\fBper_user\fR
-.RS 4
-If
-/var/log/faillog
-contains a non\-zero \&.fail_max/\&.fail_locktime field for this user then use it instead of
-\fBdeny=\fR\fB\fIn\fR\fR/
-\fBlock_time=\fR\fB\fIn\fR\fR
-parameter\&.
-.RE
-.PP
-\fBno_lock_time\fR
-.RS 4
-Don\*(Aqt use \&.fail_locktime filed in
-/var/log/faillog
-for this user\&.
-.RE
-.RE
-.PP
-ACCOUNT OPTIONS
-.RS 4
-Account phase resets attempts counter if the user is
-\fBnot\fR
-magic root\&. This phase can be used optionally for services which don\*(Aqt call
-\fBpam_setcred\fR(3)
-correctly or if the reset should be done regardless of the failure of the account phase of other modules\&.
-.PP
-\fBmagic_root\fR
-.RS 4
-If the module is invoked by a user with uid=0 the counter is not incremented\&. The sysadmin should use this for user launched services, like
-\fBsu\fR, otherwise this argument should be omitted\&.
-.RE
-.PP
-\fBno_reset\fR
-.RS 4
-Don\*(Aqt reset count on successful entry, only decrement\&.
-.RE
-.RE
-.SH "MODULE TYPES PROVIDED"
-.PP
-The
-\fBauth\fR
-and
-\fBaccount\fR
-module types are provided\&.
-.SH "RETURN VALUES"
-.PP
-PAM_AUTH_ERR
-.RS 4
-A invalid option was given, the module was not able to retrieve the user name, no valid counter file was found, or too many failed logins\&.
-.RE
-.PP
-PAM_SUCCESS
-.RS 4
-Everything was successful\&.
-.RE
-.PP
-PAM_USER_UNKNOWN
-.RS 4
-User not known\&.
-.RE
-.SH "EXAMPLES"
-.PP
-Add the following line to
-/etc/pam\&.d/login
-to lock the account after too many failed logins\&. The number of allowed fails is specified by
-/var/log/faillog
-and needs to be set with pam_tally or
-\fBfaillog\fR(8)
-before\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-auth required pam_securetty\&.so
-auth required pam_tally\&.so per_user
-auth required pam_env\&.so
-auth required pam_unix\&.so
-auth required pam_nologin\&.so
-account required pam_unix\&.so
-password required pam_unix\&.so
-session required pam_limits\&.so
-session required pam_unix\&.so
-session required pam_lastlog\&.so nowtmp
-session optional pam_mail\&.so standard
-
-.fi
-.if n \{\
-.RE
-.\}
-.SH "FILES"
-.PP
-/var/log/faillog
-.RS 4
-failure logging file
-.RE
-.SH "SEE ALSO"
-.PP
-\fBfaillog\fR(8),
-\fBpam.conf\fR(5),
-\fBpam.d\fR(5),
-\fBpam\fR(8)
-.SH "AUTHOR"
-.PP
-pam_tally was written by Tim Baverstock and Tomas Mraz\&.
diff --git a/modules/pam_tally/pam_tally.8.xml b/modules/pam_tally/pam_tally.8.xml
deleted file mode 100644
index 80ad060d..00000000
--- a/modules/pam_tally/pam_tally.8.xml
+++ /dev/null
@@ -1,459 +0,0 @@
-<?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_tally">
-
- <refmeta>
- <refentrytitle>pam_tally</refentrytitle>
- <manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
- </refmeta>
-
- <refnamediv id="pam_tally-name">
- <refname>pam_tally</refname>
- <refpurpose>The login counter (tallying) module</refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis id="pam_tally-cmdsynopsis1">
- <command>pam_tally.so</command>
- <arg choice="opt">
- file=<replaceable>/path/to/counter</replaceable>
- </arg>
- <arg choice="opt">
- onerr=[<replaceable>fail</replaceable>|<replaceable>succeed</replaceable>]
- </arg>
- <arg choice="opt">
- magic_root
- </arg>
- <arg choice="opt">
- even_deny_root_account
- </arg>
- <arg choice="opt">
- deny=<replaceable>n</replaceable>
- </arg>
- <arg choice="opt">
- lock_time=<replaceable>n</replaceable>
- </arg>
- <arg choice="opt">
- unlock_time=<replaceable>n</replaceable>
- </arg>
- <arg choice="opt">
- per_user
- </arg>
- <arg choice="opt">
- no_lock_time
- </arg>
- <arg choice="opt">
- no_reset
- </arg>
- <arg choice="opt">
- audit
- </arg>
- <arg choice="opt">
- silent
- </arg>
- <arg choice="opt">
- no_log_info
- </arg>
- </cmdsynopsis>
- <cmdsynopsis id="pam_tally-cmdsynopsis2">
- <command>pam_tally</command>
- <arg choice="opt">
- --file <replaceable>/path/to/counter</replaceable>
- </arg>
- <arg choice="opt">
- --user <replaceable>username</replaceable>
- </arg>
- <arg choice="opt">
- --reset[=<replaceable>n</replaceable>]
- </arg>
- <arg choice="opt">
- --quiet
- </arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1 id="pam_tally-description">
-
- <title>DESCRIPTION</title>
-
- <para>
- This module maintains a count of attempted accesses, can
- reset count on success, can deny access if too many attempts
- fail.
- </para>
- <para>
- pam_tally has several limitations, which are solved with
- pam_tally2. For this reason pam_tally is deprecated and
- will be removed in a future release.
- </para>
- <para>
- pam_tally comes in two parts:
- <emphasis remap='B'>pam_tally.so</emphasis> and
- <command>pam_tally</command>. The former is the PAM module and
- the latter, a stand-alone program. <command>pam_tally</command>
- is an (optional) application which can be used to interrogate and
- manipulate the counter file. It can display user counts, set
- individual counts, or clear all counts. Setting artificially high
- counts may be useful for blocking users without changing their
- passwords. For example, one might find it useful to clear all counts
- every midnight from a cron job. The
- <citerefentry>
- <refentrytitle>faillog</refentrytitle><manvolnum>8</manvolnum>
- </citerefentry> command can be used instead of pam_tally to to
- maintain the counter file.
- </para>
- <para>
- Normally, failed attempts to access <emphasis>root</emphasis> will
- <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_tally-options">
-
- <title>OPTIONS</title>
- <variablelist>
- <varlistentry>
- <term>
- GLOBAL OPTIONS
- </term>
- <listitem>
- <para>
- This can be used for <emphasis>auth</emphasis> and
- <emphasis>account</emphasis> module types.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>onerr=[<replaceable>fail</replaceable>|<replaceable>succeed</replaceable>]</option>
- </term>
- <listitem>
- <para>
- If something weird happens (like unable to open the file),
- return with <errorcode>PAM_SUCCESS</errorcode> if
- <option>onerr=<replaceable>succeed</replaceable></option>
- is given, else with the corresponding PAM error code.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>file=<replaceable>/path/to/counter</replaceable></option>
- </term>
- <listitem>
- <para>
- File where to keep counts. Default is
- <filename>/var/log/faillog</filename>.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>audit</option>
- </term>
- <listitem>
- <para>
- Will log the user name into the system log if the user is not found.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>silent</option>
- </term>
- <listitem>
- <para>
- Don't print informative messages. The messages printed without the <emphasis>silent</emphasis> option leak presence of accounts on the system because they are not printed for non-existing accounts.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>no_log_info</option>
- </term>
- <listitem>
- <para>
- Don't log informative messages via <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- AUTH OPTIONS
- </term>
- <listitem>
- <para>
- Authentication phase first checks if user should be denied
- access and if not it increments attempted login counter. Then
- on call to <citerefentry>
- <refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry> it resets the attempts counter.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>deny=<replaceable>n</replaceable></option>
- </term>
- <listitem>
- <para>
- Deny access if tally for this user exceeds
- <replaceable>n</replaceable>.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>lock_time=<replaceable>n</replaceable></option>
- </term>
- <listitem>
- <para>
- Always deny for <replaceable>n</replaceable> seconds
- after failed attempt.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>unlock_time=<replaceable>n</replaceable></option>
- </term>
- <listitem>
- <para>
- Allow access after <replaceable>n</replaceable> seconds
- after failed attempt. If this option is used the user will
- be locked out for the specified amount of time after he
- exceeded his maximum allowed attempts. Otherwise the
- account is locked until the lock is removed by a manual
- intervention of the system administrator.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>magic_root</option>
- </term>
- <listitem>
- <para>
- If the module is invoked by a user with uid=0 the
- counter is not incremented. The sysadmin should use this
- for user launched services, like <command>su</command>,
- otherwise this argument should be omitted.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>no_lock_time</option>
- </term>
- <listitem>
- <para>
- Do not use the .fail_locktime field in
- <filename>/var/log/faillog</filename> for this user.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>no_reset</option>
- </term>
- <listitem>
- <para>
- Don't reset count on successful entry, only decrement.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>even_deny_root_account</option>
- </term>
- <listitem>
- <para>
- Root account can become unavailable.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>per_user</option>
- </term>
- <listitem>
- <para>
- If <filename>/var/log/faillog</filename> contains a non-zero
- .fail_max/.fail_locktime field for this user then use it
- instead of <option>deny=<replaceable>n</replaceable></option>/
- <option>lock_time=<replaceable>n</replaceable></option> parameter.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>no_lock_time</option>
- </term>
- <listitem>
- <para>
- Don't use .fail_locktime filed in
- <filename>/var/log/faillog</filename> for this user.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </listitem>
- </varlistentry>
-
-
- <varlistentry>
- <term>
- ACCOUNT OPTIONS
- </term>
- <listitem>
- <para>
- Account phase resets attempts counter if the user is
- <emphasis remap='B'>not</emphasis> magic root.
- This phase can be used optionally for services which don't call
- <citerefentry>
- <refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry> correctly or if the reset should be done regardless
- of the failure of the account phase of other modules.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>magic_root</option>
- </term>
- <listitem>
- <para>
- If the module is invoked by a user with uid=0 the
- counter is not incremented. The sysadmin should use this
- for user launched services, like <command>su</command>,
- otherwise this argument should be omitted.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>no_reset</option>
- </term>
- <listitem>
- <para>
- Don't reset count on successful entry, only decrement.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1 id="pam_tally-types">
- <title>MODULE TYPES PROVIDED</title>
- <para>
- The <option>auth</option> and <option>account</option>
- module types are provided.
- </para>
- </refsect1>
-
- <refsect1 id='pam_tally-return_values'>
- <title>RETURN VALUES</title>
- <variablelist>
- <varlistentry>
- <term>PAM_AUTH_ERR</term>
- <listitem>
- <para>
- A invalid option was given, the module was not able
- to retrieve the user name, no valid counter file
- was found, or too many failed logins.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>PAM_SUCCESS</term>
- <listitem>
- <para>
- Everything was successful.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>PAM_USER_UNKNOWN</term>
- <listitem>
- <para>
- User not known.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1 id='pam_tally-examples'>
- <title>EXAMPLES</title>
- <para>
- Add the following line to <filename>/etc/pam.d/login</filename> to
- lock the account after too many failed logins. The number of
- allowed fails is specified by <filename>/var/log/faillog</filename>
- and needs to be set with pam_tally or <citerefentry>
- <refentrytitle>faillog</refentrytitle><manvolnum>8</manvolnum>
- </citerefentry> before.
- </para>
- <programlisting>
-auth required pam_securetty.so
-auth required pam_tally.so per_user
-auth required pam_env.so
-auth required pam_unix.so
-auth required pam_nologin.so
-account required pam_unix.so
-password required pam_unix.so
-session required pam_limits.so
-session required pam_unix.so
-session required pam_lastlog.so nowtmp
-session optional pam_mail.so standard
- </programlisting>
- </refsect1>
-
- <refsect1 id="pam_tally-files">
- <title>FILES</title>
- <variablelist>
- <varlistentry>
- <term><filename>/var/log/faillog</filename></term>
- <listitem>
- <para>failure logging file</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1 id='pam_tally-see_also'>
- <title>SEE ALSO</title>
- <para>
- <citerefentry>
- <refentrytitle>faillog</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 id='pam_tally-author'>
- <title>AUTHOR</title>
- <para>
- pam_tally was written by Tim Baverstock and Tomas Mraz.
- </para>
- </refsect1>
-
-</refentry>
diff --git a/modules/pam_tally/pam_tally.c b/modules/pam_tally/pam_tally.c
deleted file mode 100644
index 34ae6241..00000000
--- a/modules/pam_tally/pam_tally.c
+++ /dev/null
@@ -1,853 +0,0 @@
-/*
- * pam_tally module
- *
- * By Tim Baverstock <warwick@mmm.co.uk>, Multi Media Machine Ltd.
- * 5 March 1997
- *
- * Stuff stolen from pam_rootok and pam_listfile
- *
- * Changes by Tomas Mraz <tmraz@redhat.com> 5 January 2005
- * Audit option added for Tomas patch by
- * Sebastien Tricaud <toady@gscore.org> 13 January 2005
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <pwd.h>
-#include <time.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include "faillog.h"
-
-#ifndef MAIN
-#include <security/pam_modutil.h>
-#include <security/pam_ext.h>
-#endif
-#include <security/pam_modules.h>
-#include "pam_inline.h"
-
-#ifndef TRUE
-#define TRUE 1L
-#define FALSE 0L
-#endif
-
-#ifndef HAVE_FSEEKO
-#define fseeko fseek
-#endif
-
-/*---------------------------------------------------------------------*/
-
-#define DEFAULT_LOGFILE "/var/log/faillog"
-#define MODULE_NAME "pam_tally"
-
-#define tally_t unsigned short int
-#define TALLY_FMT "%hu"
-#define TALLY_HI ((tally_t)~0L)
-
-#ifndef FILENAME_MAX
-# define FILENAME_MAX MAXPATHLEN
-#endif
-
-struct fail_s {
- struct faillog fs_faillog;
-#ifndef MAIN
- time_t fs_fail_time;
-#endif /* ndef MAIN */
-};
-
-struct tally_options {
- const char *filename;
- tally_t deny;
- long lock_time;
- long unlock_time;
- unsigned int ctrl;
-};
-
-#define PHASE_UNKNOWN 0
-#define PHASE_AUTH 1
-#define PHASE_ACCOUNT 2
-#define PHASE_SESSION 3
-
-#define OPT_MAGIC_ROOT 01
-#define OPT_FAIL_ON_ERROR 02
-#define OPT_DENY_ROOT 04
-#define OPT_PER_USER 010
-#define OPT_NO_LOCK_TIME 020
-#define OPT_NO_RESET 040
-#define OPT_AUDIT 0100
-#define OPT_SILENT 0200
-#define OPT_NOLOGNOTICE 0400
-
-
-/*---------------------------------------------------------------------*/
-
-/* some syslogging */
-
-#ifdef MAIN
-#define pam_syslog tally_log
-static void
-tally_log (const pam_handle_t *pamh UNUSED, int priority UNUSED,
- const char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- fprintf(stderr, "%s: ", MODULE_NAME);
- vfprintf(stderr, fmt, args);
- fprintf(stderr,"\n");
- va_end(args);
-}
-
-#define pam_modutil_getpwnam(pamh,user) getpwnam(user)
-
-#endif
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support function: parse arguments --- */
-
-#ifndef MAIN
-
-static void
-log_phase_no_auth(pam_handle_t *pamh, int phase, const char *argv)
-{
- if ( phase != PHASE_AUTH ) {
- pam_syslog(pamh, LOG_ERR,
- "option %s allowed in auth phase only", argv);
- }
-}
-
-static int
-tally_parse_args(pam_handle_t *pamh, struct tally_options *opts,
- int phase, int argc, const char **argv)
-{
- memset(opts, 0, sizeof(*opts));
- opts->filename = DEFAULT_LOGFILE;
-
- for ( ; argc-- > 0; ++argv ) {
- const char *str;
-
- if ((str = pam_str_skip_prefix(*argv, "file=")) != NULL) {
- const char *from = str;
- if ( *from!='/' || strlen(from)>FILENAME_MAX-1 ) {
- pam_syslog(pamh, LOG_ERR,
- "filename not /rooted or too long; %s", *argv);
- return PAM_AUTH_ERR;
- }
- opts->filename = from;
- }
- else if ( ! strcmp( *argv, "onerr=fail" ) ) {
- opts->ctrl |= OPT_FAIL_ON_ERROR;
- }
- else if ( ! strcmp( *argv, "onerr=succeed" ) ) {
- opts->ctrl &= ~OPT_FAIL_ON_ERROR;
- }
- else if ( ! strcmp( *argv, "magic_root" ) ) {
- opts->ctrl |= OPT_MAGIC_ROOT;
- }
- else if ( ! strcmp( *argv, "even_deny_root_account" ) ) {
- log_phase_no_auth(pamh, phase, *argv);
- opts->ctrl |= OPT_DENY_ROOT;
- }
- else if ((str = pam_str_skip_prefix(*argv, "deny=")) != NULL) {
- log_phase_no_auth(pamh, phase, *argv);
- if (sscanf(str, TALLY_FMT, &opts->deny) != 1) {
- pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv);
- return PAM_AUTH_ERR;
- }
- }
- else if ((str = pam_str_skip_prefix(*argv, "lock_time=")) != NULL) {
- log_phase_no_auth(pamh, phase, *argv);
- if (sscanf(str, "%ld", &opts->lock_time) != 1) {
- pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv);
- return PAM_AUTH_ERR;
- }
- }
- else if ((str = pam_str_skip_prefix(*argv, "unlock_time=")) != NULL) {
- log_phase_no_auth(pamh, phase, *argv);
- if (sscanf(str, "%ld", &opts->unlock_time) != 1) {
- pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv);
- return PAM_AUTH_ERR;
- }
- }
- else if ( ! strcmp( *argv, "per_user" ) )
- {
- log_phase_no_auth(pamh, phase, *argv);
- opts->ctrl |= OPT_PER_USER;
- }
- else if ( ! strcmp( *argv, "no_lock_time") )
- {
- log_phase_no_auth(pamh, phase, *argv);
- opts->ctrl |= OPT_NO_LOCK_TIME;
- }
- else if ( ! strcmp( *argv, "no_reset" ) ) {
- opts->ctrl |= OPT_NO_RESET;
- }
- else if ( ! strcmp ( *argv, "audit") ) {
- opts->ctrl |= OPT_AUDIT;
- }
- else if ( ! strcmp ( *argv, "silent") ) {
- opts->ctrl |= OPT_SILENT;
- }
- else if ( ! strcmp ( *argv, "no_log_info") ) {
- opts->ctrl |= OPT_NOLOGNOTICE;
- }
- else {
- pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv);
- }
- }
-
- return PAM_SUCCESS;
-}
-
-#endif /* #ifndef MAIN */
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support function: get uid (and optionally username) from PAM or
- cline_user --- */
-
-#ifdef MAIN
-static const char *cline_user=0; /* cline_user is used in the administration prog */
-#endif
-
-static int
-pam_get_uid(pam_handle_t *pamh, uid_t *uid, const char **userp, struct tally_options *opts)
-{
- const char *user = NULL;
- struct passwd *pw;
-
-#ifdef MAIN
- user = cline_user;
-
- if ( !user ) {
- pam_syslog(pamh, LOG_ERR, "pam_get_uid; user?");
- return PAM_AUTH_ERR;
- }
-#else
- if ((pam_get_user( pamh, &user, NULL )) != PAM_SUCCESS) {
- pam_syslog(pamh, LOG_NOTICE, "cannot determine user name");
- return PAM_AUTH_ERR;
- }
-#endif
-
- if ( ! ( pw = pam_modutil_getpwnam( pamh, user ) ) ) {
- opts->ctrl & OPT_AUDIT ?
- pam_syslog(pamh, LOG_NOTICE, "pam_get_uid; no such user %s", user) :
- pam_syslog(pamh, LOG_NOTICE, "pam_get_uid; no such user");
- return PAM_USER_UNKNOWN;
- }
-
- if ( uid ) *uid = pw->pw_uid;
- if ( userp ) *userp = user;
- return PAM_SUCCESS;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support functions: set/get tally data --- */
-
-#ifndef MAIN
-
-static void
-_cleanup(pam_handle_t *pamh UNUSED, void *data, int error_status UNUSED)
-{
- free(data);
-}
-
-
-static void
-tally_set_data( pam_handle_t *pamh, time_t oldtime )
-{
- time_t *data;
-
- if ( (data=malloc(sizeof(time_t))) != NULL ) {
- *data = oldtime;
- pam_set_data(pamh, MODULE_NAME, (void *)data, _cleanup);
- }
-}
-
-static int
-tally_get_data( pam_handle_t *pamh, time_t *oldtime )
-{
- int rv;
- const void *data;
-
- rv = pam_get_data(pamh, MODULE_NAME, &data);
- if ( rv == PAM_SUCCESS && data != NULL && oldtime != NULL ) {
- *oldtime = *(const time_t *)data;
- pam_set_data(pamh, MODULE_NAME, NULL, NULL);
- }
- else {
- rv = -1;
- if (oldtime)
- *oldtime = 0;
- }
- return rv;
-}
-#endif /* #ifndef MAIN */
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support function: open/create tallyfile and return tally for uid --- */
-
-/* If on entry *tally==TALLY_HI, tallyfile is opened READONLY */
-/* Otherwise, if on entry tallyfile doesn't exist, creation is attempted. */
-
-static int
-get_tally(pam_handle_t *pamh, tally_t *tally, uid_t uid,
- const char *filename, FILE **TALLY, struct fail_s *fsp)
-{
- struct stat fileinfo;
- int lstat_ret = lstat(filename,&fileinfo);
-
- if ( lstat_ret && *tally!=TALLY_HI ) {
- int oldmask = umask(077);
- *TALLY=fopen(filename, "a");
- /* Create file, or append-open in pathological case. */
- umask(oldmask);
- if ( !*TALLY ) {
- pam_syslog(pamh, LOG_ALERT, "Couldn't create %s", filename);
- return PAM_AUTH_ERR;
- }
- lstat_ret = fstat(fileno(*TALLY),&fileinfo);
- fclose(*TALLY);
- }
-
- if ( lstat_ret ) {
- pam_syslog(pamh, LOG_ALERT, "Couldn't stat %s", filename);
- return PAM_AUTH_ERR;
- }
-
- if((fileinfo.st_mode & S_IWOTH) || !S_ISREG(fileinfo.st_mode)) {
- /* If the file is world writable or is not a
- normal file, return error */
- pam_syslog(pamh, LOG_ALERT,
- "%s is either world writable or not a normal file",
- filename);
- return PAM_AUTH_ERR;
- }
-
- if ( ! ( *TALLY = fopen(filename,(*tally!=TALLY_HI)?"r+":"r") ) ) {
- pam_syslog(pamh, LOG_ALERT, "Error opening %s for %s", filename, *tally!=TALLY_HI?"update":"read");
-
-/* Discovering why account service fails: e/uid are target user.
- *
- * perror(MODULE_NAME);
- * fprintf(stderr,"uid %d euid %d\n",getuid(), geteuid());
- */
- return PAM_AUTH_ERR;
- }
-
- if ( fseeko( *TALLY, (off_t) uid * sizeof(struct faillog), SEEK_SET ) ) {
- pam_syslog(pamh, LOG_ALERT, "fseek failed for %s", filename);
- fclose(*TALLY);
- return PAM_AUTH_ERR;
- }
-
- if ( (size_t)fileinfo.st_size <= uid * sizeof(struct faillog) ) {
-
- memset(fsp, 0, sizeof(struct faillog));
- *tally=0;
- fsp->fs_faillog.fail_time = time(NULL);
-
- } else if (( fread((char *) &fsp->fs_faillog,
- sizeof(struct faillog), 1, *TALLY) )==0 ) {
-
- *tally=0; /* Assuming a gappy filesystem */
-
- } else {
-
- *tally = fsp->fs_faillog.fail_cnt;
-
- }
-
- return PAM_SUCCESS;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support function: update and close tallyfile with tally!=TALLY_HI --- */
-
-static int
-set_tally(pam_handle_t *pamh, tally_t tally, uid_t uid,
- const char *filename, FILE **TALLY, struct fail_s *fsp)
-{
- int retval = PAM_SUCCESS;
-
- if ( tally!=TALLY_HI ) {
- if ( fseeko( *TALLY, (off_t) uid * sizeof(struct faillog), SEEK_SET ) ) {
- pam_syslog(pamh, LOG_ALERT, "fseek failed for %s", filename);
- retval = PAM_AUTH_ERR;
- } else {
- fsp->fs_faillog.fail_cnt = tally;
- if (fwrite((char *) &fsp->fs_faillog,
- sizeof(struct faillog), 1, *TALLY)==0 ) {
- pam_syslog(pamh, LOG_ALERT, "update (fwrite) failed for %s", filename);
- retval = PAM_AUTH_ERR;
- }
- }
- }
-
- if ( fclose(*TALLY) ) {
- pam_syslog(pamh, LOG_ALERT, "update (fclose) failed for %s", filename);
- return PAM_AUTH_ERR;
- }
- *TALLY=NULL;
- return retval;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- PAM bits --- */
-
-#ifndef MAIN
-
-#define RETURN_ERROR(i) return ((opts->ctrl & OPT_FAIL_ON_ERROR)?(i):(PAM_SUCCESS))
-
-/*---------------------------------------------------------------------*/
-
-/* --- tally bump function: bump tally for uid by (signed) inc --- */
-
-static int
-tally_bump (int inc, time_t *oldtime, pam_handle_t *pamh,
- uid_t uid, const char *user, struct tally_options *opts)
-{
- tally_t
- tally = 0; /* !TALLY_HI --> Log opened for update */
-
- FILE
- *TALLY = NULL;
- const void
- *remote_host = NULL,
- *cur_tty = NULL;
- struct fail_s fs, *fsp = &fs;
- int i;
-
- i=get_tally(pamh, &tally, uid, opts->filename, &TALLY, fsp);
- if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); }
-
- /* to remember old fail time (for locktime) */
- fsp->fs_fail_time = fsp->fs_faillog.fail_time;
- if ( inc > 0 ) {
- if ( oldtime ) {
- *oldtime = fsp->fs_faillog.fail_time;
- }
- fsp->fs_faillog.fail_time = time(NULL);
- } else {
- if ( oldtime ) {
- fsp->fs_faillog.fail_time = *oldtime;
- }
- }
- (void) pam_get_item(pamh, PAM_RHOST, &remote_host);
- if (!remote_host) {
-
- (void) pam_get_item(pamh, PAM_TTY, &cur_tty);
- if (!cur_tty) {
- strncpy(fsp->fs_faillog.fail_line, "unknown",
- sizeof(fsp->fs_faillog.fail_line) - 1);
- fsp->fs_faillog.fail_line[sizeof(fsp->fs_faillog.fail_line)-1] = 0;
- } else {
- strncpy(fsp->fs_faillog.fail_line, cur_tty,
- sizeof(fsp->fs_faillog.fail_line)-1);
- fsp->fs_faillog.fail_line[sizeof(fsp->fs_faillog.fail_line)-1] = 0;
- }
-
- } else {
- strncpy(fsp->fs_faillog.fail_line, remote_host,
- (size_t)sizeof(fsp->fs_faillog.fail_line));
- fsp->fs_faillog.fail_line[sizeof(fsp->fs_faillog.fail_line)-1] = 0;
- }
-
- if ( !(opts->ctrl & OPT_MAGIC_ROOT) || getuid() ) { /* magic_root doesn't change tally */
-
- tally+=inc;
-
- if ( tally==TALLY_HI ) { /* Overflow *and* underflow. :) */
- tally-=inc;
- pam_syslog(pamh, LOG_ALERT, "Tally %sflowed for user %s",
- (inc<0)?"under":"over",user);
- }
- }
-
- i=set_tally(pamh, tally, uid, opts->filename, &TALLY, fsp );
- if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); }
-
- return PAM_SUCCESS;
-}
-
-static int
-tally_check (time_t oldtime, pam_handle_t *pamh, uid_t uid,
- const char *user, struct tally_options *opts)
-{
- tally_t
- deny = opts->deny;
- tally_t
- tally = TALLY_HI;
- long
- lock_time = opts->lock_time;
-
- struct fail_s fs, *fsp = &fs;
- FILE *TALLY=0;
- int i;
-
- i=get_tally(pamh, &tally, uid, opts->filename, &TALLY, fsp);
- if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); }
-
- if ( TALLY != NULL ) {
- fclose(TALLY);
- }
-
- if ( !(opts->ctrl & OPT_MAGIC_ROOT) || getuid() ) { /* magic_root skips tally check */
-
- /* To deny or not to deny; that is the question */
-
- /* if there's .fail_max entry and per_user=TRUE then deny=.fail_max */
-
- if ( (fsp->fs_faillog.fail_max) && (opts->ctrl & OPT_PER_USER) ) {
- deny = fsp->fs_faillog.fail_max;
- }
- if ( (fsp->fs_faillog.fail_locktime) && (opts->ctrl & OPT_PER_USER) ) {
- lock_time = fsp->fs_faillog.fail_locktime;
- }
- if (lock_time && oldtime
- && !(opts->ctrl & OPT_NO_LOCK_TIME) )
- {
- if ( lock_time + oldtime > time(NULL) )
- {
- if (!(opts->ctrl & OPT_SILENT))
- pam_info (pamh,
- _("The account is temporarily locked (%ld seconds left)."),
- (long int) (oldtime+lock_time-time(NULL)));
-
- if (!(opts->ctrl & OPT_NOLOGNOTICE))
- pam_syslog (pamh, LOG_NOTICE,
- "user %s (%lu) has time limit [%lds left]"
- " since last failure.",
- user, (unsigned long int) uid,
- (long int) (oldtime+lock_time-time(NULL)));
- return PAM_AUTH_ERR;
- }
- }
- if (opts->unlock_time && oldtime)
- {
- if ( opts->unlock_time + oldtime <= time(NULL) )
- { /* ignore deny check after unlock_time elapsed */
- return PAM_SUCCESS;
- }
- }
- if (
- ( deny != 0 ) && /* deny==0 means no deny */
- ( tally > deny ) && /* tally>deny means exceeded */
- ( ((opts->ctrl & OPT_DENY_ROOT) || uid) ) /* even_deny stops uid check */
- ) {
- if (!(opts->ctrl & OPT_SILENT))
- pam_info (pamh, _("The account is locked due to %u failed logins."),
- (unsigned int)tally);
-
- if (!(opts->ctrl & OPT_NOLOGNOTICE))
- pam_syslog(pamh, LOG_NOTICE,
- "user %s (%lu) tally "TALLY_FMT", deny "TALLY_FMT,
- user, (unsigned long int) uid, tally, deny);
- return PAM_AUTH_ERR; /* Only unconditional failure */
- }
- }
-
- return PAM_SUCCESS;
-}
-
-static int
-tally_reset (pam_handle_t *pamh, uid_t uid, struct tally_options *opts)
-{
- tally_t
- tally = 0; /* !TALLY_HI --> Log opened for update */
-
- struct fail_s fs, *fsp = &fs;
- FILE *TALLY=0;
- int i;
-
- i=get_tally(pamh, &tally, uid, opts->filename, &TALLY, fsp);
- if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); }
-
- /* resets if not magic root
- */
-
- if ( (!(opts->ctrl & OPT_MAGIC_ROOT) || getuid())
- && !(opts->ctrl & OPT_NO_RESET) )
- { tally=0; }
-
- if (tally == 0)
- {
- fsp->fs_faillog.fail_time = (time_t) 0;
- strcpy(fsp->fs_faillog.fail_line, "");
- }
-
- i=set_tally(pamh, tally, uid, opts->filename, &TALLY, fsp);
- if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); }
-
- return PAM_SUCCESS;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- authentication management functions (only) --- */
-
-int
-pam_sm_authenticate(pam_handle_t *pamh, int flags,
- int argc, const char **argv)
-{
- int
- rvcheck, rvbump;
- time_t
- oldtime = 0;
- struct tally_options
- options, *opts = &options;
- uid_t
- uid;
- const char
- *user;
-
- rvcheck = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv);
- if ( rvcheck != PAM_SUCCESS )
- RETURN_ERROR( rvcheck );
-
- if (flags & PAM_SILENT)
- opts->ctrl |= OPT_SILENT;
-
- rvcheck = pam_get_uid(pamh, &uid, &user, opts);
- if ( rvcheck != PAM_SUCCESS )
- RETURN_ERROR( rvcheck );
-
- rvbump = tally_bump(1, &oldtime, pamh, uid, user, opts);
- rvcheck = tally_check(oldtime, pamh, uid, user, opts);
-
- tally_set_data(pamh, oldtime);
-
- return rvcheck != PAM_SUCCESS ? rvcheck : rvbump;
-}
-
-int
-pam_sm_setcred(pam_handle_t *pamh, int flags,
- int argc, const char **argv)
-{
- int
- rv;
- time_t
- oldtime = 0;
- struct tally_options
- options, *opts = &options;
- uid_t
- uid;
- const char
- *user;
-
- rv = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv);
- if ( rv != PAM_SUCCESS )
- RETURN_ERROR( rv );
-
- if (flags & PAM_SILENT)
- opts->ctrl |= OPT_SILENT;
-
- rv = pam_get_uid(pamh, &uid, &user, opts);
- if ( rv != PAM_SUCCESS )
- RETURN_ERROR( rv );
-
- if ( tally_get_data(pamh, &oldtime) != 0 )
- /* no data found */
- return PAM_SUCCESS;
-
- if ( (rv=tally_bump(-1, &oldtime, pamh, uid, user, opts)) != PAM_SUCCESS )
- return rv;
- return tally_reset(pamh, uid, opts);
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- authentication management functions (only) --- */
-
-/* To reset failcount of user on successful login */
-
-int
-pam_sm_acct_mgmt(pam_handle_t *pamh, int flags,
- int argc, const char **argv)
-{
- int
- rv;
- time_t
- oldtime = 0;
- struct tally_options
- options, *opts = &options;
- uid_t
- uid;
- const char
- *user;
-
- rv = tally_parse_args(pamh, opts, PHASE_ACCOUNT, argc, argv);
- if ( rv != PAM_SUCCESS )
- RETURN_ERROR( rv );
-
- if (flags & PAM_SILENT)
- opts->ctrl |= OPT_SILENT;
-
- rv = pam_get_uid(pamh, &uid, &user, opts);
- if ( rv != PAM_SUCCESS )
- RETURN_ERROR( rv );
-
- if ( tally_get_data(pamh, &oldtime) != 0 )
- /* no data found */
- return PAM_SUCCESS;
-
- if ( (rv=tally_bump(-1, &oldtime, pamh, uid, user, opts)) != PAM_SUCCESS )
- return rv;
- return tally_reset(pamh, uid, opts);
-}
-
-/*-----------------------------------------------------------------------*/
-
-#else /* #ifndef MAIN */
-
-static const char *cline_filename = DEFAULT_LOGFILE;
-static tally_t cline_reset = TALLY_HI; /* Default is `interrogate only' */
-static int cline_quiet = 0;
-
-/*
- * Not going to link with pamlib just for these.. :)
- */
-
-static const char *
-pam_errors( int i )
-{
- switch (i) {
- case PAM_AUTH_ERR: return _("Authentication error");
- case PAM_SERVICE_ERR: return _("Service error");
- case PAM_USER_UNKNOWN: return _("Unknown user");
- default: return _("Unknown error");
- }
-}
-
-static int
-getopts( char **argv )
-{
- const char *pname = *argv;
- for ( ; *argv ; (void)(*argv && ++argv) ) {
- const char *str;
- if ( !strcmp (*argv,"--file") ) cline_filename=*++argv;
- else if ((str = pam_str_skip_prefix(*argv, "--file=")) != NULL)
- cline_filename = str;
- else if ( !strcmp (*argv,"--user") ) cline_user=*++argv;
- else if ((str = pam_str_skip_prefix(*argv, "--user=")) != NULL)
- cline_user = str;
- else if ( !strcmp (*argv,"--reset") ) cline_reset=0;
- else if ((str = pam_str_skip_prefix(*argv, "--reset=")) != NULL) {
- if (sscanf(str, TALLY_FMT, &cline_reset) != 1 )
- fprintf(stderr,_("%s: Bad number given to --reset=\n"),pname), exit(0);
- }
- else if ( !strcmp (*argv,"--quiet") ) cline_quiet=1;
- else {
- fprintf(stderr,_("%s: Unrecognised option %s\n"),pname,*argv);
- return FALSE;
- }
- }
- return TRUE;
-}
-
-int main ( int argc UNUSED, char **argv )
-{
- struct fail_s fs, *fsp = &fs;
-
- if ( ! getopts( argv+1 ) ) {
- printf(_("%s: [--file rooted-filename] [--user username] "
- "[--reset[=n]] [--quiet]\n"),
- *argv);
- exit(0);
- }
-
- umask(077);
-
- /*
- * Major difference between individual user and all users:
- * --user just handles one user, just like PAM.
- * --user=* handles all users, sniffing cline_filename for nonzeros
- */
-
- if ( cline_user ) {
- uid_t uid;
- tally_t tally=cline_reset;
- FILE *TALLY=0;
- struct tally_options opts;
- int i;
-
- memset(&opts, 0, sizeof(opts));
- opts.ctrl = OPT_AUDIT;
- i=pam_get_uid(NULL, &uid, NULL, &opts);
- if ( i != PAM_SUCCESS ) {
- fprintf(stderr,"%s: %s\n",*argv,pam_errors(i));
- exit(0);
- }
-
- i=get_tally(NULL, &tally, uid, cline_filename, &TALLY, fsp);
- if ( i != PAM_SUCCESS ) {
- fprintf(stderr,"%s: %s\n",*argv,pam_errors(i));
- exit(0);
- }
-
- if ( !cline_quiet )
- printf("User %s\t(%lu)\t%s "TALLY_FMT"\n",cline_user,
- (unsigned long int) uid,
- (cline_reset!=TALLY_HI)?"had":"has",tally);
-
- i=set_tally(NULL, cline_reset, uid, cline_filename, &TALLY, fsp);
- if ( i != PAM_SUCCESS ) {
- fprintf(stderr,"%s: %s\n",*argv,pam_errors(i));
- exit(0);
- }
- }
- else /* !cline_user (ie, operate on all users) */ {
- FILE *TALLY=fopen(cline_filename, "r");
- uid_t uid=0;
- if ( !TALLY ) perror(*argv), exit(0);
-
- for ( ; !feof(TALLY); uid++ ) {
- tally_t tally;
- struct passwd *pw;
- if ( ! fread((char *) &fsp->fs_faillog,
- sizeof (struct faillog), 1, TALLY)
- || ! fsp->fs_faillog.fail_cnt ) {
- continue;
- }
- tally = fsp->fs_faillog.fail_cnt;
-
- if ( ( pw=getpwuid(uid) ) ) {
- printf("User %s\t(%lu)\t%s "TALLY_FMT"\n",pw->pw_name,
- (unsigned long int) uid,
- (cline_reset!=TALLY_HI)?"had":"has",tally);
- }
- else {
- printf("User [NONAME]\t(%lu)\t%s "TALLY_FMT"\n",
- (unsigned long int) uid,
- (cline_reset!=TALLY_HI)?"had":"has",tally);
- }
- }
- fclose(TALLY);
- if ( cline_reset!=0 && cline_reset!=TALLY_HI ) {
- fprintf(stderr,_("%s: Can't reset all users to non-zero\n"),*argv);
- }
- else if ( !cline_reset ) {
- TALLY=fopen(cline_filename, "w");
- if ( !TALLY ) perror(*argv), exit(0);
- fclose(TALLY);
- }
- }
- return 0;
-}
-
-
-#endif /* #ifndef MAIN */
diff --git a/modules/pam_tally/pam_tally_app.c b/modules/pam_tally/pam_tally_app.c
deleted file mode 100644
index ad288549..00000000
--- a/modules/pam_tally/pam_tally_app.c
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- # This seemed like such a good idea at the time. :)
- */
-
-#define MAIN
-#include "pam_tally.c"
diff --git a/modules/pam_tally/tst-pam_tally b/modules/pam_tally/tst-pam_tally
deleted file mode 100755
index 15291af6..00000000
--- a/modules/pam_tally/tst-pam_tally
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-../../tests/tst-dlopen .libs/pam_tally.so
diff --git a/modules/pam_tally2/Makefile.am b/modules/pam_tally2/Makefile.am
deleted file mode 100644
index 5c887ad7..00000000
--- a/modules/pam_tally2/Makefile.am
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk <kukuk@thkukuk.de>
-# Copyright (c) 2008 Red Hat, Inc.
-#
-
-CLEANFILES = *~
-MAINTAINERCLEANFILES = $(MANS) README
-
-EXTRA_DIST = $(XMLS)
-
-if HAVE_DOC
-dist_man_MANS = pam_tally2.8
-endif
-XMLS = README.xml pam_tally2.8.xml
-dist_check_SCRIPTS = tst-pam_tally2
-TESTS = $(dist_check_SCRIPTS)
-
-securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
-
-noinst_HEADERS = tallylog.h
-
-AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
-
-pam_tally2_la_LDFLAGS = -no-undefined -avoid-version -module
-pam_tally2_la_LIBADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT)
-if HAVE_VERSIONING
- pam_tally2_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
-endif
-
-pam_tally2_LDADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT)
-
-securelib_LTLIBRARIES = pam_tally2.la
-sbin_PROGRAMS = pam_tally2
-
-pam_tally2_la_SOURCES = pam_tally2.c
-pam_tally2_SOURCES = pam_tally2_app.c
-
-if ENABLE_REGENERATE_MAN
-dist_noinst_DATA = README
--include $(top_srcdir)/Make.xml.rules
-endif
diff --git a/modules/pam_tally2/Makefile.in b/modules/pam_tally2/Makefile.in
deleted file mode 100644
index 4484af86..00000000
--- a/modules/pam_tally2/Makefile.in
+++ /dev/null
@@ -1,1227 +0,0 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-#
-# Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk <kukuk@thkukuk.de>
-# Copyright (c) 2008 Red Hat, Inc.
-#
-
-
-
-
-VPATH = @srcdir@
-am__is_gnu_make = { \
- if test -z '$(MAKELEVEL)'; then \
- false; \
- elif test -n '$(MAKE_HOST)'; then \
- true; \
- elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
- true; \
- else \
- false; \
- fi; \
-}
-am__make_running_with_option = \
- case $${target_option-} in \
- ?) ;; \
- *) echo "am__make_running_with_option: internal error: invalid" \
- "target option '$${target_option-}' specified" >&2; \
- exit 1;; \
- esac; \
- has_opt=no; \
- sane_makeflags=$$MAKEFLAGS; \
- if $(am__is_gnu_make); then \
- sane_makeflags=$$MFLAGS; \
- else \
- case $$MAKEFLAGS in \
- *\\[\ \ ]*) \
- bs=\\; \
- sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
- | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
- esac; \
- fi; \
- skip_next=no; \
- strip_trailopt () \
- { \
- flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
- }; \
- for flg in $$sane_makeflags; do \
- test $$skip_next = yes && { skip_next=no; continue; }; \
- case $$flg in \
- *=*|--*) continue;; \
- -*I) strip_trailopt 'I'; skip_next=yes;; \
- -*I?*) strip_trailopt 'I';; \
- -*O) strip_trailopt 'O'; skip_next=yes;; \
- -*O?*) strip_trailopt 'O';; \
- -*l) strip_trailopt 'l'; skip_next=yes;; \
- -*l?*) strip_trailopt 'l';; \
- -[dEDm]) skip_next=yes;; \
- -[JT]) skip_next=yes;; \
- esac; \
- case $$flg in \
- *$$target_option*) has_opt=yes; break;; \
- esac; \
- done; \
- test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
-sbin_PROGRAMS = pam_tally2$(EXEEXT)
-subdir = modules/pam_tally2
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
- $(top_srcdir)/m4/jh_path_xml_catalog.m4 \
- $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
- $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
- $(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-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)
-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)"
-PROGRAMS = $(sbin_PROGRAMS)
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
- test -z "$$files" \
- || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
- || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
- $(am__cd) "$$dir" && rm -f $$files; }; \
- }
-LTLIBRARIES = $(securelib_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-pam_tally2_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
- $(am__DEPENDENCIES_1)
-am_pam_tally2_la_OBJECTS = pam_tally2.lo
-pam_tally2_la_OBJECTS = $(am_pam_tally2_la_OBJECTS)
-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 =
-pam_tally2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(pam_tally2_la_LDFLAGS) $(LDFLAGS) -o $@
-am_pam_tally2_OBJECTS = pam_tally2_app.$(OBJEXT)
-pam_tally2_OBJECTS = $(am_pam_tally2_OBJECTS)
-pam_tally2_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
- $(am__DEPENDENCIES_1)
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo " GEN " $@;
-am__v_GEN_1 =
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-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_tally2.Plo \
- ./$(DEPDIR)/pam_tally2_app.Po
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo " CC " $@;
-am__v_CC_1 =
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-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_tally2_la_SOURCES) $(pam_tally2_SOURCES)
-DIST_SOURCES = $(pam_tally2_la_SOURCES) $(pam_tally2_SOURCES)
-am__can_run_installinfo = \
- case $$AM_UPDATE_INFO_DIR in \
- n|no|NO) false;; \
- *) (install-info --version) >/dev/null 2>&1;; \
- esac
-man8dir = $(mandir)/man8
-NROFF = nroff
-MANS = $(dist_man_MANS)
-am__dist_noinst_DATA_DIST = README
-DATA = $(dist_noinst_DATA)
-HEADERS = $(noinst_HEADERS)
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates. Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
- BEGIN { nonempty = 0; } \
- { items[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique. This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
- list='$(am__tagged_files)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-am__tty_colors_dummy = \
- mgn= red= grn= lgn= blu= brg= std=; \
- am__color_tests=no
-am__tty_colors = { \
- $(am__tty_colors_dummy); \
- if test "X$(AM_COLOR_TESTS)" = Xno; then \
- am__color_tests=no; \
- elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
- am__color_tests=yes; \
- elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
- am__color_tests=yes; \
- fi; \
- if test $$am__color_tests = yes; then \
- red=''; \
- grn=''; \
- lgn=''; \
- blu=''; \
- mgn=''; \
- brg=''; \
- std=''; \
- fi; \
-}
-am__recheck_rx = ^[ ]*:recheck:[ ]*
-am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
-am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
-# A command that, given a newline-separated list of test names on the
-# standard input, print the name of the tests that are to be re-run
-# upon "make recheck".
-am__list_recheck_tests = $(AWK) '{ \
- recheck = 1; \
- while ((rc = (getline line < ($$0 ".trs"))) != 0) \
- { \
- if (rc < 0) \
- { \
- if ((getline line2 < ($$0 ".log")) < 0) \
- recheck = 0; \
- break; \
- } \
- else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
- { \
- recheck = 0; \
- break; \
- } \
- else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
- { \
- break; \
- } \
- }; \
- if (recheck) \
- print $$0; \
- close ($$0 ".trs"); \
- close ($$0 ".log"); \
-}'
-# A command that, given a newline-separated list of test names on the
-# standard input, create the global log from their .trs and .log files.
-am__create_global_log = $(AWK) ' \
-function fatal(msg) \
-{ \
- print "fatal: making $@: " msg | "cat >&2"; \
- exit 1; \
-} \
-function rst_section(header) \
-{ \
- print header; \
- len = length(header); \
- for (i = 1; i <= len; i = i + 1) \
- printf "="; \
- printf "\n\n"; \
-} \
-{ \
- copy_in_global_log = 1; \
- global_test_result = "RUN"; \
- while ((rc = (getline line < ($$0 ".trs"))) != 0) \
- { \
- if (rc < 0) \
- fatal("failed to read from " $$0 ".trs"); \
- if (line ~ /$(am__global_test_result_rx)/) \
- { \
- sub("$(am__global_test_result_rx)", "", line); \
- sub("[ ]*$$", "", line); \
- global_test_result = line; \
- } \
- else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
- copy_in_global_log = 0; \
- }; \
- if (copy_in_global_log) \
- { \
- rst_section(global_test_result ": " $$0); \
- while ((rc = (getline line < ($$0 ".log"))) != 0) \
- { \
- if (rc < 0) \
- fatal("failed to read from " $$0 ".log"); \
- print line; \
- }; \
- printf "\n"; \
- }; \
- close ($$0 ".trs"); \
- close ($$0 ".log"); \
-}'
-# Restructured Text title.
-am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
-# Solaris 10 'make', and several other traditional 'make' implementations,
-# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
-# by disabling -e (using the XSI extension "set +e") if it's set.
-am__sh_e_setup = case $$- in *e*) set +e;; esac
-# Default flags passed to test drivers.
-am__common_driver_flags = \
- --color-tests "$$am__color_tests" \
- --enable-hard-errors "$$am__enable_hard_errors" \
- --expect-failure "$$am__expect_failure"
-# To be inserted before the command running the test. Creates the
-# directory for the log if needed. Stores in $dir the directory
-# containing $f, in $tst the test, in $log the log. Executes the
-# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
-# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
-# will run the test scripts (or their associated LOG_COMPILER, if
-# thy have one).
-am__check_pre = \
-$(am__sh_e_setup); \
-$(am__vpath_adj_setup) $(am__vpath_adj) \
-$(am__tty_colors); \
-srcdir=$(srcdir); export srcdir; \
-case "$@" in \
- */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
- *) am__odir=.;; \
-esac; \
-test "x$$am__odir" = x"." || test -d "$$am__odir" \
- || $(MKDIR_P) "$$am__odir" || exit $$?; \
-if test -f "./$$f"; then dir=./; \
-elif test -f "$$f"; then dir=; \
-else dir="$(srcdir)/"; fi; \
-tst=$$dir$$f; log='$@'; \
-if test -n '$(DISABLE_HARD_ERRORS)'; then \
- am__enable_hard_errors=no; \
-else \
- am__enable_hard_errors=yes; \
-fi; \
-case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
- am__expect_failure=yes;; \
- *) \
- am__expect_failure=no;; \
-esac; \
-$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
-# A shell command to get the names of the tests scripts with any registered
-# extension removed (i.e., equivalently, the names of the test logs, with
-# the '.log' extension removed). The result is saved in the shell variable
-# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
-# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
-# since that might cause problem with VPATH rewrites for suffix-less tests.
-# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
-am__set_TESTS_bases = \
- bases='$(TEST_LOGS)'; \
- bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
- bases=`echo $$bases`
-RECHECK_LOGS = $(TEST_LOGS)
-AM_RECURSIVE_TARGETS = check recheck
-TEST_SUITE_LOG = test-suite.log
-TEST_EXTENSIONS = @EXEEXT@ .test
-LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
-LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
-am__set_b = \
- case '$@' in \
- */*) \
- case '$*' in \
- */*) b='$*';; \
- *) b=`echo '$@' | sed 's/\.log$$//'`; \
- esac;; \
- *) \
- b='$*';; \
- esac
-am__test_logs1 = $(TESTS:=.log)
-am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
-TEST_LOGS = $(am__test_logs2:.test.log=.log)
-TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
-TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
- $(TEST_LOG_FLAGS)
-am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
- $(top_srcdir)/build-aux/depcomp \
- $(top_srcdir)/build-aux/test-driver
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BROWSER = @BROWSER@
-BUILD_CFLAGS = @BUILD_CFLAGS@
-BUILD_CPPFLAGS = @BUILD_CPPFLAGS@
-BUILD_LDFLAGS = @BUILD_LDFLAGS@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CC_FOR_BUILD = @CC_FOR_BUILD@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-ECONF_CFLAGS = @ECONF_CFLAGS@
-ECONF_LIBS = @ECONF_LIBS@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-FO2PDF = @FO2PDF@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTLLIBS = @INTLLIBS@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
-LIBCRYPT = @LIBCRYPT@
-LIBDB = @LIBDB@
-LIBDL = @LIBDL@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
-LIBOBJS = @LIBOBJS@
-LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@
-LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@
-LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@
-LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@
-LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@
-LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@
-LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@
-LIBS = @LIBS@
-LIBSELINUX = @LIBSELINUX@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
-LTLIBOBJS = @LTLIBOBJS@
-LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-NIS_CFLAGS = @NIS_CFLAGS@
-NIS_LIBS = @NIS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NSL_CFLAGS = @NSL_CFLAGS@
-NSL_LIBS = @NSL_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-POSUB = @POSUB@
-RANLIB = @RANLIB@
-SCONFIGDIR = @SCONFIGDIR@
-SECUREDIR = @SECUREDIR@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRINGPARAM_VENDORDIR = @STRINGPARAM_VENDORDIR@
-STRIP = @STRIP@
-TIRPC_CFLAGS = @TIRPC_CFLAGS@
-TIRPC_LIBS = @TIRPC_LIBS@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMLCATALOG = @XMLCATALOG@
-XMLLINT = @XMLLINT@
-XML_CATALOG_FILE = @XML_CATALOG_FILE@
-XSLTPROC = @XSLTPROC@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
-pam_xauth_path = @pam_xauth_path@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-CLEANFILES = *~
-MAINTAINERCLEANFILES = $(MANS) README
-EXTRA_DIST = $(XMLS)
-@HAVE_DOC_TRUE@dist_man_MANS = pam_tally2.8
-XMLS = README.xml pam_tally2.8.xml
-dist_check_SCRIPTS = tst-pam_tally2
-TESTS = $(dist_check_SCRIPTS)
-securelibdir = $(SECUREDIR)
-secureconfdir = $(SCONFIGDIR)
-noinst_HEADERS = tallylog.h
-AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \
- $(WARN_CFLAGS)
-
-pam_tally2_la_LDFLAGS = -no-undefined -avoid-version -module \
- $(am__append_1)
-pam_tally2_la_LIBADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT)
-pam_tally2_LDADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT)
-securelib_LTLIBRARIES = pam_tally2.la
-pam_tally2_la_SOURCES = pam_tally2.c
-pam_tally2_SOURCES = pam_tally2_app.c
-@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_tally2/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu modules/pam_tally2/Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
- @$(NORMAL_INSTALL)
- @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
- fi; \
- for p in $$list; do echo "$$p $$p"; done | \
- sed 's/$(EXEEXT)$$//' | \
- while read p p1; do if test -f $$p \
- || test -f $$p1 \
- ; then echo "$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n;h' \
- -e 's|.*|.|' \
- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
- sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) files[d] = files[d] " " $$1; \
- else { print "f", $$3 "/" $$4, $$1; } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
- } \
- ; done
-
-uninstall-sbinPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
- -e 's/$$/$(EXEEXT)/' \
- `; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(sbindir)" && rm -f $$files
-
-clean-sbinPROGRAMS:
- @list='$(sbin_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=; \
- list2=; for p in $$list; do \
- if test -f $$p; then \
- list2="$$list2 $$p"; \
- else :; fi; \
- done; \
- test -z "$$list2" || { \
- echo " $(MKDIR_P) '$(DESTDIR)$(securelibdir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(securelibdir)" || exit 1; \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \
- }
-
-uninstall-securelibLTLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \
- for p in $$list; do \
- $(am__strip_dir) \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \
- done
-
-clean-securelibLTLIBRARIES:
- -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES)
- @list='$(securelib_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-
-pam_tally2.la: $(pam_tally2_la_OBJECTS) $(pam_tally2_la_DEPENDENCIES) $(EXTRA_pam_tally2_la_DEPENDENCIES)
- $(AM_V_CCLD)$(pam_tally2_la_LINK) -rpath $(securelibdir) $(pam_tally2_la_OBJECTS) $(pam_tally2_la_LIBADD) $(LIBS)
-
-pam_tally2$(EXEEXT): $(pam_tally2_OBJECTS) $(pam_tally2_DEPENDENCIES) $(EXTRA_pam_tally2_DEPENDENCIES)
- @rm -f pam_tally2$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(pam_tally2_OBJECTS) $(pam_tally2_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tally2.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tally2_app.Po@am__quote@ # am--include-marker
-
-$(am__depfiles_remade):
- @$(MKDIR_P) $(@D)
- @echo '# dummy' >$@-t && $(am__mv) $@-t $@
-
-am--depfiles: $(am__depfiles_remade)
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-man8: $(dist_man_MANS)
- @$(NORMAL_INSTALL)
- @list1=''; \
- list2='$(dist_man_MANS)'; \
- test -n "$(man8dir)" \
- && test -n "`echo $$list1$$list2`" \
- || exit 0; \
- echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(man8dir)" || 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'; \
- 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' \
- -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 $$?; \
- 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 $$?; }; \
- done; }
-
-uninstall-man8:
- @$(NORMAL_UNINSTALL)
- @list=''; test -n "$(man8dir)" || 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 '/\.8[a-z]*$$/p'; \
- } | 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)
-
-ID: $(am__tagged_files)
- $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- set x; \
- here=`pwd`; \
- $(am__define_uniq_tagged_files); \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
- $(am__define_uniq_tagged_files); \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
- list='$(am__tagged_files)'; \
- case "$(srcdir)" in \
- [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
- *) sdir=$(subdir)/$(srcdir) ;; \
- esac; \
- for i in $$list; do \
- if test -f "$$i"; then \
- echo "$(subdir)/$$i"; \
- else \
- echo "$$sdir/$$i"; \
- fi; \
- done >> $(top_builddir)/cscope.files
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-# Recover from deleted '.trs' file; this should ensure that
-# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
-# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
-# to avoid problems with "make -n".
-.log.trs:
- rm -f $< $@
- $(MAKE) $(AM_MAKEFLAGS) $<
-
-# Leading 'am--fnord' is there to ensure the list of targets does not
-# expand to empty, as could happen e.g. with make check TESTS=''.
-am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
-am--force-recheck:
- @:
-
-$(TEST_SUITE_LOG): $(TEST_LOGS)
- @$(am__set_TESTS_bases); \
- am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
- redo_bases=`for i in $$bases; do \
- am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
- done`; \
- if test -n "$$redo_bases"; then \
- redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
- redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
- if $(am__make_dryrun); then :; else \
- rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
- fi; \
- fi; \
- if test -n "$$am__remaking_logs"; then \
- echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
- "recursion detected" >&2; \
- elif test -n "$$redo_logs"; then \
- am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
- fi; \
- if $(am__make_dryrun); then :; else \
- st=0; \
- errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
- for i in $$redo_bases; do \
- test -f $$i.trs && test -r $$i.trs \
- || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
- test -f $$i.log && test -r $$i.log \
- || { echo "$$errmsg $$i.log" >&2; st=1; }; \
- done; \
- test $$st -eq 0 || exit 1; \
- fi
- @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
- ws='[ ]'; \
- results=`for b in $$bases; do echo $$b.trs; done`; \
- test -n "$$results" || results=/dev/null; \
- all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
- pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
- fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
- skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
- xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
- xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
- error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
- if test `expr $$fail + $$xpass + $$error` -eq 0; then \
- success=true; \
- else \
- success=false; \
- fi; \
- br='==================='; br=$$br$$br$$br$$br; \
- result_count () \
- { \
- if test x"$$1" = x"--maybe-color"; then \
- maybe_colorize=yes; \
- elif test x"$$1" = x"--no-color"; then \
- maybe_colorize=no; \
- else \
- echo "$@: invalid 'result_count' usage" >&2; exit 4; \
- fi; \
- shift; \
- desc=$$1 count=$$2; \
- if test $$maybe_colorize = yes && test $$count -gt 0; then \
- color_start=$$3 color_end=$$std; \
- else \
- color_start= color_end=; \
- fi; \
- echo "$${color_start}# $$desc $$count$${color_end}"; \
- }; \
- create_testsuite_report () \
- { \
- result_count $$1 "TOTAL:" $$all "$$brg"; \
- result_count $$1 "PASS: " $$pass "$$grn"; \
- result_count $$1 "SKIP: " $$skip "$$blu"; \
- result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
- result_count $$1 "FAIL: " $$fail "$$red"; \
- result_count $$1 "XPASS:" $$xpass "$$red"; \
- result_count $$1 "ERROR:" $$error "$$mgn"; \
- }; \
- { \
- echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
- $(am__rst_title); \
- create_testsuite_report --no-color; \
- echo; \
- echo ".. contents:: :depth: 2"; \
- echo; \
- for b in $$bases; do echo $$b; done \
- | $(am__create_global_log); \
- } >$(TEST_SUITE_LOG).tmp || exit 1; \
- mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
- if $$success; then \
- col="$$grn"; \
- else \
- col="$$red"; \
- test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
- fi; \
- echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
- echo "$${col}$$br$${std}"; \
- create_testsuite_report --maybe-color; \
- echo "$$col$$br$$std"; \
- if $$success; then :; else \
- echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
- if test -n "$(PACKAGE_BUGREPORT)"; then \
- echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
- fi; \
- echo "$$col$$br$$std"; \
- fi; \
- $$success || exit 1
-
-check-TESTS: $(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)
- @set +e; $(am__set_TESTS_bases); \
- log_list=`for i in $$bases; do echo $$i.log; done`; \
- trs_list=`for i in $$bases; do echo $$i.trs; done`; \
- 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)
- @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 \
- | $(am__list_recheck_tests)` || exit 1; \
- log_list=`for i in $$bases; do echo $$i.log; done`; \
- log_list=`echo $$log_list`; \
- $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
- am__force_recheck=am--force-recheck \
- TEST_LOGS="$$log_list"; \
- exit $$?
-tst-pam_tally2.log: tst-pam_tally2
- @p='tst-pam_tally2'; \
- b='tst-pam_tally2'; \
- $(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); \
- $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
-@am__EXEEXT_TRUE@.test$(EXEEXT).log:
-@am__EXEEXT_TRUE@ @p='$<'; \
-@am__EXEEXT_TRUE@ $(am__set_b); \
-@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
-@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
-@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
-@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
-
-distdir: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) distdir-am
-
-distdir-am: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(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 \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- if test -z '$(STRIP)'; then \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- install; \
- else \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
- fi
-mostlyclean-generic:
- -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
- -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
- -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \
- clean-securelibLTLIBRARIES mostlyclean-am
-
-distclean: distclean-am
- -rm -f ./$(DEPDIR)/pam_tally2.Plo
- -rm -f ./$(DEPDIR)/pam_tally2_app.Po
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man install-securelibLTLIBRARIES
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-sbinPROGRAMS
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man: install-man8
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f ./$(DEPDIR)/pam_tally2.Plo
- -rm -f ./$(DEPDIR)/pam_tally2_app.Po
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-man uninstall-sbinPROGRAMS \
- uninstall-securelibLTLIBRARIES
-
-uninstall-man: 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 \
- 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-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 \
- uninstall-man8 uninstall-sbinPROGRAMS \
- uninstall-securelibLTLIBRARIES
-
-.PRECIOUS: Makefile
-
-@ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/modules/pam_tally2/README b/modules/pam_tally2/README
deleted file mode 100644
index a3fd30e7..00000000
--- a/modules/pam_tally2/README
+++ /dev/null
@@ -1,156 +0,0 @@
-pam_tally2 — The login counter (tallying) module
-
-â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”
-
-DESCRIPTION
-
-This module maintains a count of attempted accesses, can reset count on
-success, can deny access if too many attempts fail.
-
-pam_tally2 comes in two parts: pam_tally2.so and pam_tally2. The former is the
-PAM module and the latter, a stand-alone program. pam_tally2 is an (optional)
-application which can be used to interrogate and manipulate the counter file.
-It can display user counts, set individual counts, or clear all counts. Setting
-artificially high counts may be useful for blocking users without changing
-their passwords. For example, one might find it useful to clear all counts
-every midnight from a cron job.
-
-Normally, failed attempts to access root will not 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 su or at the machine console (not telnet/
-rsh, etc), this is safe.
-
-OPTIONS
-
-GLOBAL OPTIONS
-
- This can be used for auth and account module types.
-
- onerr=[fail|succeed]
-
- If something weird happens (like unable to open the file), return with
- PAM_SUCCESS if onerr=succeed is given, else with the corresponding PAM
- error code.
-
- file=/path/to/counter
-
- File where to keep counts. Default is /var/log/tallylog.
-
- audit
-
- Will log the user name into the system log if the user is not found.
-
- silent
-
- Don't print informative messages. The messages printed without the
- silent option leak presence of accounts on the system because they are
- not printed for non-existing accounts.
-
- no_log_info
-
- Don't log informative messages via syslog(3).
-
- debug
-
- Always log tally count when it is incremented as a debug level message
- to the system log.
-
-AUTH OPTIONS
-
- Authentication phase first increments attempted login counter and checks if
- user should be denied access. If the user is authenticated and the login
- process continues on call to pam_setcred(3) it resets the attempts counter.
-
- deny=n
-
- Deny access if tally for this user exceeds n.
-
- lock_time=n
-
- Always deny for n seconds after failed attempt.
-
- unlock_time=n
-
- Allow access after n seconds after failed attempt. If this option is
- used the user will be locked out for the specified amount of time after
- he exceeded his maximum allowed attempts. Otherwise the account is
- locked until the lock is removed by a manual intervention of the system
- administrator.
-
- magic_root
-
- If the module is invoked by a user with uid=0 the counter is not
- incremented. The sysadmin should use this for user launched services,
- like su, otherwise this argument should be omitted.
-
- even_deny_root
-
- Root account can become unavailable.
-
- root_unlock_time=n
-
- This option implies even_deny_root option. Allow access after n seconds
- to root account after failed attempt. If this option is used the root
- user will be locked out for the specified amount of time after he
- exceeded his maximum allowed attempts.
-
- serialize
-
- Serialize access to the tally file using locks. This option might be
- used only for non-multithreaded services because it depends on the
- fcntl locking of the tally file. Also it is a good idea to use this
- option only in such configurations where the time between auth phase
- and account or setcred phase is not dependent on the authenticating
- client. Otherwise the authenticating client will be able to prevent
- simultaneous authentications by the same user by simply artificially
- prolonging the time the file record lock is held.
-
-ACCOUNT OPTIONS
-
- Account phase resets attempts counter if the user is not magic root. This
- phase can be used optionally for services which don't call pam_setcred(3)
- correctly or if the reset should be done regardless of the failure of the
- account phase of other modules.
-
- magic_root
-
- If the module is invoked by a user with uid=0 the counter is not
- changed. The sysadmin should use this for user launched services, like
- su, otherwise this argument should be omitted.
-
-NOTES
-
-pam_tally2 is not compatible with the old pam_tally faillog file format. This
-is caused by requirement of compatibility of the tallylog file format between
-32bit and 64bit architectures on multiarch systems.
-
-There is no setuid wrapper for access to the data file such as when the
-pam_tally2.so module is called from xscreensaver. As this would make it
-impossible to share PAM configuration with such services the following
-workaround is used: If the data file cannot be opened because of insufficient
-permissions (EACCES) the module returns PAM_IGNORE.
-
-EXAMPLES
-
-Add the following line to /etc/pam.d/login to lock the account after 4 failed
-logins. Root account will be locked as well. The accounts will be automatically
-unlocked after 20 minutes. The module does not have to be called in the account
-phase because the login calls pam_setcred(3) correctly.
-
-auth required pam_securetty.so
-auth required pam_tally2.so deny=4 even_deny_root unlock_time=1200
-auth required pam_env.so
-auth required pam_unix.so
-auth required pam_nologin.so
-account required pam_unix.so
-password required pam_unix.so
-session required pam_limits.so
-session required pam_unix.so
-session required pam_lastlog.so nowtmp
-session optional pam_mail.so standard
-
-
-AUTHOR
-
-pam_tally2 was written by Tim Baverstock and Tomas Mraz.
-
diff --git a/modules/pam_tally2/README.xml b/modules/pam_tally2/README.xml
deleted file mode 100644
index aa470570..00000000
--- a/modules/pam_tally2/README.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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_tally2.8.xml">
--->
-]>
-
-<article>
-
- <articleinfo>
-
- <title>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally2.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_tally2-name"]/*)'/>
- </title>
-
- </articleinfo>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-description"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-options"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-notes"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-examples"]/*)'/>
- </section>
-
- <section>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="pam_tally2.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally2-author"]/*)'/>
- </section>
-
-</article>
diff --git a/modules/pam_tally2/pam_tally2.8 b/modules/pam_tally2/pam_tally2.8
deleted file mode 100644
index 2673682e..00000000
--- a/modules/pam_tally2/pam_tally2.8
+++ /dev/null
@@ -1,244 +0,0 @@
-'\" t
-.\" Title: pam_tally2
-.\" Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 06/08/2020
-.\" Manual: Linux-PAM Manual
-.\" Source: Linux-PAM Manual
-.\" Language: English
-.\"
-.TH "PAM_TALLY2" "8" "06/08/2020" "Linux-PAM Manual" "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_tally2 \- The login counter (tallying) module
-.SH "SYNOPSIS"
-.HP \w'\fBpam_tally2\&.so\fR\ 'u
-\fBpam_tally2\&.so\fR [file=\fI/path/to/counter\fR] [onerr=[\fIfail\fR|\fIsucceed\fR]] [magic_root] [even_deny_root] [deny=\fIn\fR] [lock_time=\fIn\fR] [unlock_time=\fIn\fR] [root_unlock_time=\fIn\fR] [serialize] [audit] [silent] [no_log_info] [debug]
-.HP \w'\fBpam_tally2\fR\ 'u
-\fBpam_tally2\fR [\-\-file\ \fI/path/to/counter\fR] [\-\-user\ \fIusername\fR] [\-\-reset[=\fIn\fR]] [\-\-quiet]
-.SH "DESCRIPTION"
-.PP
-This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail\&.
-.PP
-pam_tally2 comes in two parts:
-\fBpam_tally2\&.so\fR
-and
-\fBpam_tally2\fR\&. The former is the PAM module and the latter, a stand\-alone program\&.
-\fBpam_tally2\fR
-is an (optional) application which can be used to interrogate and manipulate the counter file\&. It can display user counts, set individual counts, or clear all counts\&. Setting artificially high counts may be useful for blocking users without changing their passwords\&. For example, one might find it useful to clear all counts every midnight from a cron job\&.
-.PP
-Normally, failed attempts to access
-\fIroot\fR
-will
-\fBnot\fR
-cause the root account to become blocked, to prevent denial\-of\-service: if your users aren\*(Aqt given shell accounts and root may only login via
-\fBsu\fR
-or at the machine console (not telnet/rsh, etc), this is safe\&.
-.SH "OPTIONS"
-.PP
-GLOBAL OPTIONS
-.RS 4
-This can be used for
-\fIauth\fR
-and
-\fIaccount\fR
-module types\&.
-.PP
-\fBonerr=[\fR\fB\fIfail\fR\fR\fB|\fR\fB\fIsucceed\fR\fR\fB]\fR
-.RS 4
-If something weird happens (like unable to open the file), return with
-\fBPAM_SUCCESS\fR
-if
-\fBonerr=\fR\fB\fIsucceed\fR\fR
-is given, else with the corresponding PAM error code\&.
-.RE
-.PP
-\fBfile=\fR\fB\fI/path/to/counter\fR\fR
-.RS 4
-File where to keep counts\&. Default is
-/var/log/tallylog\&.
-.RE
-.PP
-\fBaudit\fR
-.RS 4
-Will log the user name into the system log if the user is not found\&.
-.RE
-.PP
-\fBsilent\fR
-.RS 4
-Don\*(Aqt print informative messages\&. The messages printed without the
-\fIsilent\fR
-option leak presence of accounts on the system because they are not printed for non\-existing accounts\&.
-.RE
-.PP
-\fBno_log_info\fR
-.RS 4
-Don\*(Aqt log informative messages via
-\fBsyslog\fR(3)\&.
-.RE
-.PP
-\fBdebug\fR
-.RS 4
-Always log tally count when it is incremented as a debug level message to the system log\&.
-.RE
-.RE
-.PP
-AUTH OPTIONS
-.RS 4
-Authentication phase first increments attempted login counter and checks if user should be denied access\&. If the user is authenticated and the login process continues on call to
-\fBpam_setcred\fR(3)
-it resets the attempts counter\&.
-.PP
-\fBdeny=\fR\fB\fIn\fR\fR
-.RS 4
-Deny access if tally for this user exceeds
-\fIn\fR\&.
-.RE
-.PP
-\fBlock_time=\fR\fB\fIn\fR\fR
-.RS 4
-Always deny for
-\fIn\fR
-seconds after failed attempt\&.
-.RE
-.PP
-\fBunlock_time=\fR\fB\fIn\fR\fR
-.RS 4
-Allow access after
-\fIn\fR
-seconds after failed attempt\&. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts\&. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator\&.
-.RE
-.PP
-\fBmagic_root\fR
-.RS 4
-If the module is invoked by a user with uid=0 the counter is not incremented\&. The sysadmin should use this for user launched services, like
-\fBsu\fR, otherwise this argument should be omitted\&.
-.RE
-.PP
-\fBeven_deny_root\fR
-.RS 4
-Root account can become unavailable\&.
-.RE
-.PP
-\fBroot_unlock_time=\fR\fB\fIn\fR\fR
-.RS 4
-This option implies
-\fBeven_deny_root\fR
-option\&. Allow access after
-\fIn\fR
-seconds to root account after failed attempt\&. If this option is used the root user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts\&.
-.RE
-.PP
-\fBserialize\fR
-.RS 4
-Serialize access to the tally file using locks\&. This option might be used only for non\-multithreaded services because it depends on the fcntl locking of the tally file\&. Also it is a good idea to use this option only in such configurations where the time between auth phase and account or setcred phase is not dependent on the authenticating client\&. Otherwise the authenticating client will be able to prevent simultaneous authentications by the same user by simply artificially prolonging the time the file record lock is held\&.
-.RE
-.RE
-.PP
-ACCOUNT OPTIONS
-.RS 4
-Account phase resets attempts counter if the user is
-\fBnot\fR
-magic root\&. This phase can be used optionally for services which don\*(Aqt call
-\fBpam_setcred\fR(3)
-correctly or if the reset should be done regardless of the failure of the account phase of other modules\&.
-.PP
-\fBmagic_root\fR
-.RS 4
-If the module is invoked by a user with uid=0 the counter is not changed\&. The sysadmin should use this for user launched services, like
-\fBsu\fR, otherwise this argument should be omitted\&.
-.RE
-.RE
-.SH "MODULE TYPES PROVIDED"
-.PP
-The
-\fBauth\fR
-and
-\fBaccount\fR
-module types are provided\&.
-.SH "RETURN VALUES"
-.PP
-PAM_AUTH_ERR
-.RS 4
-A invalid option was given, the module was not able to retrieve the user name, no valid counter file was found, or too many failed logins\&.
-.RE
-.PP
-PAM_SUCCESS
-.RS 4
-Everything was successful\&.
-.RE
-.PP
-PAM_USER_UNKNOWN
-.RS 4
-User not known\&.
-.RE
-.SH "NOTES"
-.PP
-pam_tally2 is not compatible with the old pam_tally faillog file format\&. This is caused by requirement of compatibility of the tallylog file format between 32bit and 64bit architectures on multiarch systems\&.
-.PP
-There is no setuid wrapper for access to the data file such as when the
-\fBpam_tally2\&.so\fR
-module is called from xscreensaver\&. As this would make it impossible to share PAM configuration with such services the following workaround is used: If the data file cannot be opened because of insufficient permissions (\fBEACCES\fR) the module returns
-\fBPAM_IGNORE\fR\&.
-.SH "EXAMPLES"
-.PP
-Add the following line to
-/etc/pam\&.d/login
-to lock the account after 4 failed logins\&. Root account will be locked as well\&. The accounts will be automatically unlocked after 20 minutes\&. The module does not have to be called in the account phase because the
-\fBlogin\fR
-calls
-\fBpam_setcred\fR(3)
-correctly\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-auth required pam_securetty\&.so
-auth required pam_tally2\&.so deny=4 even_deny_root unlock_time=1200
-auth required pam_env\&.so
-auth required pam_unix\&.so
-auth required pam_nologin\&.so
-account required pam_unix\&.so
-password required pam_unix\&.so
-session required pam_limits\&.so
-session required pam_unix\&.so
-session required pam_lastlog\&.so nowtmp
-session optional pam_mail\&.so standard
-
-.fi
-.if n \{\
-.RE
-.\}
-.SH "FILES"
-.PP
-/var/log/tallylog
-.RS 4
-failure count logging file
-.RE
-.SH "SEE ALSO"
-.PP
-\fBpam.conf\fR(5),
-\fBpam.d\fR(5),
-\fBpam\fR(8)
-.SH "AUTHOR"
-.PP
-pam_tally2 was written by Tim Baverstock and Tomas Mraz\&.
diff --git a/modules/pam_tally2/pam_tally2.8.xml b/modules/pam_tally2/pam_tally2.8.xml
deleted file mode 100644
index d058cf91..00000000
--- a/modules/pam_tally2/pam_tally2.8.xml
+++ /dev/null
@@ -1,450 +0,0 @@
-<?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_tally2">
-
- <refmeta>
- <refentrytitle>pam_tally2</refentrytitle>
- <manvolnum>8</manvolnum>
- <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
- </refmeta>
-
- <refnamediv id="pam_tally2-name">
- <refname>pam_tally2</refname>
- <refpurpose>The login counter (tallying) module</refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis id="pam_tally2-cmdsynopsis1">
- <command>pam_tally2.so</command>
- <arg choice="opt">
- file=<replaceable>/path/to/counter</replaceable>
- </arg>
- <arg choice="opt">
- onerr=[<replaceable>fail</replaceable>|<replaceable>succeed</replaceable>]
- </arg>
- <arg choice="opt">
- magic_root
- </arg>
- <arg choice="opt">
- even_deny_root
- </arg>
- <arg choice="opt">
- deny=<replaceable>n</replaceable>
- </arg>
- <arg choice="opt">
- lock_time=<replaceable>n</replaceable>
- </arg>
- <arg choice="opt">
- unlock_time=<replaceable>n</replaceable>
- </arg>
- <arg choice="opt">
- root_unlock_time=<replaceable>n</replaceable>
- </arg>
- <arg choice="opt">
- serialize
- </arg>
- <arg choice="opt">
- audit
- </arg>
- <arg choice="opt">
- silent
- </arg>
- <arg choice="opt">
- no_log_info
- </arg>
- <arg choice="opt">
- debug
- </arg>
- </cmdsynopsis>
- <cmdsynopsis id="pam_tally2-cmdsynopsis2">
- <command>pam_tally2</command>
- <arg choice="opt">
- --file <replaceable>/path/to/counter</replaceable>
- </arg>
- <arg choice="opt">
- --user <replaceable>username</replaceable>
- </arg>
- <arg choice="opt">
- --reset[=<replaceable>n</replaceable>]
- </arg>
- <arg choice="opt">
- --quiet
- </arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1 id="pam_tally2-description">
-
- <title>DESCRIPTION</title>
-
- <para>
- This module maintains a count of attempted accesses, can
- reset count on success, can deny access if too many attempts fail.
- </para>
- <para>
- pam_tally2 comes in two parts:
- <emphasis remap='B'>pam_tally2.so</emphasis> and
- <command>pam_tally2</command>. The former is the PAM module and
- the latter, a stand-alone program. <command>pam_tally2</command>
- is an (optional) application which can be used to interrogate and
- manipulate the counter file. It can display user counts, set
- individual counts, or clear all counts. Setting artificially high
- counts may be useful for blocking users without changing their
- passwords. For example, one might find it useful to clear all counts
- every midnight from a cron job.
- </para>
- <para>
- Normally, failed attempts to access <emphasis>root</emphasis> will
- <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_tally2-options">
-
- <title>OPTIONS</title>
- <variablelist>
- <varlistentry>
- <term>
- GLOBAL OPTIONS
- </term>
- <listitem>
- <para>
- This can be used for <emphasis>auth</emphasis> and
- <emphasis>account</emphasis> module types.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>onerr=[<replaceable>fail</replaceable>|<replaceable>succeed</replaceable>]</option>
- </term>
- <listitem>
- <para>
- If something weird happens (like unable to open the file),
- return with <errorcode>PAM_SUCCESS</errorcode> if
- <option>onerr=<replaceable>succeed</replaceable></option>
- is given, else with the corresponding PAM error code.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>file=<replaceable>/path/to/counter</replaceable></option>
- </term>
- <listitem>
- <para>
- File where to keep counts. Default is
- <filename>/var/log/tallylog</filename>.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>audit</option>
- </term>
- <listitem>
- <para>
- Will log the user name into the system log if the user is not found.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>silent</option>
- </term>
- <listitem>
- <para>
- Don't print informative messages. The messages printed without the <emphasis>silent</emphasis> option leak presence of accounts on the system because they are not printed for non-existing accounts.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>no_log_info</option>
- </term>
- <listitem>
- <para>
- Don't log informative messages via <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>debug</option>
- </term>
- <listitem>
- <para>
- Always log tally count when it is incremented as a debug level message to the system log.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- AUTH OPTIONS
- </term>
- <listitem>
- <para>
- Authentication phase first increments attempted login counter and
- checks if user should be denied access. If the user is authenticated
- and the login process continues on call to <citerefentry>
- <refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry> it resets the attempts counter.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>deny=<replaceable>n</replaceable></option>
- </term>
- <listitem>
- <para>
- Deny access if tally for this user exceeds
- <replaceable>n</replaceable>.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>lock_time=<replaceable>n</replaceable></option>
- </term>
- <listitem>
- <para>
- Always deny for <replaceable>n</replaceable> seconds
- after failed attempt.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>unlock_time=<replaceable>n</replaceable></option>
- </term>
- <listitem>
- <para>
- Allow access after <replaceable>n</replaceable> seconds
- after failed attempt. If this option is used the user will
- be locked out for the specified amount of time after he
- exceeded his maximum allowed attempts. Otherwise the
- account is locked until the lock is removed by a manual
- intervention of the system administrator.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>magic_root</option>
- </term>
- <listitem>
- <para>
- If the module is invoked by a user with uid=0 the
- counter is not incremented. The sysadmin should use this
- for user launched services, like <command>su</command>,
- otherwise this argument should be omitted.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>even_deny_root</option>
- </term>
- <listitem>
- <para>
- Root account can become unavailable.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>root_unlock_time=<replaceable>n</replaceable></option>
- </term>
- <listitem>
- <para>
- This option implies <option>even_deny_root</option> option.
- Allow access after <replaceable>n</replaceable> seconds
- to root account after failed attempt. If this option is used
- the root user will be locked out for the specified amount of
- time after he exceeded his maximum allowed attempts.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>serialize</option>
- </term>
- <listitem>
- <para>
- Serialize access to the tally file using locks. This option might
- be used only for non-multithreaded services because it depends on
- the fcntl locking of the tally file. Also it is a good idea to use
- this option only in such configurations where the time between auth
- phase and account or setcred phase is not dependent on the
- authenticating client. Otherwise the authenticating client will be
- able to prevent simultaneous authentications by the same user by
- simply artificially prolonging the time the file record lock is held.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </listitem>
- </varlistentry>
-
-
- <varlistentry>
- <term>
- ACCOUNT OPTIONS
- </term>
- <listitem>
- <para>
- Account phase resets attempts counter if the user is
- <emphasis remap='B'>not</emphasis> magic root.
- This phase can be used optionally for services which don't call
- <citerefentry>
- <refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry> correctly or if the reset should be done regardless
- of the failure of the account phase of other modules.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>magic_root</option>
- </term>
- <listitem>
- <para>
- If the module is invoked by a user with uid=0 the
- counter is not changed. The sysadmin should use this
- for user launched services, like <command>su</command>,
- otherwise this argument should be omitted.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1 id="pam_tally2-types">
- <title>MODULE TYPES PROVIDED</title>
- <para>
- The <option>auth</option> and <option>account</option>
- module types are provided.
- </para>
- </refsect1>
-
- <refsect1 id='pam_tally2-return_values'>
- <title>RETURN VALUES</title>
- <variablelist>
- <varlistentry>
- <term>PAM_AUTH_ERR</term>
- <listitem>
- <para>
- A invalid option was given, the module was not able
- to retrieve the user name, no valid counter file
- was found, or too many failed logins.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>PAM_SUCCESS</term>
- <listitem>
- <para>
- Everything was successful.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>PAM_USER_UNKNOWN</term>
- <listitem>
- <para>
- User not known.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1 id='pam_tally2-notes'>
- <title>NOTES</title>
- <para>
- pam_tally2 is not compatible with the old pam_tally faillog file format.
- This is caused by requirement of compatibility of the tallylog file
- format between 32bit and 64bit architectures on multiarch systems.
- </para>
- <para>
- There is no setuid wrapper for access to the data file such as when the
- <emphasis remap='B'>pam_tally2.so</emphasis> module is called from
- xscreensaver. As this would make it impossible to share PAM configuration
- with such services the following workaround is used: If the data file
- cannot be opened because of insufficient permissions
- (<errorcode>EACCES</errorcode>) the module returns
- <errorcode>PAM_IGNORE</errorcode>.
- </para>
- </refsect1>
-
- <refsect1 id='pam_tally2-examples'>
- <title>EXAMPLES</title>
- <para>
- Add the following line to <filename>/etc/pam.d/login</filename> to
- lock the account after 4 failed logins. Root account will be locked
- as well. The accounts will be automatically unlocked after 20 minutes.
- The module does not have to be called in the account phase because the
- <command>login</command> calls <citerefentry>
- <refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
- </citerefentry> correctly.
- </para>
- <programlisting>
-auth required pam_securetty.so
-auth required pam_tally2.so deny=4 even_deny_root unlock_time=1200
-auth required pam_env.so
-auth required pam_unix.so
-auth required pam_nologin.so
-account required pam_unix.so
-password required pam_unix.so
-session required pam_limits.so
-session required pam_unix.so
-session required pam_lastlog.so nowtmp
-session optional pam_mail.so standard
- </programlisting>
- </refsect1>
-
- <refsect1 id="pam_tally2-files">
- <title>FILES</title>
- <variablelist>
- <varlistentry>
- <term><filename>/var/log/tallylog</filename></term>
- <listitem>
- <para>failure count logging file</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1 id='pam_tally2-see_also'>
- <title>SEE ALSO</title>
- <para>
- <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 id='pam_tally2-author'>
- <title>AUTHOR</title>
- <para>
- pam_tally2 was written by Tim Baverstock and Tomas Mraz.
- </para>
- </refsect1>
-
-</refentry>
diff --git a/modules/pam_tally2/pam_tally2.c b/modules/pam_tally2/pam_tally2.c
deleted file mode 100644
index 117df699..00000000
--- a/modules/pam_tally2/pam_tally2.c
+++ /dev/null
@@ -1,1035 +0,0 @@
-/*
- * pam_tally2 module
- *
- * By Tim Baverstock <warwick@mmm.co.uk>, Multi Media Machine Ltd.
- * 5 March 1997
- *
- * Stuff stolen from pam_rootok and pam_listfile
- *
- * Changes by Tomas Mraz <tmraz@redhat.com> 5 January 2005, 26 January 2006
- * Audit option added for Tomas patch by Sebastien Tricaud <toady@gscore.org> 13 January 2005
- * Portions Copyright 2006, Red Hat, Inc.
- * Portions Copyright 1989 - 1993, Julianne Frances Haugh
- * All rights reserved.
- *
- * 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, this list of conditions and the following disclaimer.
- * 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. Neither the name of Julianne F. Haugh nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``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 JULIE HAUGH OR CONTRIBUTORS 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"
-
-#if defined(MAIN) && defined(MEMORY_DEBUG)
-# undef exit
-#endif /* defined(MAIN) && defined(MEMORY_DEBUG) */
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <pwd.h>
-#include <time.h>
-#include <stdint.h>
-#include <errno.h>
-#ifdef HAVE_LIBAUDIT
-#include <libaudit.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include <fcntl.h>
-#include <signal.h>
-#include "tallylog.h"
-
-#ifndef TRUE
-#define TRUE 1L
-#define FALSE 0L
-#endif
-
-#ifndef HAVE_FSEEKO
-#define fseeko fseek
-#endif
-
-#ifndef MAIN
-#include <security/pam_ext.h>
-#endif
-#include <security/pam_modutil.h>
-#include <security/pam_modules.h>
-#include "pam_inline.h"
-
-/*---------------------------------------------------------------------*/
-
-#define DEFAULT_LOGFILE "/var/log/tallylog"
-#define MODULE_NAME "pam_tally2"
-
-#define tally_t uint16_t
-#define TALLY_HI ((tally_t)~0L)
-
-struct tally_options {
- const char *filename;
- tally_t deny;
- long lock_time;
- long unlock_time;
- long root_unlock_time;
- unsigned int ctrl;
-};
-
-#define PHASE_UNKNOWN 0
-#define PHASE_AUTH 1
-#define PHASE_ACCOUNT 2
-#define PHASE_SESSION 3
-
-#define OPT_MAGIC_ROOT 01
-#define OPT_FAIL_ON_ERROR 02
-#define OPT_DENY_ROOT 04
-#define OPT_QUIET 040
-#define OPT_AUDIT 0100
-#define OPT_NOLOGNOTICE 0400
-#define OPT_SERIALIZE 01000
-#define OPT_DEBUG 02000
-
-#define MAX_LOCK_WAITING_TIME 10
-
-/*---------------------------------------------------------------------*/
-
-/* some syslogging */
-
-#ifdef MAIN
-#define pam_syslog tally_log
-static void
-tally_log (const pam_handle_t *pamh UNUSED, int priority UNUSED,
- const char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- fprintf(stderr, "%s: ", MODULE_NAME);
- vfprintf(stderr, fmt, args);
- fprintf(stderr,"\n");
- va_end(args);
-}
-
-#define pam_modutil_getpwnam(pamh, user) getpwnam(user)
-#endif
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support function: parse arguments --- */
-
-#ifndef MAIN
-
-static void
-log_phase_no_auth(pam_handle_t *pamh, int phase, const char *argv)
-{
- if ( phase != PHASE_AUTH ) {
- pam_syslog(pamh, LOG_ERR,
- "option %s allowed in auth phase only", argv);
- }
-}
-
-static int
-tally_parse_args(pam_handle_t *pamh, struct tally_options *opts,
- int phase, int argc, const char **argv)
-{
- memset(opts, 0, sizeof(*opts));
- opts->filename = DEFAULT_LOGFILE;
- opts->ctrl = OPT_FAIL_ON_ERROR;
- opts->root_unlock_time = -1;
-
- for ( ; argc-- > 0; ++argv ) {
- const char *str;
-
- if ((str = pam_str_skip_prefix(*argv, "file=")) != NULL) {
- const char *from = str;
- if ( *from!='/' ) {
- pam_syslog(pamh, LOG_ERR,
- "filename not /rooted; %s", *argv);
- return PAM_AUTH_ERR;
- }
- opts->filename = from;
- }
- else if ( ! strcmp( *argv, "onerr=fail" ) ) {
- opts->ctrl |= OPT_FAIL_ON_ERROR;
- }
- else if ( ! strcmp( *argv, "onerr=succeed" ) ) {
- opts->ctrl &= ~OPT_FAIL_ON_ERROR;
- }
- else if ( ! strcmp( *argv, "magic_root" ) ) {
- opts->ctrl |= OPT_MAGIC_ROOT;
- }
- else if ( ! strcmp( *argv, "serialize" ) ) {
- opts->ctrl |= OPT_SERIALIZE;
- }
- else if ( ! strcmp( *argv, "debug" ) ) {
- opts->ctrl |= OPT_DEBUG;
- }
- else if ( ! strcmp( *argv, "even_deny_root_account" ) ||
- ! strcmp( *argv, "even_deny_root" ) ) {
- log_phase_no_auth(pamh, phase, *argv);
- opts->ctrl |= OPT_DENY_ROOT;
- }
- else if ((str = pam_str_skip_prefix(*argv, "deny=")) != NULL) {
- log_phase_no_auth(pamh, phase, *argv);
- if (sscanf(str, "%hu", &opts->deny) != 1) {
- pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv);
- return PAM_AUTH_ERR;
- }
- }
- else if ((str = pam_str_skip_prefix(*argv, "lock_time=")) != NULL) {
- log_phase_no_auth(pamh, phase, *argv);
- if (sscanf(str, "%ld", &opts->lock_time) != 1) {
- pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv);
- return PAM_AUTH_ERR;
- }
- }
- else if ((str = pam_str_skip_prefix(*argv, "unlock_time=")) != NULL) {
- log_phase_no_auth(pamh, phase, *argv);
- if (sscanf(str, "%ld", &opts->unlock_time) != 1) {
- pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv);
- return PAM_AUTH_ERR;
- }
- }
- else if ((str = pam_str_skip_prefix(*argv, "root_unlock_time=")) != NULL) {
- log_phase_no_auth(pamh, phase, *argv);
- if (sscanf(str, "%ld", &opts->root_unlock_time) != 1) {
- pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv);
- return PAM_AUTH_ERR;
- }
- opts->ctrl |= OPT_DENY_ROOT; /* even_deny_root implied */
- }
- else if ( ! strcmp( *argv, "quiet" ) ||
- ! strcmp ( *argv, "silent")) {
- opts->ctrl |= OPT_QUIET;
- }
- else if ( ! strcmp ( *argv, "no_log_info") ) {
- opts->ctrl |= OPT_NOLOGNOTICE;
- }
- else if ( ! strcmp ( *argv, "audit") ) {
- opts->ctrl |= OPT_AUDIT;
- }
- else {
- pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv);
- }
- }
-
- if (opts->root_unlock_time == -1)
- opts->root_unlock_time = opts->unlock_time;
-
- return PAM_SUCCESS;
-}
-
-#endif /* #ifndef MAIN */
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support function: get uid (and optionally username) from PAM or
- cline_user --- */
-
-#ifdef MAIN
-static const char *cline_user=0; /* cline_user is used in the administration prog */
-#endif
-
-static int
-pam_get_uid(pam_handle_t *pamh, uid_t *uid, const char **userp, struct tally_options *opts)
-{
- const char *user = NULL;
- struct passwd *pw;
-
-#ifdef MAIN
- user = cline_user;
-
- if ( !user ) {
- pam_syslog(pamh, LOG_NOTICE, "cannot determine user name");
- return PAM_AUTH_ERR;
- }
-#else
- if ((pam_get_user( pamh, &user, NULL )) != PAM_SUCCESS) {
- user = NULL;
- }
-#endif
-
- if ( ! ( pw = pam_modutil_getpwnam( pamh, user ) ) ) {
- opts->ctrl & OPT_AUDIT ?
- pam_syslog(pamh, LOG_NOTICE, "pam_get_uid; no such user %s", user) :
- pam_syslog(pamh, LOG_NOTICE, "pam_get_uid; no such user");
- return PAM_USER_UNKNOWN;
- }
-
- if ( uid ) *uid = pw->pw_uid;
- if ( userp ) *userp = user;
- return PAM_SUCCESS;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support functions: set/get tally data --- */
-
-#ifndef MAIN
-
-struct tally_data {
- time_t time;
- int tfile;
-};
-
-static void
-_cleanup(pam_handle_t *pamh UNUSED, void *void_data, int error_status UNUSED)
-{
- struct tally_data *data = void_data;
- if (data->tfile != -1)
- close(data->tfile);
- free(data);
-}
-
-static void
-tally_set_data( pam_handle_t *pamh, time_t oldtime, int tfile )
-{
- struct tally_data *data;
-
- if ( (data=malloc(sizeof(*data))) != NULL ) {
- data->time = oldtime;
- data->tfile = tfile;
- pam_set_data(pamh, MODULE_NAME, (void *)data, _cleanup);
- }
-}
-
-static int
-tally_get_data( pam_handle_t *pamh, time_t *oldtime, int *tfile )
-{
- int rv;
- const void *void_data;
- const struct tally_data *data;
-
- rv = pam_get_data(pamh, MODULE_NAME, &void_data);
- if ( rv == PAM_SUCCESS && void_data != NULL && oldtime != NULL ) {
- data = void_data;
- *oldtime = data->time;
- *tfile = data->tfile;
- }
- else {
- rv = -1;
- *oldtime = 0;
- }
- return rv;
-}
-#endif /* #ifndef MAIN */
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support function: open/create tallyfile and return tally for uid --- */
-
-/* If on entry tallyfile doesn't exist, creation is attempted. */
-
-static void
-alarm_handler(int sig UNUSED)
-{ /* we just need to ignore it */
-}
-
-static int
-get_tally(pam_handle_t *pamh, uid_t uid, const char *filename,
- int *tfile, struct tallylog *tally, unsigned int ctrl)
-{
- struct stat fileinfo;
- int lstat_ret;
- void *void_tally = tally;
- int preopened = 0;
-
- if (*tfile != -1) {
- preopened = 1;
- goto skip_open;
- }
-
- lstat_ret = lstat(filename, &fileinfo);
- if (lstat_ret) {
- *tfile=open(filename, O_APPEND|O_CREAT, S_IRUSR|S_IWUSR);
- /* Create file, or append-open in pathological case. */
- if (*tfile == -1) {
-#ifndef MAIN
- if (errno == EACCES) {
- return PAM_IGNORE; /* called with insufficient access rights */
- }
-#endif
- pam_syslog(pamh, LOG_ALERT, "Couldn't create %s: %m", filename);
- return PAM_AUTH_ERR;
- }
- lstat_ret = fstat(*tfile, &fileinfo);
- close(*tfile);
- }
-
- *tfile = -1;
-
- if ( lstat_ret ) {
- pam_syslog(pamh, LOG_ALERT, "Couldn't stat %s", filename);
- return PAM_AUTH_ERR;
- }
-
- if ((fileinfo.st_mode & S_IWOTH) || !S_ISREG(fileinfo.st_mode)) {
- /* If the file is world writable or is not a
- normal file, return error */
- pam_syslog(pamh, LOG_ALERT,
- "%s is either world writable or not a normal file",
- filename);
- return PAM_AUTH_ERR;
- }
-
- if ((*tfile = open(filename, O_RDWR)) == -1) {
-#ifndef MAIN
- if (errno == EACCES) /* called with insufficient access rights */
- return PAM_IGNORE;
-#endif
- pam_syslog(pamh, LOG_ALERT, "Error opening %s for update: %m", filename);
-
- return PAM_AUTH_ERR;
- }
-
-skip_open:
- if (lseek(*tfile, (off_t)uid*(off_t)sizeof(*tally), SEEK_SET) == (off_t)-1) {
- pam_syslog(pamh, LOG_ALERT, "lseek failed for %s: %m", filename);
- if (!preopened) {
- close(*tfile);
- *tfile = -1;
- }
- return PAM_AUTH_ERR;
- }
-
- if (!preopened && (ctrl & OPT_SERIALIZE)) {
- /* this code is not thread safe as it uses fcntl locks and alarm()
- so never use serialize with multithreaded services */
- struct sigaction newsa, oldsa;
- unsigned int oldalarm;
- int rv;
-
- memset(&newsa, '\0', sizeof(newsa));
- newsa.sa_handler = alarm_handler;
- sigaction(SIGALRM, &newsa, &oldsa);
- oldalarm = alarm(MAX_LOCK_WAITING_TIME);
-
- rv = lockf(*tfile, F_LOCK, sizeof(*tally));
- /* lock failure is not fatal, we attempt to read the tally anyway */
-
- /* reinstate the eventual old alarm handler */
- if (rv == -1 && errno == EINTR) {
- if (oldalarm > MAX_LOCK_WAITING_TIME) {
- oldalarm -= MAX_LOCK_WAITING_TIME;
- } else if (oldalarm > 0) {
- oldalarm = 1;
- }
- }
- sigaction(SIGALRM, &oldsa, NULL);
- alarm(oldalarm);
- }
-
- if (pam_modutil_read(*tfile, void_tally, sizeof(*tally)) != sizeof(*tally)) {
- memset(tally, 0, sizeof(*tally));
- }
-
- tally->fail_line[sizeof(tally->fail_line)-1] = '\0';
-
- return PAM_SUCCESS;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- Support function: update tallyfile with tally!=TALLY_HI --- */
-
-static int
-set_tally(pam_handle_t *pamh, uid_t uid,
- const char *filename, int *tfile, struct tallylog *tally)
-{
- void *void_tally = tally;
- if (tally->fail_cnt != TALLY_HI) {
- if (lseek(*tfile, (off_t)uid * sizeof(*tally), SEEK_SET) == (off_t)-1) {
- pam_syslog(pamh, LOG_ALERT, "lseek failed for %s: %m", filename);
- return PAM_AUTH_ERR;
- }
- if (pam_modutil_write(*tfile, void_tally, sizeof(*tally)) != sizeof(*tally)) {
- pam_syslog(pamh, LOG_ALERT, "update (write) failed for %s: %m", filename);
- return PAM_AUTH_ERR;
- }
- }
-
- return PAM_SUCCESS;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- PAM bits --- */
-
-#ifndef MAIN
-
-#define RETURN_ERROR(i) return ((opts->ctrl & OPT_FAIL_ON_ERROR)?(i):(PAM_SUCCESS))
-
-/*---------------------------------------------------------------------*/
-
-static int
-tally_check (tally_t oldcnt, time_t oldtime, pam_handle_t *pamh, uid_t uid,
- const char *user, struct tally_options *opts,
- struct tallylog *tally)
-{
- int rv = PAM_SUCCESS;
- int loglevel = LOG_DEBUG;
-#ifdef HAVE_LIBAUDIT
- char buf[64];
- int audit_fd = -1;
- const void *rhost = NULL, *tty = NULL;
-#endif
-
- if ((opts->ctrl & OPT_MAGIC_ROOT) && getuid() == 0) {
- return PAM_SUCCESS;
- }
- /* magic_root skips tally check */
-#ifdef HAVE_LIBAUDIT
- audit_fd = audit_open();
- /* If there is an error & audit support is in the kernel report error */
- if ((audit_fd < 0) && !(errno == EINVAL || errno == EPROTONOSUPPORT ||
- errno == EAFNOSUPPORT))
- return PAM_SYSTEM_ERR;
- (void)pam_get_item(pamh, PAM_TTY, &tty);
- (void)pam_get_item(pamh, PAM_RHOST, &rhost);
-#endif
- if (opts->deny != 0 && /* deny==0 means no deny */
- tally->fail_cnt > opts->deny && /* tally>deny means exceeded */
- ((opts->ctrl & OPT_DENY_ROOT) || uid)) { /* even_deny stops uid check */
-#ifdef HAVE_LIBAUDIT
- if (tally->fail_cnt == opts->deny+1) {
- /* First say that max number was hit. */
- snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid);
- audit_log_user_message(audit_fd, AUDIT_ANOM_LOGIN_FAILURES, buf,
- rhost, NULL, tty, 1);
- }
-#endif
- if (uid) {
- /* Unlock time check */
- if (opts->unlock_time && oldtime) {
- if (opts->unlock_time + oldtime <= time(NULL)) {
- /* ignore deny check after unlock_time elapsed */
-#ifdef HAVE_LIBAUDIT
- snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid);
- audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_UNLOCK_TIMED, buf,
- rhost, NULL, tty, 1);
-#endif
- rv = PAM_SUCCESS;
- goto cleanup;
- }
- }
- } else {
- /* Root unlock time check */
- if (opts->root_unlock_time && oldtime) {
- if (opts->root_unlock_time + oldtime <= time(NULL)) {
- /* ignore deny check after unlock_time elapsed */
-#ifdef HAVE_LIBAUDIT
- snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid);
- audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_UNLOCK_TIMED, buf,
- rhost, NULL, tty, 1);
-#endif
- rv = PAM_SUCCESS;
- goto cleanup;
- }
- }
- }
-
-#ifdef HAVE_LIBAUDIT
- if (tally->fail_cnt == opts->deny+1) {
- /* First say that max number was hit. */
- audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_LOCK, buf,
- rhost, NULL, tty, 1);
- }
-#endif
-
- if (!(opts->ctrl & OPT_QUIET)) {
- pam_info(pamh, _("The account is locked due to %u failed logins."),
- (unsigned int)tally->fail_cnt);
- }
- loglevel = LOG_NOTICE;
- rv = PAM_AUTH_ERR; /* Only unconditional failure */
- goto cleanup;
- }
-
- /* Lock time check */
- if (opts->lock_time && oldtime) {
- if (opts->lock_time + oldtime > time(NULL)) {
- /* don't increase fail_cnt or update fail_time when
- lock_time applies */
- tally->fail_cnt = oldcnt;
- tally->fail_time = oldtime;
-
- if (!(opts->ctrl & OPT_QUIET)) {
- pam_info(pamh,
- _("The account is temporarily locked (%ld seconds left)."),
- (long int) (oldtime+opts->lock_time-time(NULL)));
- }
- if (!(opts->ctrl & OPT_NOLOGNOTICE)) {
- pam_syslog(pamh, LOG_NOTICE,
- "user %s (%lu) has time limit [%lds left]"
- " since last failure.",
- user, (unsigned long)uid,
- (long int) (oldtime+opts->lock_time-time(NULL)));
- }
- rv = PAM_AUTH_ERR;
- goto cleanup;
- }
- }
-
-cleanup:
- if (!(opts->ctrl & OPT_NOLOGNOTICE) && (loglevel != LOG_DEBUG || opts->ctrl & OPT_DEBUG)) {
- pam_syslog(pamh, loglevel,
- "user %s (%lu) tally %hu, deny %hu",
- user, (unsigned long)uid, tally->fail_cnt, opts->deny);
- }
-#ifdef HAVE_LIBAUDIT
- if (audit_fd != -1) {
- close(audit_fd);
- }
-#endif
- return rv;
-}
-
-/* --- tally bump function: bump tally for uid by (signed) inc --- */
-
-static int
-tally_bump (int inc, time_t *oldtime, pam_handle_t *pamh,
- uid_t uid, const char *user, struct tally_options *opts, int *tfile)
-{
- struct tallylog tally;
- tally_t oldcnt;
- const void *remote_host = NULL;
- int i, rv;
-
- tally.fail_cnt = 0; /* !TALLY_HI --> Log opened for update */
-
- i = get_tally(pamh, uid, opts->filename, tfile, &tally, opts->ctrl);
- if (i != PAM_SUCCESS) {
- if (*tfile != -1) {
- close(*tfile);
- *tfile = -1;
- }
- RETURN_ERROR(i);
- }
-
- /* to remember old fail time (for locktime) */
- if (oldtime) {
- *oldtime = (time_t)tally.fail_time;
- }
-
- tally.fail_time = time(NULL);
-
- (void) pam_get_item(pamh, PAM_RHOST, &remote_host);
- if (!remote_host) {
- (void) pam_get_item(pamh, PAM_TTY, &remote_host);
- if (!remote_host) {
- remote_host = "unknown";
- }
- }
-
- strncpy(tally.fail_line, remote_host,
- sizeof(tally.fail_line)-1);
- tally.fail_line[sizeof(tally.fail_line)-1] = 0;
-
- oldcnt = tally.fail_cnt;
-
- if (!(opts->ctrl & OPT_MAGIC_ROOT) || getuid()) {
- /* magic_root doesn't change tally */
- tally.fail_cnt += inc;
-
- if (tally.fail_cnt == TALLY_HI) { /* Overflow *and* underflow. :) */
- tally.fail_cnt -= inc;
- pam_syslog(pamh, LOG_ALERT, "Tally %sflowed for user %s",
- (inc<0)?"under":"over",user);
- }
- }
-
- rv = tally_check(oldcnt, *oldtime, pamh, uid, user, opts, &tally);
-
- i = set_tally(pamh, uid, opts->filename, tfile, &tally);
- if (i != PAM_SUCCESS) {
- if (*tfile != -1) {
- close(*tfile);
- *tfile = -1;
- }
- if (rv == PAM_SUCCESS)
- RETURN_ERROR( i );
- /* fallthrough */
- } else if (!(opts->ctrl & OPT_SERIALIZE)) {
- close(*tfile);
- *tfile = -1;
- }
-
- return rv;
-}
-
-static int
-tally_reset (pam_handle_t *pamh, uid_t uid, struct tally_options *opts, int old_tfile)
-{
- struct tallylog tally;
- int tfile = old_tfile;
- int i;
-
- /* resets only if not magic root */
-
- if ((opts->ctrl & OPT_MAGIC_ROOT) && getuid() == 0) {
- return PAM_SUCCESS;
- }
-
- tally.fail_cnt = 0; /* !TALLY_HI --> Log opened for update */
-
- i=get_tally(pamh, uid, opts->filename, &tfile, &tally, opts->ctrl);
- if (i != PAM_SUCCESS) {
- if (tfile != old_tfile) /* the descriptor is not owned by pam data */
- close(tfile);
- RETURN_ERROR(i);
- }
-
- memset(&tally, 0, sizeof(tally));
-
- i=set_tally(pamh, uid, opts->filename, &tfile, &tally);
- if (i != PAM_SUCCESS) {
- if (tfile != old_tfile) /* the descriptor is not owned by pam data */
- close(tfile);
- RETURN_ERROR(i);
- }
-
- if (tfile != old_tfile)
- close(tfile);
-
- return PAM_SUCCESS;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- authentication management functions (only) --- */
-
-int
-pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED,
- int argc, const char **argv)
-{
- int
- rv, tfile = -1;
- time_t
- oldtime = 0;
- struct tally_options
- options, *opts = &options;
- uid_t
- uid;
- const char
- *user;
-
- rv = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv);
- if (rv != PAM_SUCCESS)
- RETURN_ERROR(rv);
-
- if (flags & PAM_SILENT)
- opts->ctrl |= OPT_QUIET;
-
- rv = pam_get_uid(pamh, &uid, &user, opts);
- if (rv != PAM_SUCCESS)
- RETURN_ERROR(rv);
-
- rv = tally_bump(1, &oldtime, pamh, uid, user, opts, &tfile);
-
- tally_set_data(pamh, oldtime, tfile);
-
- return rv;
-}
-
-int
-pam_sm_setcred(pam_handle_t *pamh, int flags UNUSED,
- int argc, const char **argv)
-{
- int
- rv, tfile = -1;
- time_t
- oldtime = 0;
- struct tally_options
- options, *opts = &options;
- uid_t
- uid;
- const char
- *user;
-
- rv = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv);
- if ( rv != PAM_SUCCESS )
- RETURN_ERROR( rv );
-
- rv = pam_get_uid(pamh, &uid, &user, opts);
- if ( rv != PAM_SUCCESS )
- RETURN_ERROR( rv );
-
- if ( tally_get_data(pamh, &oldtime, &tfile) != 0 )
- /* no data found */
- return PAM_SUCCESS;
-
- rv = tally_reset(pamh, uid, opts, tfile);
-
- pam_set_data(pamh, MODULE_NAME, NULL, NULL);
-
- return rv;
-}
-
-/*---------------------------------------------------------------------*/
-
-/* --- authentication management functions (only) --- */
-
-/* To reset failcount of user on successful login */
-
-int
-pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED,
- int argc, const char **argv)
-{
- int
- rv, tfile = -1;
- time_t
- oldtime = 0;
- struct tally_options
- options, *opts = &options;
- uid_t
- uid;
- const char
- *user;
-
- rv = tally_parse_args(pamh, opts, PHASE_ACCOUNT, argc, argv);
- if ( rv != PAM_SUCCESS )
- RETURN_ERROR( rv );
-
- rv = pam_get_uid(pamh, &uid, &user, opts);
- if ( rv != PAM_SUCCESS )
- RETURN_ERROR( rv );
-
- if ( tally_get_data(pamh, &oldtime, &tfile) != 0 )
- /* no data found */
- return PAM_SUCCESS;
-
- rv = tally_reset(pamh, uid, opts, tfile);
-
- pam_set_data(pamh, MODULE_NAME, NULL, NULL);
-
- return rv;
-}
-
-/*-----------------------------------------------------------------------*/
-
-#else /* #ifndef MAIN */
-
-static const char *cline_filename = DEFAULT_LOGFILE;
-static tally_t cline_reset = TALLY_HI; /* Default is `interrogate only' */
-static int cline_quiet = 0;
-
-/*
- * Not going to link with pamlib just for these.. :)
- */
-
-static const char *
-pam_errors( int i )
-{
- switch (i) {
- case PAM_AUTH_ERR: return _("Authentication error");
- case PAM_SERVICE_ERR: return _("Service error");
- case PAM_USER_UNKNOWN: return _("Unknown user");
- default: return _("Unknown error");
- }
-}
-
-static int
-getopts( char **argv )
-{
- const char *pname = *argv;
- for ( ; *argv ; (void)(*argv && ++argv) ) {
- const char *str;
- if ( !strcmp (*argv,"--file") ) cline_filename=*++argv;
- else if ( !strcmp(*argv,"-f") ) cline_filename=*++argv;
- else if ((str = pam_str_skip_prefix(*argv, "--file=")) != NULL)
- cline_filename = str;
- else if ( !strcmp (*argv,"--user") ) cline_user=*++argv;
- else if ( !strcmp (*argv,"-u") ) cline_user=*++argv;
- else if ((str = pam_str_skip_prefix(*argv, "--user=")) != NULL)
- cline_user = str;
- else if ( !strcmp (*argv,"--reset") ) cline_reset=0;
- else if ( !strcmp (*argv,"-r") ) cline_reset=0;
- else if ((str = pam_str_skip_prefix(*argv, "--reset=")) != NULL) {
- if (sscanf(str, "%hu", &cline_reset) != 1)
- fprintf(stderr,_("%s: Bad number given to --reset=\n"),pname), exit(0);
- }
- else if ( !strcmp (*argv,"--quiet") ) cline_quiet=1;
- else {
- fprintf(stderr,_("%s: Unrecognised option %s\n"),pname,*argv);
- return FALSE;
- }
- }
- return TRUE;
-}
-
-static void
-print_one(const struct tallylog *tally, uid_t uid)
-{
- static int once;
- const char *cp = "[UNKNOWN]";
- time_t fail_time;
- struct tm *tm;
- struct passwd *pwent;
- const char *username = "[NONAME]";
- char ptime[80];
-
- pwent = getpwuid(uid);
- fail_time = tally->fail_time;
- if ((tm = localtime(&fail_time)) != NULL) {
- strftime (ptime, sizeof (ptime), "%D %H:%M:%S", tm);
- cp = ptime;
- }
- if (pwent) {
- username = pwent->pw_name;
- }
- if (!once) {
- printf (_("Login Failures Latest failure From\n"));
- once++;
- }
- printf ("%-15.15s %5hu ", username, tally->fail_cnt);
- if (tally->fail_time) {
- printf ("%-17.17s %s", cp, tally->fail_line);
- }
- putchar ('\n');
-}
-
-int
-main( int argc UNUSED, char **argv )
-{
- struct tallylog tally;
-
- if ( ! getopts( argv+1 ) ) {
- printf(_("%s: [-f rooted-filename] [--file rooted-filename]\n"
- " [-u username] [--user username]\n"
- " [-r] [--reset[=n]] [--quiet]\n"),
- *argv);
- exit(2);
- }
-
- umask(077);
-
- /*
- * Major difference between individual user and all users:
- * --user just handles one user, just like PAM.
- * without --user it handles all users, sniffing cline_filename for nonzeros
- */
-
- if ( cline_user ) {
- uid_t uid;
- int tfile = -1;
- struct tally_options opts;
- int i;
-
- memset(&opts, 0, sizeof(opts));
- opts.ctrl = OPT_AUDIT;
- i=pam_get_uid(NULL, &uid, NULL, &opts);
- if ( i != PAM_SUCCESS ) {
- fprintf(stderr,"%s: %s\n",*argv,pam_errors(i));
- exit(1);
- }
-
- if (cline_reset == 0) {
- struct stat st;
-
- if (stat(cline_filename, &st) && errno == ENOENT) {
- if (!cline_quiet) {
- memset(&tally, 0, sizeof(tally));
- print_one(&tally, uid);
- }
- return 0; /* no file => nothing to reset */
- }
- }
-
- i=get_tally(NULL, uid, cline_filename, &tfile, &tally, 0);
- if ( i != PAM_SUCCESS ) {
- if (tfile != -1)
- close(tfile);
- fprintf(stderr, "%s: %s\n", *argv, pam_errors(i));
- exit(1);
- }
-
- if ( !cline_quiet )
- print_one(&tally, uid);
-
- if (cline_reset != TALLY_HI) {
-#ifdef HAVE_LIBAUDIT
- char buf[64];
- int audit_fd = audit_open();
- snprintf(buf, sizeof(buf), "pam_tally2 uid=%u reset=%hu", uid, cline_reset);
- audit_log_user_message(audit_fd, AUDIT_USER_ACCT,
- buf, NULL, NULL, ttyname(STDIN_FILENO), 1);
- if (audit_fd >=0)
- close(audit_fd);
-#endif
- if (cline_reset == 0) {
- memset(&tally, 0, sizeof(tally));
- } else {
- tally.fail_cnt = cline_reset;
- }
- i=set_tally(NULL, uid, cline_filename, &tfile, &tally);
- close(tfile);
- if (i != PAM_SUCCESS) {
- fprintf(stderr,"%s: %s\n",*argv,pam_errors(i));
- exit(1);
- }
- } else {
- close(tfile);
- }
- }
- else /* !cline_user (ie, operate on all users) */ {
- FILE *tfile=fopen(cline_filename, "r");
- uid_t uid=0;
- if (!tfile && cline_reset != 0) {
- perror(*argv);
- exit(1);
- }
-
- for ( ; tfile && !feof(tfile); uid++ ) {
- if ( !fread(&tally, sizeof(tally), 1, tfile)
- || !tally.fail_cnt ) {
- continue;
- }
- print_one(&tally, uid);
- }
- if (tfile)
- fclose(tfile);
- if ( cline_reset!=0 && cline_reset!=TALLY_HI ) {
- fprintf(stderr,_("%s: Can't reset all users to non-zero\n"),*argv);
- }
- else if ( !cline_reset ) {
-#ifdef HAVE_LIBAUDIT
- char buf[64];
- int audit_fd = audit_open();
- snprintf(buf, sizeof(buf), "pam_tally2 uid=all reset=0");
- audit_log_user_message(audit_fd, AUDIT_USER_ACCT,
- buf, NULL, NULL, ttyname(STDIN_FILENO), 1);
- if (audit_fd >=0)
- close(audit_fd);
-#endif
- tfile=fopen(cline_filename, "w");
- if ( !tfile ) perror(*argv), exit(0);
- fclose(tfile);
- }
- }
- return 0;
-}
-
-
-#endif /* #ifndef MAIN */
diff --git a/modules/pam_tally2/pam_tally2_app.c b/modules/pam_tally2/pam_tally2_app.c
deleted file mode 100644
index b72e9bfd..00000000
--- a/modules/pam_tally2/pam_tally2_app.c
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- # This seemed like such a good idea at the time. :)
- */
-
-#define MAIN
-#include "pam_tally2.c"
diff --git a/modules/pam_tally2/tallylog.h b/modules/pam_tally2/tallylog.h
deleted file mode 100644
index 596b1dac..00000000
--- a/modules/pam_tally2/tallylog.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2006, Red Hat, Inc.
- * All rights reserved.
- *
- * 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, this list of conditions and the following disclaimer.
- * 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. Neither the name of Red Hat, Inc. nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY RED HAT, INC. AND CONTRIBUTORS ``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 JULIE HAUGH OR CONTRIBUTORS 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.
- */
-
-/*
- * tallylog.h - login failure data file format
- *
- * The new login failure file is not compatible with the old faillog(8) format
- * Each record in the file represents a separate UID and the file
- * is indexed in that fashion.
- */
-
-
-#ifndef _TALLYLOG_H
-#define _TALLYLOG_H
-
-#include <stdint.h>
-
-struct tallylog {
- char fail_line[52]; /* rhost or tty of last failure */
- uint16_t reserved; /* reserved for future use */
- uint16_t fail_cnt; /* failures since last success */
- uint64_t fail_time; /* time of last failure */
-};
-/* 64 bytes / entry */
-
-#endif
diff --git a/modules/pam_tally2/tst-pam_tally2 b/modules/pam_tally2/tst-pam_tally2
deleted file mode 100755
index 83c71f41..00000000
--- a/modules/pam_tally2/tst-pam_tally2
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-../../tests/tst-dlopen .libs/pam_tally2.so
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 331bcc31..a1f0467c 100644
--- a/modules/pam_time/Makefile.in
+++ b/modules/pam_time/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -94,20 +94,24 @@ 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/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -154,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
@@ -169,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)
@@ -189,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;; \
@@ -376,6 +384,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -420,10 +429,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -433,12 +446,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -452,7 +469,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -471,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@
@@ -499,8 +517,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -511,11 +528,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -560,7 +582,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -568,9 +589,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -580,6 +598,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -590,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
@@ -635,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=; \
@@ -673,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)
@@ -680,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)
@@ -980,7 +1015,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -993,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)
@@ -1003,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 \
@@ -1021,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); \
@@ -1070,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)
@@ -1115,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
@@ -1167,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
@@ -1191,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 0d7eca96..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: 06/08/2020
+.\" 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" "06/08/2020" "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 f866f9bc..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: 06/08/2020
+.\" 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" "06/08/2020" "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 d49abf4b..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
+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)
-pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la
+pam_timestamp_la_LDFLAGS = -no-undefined -avoid-version -module $(AM_LDFLAGS) $(CRYPTO_LIBS)
+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
@@ -32,18 +36,24 @@ endif
securelib_LTLIBRARIES = pam_timestamp.la
sbin_PROGRAMS = pam_timestamp_check
-pam_timestamp_la_SOURCES = pam_timestamp.c hmacsha1.c sha1.c
+pam_timestamp_la_SOURCES = pam_timestamp.c
+if COND_USE_OPENSSL
+pam_timestamp_la_SOURCES += hmac_openssl_wrapper.c
+else
+pam_timestamp_la_SOURCES += hmacsha1.c sha1.c
+endif
pam_timestamp_la_CFLAGS = $(AM_CFLAGS)
pam_timestamp_check_SOURCES = pam_timestamp_check.c
-pam_timestamp_check_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@
-pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la
-pam_timestamp_check_LDFLAGS = @PIE_LDFLAGS@
+pam_timestamp_check_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@
+pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la $(SYSTEMD_LIBS)
+pam_timestamp_check_LDFLAGS = @EXE_LDFLAGS@
+if !COND_USE_OPENSSL
hmacfile_SOURCES = hmacfile.c hmacsha1.c sha1.c
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 79941c54..feffca8e 100644
--- a/modules/pam_timestamp/Makefile.in
+++ b/modules/pam_timestamp/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -98,21 +98,26 @@ build_triplet = @build@
host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
sbin_PROGRAMS = pam_timestamp_check$(EXEEXT)
-check_PROGRAMS = hmacfile$(EXEEXT)
+@COND_USE_OPENSSL_TRUE@am__append_2 = hmac_openssl_wrapper.c
+@COND_USE_OPENSSL_FALSE@am__append_3 = hmacsha1.c sha1.c
+@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/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -153,9 +158,16 @@ 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
+@COND_USE_OPENSSL_FALSE@am__objects_2 = pam_timestamp_la-hmacsha1.lo \
+@COND_USE_OPENSSL_FALSE@ pam_timestamp_la-sha1.lo
am_pam_timestamp_la_OBJECTS = pam_timestamp_la-pam_timestamp.lo \
- pam_timestamp_la-hmacsha1.lo pam_timestamp_la-sha1.lo
+ $(am__objects_1) $(am__objects_2)
pam_timestamp_la_OBJECTS = $(am_pam_timestamp_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -165,14 +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_OBJECTS = hmacfile.$(OBJEXT) hmacsha1.$(OBJEXT) \
- sha1.$(OBJEXT)
+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)
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) \
@@ -194,6 +209,7 @@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
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 \
./$(DEPDIR)/pam_timestamp_la-pam_timestamp.Plo \
./$(DEPDIR)/pam_timestamp_la-sha1.Plo ./$(DEPDIR)/sha1.Po
@@ -218,8 +234,8 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(pam_timestamp_la_SOURCES) $(hmacfile_SOURCES) \
$(pam_timestamp_check_SOURCES)
-DIST_SOURCES = $(pam_timestamp_la_SOURCES) $(hmacfile_SOURCES) \
- $(pam_timestamp_check_SOURCES)
+DIST_SOURCES = $(am__pam_timestamp_la_SOURCES_DIST) \
+ $(am__hmacfile_SOURCES_DIST) $(pam_timestamp_check_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -405,6 +421,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -449,10 +466,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -462,12 +483,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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,7 +506,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -500,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@
@@ -528,8 +554,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -540,11 +565,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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 +619,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -597,9 +626,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -609,6 +635,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -621,23 +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)
-noinst_HEADERS = hmacsha1.h sha1.h
+@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) $(am__append_1)
-pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la
+ $(AM_LDFLAGS) $(CRYPTO_LIBS) $(am__append_1)
+pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la $(SYSTEMD_LIBS)
securelib_LTLIBRARIES = pam_timestamp.la
-pam_timestamp_la_SOURCES = pam_timestamp.c hmacsha1.c sha1.c
+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) @PIE_CFLAGS@
-pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la
-pam_timestamp_check_LDFLAGS = @PIE_LDFLAGS@
-hmacfile_SOURCES = hmacfile.c hmacsha1.c sha1.c
-hmacfile_LDADD = $(top_builddir)/libpam/libpam.la
+pam_timestamp_check_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@
+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_FALSE@hmacfile_LDADD = $(top_builddir)/libpam/libpam.la
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
@@ -786,6 +815,7 @@ distclean-compile:
@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
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_la-hmac_openssl_wrapper.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_la-hmacsha1.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_la-pam_timestamp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_la-sha1.Plo@am__quote@ # am--include-marker
@@ -825,6 +855,13 @@ pam_timestamp_la-pam_timestamp.lo: pam_timestamp.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_timestamp_la_CFLAGS) $(CFLAGS) -c -o pam_timestamp_la-pam_timestamp.lo `test -f 'pam_timestamp.c' || echo '$(srcdir)/'`pam_timestamp.c
+pam_timestamp_la-hmac_openssl_wrapper.lo: hmac_openssl_wrapper.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_timestamp_la_CFLAGS) $(CFLAGS) -MT pam_timestamp_la-hmac_openssl_wrapper.lo -MD -MP -MF $(DEPDIR)/pam_timestamp_la-hmac_openssl_wrapper.Tpo -c -o pam_timestamp_la-hmac_openssl_wrapper.lo `test -f 'hmac_openssl_wrapper.c' || echo '$(srcdir)/'`hmac_openssl_wrapper.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pam_timestamp_la-hmac_openssl_wrapper.Tpo $(DEPDIR)/pam_timestamp_la-hmac_openssl_wrapper.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hmac_openssl_wrapper.c' object='pam_timestamp_la-hmac_openssl_wrapper.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_timestamp_la_CFLAGS) $(CFLAGS) -c -o pam_timestamp_la-hmac_openssl_wrapper.lo `test -f 'hmac_openssl_wrapper.c' || echo '$(srcdir)/'`hmac_openssl_wrapper.c
+
pam_timestamp_la-hmacsha1.lo: hmacsha1.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_timestamp_la_CFLAGS) $(CFLAGS) -MT pam_timestamp_la-hmacsha1.lo -MD -MP -MF $(DEPDIR)/pam_timestamp_la-hmacsha1.Tpo -c -o pam_timestamp_la-hmacsha1.lo `test -f 'hmacsha1.c' || echo '$(srcdir)/'`hmacsha1.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pam_timestamp_la-hmacsha1.Tpo $(DEPDIR)/pam_timestamp_la-hmacsha1.Plo
@@ -1061,7 +1098,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -1211,6 +1248,7 @@ distclean: distclean-am
-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
-rm -f ./$(DEPDIR)/pam_timestamp_la-hmacsha1.Plo
-rm -f ./$(DEPDIR)/pam_timestamp_la-pam_timestamp.Plo
-rm -f ./$(DEPDIR)/pam_timestamp_la-sha1.Plo
@@ -1263,6 +1301,7 @@ maintainer-clean: maintainer-clean-am
-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
-rm -f ./$(DEPDIR)/pam_timestamp_la-hmacsha1.Plo
-rm -f ./$(DEPDIR)/pam_timestamp_la-pam_timestamp.Plo
-rm -f ./$(DEPDIR)/pam_timestamp_la-sha1.Plo
diff --git a/modules/pam_timestamp/README b/modules/pam_timestamp/README
index 4f16bae0..e1ed508a 100644
--- a/modules/pam_timestamp/README
+++ b/modules/pam_timestamp/README
@@ -13,6 +13,9 @@ created in the timestampdir directory for the user. When an application
attempts to authenticate the user, a pam_timestamp will treat a sufficiently
recent timestamp file as grounds for succeeding.
+The default encryption hash is taken from the HMAC_CRYPTO_ALGO variable from /
+etc/login.defs.
+
OPTIONS
timestampdir=directory
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
new file mode 100644
index 00000000..2549c1db
--- /dev/null
+++ b/modules/pam_timestamp/hmac_openssl_wrapper.c
@@ -0,0 +1,382 @@
+/* Wrapper for hmac openssl implementation.
+ *
+ * Copyright (c) 2021 Red Hat, Inc.
+ * Written by 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"
+
+#ifdef WITH_OPENSSL
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <openssl/evp.h>
+#include <openssl/params.h>
+#include <openssl/core_names.h>
+
+#include <security/pam_ext.h>
+#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"
+#define DEFAULT_ALGORITHM "SHA512"
+#define MAX_HMAC_LENGTH 512
+#define MAX_KEY_LENGTH EVP_MAX_KEY_LENGTH
+
+static char *
+get_crypto_algorithm(pam_handle_t *pamh, int debug){
+ char *config_value = NULL;
+
+ config_value = pam_modutil_search_key(pamh, LOGIN_DEFS, CRYPTO_KEY);
+
+ if (config_value == NULL) {
+ config_value = strdup(DEFAULT_ALGORITHM);
+ if (debug) {
+ pam_syslog(pamh, LOG_DEBUG,
+ "Key [%s] not found, falling back to default algorithm [%s]\n",
+ CRYPTO_KEY, DEFAULT_ALGORITHM);
+ }
+ }
+
+ return config_value;
+}
+
+static int
+generate_key(pam_handle_t *pamh, char **key, size_t key_size)
+{
+ int fd = 0;
+ size_t bytes_read = 0;
+ char * tmp = NULL;
+
+ fd = open("/dev/urandom", O_RDONLY);
+ if (fd == -1) {
+ pam_syslog(pamh, LOG_ERR, "Cannot open /dev/urandom: %m");
+ return PAM_AUTH_ERR;
+ }
+
+ tmp = malloc(key_size);
+ if (!tmp) {
+ pam_syslog(pamh, LOG_CRIT, "Not enough memory");
+ close(fd);
+ return PAM_AUTH_ERR;
+ }
+
+ bytes_read = pam_modutil_read(fd, tmp, key_size);
+ close(fd);
+
+ if (bytes_read < key_size) {
+ pam_syslog(pamh, LOG_ERR, "Short read on random device");
+ free(tmp);
+ return PAM_AUTH_ERR;
+ }
+
+ *key = tmp;
+
+ return PAM_SUCCESS;
+}
+
+static int
+read_file(pam_handle_t *pamh, int fd, char **text, size_t *text_length)
+{
+ struct stat st;
+ size_t bytes_read = 0;
+ char *tmp = NULL;
+
+ if (fstat(fd, &st) == -1) {
+ pam_syslog(pamh, LOG_ERR, "Unable to stat file: %m");
+ close(fd);
+ return PAM_AUTH_ERR;
+ }
+
+ if (st.st_size == 0) {
+ pam_syslog(pamh, LOG_ERR, "Key file size cannot be 0");
+ close(fd);
+ return PAM_AUTH_ERR;
+ }
+
+ tmp = malloc(st.st_size);
+ if (!tmp) {
+ pam_syslog(pamh, LOG_CRIT, "Not enough memory");
+ close(fd);
+ return PAM_AUTH_ERR;
+ }
+
+ bytes_read = pam_modutil_read(fd, tmp, st.st_size);
+ close(fd);
+
+ if (bytes_read < (size_t)st.st_size) {
+ pam_syslog(pamh, LOG_ERR, "Short read on key file");
+ pam_overwrite_n(tmp, st.st_size);
+ free(tmp);
+ return PAM_AUTH_ERR;
+ }
+
+ *text = tmp;
+ *text_length = st.st_size;
+
+ return PAM_SUCCESS;
+}
+
+static int
+write_file(pam_handle_t *pamh, const char *file_name, char *text,
+ size_t text_length, uid_t owner, gid_t group)
+{
+ int fd = 0;
+ size_t bytes_written = 0;
+
+ fd = open(file_name,
+ O_WRONLY | O_CREAT | O_TRUNC,
+ S_IRUSR | S_IWUSR);
+ if (fd == -1) {
+ pam_syslog(pamh, LOG_ERR, "Unable to open [%s]: %m", file_name);
+ 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);
+ pam_overwrite_n(text, text_length);
+ free(text);
+ close(fd);
+ return PAM_AUTH_ERR;
+ }
+
+ bytes_written = pam_modutil_write(fd, text, text_length);
+ close(fd);
+
+ if (bytes_written < text_length) {
+ pam_syslog(pamh, LOG_ERR, "Short write on %s", file_name);
+ free(text);
+ return PAM_AUTH_ERR;
+ }
+
+ return PAM_SUCCESS;
+}
+
+static int
+key_management(pam_handle_t *pamh, const char *file_name, char **text,
+ size_t text_length, uid_t owner, gid_t group)
+{
+ int fd = 0;
+
+ fd = open(file_name, O_RDONLY | O_NOFOLLOW);
+ if (fd == -1) {
+ if (errno == ENOENT) {
+ if (generate_key(pamh, text, text_length)) {
+ pam_syslog(pamh, LOG_ERR, "Unable to generate key");
+ return PAM_AUTH_ERR;
+ }
+
+ if (write_file(pamh, file_name, *text, text_length, owner, group)) {
+ pam_syslog(pamh, LOG_ERR, "Unable to write key");
+ return PAM_AUTH_ERR;
+ }
+ } else {
+ pam_syslog(pamh, LOG_ERR, "Unable to open %s: %m", file_name);
+ return PAM_AUTH_ERR;
+ }
+ } else {
+ if (read_file(pamh, fd, text, &text_length)) {
+ pam_syslog(pamh, LOG_ERR, "Error reading key file %s\n", file_name);
+ return PAM_AUTH_ERR;
+ }
+ }
+
+ return PAM_SUCCESS;
+}
+
+static int
+hmac_management(pam_handle_t *pamh, int debug, void **out, size_t *out_length,
+ char *key, size_t key_length,
+ const void *text, size_t text_length)
+{
+ int ret = PAM_AUTH_ERR;
+ EVP_MAC *evp_mac = NULL;
+ EVP_MAC_CTX *ctx = NULL;
+ unsigned char *hmac_message = NULL;
+ size_t hmac_length;
+ char *algo = NULL;
+ OSSL_PARAM subalg_param[] = { OSSL_PARAM_END, OSSL_PARAM_END };
+
+ algo = get_crypto_algorithm(pamh, debug);
+
+ subalg_param[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST,
+ algo,
+ 0);
+
+ evp_mac = EVP_MAC_fetch(NULL, "HMAC", NULL);
+ if (evp_mac == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Unable to create hmac implementation");
+ goto done;
+ }
+
+ ctx = EVP_MAC_CTX_new(evp_mac);
+ if (ctx == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Unable to create hmac context");
+ goto done;
+ }
+
+ ret = EVP_MAC_init(ctx, (const unsigned char *)key, key_length, subalg_param);
+ if (ret == 0) {
+ pam_syslog(pamh, LOG_ERR, "Unable to initialize hmac context");
+ goto done;
+ }
+
+ ret = EVP_MAC_update(ctx, (const unsigned char *)text, text_length);
+ if (ret == 0) {
+ pam_syslog(pamh, LOG_ERR, "Unable to update hmac context");
+ goto done;
+ }
+
+ hmac_message = (unsigned char*)malloc(sizeof(unsigned char) * MAX_HMAC_LENGTH);
+ if (!hmac_message) {
+ pam_syslog(pamh, LOG_CRIT, "Not enough memory");
+ goto done;
+ }
+
+ ret = EVP_MAC_final(ctx, hmac_message, &hmac_length, MAX_HMAC_LENGTH);
+ if (ret == 0) {
+ pam_syslog(pamh, LOG_ERR, "Unable to calculate hmac message");
+ goto done;
+ }
+
+ *out_length = hmac_length;
+ *out = malloc(*out_length);
+ if (*out == NULL) {
+ pam_syslog(pamh, LOG_CRIT, "Not enough memory");
+ goto done;
+ }
+
+ memcpy(*out, hmac_message, *out_length);
+ ret = PAM_SUCCESS;
+
+done:
+ if (hmac_message != NULL) {
+ free(hmac_message);
+ }
+ if (key != NULL) {
+ pam_overwrite_n(key, key_length);
+ free(key);
+ }
+ if (ctx != NULL) {
+ EVP_MAC_CTX_free(ctx);
+ }
+ if (evp_mac != NULL) {
+ EVP_MAC_free(evp_mac);
+ }
+ free(algo);
+
+ return ret;
+}
+
+int
+hmac_size(pam_handle_t *pamh, int debug, size_t *hmac_length)
+{
+ int ret = PAM_AUTH_ERR;
+ EVP_MAC *evp_mac = NULL;
+ EVP_MAC_CTX *ctx = NULL;
+ const unsigned char key[] = "ThisIsJustAKey";
+ size_t key_length = MAX_KEY_LENGTH;
+ char *algo = NULL;
+ OSSL_PARAM subalg_param[] = { OSSL_PARAM_END, OSSL_PARAM_END };
+
+ algo = get_crypto_algorithm(pamh, debug);
+
+ subalg_param[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST,
+ algo,
+ 0);
+
+ evp_mac = EVP_MAC_fetch(NULL, "HMAC", NULL);
+ if (evp_mac == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Unable to create hmac implementation");
+ goto done;
+ }
+
+ ctx = EVP_MAC_CTX_new(evp_mac);
+ if (ctx == NULL) {
+ pam_syslog(pamh, LOG_ERR, "Unable to create hmac context");
+ goto done;
+ }
+
+ ret = EVP_MAC_init(ctx, key, key_length, subalg_param);
+ if (ret == 0) {
+ pam_syslog(pamh, LOG_ERR, "Unable to initialize hmac context");
+ goto done;
+ }
+
+ *hmac_length = EVP_MAC_CTX_get_mac_size(ctx);
+ ret = PAM_SUCCESS;
+
+done:
+ if (ctx != NULL) {
+ EVP_MAC_CTX_free(ctx);
+ }
+ if (evp_mac != NULL) {
+ EVP_MAC_free(evp_mac);
+ }
+ free(algo);
+
+ return ret;
+}
+
+int
+hmac_generate(pam_handle_t *pamh, int debug, void **mac, size_t *mac_length,
+ const char *key_file, uid_t owner, gid_t group,
+ const void *text, size_t text_length)
+{
+ char *key = NULL;
+ size_t key_length = MAX_KEY_LENGTH;
+
+ if (key_management(pamh, key_file, &key, key_length, owner, group)) {
+ return PAM_AUTH_ERR;
+ }
+
+ if (hmac_management(pamh, debug, mac, mac_length, key, key_length,
+ text, text_length)) {
+ return PAM_AUTH_ERR;
+ }
+
+ return PAM_SUCCESS;
+}
+
+#endif /* WITH_OPENSSL */
diff --git a/modules/pam_timestamp/hmac_openssl_wrapper.h b/modules/pam_timestamp/hmac_openssl_wrapper.h
new file mode 100644
index 00000000..cc27c811
--- /dev/null
+++ b/modules/pam_timestamp/hmac_openssl_wrapper.h
@@ -0,0 +1,57 @@
+/* Wrapper for hmac openssl implementation.
+ *
+ * Copyright (c) 2021 Red Hat, Inc.
+ * Written by 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 PAM_TIMESTAMP_HMAC_OPENSSL_WRAPPER_H
+#define PAM_TIMESTAMP_HMAC_OPENSSL_WRAPPER_H
+
+#include "config.h"
+
+#ifdef WITH_OPENSSL
+
+#include <openssl/hmac.h>
+#include <security/pam_modules.h>
+
+int
+hmac_size(pam_handle_t *pamh, int debug, size_t *hmac_length);
+
+int
+hmac_generate(pam_handle_t *pamh, int debug, void **mac, size_t *mac_length,
+ const char *key_file, uid_t owner, gid_t group,
+ const void *text, size_t text_length);
+
+#endif /* WITH_OPENSSL */
+#endif /* PAM_TIMESTAMP_HMAC_OPENSSL_WRAPPER_H */
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 59ddcd65..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: 06/08/2020
+.\" 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" "06/08/2020" "Linux-PAM Manual" "Linux\-PAM Manual"
+.TH "PAM_TIMESTAMP" "8" "05/07/2023" "Linux\-PAM" "Linux\-PAM Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -47,26 +47,26 @@ directory for the user\&. When an application attempts to authenticate the user,
will treat a sufficiently recent timestamp file as grounds for succeeding\&.
.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 e19a0bcf..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>
@@ -50,15 +47,20 @@ for the user. When an application attempts to authenticate the user, a
<emphasis>pam_timestamp</emphasis> will treat a sufficiently recent timestamp
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>/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>
@@ -69,7 +71,7 @@ file as grounds for succeeding.
</varlistentry>
<varlistentry>
<term>
- <option>timestamp_timeout=<replaceable>number</replaceable></option>
+ timestamp_timeout=number
</term>
<listitem>
<para>
@@ -81,7 +83,7 @@ file as grounds for succeeding.
</varlistentry>
<varlistentry>
<term>
- <option>verbose</option>
+ verbose
</term>
<listitem>
<para>
@@ -91,7 +93,7 @@ file as grounds for succeeding.
</varlistentry>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
@@ -104,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>
@@ -112,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>
@@ -143,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
@@ -152,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
@@ -163,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>
@@ -175,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>
@@ -193,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 30be883c..c5fa6dfc 100644
--- a/modules/pam_timestamp/pam_timestamp.c
+++ b/modules/pam_timestamp/pam_timestamp.c
@@ -53,10 +53,19 @@
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
-#include <utmp.h>
#include <syslog.h>
#include <paths.h>
+#ifdef WITH_OPENSSL
+#include "hmac_openssl_wrapper.h"
+#else
#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>
@@ -79,11 +88,14 @@
#define BUFLEN PATH_MAX
#endif
+#define ROOT_USER 0
+#define ROOT_GROUP 0
+
/* Return PAM_SUCCESS if the given directory looks "safe". */
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". */
@@ -91,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')) {
@@ -193,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(
@@ -217,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;
}
@@ -449,6 +477,13 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv)
return PAM_AUTH_ERR;
}
+#ifdef WITH_OPENSSL
+ if (hmac_size(pamh, debug, &maclen)) {
+ return PAM_AUTH_ERR;
+ }
+#else
+ maclen = hmac_sha1_size();
+#endif /* WITH_OPENSSL */
/* Check that the file is the expected size. */
if (st.st_size == 0) {
/* Invalid, but may have been created by sudo. */
@@ -456,7 +491,7 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv)
return PAM_AUTH_ERR;
}
if (st.st_size !=
- (off_t)(strlen(path) + 1 + sizeof(then) + hmac_sha1_size())) {
+ (off_t)(strlen(path) + 1 + sizeof(then) + maclen)) {
pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' "
"appears to be corrupted", path);
close(fd);
@@ -487,8 +522,17 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv)
message_end = message + strlen(path) + 1 + sizeof(then);
/* Regenerate the MAC. */
- hmac_sha1_generate_file(pamh, &mac, &maclen, TIMESTAMPKEY, 0, 0,
- message, message_end - message);
+#ifdef WITH_OPENSSL
+ if (hmac_generate(pamh, debug, &mac, &maclen, TIMESTAMPKEY,
+ ROOT_USER, ROOT_GROUP, message, message_end - message)) {
+ close(fd);
+ free(message);
+ return PAM_AUTH_ERR;
+ }
+#else
+ hmac_sha1_generate_file(pamh, &mac, &maclen, TIMESTAMPKEY,
+ ROOT_USER, ROOT_GROUP, message, message_end - message);
+#endif /* WITH_OPENSSL */
if ((mac == NULL) ||
(memcmp(path, message, strlen(path)) != 0) ||
(memcmp(mac, message_end, maclen) != 0)) {
@@ -509,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 "
@@ -605,8 +657,16 @@ pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED, int argc, const char *
}
}
+#ifdef WITH_OPENSSL
+ if (hmac_size(pamh, debug, &maclen)) {
+ return PAM_SESSION_ERR;
+ }
+#else
+ maclen = hmac_sha1_size();
+#endif /* WITH_OPENSSL */
+
/* Generate the message. */
- text = malloc(strlen(path) + 1 + sizeof(now) + hmac_sha1_size());
+ text = malloc(strlen(path) + 1 + sizeof(now) + maclen);
if (text == NULL) {
pam_syslog(pamh, LOG_CRIT, "unable to allocate memory: %m");
return PAM_SESSION_ERR;
@@ -621,15 +681,21 @@ pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED, int argc, const char *
p += sizeof(now);
/* Generate the MAC and append it to the plaintext. */
- hmac_sha1_generate_file(pamh, &mac, &maclen,
- TIMESTAMPKEY,
- 0, 0,
- text, p - text);
+#ifdef WITH_OPENSSL
+ if (hmac_generate(pamh, debug, &mac, &maclen, TIMESTAMPKEY,
+ ROOT_USER, ROOT_GROUP, text, p - text)) {
+ free(text);
+ return PAM_SESSION_ERR;
+ }
+#else
+ hmac_sha1_generate_file(pamh, &mac, &maclen, TIMESTAMPKEY,
+ ROOT_USER, ROOT_GROUP, text, p - text);
if (mac == NULL) {
pam_syslog(pamh, LOG_ERR, "failure generating MAC: %m");
free(text);
return PAM_SESSION_ERR;
}
+#endif /* WITH_OPENSSL */
memmove(p, mac, maclen);
p += maclen;
free(mac);
@@ -691,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) ||
@@ -746,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);
@@ -796,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 50fb1a30..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: 06/08/2020
+.\" 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" "06/08/2020" "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
@@ -130,4 +130,4 @@ timestamp files and directories
\fBpam\fR(8)
.SH "AUTHOR"
.PP
-pam_tally was written by Nalin Dahyabhai\&.
+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 8ca5a755..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_tally was written by Nalin Dahyabhai.
+ pam_timestamp was written by Nalin Dahyabhai.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/modules/pam_timestamp/sha1.c b/modules/pam_timestamp/sha1.c
index af3ccb97..d713aed1 100644
--- a/modules/pam_timestamp/sha1.c
+++ b/modules/pam_timestamp/sha1.c
@@ -156,8 +156,8 @@ sha1_update(struct sha1_context *ctx, const unsigned char *data, size_t length)
while (l + ctx->pending_count >= SHA1_BLOCK_SIZE) {
c = ctx->pending_count;
t = SHA1_BLOCK_SIZE - c;
- memcpy(ctx->pending + c, &data[i], t);
- sha1_process(ctx, (uint32_t*) ctx->pending);
+ memcpy(ctx->pending.c + c, &data[i], t);
+ sha1_process(ctx, ctx->pending.i);
i += t;
l -= t;
ctx->pending_count = 0;
@@ -165,7 +165,7 @@ sha1_update(struct sha1_context *ctx, const unsigned char *data, size_t length)
/* Save what's left of the data block as a pending data block. */
c = ctx->pending_count;
- memcpy(ctx->pending + c, &data[i], l);
+ memcpy(ctx->pending.c + c, &data[i], l);
ctx->pending_count += l;
/* Update the message length. */
@@ -193,18 +193,17 @@ sha1_output(struct sha1_context *ctx, unsigned char *out)
/* Pad this block. */
c = ctx2.pending_count;
- memcpy(ctx2.pending + c,
+ memcpy(ctx2.pending.c + c,
padding, SHA1_BLOCK_SIZE - c);
/* Do we need to process two blocks now? */
if (c >= (SHA1_BLOCK_SIZE - (sizeof(uint32_t) * 2))) {
/* Process this block. */
- sha1_process(&ctx2,
- (uint32_t*) ctx2.pending);
+ sha1_process(&ctx2, ctx2.pending.i);
/* Set up another block. */
ctx2.pending_count = 0;
- memset(ctx2.pending, 0, SHA1_BLOCK_SIZE);
- ctx2.pending[0] =
+ memset(ctx2.pending.c, 0, SHA1_BLOCK_SIZE);
+ ctx2.pending.c[0] =
(c == SHA1_BLOCK_SIZE) ? 0x80 : 0;
}
@@ -217,11 +216,11 @@ sha1_output(struct sha1_context *ctx, unsigned char *out)
ctx2.counts[0] <<= 3;
ctx2.counts[0] = htonl(ctx2.counts[0]);
ctx2.counts[1] = htonl(ctx2.counts[1]);
- memcpy(ctx2.pending + 56,
+ memcpy(ctx2.pending.c + 56,
&ctx2.counts[1], sizeof(uint32_t));
- memcpy(ctx2.pending + 60,
+ memcpy(ctx2.pending.c + 60,
&ctx2.counts[0], sizeof(uint32_t));
- sha1_process(&ctx2, (uint32_t*) ctx2.pending);
+ sha1_process(&ctx2, ctx2.pending.i);
/* Output the data. */
out[ 3] = (ctx2.a >> 0) & 0xff;
diff --git a/modules/pam_timestamp/sha1.h b/modules/pam_timestamp/sha1.h
index a1c38917..69f432e6 100644
--- a/modules/pam_timestamp/sha1.h
+++ b/modules/pam_timestamp/sha1.h
@@ -46,7 +46,10 @@
struct sha1_context {
size_t count;
- unsigned char pending[SHA1_BLOCK_SIZE] PAM_ATTRIBUTE_ALIGNED(4);
+ union {
+ unsigned char c[SHA1_BLOCK_SIZE];
+ uint32_t i[SHA1_BLOCK_SIZE / sizeof(uint32_t)];
+ } pending;
uint32_t counts[2];
size_t pending_count;
uint32_t a, b, c, d, e;
diff --git a/modules/pam_tty_audit/Makefile.in b/modules/pam_tty_audit/Makefile.in
index 4b1b0ae0..e3f556bf 100644
--- a/modules/pam_tty_audit/Makefile.in
+++ b/modules/pam_tty_audit/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_tty_audit
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -911,7 +925,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_tty_audit/README b/modules/pam_tty_audit/README
index cae92c4c..91ea9cee 100644
--- a/modules/pam_tty_audit/README
+++ b/modules/pam_tty_audit/README
@@ -37,7 +37,7 @@ log_passwd
NOTES
When TTY auditing is enabled, it is inherited by all processes started by that
-user. In particular, daemons restarted by an user will still have TTY auditing
+user. In particular, daemons restarted by a user will still have TTY auditing
enabled, and audit TTY input even by other users unless auditing for these
users is explicitly disabled. Therefore, it is recommended to use disable=* as
the first option for most daemons using PAM.
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 7ecfcdb3..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: 06/08/2020
+.\" 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" "06/08/2020" "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
@@ -85,7 +85,7 @@ Success\&.
.RE
.SH "NOTES"
.PP
-When TTY auditing is enabled, it is inherited by all processes started by that user\&. In particular, daemons restarted by an user will still have TTY auditing enabled, and audit TTY input even by other users unless auditing for these users is explicitly disabled\&. Therefore, it is recommended to use
+When TTY auditing is enabled, it is inherited by all processes started by that user\&. In particular, daemons restarted by a user will still have TTY auditing enabled, and audit TTY input even by other users unless auditing for these users is explicitly disabled\&. Therefore, it is recommended to use
\fBdisable=*\fR
as the first option for most daemons using PAM\&.
.PP
diff --git a/modules/pam_tty_audit/pam_tty_audit.8.xml b/modules/pam_tty_audit/pam_tty_audit.8.xml
index e346c689..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,11 +122,11 @@
</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
- that user. In particular, daemons restarted by an user will still have
+ that user. In particular, daemons restarted by a user will still have
TTY auditing enabled, and audit TTY input even by other users unless
auditing for these users is explicitly disabled. Therefore, it is
recommended to use <option>disable=*</option> as the first option for
@@ -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 0f68b5cb..08ad8c69 100644
--- a/modules/pam_umask/Makefile.in
+++ b/modules/pam_umask/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_umask
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 0a4ad5ad..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: 06/08/2020
+.\" 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" "06/08/2020" "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_umask/pam_umask.c b/modules/pam_umask/pam_umask.c
index c9efe245..72b10e92 100644
--- a/modules/pam_umask/pam_umask.c
+++ b/modules/pam_umask/pam_umask.c
@@ -64,7 +64,8 @@ struct options_t {
int debug;
int usergroups;
int silent;
- char *umask;
+ const char *umask;
+ char *login_umask;
};
typedef struct options_t options_t;
@@ -79,7 +80,7 @@ parse_option (const pam_handle_t *pamh, const char *argv, options_t *options)
if (strcasecmp (argv, "debug") == 0)
options->debug = 1;
else if ((str = pam_str_skip_icase_prefix (argv, "umask=")) != NULL)
- options->umask = strdup (str);
+ options->umask = str;
else if (strcasecmp (argv, "usergroups") == 0)
options->usergroups = 1;
else if (strcasecmp (argv, "nousergroups") == 0)
@@ -102,10 +103,12 @@ get_options (pam_handle_t *pamh, options_t *options,
for ( ; argc-- > 0; argv++)
parse_option (pamh, *argv, options);
- if (options->umask == NULL)
- options->umask = pam_modutil_search_key (pamh, LOGIN_DEFS, "UMASK");
- if (options->umask == NULL)
- options->umask = pam_modutil_search_key (pamh, LOGIN_CONF, "UMASK");
+ if (options->umask == NULL) {
+ options->login_umask = pam_modutil_search_key (pamh, LOGIN_DEFS, "UMASK");
+ if (options->login_umask == NULL)
+ options->login_umask = pam_modutil_search_key (pamh, LOGIN_CONF, "UMASK");
+ options->umask = options->login_umask;
+ }
return 0;
}
@@ -216,7 +219,8 @@ pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED,
if (options.umask != NULL)
{
set_umask (options.umask);
- free (options.umask);
+ free (options.login_umask);
+ options.umask = options.login_umask = NULL;
}
setup_limits_from_gecos (pamh, &options, pw);
diff --git a/modules/pam_unix/Makefile.am b/modules/pam_unix/Makefile.am
index 6463872a..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)
@@ -47,14 +54,14 @@ bigcrypt_LDADD = @LIBCRYPT@
unix_chkpwd_SOURCES = unix_chkpwd.c md5_good.c md5_broken.c bigcrypt.c \
passverify.c
-unix_chkpwd_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ -DHELPER_COMPILE=\"unix_chkpwd\"
-unix_chkpwd_LDFLAGS = @PIE_LDFLAGS@
+unix_chkpwd_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@ -DHELPER_COMPILE=\"unix_chkpwd\"
+unix_chkpwd_LDFLAGS = @EXE_LDFLAGS@
unix_chkpwd_LDADD = @LIBCRYPT@ @LIBSELINUX@ @LIBAUDIT@
unix_update_SOURCES = unix_update.c md5_good.c md5_broken.c bigcrypt.c \
passverify.c
-unix_update_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ -DHELPER_COMPILE=\"unix_update\"
-unix_update_LDFLAGS = @PIE_LDFLAGS@
+unix_update_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@ -DHELPER_COMPILE=\"unix_update\"
+unix_update_LDFLAGS = @EXE_LDFLAGS@
unix_update_LDADD = @LIBCRYPT@ @LIBSELINUX@
if ENABLE_REGENERATE_MAN
diff --git a/modules/pam_unix/Makefile.in b/modules/pam_unix/Makefile.in
index bfc1a252..1de5b72b 100644
--- a/modules/pam_unix/Makefile.in
+++ b/modules/pam_unix/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -98,20 +98,24 @@ 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/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -153,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@)
@@ -244,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 \
@@ -431,6 +439,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -475,10 +484,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -488,12 +501,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -507,7 +524,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -526,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@
@@ -554,8 +572,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -566,11 +583,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -615,7 +637,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -623,9 +644,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -635,19 +653,21 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
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\" \
@@ -660,24 +680,23 @@ 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@
unix_chkpwd_SOURCES = unix_chkpwd.c md5_good.c md5_broken.c bigcrypt.c \
passverify.c
-unix_chkpwd_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ -DHELPER_COMPILE=\"unix_chkpwd\"
-unix_chkpwd_LDFLAGS = @PIE_LDFLAGS@
+unix_chkpwd_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@ -DHELPER_COMPILE=\"unix_chkpwd\"
+unix_chkpwd_LDFLAGS = @EXE_LDFLAGS@
unix_chkpwd_LDADD = @LIBCRYPT@ @LIBSELINUX@ @LIBAUDIT@
unix_update_SOURCES = unix_update.c md5_good.c md5_broken.c bigcrypt.c \
passverify.c
-unix_update_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ -DHELPER_COMPILE=\"unix_update\"
-unix_update_LDFLAGS = @PIE_LDFLAGS@
+unix_update_CFLAGS = $(AM_CFLAGS) @EXE_CFLAGS@ -DHELPER_COMPILE=\"unix_update\"
+unix_update_LDFLAGS = @EXE_LDFLAGS@
unix_update_LDADD = @LIBCRYPT@ @LIBSELINUX@
@ENABLE_REGENERATE_MAN_TRUE@dist_noinst_DATA = README
all: all-am
@@ -1254,7 +1273,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_unix/README b/modules/pam_unix/README
index a87f34a5..67a2d215 100644
--- a/modules/pam_unix/README
+++ b/modules/pam_unix/README
@@ -99,7 +99,7 @@ use_authtok
When password changing enforce the module to set the new password to the
one provided by a previously stacked password module (this is used in the
- example of the stacking of the pam_cracklib module documented below).
+ example of the stacking of the pam_passwdqc module documented below).
authtok_type=type
@@ -194,8 +194,8 @@ auth required pam_unix.so
# Ensure users account and password are still active
account required pam_unix.so
# Change the user's password, but at first check the strength
-# with pam_cracklib(8)
-password required pam_cracklib.so retry=3 minlen=6 difok=3
+# with pam_passwdqc(8)
+password required pam_passwdqc.so config=/etc/passwdqc.conf
password required pam_unix.so use_authtok nullok yescrypt
session required pam_unix.so
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 e08e4098..c1028668 100644
--- a/modules/pam_unix/bigcrypt.c
+++ b/modules/pam_unix/bigcrypt.c
@@ -29,9 +29,8 @@
#include <string.h>
#include <stdlib.h>
#include <security/_pam_macros.h>
-#ifdef HAVE_LIBXCRYPT
-#include <xcrypt.h>
-#elif defined(HAVE_CRYPT_H)
+#include "pam_inline.h"
+#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
@@ -58,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;
}
@@ -75,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);
@@ -111,10 +108,14 @@ char *bigcrypt(const char *key, const char *salt)
#endif
if (tmp_ptr == NULL) {
free(dec_c2_cryptbuf);
+#ifdef HAVE_CRYPT_R
+ free(cdata);
+#endif
return NULL;
}
/* 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 */
@@ -135,13 +136,18 @@ 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;
}
/* 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;
@@ -151,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/lckpwdf.-c b/modules/pam_unix/lckpwdf.-c
index 7145617e..c3e63155 100644
--- a/modules/pam_unix/lckpwdf.-c
+++ b/modules/pam_unix/lckpwdf.-c
@@ -73,17 +73,17 @@ static int lckpwdf(void)
lockfd = open(LOCKFILE, O_WRONLY);
if(lockfd == -1 && errno == ENOENT)
{
- security_context_t create_context;
+ char *create_context_raw;
int rc;
- if(getfilecon("/etc/passwd", &create_context))
+ if(getfilecon_raw("/etc/passwd", &create_context_raw))
return -1;
- rc = setfscreatecon(create_context);
- freecon(create_context);
+ rc = setfscreatecon_raw(create_context_raw);
+ freecon(create_context_raw);
if(rc)
return -1;
lockfd = open(LOCKFILE, O_CREAT | O_WRONLY, 0600);
- if(setfscreatecon(NULL))
+ if(setfscreatecon_raw(NULL))
return -1;
}
}
diff --git a/modules/pam_unix/md5.c b/modules/pam_unix/md5.c
index 9954536f..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
@@ -52,10 +53,10 @@ static void byteReverse(uint8_aligned *buf, unsigned longs)
*/
void MD5Name(MD5Init)(struct MD5Context *ctx)
{
- ctx->buf[0] = 0x67452301U;
- ctx->buf[1] = 0xefcdab89U;
- ctx->buf[2] = 0x98badcfeU;
- ctx->buf[3] = 0x10325476U;
+ ctx->buf.i[0] = 0x67452301U;
+ ctx->buf.i[1] = 0xefcdab89U;
+ ctx->buf.i[2] = 0x98badcfeU;
+ ctx->buf.i[3] = 0x10325476U;
ctx->bits[0] = 0;
ctx->bits[1] = 0;
@@ -81,7 +82,7 @@ void MD5Name(MD5Update)(struct MD5Context *ctx, unsigned const char *buf, unsign
/* Handle any leading odd-sized chunks */
if (t) {
- unsigned char *p = (unsigned char *) ctx->in + t;
+ unsigned char *p = ctx->in.c + t;
t = 64 - t;
if (len < t) {
@@ -89,24 +90,24 @@ void MD5Name(MD5Update)(struct MD5Context *ctx, unsigned const char *buf, unsign
return;
}
memcpy(p, buf, t);
- byteReverse(ctx->in, 16);
- MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ byteReverse(ctx->in.i, 16);
+ MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
buf += t;
len -= t;
}
/* Process data in 64-byte chunks */
while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- byteReverse(ctx->in, 16);
- MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ memcpy(ctx->in.c, buf, 64);
+ byteReverse(ctx->in.i, 16);
+ MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
buf += 64;
len -= 64;
}
/* Handle any remaining bytes of data. */
- memcpy(ctx->in, buf, len);
+ memcpy(ctx->in.c, buf, len);
}
/*
@@ -123,7 +124,7 @@ void MD5Name(MD5Final)(unsigned char digest[16], struct MD5Context *ctx)
/* Set the first char of padding to 0x80. This is safe since there is
always at least one byte free */
- p = ctx->in + count;
+ p = ctx->in.c + count;
*p++ = 0x80;
/* Bytes of padding needed to make 64 bytes */
@@ -133,24 +134,24 @@ 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, 16);
- MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
+ byteReverse(ctx->in.i, 16);
+ MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
/* Now fill the next block with 56 bytes */
- memset(ctx->in, 0, 56);
+ memset(ctx->in.c, 0, 56);
} else {
/* Pad block to 56 bytes */
memset(p, 0, count - 8);
}
- byteReverse(ctx->in, 14);
+ byteReverse(ctx->in.i, 14);
/* Append length in bits and transform */
- memcpy((uint32 *)ctx->in + 14, ctx->bits, 2*sizeof(uint32));
+ memcpy(ctx->in.i + 14, ctx->bits, 2*sizeof(uint32));
- MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
- byteReverse((unsigned char *) ctx->buf, 4);
- memcpy(digest, ctx->buf, 16);
- memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
+ MD5Name(MD5Transform)(ctx->buf.i, ctx->in.i);
+ byteReverse(ctx->buf.i, 4);
+ memcpy(digest, ctx->buf.c, 16);
+ pam_overwrite_object(ctx); /* In case it's sensitive */
}
#ifndef ASM_MD5
diff --git a/modules/pam_unix/md5.h b/modules/pam_unix/md5.h
index d9186b7f..3dc54bd2 100644
--- a/modules/pam_unix/md5.h
+++ b/modules/pam_unix/md5.h
@@ -7,9 +7,15 @@
typedef unsigned int uint32;
struct MD5Context {
- uint32 buf[4];
+ union {
+ uint32 i[4];
+ unsigned char c[16] PAM_ATTRIBUTE_ALIGNED(4);
+ } buf;
uint32 bits[2];
- unsigned char in[64] PAM_ATTRIBUTE_ALIGNED(4);
+ union {
+ uint32 i[16];
+ unsigned char c[64] PAM_ATTRIBUTE_ALIGNED(4);
+ } in;
};
void GoodMD5Init(struct MD5Context *);
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 b396b66c..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: 06/08/2020
+.\" 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" "06/08/2020" "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,43 +104,43 @@ 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
module (this is used in the example of the stacking of the
-\fBpam_cracklib\fR
+\fBpam_passwdqc\fR
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
@@ -264,8 +264,8 @@ auth required pam_unix\&.so
# Ensure users account and password are still active
account required pam_unix\&.so
# Change the user\*(Aqs password, but at first check the strength
-# with pam_cracklib(8)
-password required pam_cracklib\&.so retry=3 minlen=6 difok=3
+# with pam_passwdqc(8)
+password required pam_passwdqc\&.so config=/etc/passwdqc\&.conf
password required pam_unix\&.so use_authtok nullok yescrypt
session required pam_unix\&.so
diff --git a/modules/pam_unix/pam_unix.8.xml b/modules/pam_unix/pam_unix.8.xml
index fa02c3a6..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,21 +213,21 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_authtok</option>
+ use_authtok
</term>
<listitem>
<para>
When password changing enforce the module to set the new
password to the one provided by a previously stacked
<option>password</option> module (this is used in the
- example of the stacking of the <command>pam_cracklib</command>
+ example of the stacking of the <command>pam_passwdqc</command>
module documented below).
</para>
</listitem>
</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>
@@ -465,15 +462,15 @@ auth required pam_unix.so
# Ensure users account and password are still active
account required pam_unix.so
# Change the user's password, but at first check the strength
-# with pam_cracklib(8)
-password required pam_cracklib.so retry=3 minlen=6 difok=3
+# with pam_passwdqc(8)
+password required pam_passwdqc.so config=/etc/passwdqc.conf
password required pam_unix.so use_authtok nullok yescrypt
session required pam_unix.so
</programlisting>
</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_acct.c b/modules/pam_unix/pam_unix_acct.c
index de8d65c1..8f5ed3e0 100644
--- a/modules/pam_unix/pam_unix_acct.c
+++ b/modules/pam_unix/pam_unix_acct.c
@@ -189,7 +189,7 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv)
unsigned long long ctrl;
const void *void_uname;
const char *uname;
- int retval, daysleft;
+ int retval, daysleft = -1;
char buf[256];
D(("called."));
@@ -252,6 +252,10 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv)
_("Your account has expired; please contact your system administrator."));
break;
case PAM_AUTHTOK_ERR:
+ /*
+ * We ignore "password changed too early" error
+ * as it is relevant only for password change.
+ */
retval = PAM_SUCCESS;
/* fallthrough */
case PAM_SUCCESS:
diff --git a/modules/pam_unix/pam_unix_passwd.c b/modules/pam_unix/pam_unix_passwd.c
index e988b2e3..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 */
@@ -577,7 +568,7 @@ static int _pam_unix_approve_pass(pam_handle_t * pamh
}
}
- if (strlen(pass_new) > MAXPASS) {
+ if (strlen(pass_new) > PAM_MAX_RESP_SIZE) {
remark = _("You must choose a shorter password.");
D(("length exceeded [%s]", remark));
} else if (off(UNIX__IAMROOT, ctrl)) {
diff --git a/modules/pam_unix/passverify.c b/modules/pam_unix/passverify.c
index a571b4f7..81b10d88 100644
--- a/modules/pam_unix/passverify.c
+++ b/modules/pam_unix/passverify.c
@@ -19,9 +19,7 @@
#include <sys/time.h>
#include <sys/stat.h>
#include <fcntl.h>
-#ifdef HAVE_LIBXCRYPT
-#include <xcrypt.h>
-#elif defined(HAVE_CRYPT_H)
+#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
@@ -98,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 {
/*
@@ -149,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
@@ -243,12 +241,15 @@ PAMH_ARG_DECL(int get_account_info,
* ...and shadow password file entry for this user,
* if shadowing is enabled
*/
+ *spwdent = pam_modutil_getspnam(pamh, name);
+ if (*spwdent == NULL) {
#ifndef HELPER_COMPILE
- if (geteuid() || SELINUX_ENABLED)
+ /* still a chance the user can authenticate */
return PAM_UNIX_RUN_HELPER;
#endif
- *spwdent = pam_modutil_getspnam(pamh, name);
- if (*spwdent == NULL || (*spwdent)->sp_pwdp == NULL)
+ return PAM_AUTHINFO_UNAVAIL;
+ }
+ if ((*spwdent)->sp_pwdp == NULL)
return PAM_AUTHINFO_UNAVAIL;
}
} else {
@@ -289,13 +290,7 @@ PAMH_ARG_DECL(int check_shadow_expiry,
D(("account expired"));
return PAM_ACCT_EXPIRED;
}
-#if defined(CRYPT_CHECKSALT_AVAILABLE) && CRYPT_CHECKSALT_AVAILABLE
- if (spent->sp_lstchg == 0 ||
- crypt_checksalt(spent->sp_pwdp) == CRYPT_SALT_METHOD_LEGACY ||
- crypt_checksalt(spent->sp_pwdp) == CRYPT_SALT_TOO_CHEAP) {
-#else
if (spent->sp_lstchg == 0) {
-#endif
D(("need a new password"));
*daysleft = 0;
return PAM_NEW_AUTHTOK_REQD;
@@ -339,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
@@ -432,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
@@ -452,7 +447,7 @@ PAMH_ARG_DECL(char * create_password_hash,
algoid = "$6$";
} else { /* must be crypt/bigcrypt */
char tmppass[9];
- char *crypted;
+ char *hashed;
crypt_make_salt(salt, 2);
if (off(UNIX_BIGCRYPT, ctrl) && strlen(password) > 8) {
@@ -460,10 +455,10 @@ PAMH_ARG_DECL(char * create_password_hash,
tmppass[sizeof(tmppass)-1] = '\0';
password = tmppass;
}
- crypted = bigcrypt(password, salt);
- memset(tmppass, '\0', sizeof(tmppass));
+ hashed = bigcrypt(password, salt);
+ pam_overwrite_array(tmppass);
password = NULL;
- return crypted;
+ return hashed;
}
#if defined(CRYPT_GENSALT_IMPLEMENTS_AUTO_ENTROPY) && CRYPT_GENSALT_IMPLEMENTS_AUTO_ENTROPY
@@ -473,23 +468,11 @@ PAMH_ARG_DECL(char * create_password_hash,
*/
sp = crypt_gensalt_rn(algoid, rounds, NULL, 0, salt, sizeof(salt));
#else
-#ifdef HAVE_CRYPT_GENSALT_R
- if (on(UNIX_BLOWFISH_PASS, ctrl)) {
- char entropy[17];
- crypt_make_salt(entropy, sizeof(entropy) - 1);
- sp = crypt_gensalt_r (algoid, rounds,
- entropy, sizeof(entropy),
- salt, sizeof(salt));
- } else {
-#endif
- sp = stpcpy(salt, algoid);
- if (on(UNIX_ALGO_ROUNDS, ctrl)) {
- sp += snprintf(sp, sizeof(salt) - (16 + 1 + (sp - salt)), "rounds=%u$", rounds);
- }
- crypt_make_salt(sp, 16);
-#ifdef HAVE_CRYPT_GENSALT_R
+ sp = stpcpy(salt, algoid);
+ if (on(UNIX_ALGO_ROUNDS, ctrl)) {
+ sp += snprintf(sp, sizeof(salt) - (16 + 1 + (sp - salt)), "rounds=%u$", rounds);
}
-#endif
+ crypt_make_salt(sp, 16);
#endif /* CRYPT_GENSALT_IMPLEMENTS_AUTO_ENTROPY */
#ifdef HAVE_CRYPT_R
sp = NULL;
@@ -511,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
@@ -650,7 +636,7 @@ save_old_password(pam_handle_t *pamh, const char *forwho, const char *oldpass,
struct stat st;
size_t len = strlen(forwho);
#ifdef WITH_SELINUX
- security_context_t prev_context=NULL;
+ char *prev_context_raw = NULL;
#endif
if (howmany < 0) {
@@ -665,20 +651,20 @@ save_old_password(pam_handle_t *pamh, const char *forwho, const char *oldpass,
#ifdef WITH_SELINUX
if (SELINUX_ENABLED) {
- security_context_t passwd_context=NULL;
- if (getfilecon("/etc/passwd",&passwd_context)<0) {
+ char *passwd_context_raw = NULL;
+ if (getfilecon_raw("/etc/passwd",&passwd_context_raw)<0) {
return PAM_AUTHTOK_ERR;
};
- if (getfscreatecon(&prev_context)<0) {
- freecon(passwd_context);
+ if (getfscreatecon_raw(&prev_context_raw)<0) {
+ freecon(passwd_context_raw);
return PAM_AUTHTOK_ERR;
}
- if (setfscreatecon(passwd_context)) {
- freecon(passwd_context);
- freecon(prev_context);
+ if (setfscreatecon_raw(passwd_context_raw)) {
+ freecon(passwd_context_raw);
+ freecon(prev_context_raw);
return PAM_AUTHTOK_ERR;
}
- freecon(passwd_context);
+ freecon(passwd_context_raw);
}
#endif
pwfile = fopen(OPW_TMPFILE, "w");
@@ -796,12 +782,12 @@ done:
}
#ifdef WITH_SELINUX
if (SELINUX_ENABLED) {
- if (setfscreatecon(prev_context)) {
+ if (setfscreatecon_raw(prev_context_raw)) {
err = 1;
}
- if (prev_context)
- freecon(prev_context);
- prev_context=NULL;
+ if (prev_context_raw)
+ freecon(prev_context_raw);
+ prev_context_raw = NULL;
}
#endif
if (!err) {
@@ -821,26 +807,26 @@ PAMH_ARG_DECL(int unix_update_passwd,
int err = 1;
int oldmask;
#ifdef WITH_SELINUX
- security_context_t prev_context=NULL;
+ char *prev_context_raw = NULL;
#endif
oldmask = umask(077);
#ifdef WITH_SELINUX
if (SELINUX_ENABLED) {
- security_context_t passwd_context=NULL;
- if (getfilecon("/etc/passwd",&passwd_context)<0) {
+ char *passwd_context_raw = NULL;
+ if (getfilecon_raw("/etc/passwd",&passwd_context_raw)<0) {
return PAM_AUTHTOK_ERR;
};
- if (getfscreatecon(&prev_context)<0) {
- freecon(passwd_context);
+ if (getfscreatecon_raw(&prev_context_raw)<0) {
+ freecon(passwd_context_raw);
return PAM_AUTHTOK_ERR;
}
- if (setfscreatecon(passwd_context)) {
- freecon(passwd_context);
- freecon(prev_context);
+ if (setfscreatecon_raw(passwd_context_raw)) {
+ freecon(passwd_context_raw);
+ freecon(prev_context_raw);
return PAM_AUTHTOK_ERR;
}
- freecon(passwd_context);
+ freecon(passwd_context_raw);
}
#endif
pwfile = fopen(PW_TMPFILE, "w");
@@ -919,12 +905,12 @@ done:
}
#ifdef WITH_SELINUX
if (SELINUX_ENABLED) {
- if (setfscreatecon(prev_context)) {
+ if (setfscreatecon_raw(prev_context_raw)) {
err = 1;
}
- if (prev_context)
- freecon(prev_context);
- prev_context=NULL;
+ if (prev_context_raw)
+ freecon(prev_context_raw);
+ prev_context_raw = NULL;
}
#endif
if (!err) {
@@ -945,27 +931,27 @@ PAMH_ARG_DECL(int unix_update_shadow,
int oldmask;
int wroteentry = 0;
#ifdef WITH_SELINUX
- security_context_t prev_context=NULL;
+ char *prev_context_raw = NULL;
#endif
oldmask = umask(077);
#ifdef WITH_SELINUX
if (SELINUX_ENABLED) {
- security_context_t shadow_context=NULL;
- if (getfilecon("/etc/shadow",&shadow_context)<0) {
+ char *shadow_context_raw = NULL;
+ if (getfilecon_raw("/etc/shadow",&shadow_context_raw)<0) {
return PAM_AUTHTOK_ERR;
};
- if (getfscreatecon(&prev_context)<0) {
- freecon(shadow_context);
+ if (getfscreatecon_raw(&prev_context_raw)<0) {
+ freecon(shadow_context_raw);
return PAM_AUTHTOK_ERR;
}
- if (setfscreatecon(shadow_context)) {
- freecon(shadow_context);
- freecon(prev_context);
+ if (setfscreatecon_raw(shadow_context_raw)) {
+ freecon(shadow_context_raw);
+ freecon(prev_context_raw);
return PAM_AUTHTOK_ERR;
}
- freecon(shadow_context);
+ freecon(shadow_context_raw);
}
#endif
pwfile = fopen(SH_TMPFILE, "w");
@@ -1065,12 +1051,12 @@ PAMH_ARG_DECL(int unix_update_shadow,
#ifdef WITH_SELINUX
if (SELINUX_ENABLED) {
- if (setfscreatecon(prev_context)) {
+ if (setfscreatecon_raw(prev_context_raw)) {
err = 1;
}
- if (prev_context)
- freecon(prev_context);
- prev_context=NULL;
+ if (prev_context_raw)
+ freecon(prev_context_raw);
+ prev_context_raw = NULL;
}
#endif
@@ -1096,12 +1082,18 @@ helper_verify_password(const char *name, const char *p, int nullok)
if (pwd == NULL || hash == NULL) {
helper_log_err(LOG_NOTICE, "check pass; user unknown");
retval = PAM_USER_UNKNOWN;
+ } else if (p[0] == '\0' && nullok) {
+ if (hash[0] == '\0') {
+ retval = PAM_SUCCESS;
+ } else {
+ retval = PAM_AUTH_ERR;
+ }
} else {
retval = verify_pwd_hash(p, hash, nullok);
}
if (hash) {
- _pam_overwrite(hash);
+ pam_overwrite_string(hash);
_pam_drop(hash);
}
@@ -1111,6 +1103,7 @@ helper_verify_password(const char *name, const char *p, int nullok)
}
void
+PAM_FORMAT((printf, 2, 3))
helper_log_err(int err, const char *format, ...)
{
va_list args;
@@ -1180,49 +1173,6 @@ getuidname(uid_t uid)
return username;
}
-int
-read_passwords(int fd, int npass, char **passwords)
-{
- /* The passwords array must contain npass preallocated
- * buffers of length MAXPASS + 1
- */
- int rbytes = 0;
- int offset = 0;
- int i = 0;
- char *pptr;
- while (npass > 0) {
- rbytes = read(fd, passwords[i]+offset, MAXPASS+1-offset);
-
- if (rbytes < 0) {
- if (errno == EINTR) continue;
- break;
- }
- if (rbytes == 0)
- break;
-
- while (npass > 0 && (pptr=memchr(passwords[i]+offset, '\0', rbytes))
- != NULL) {
- rbytes -= pptr - (passwords[i]+offset) + 1;
- i++;
- offset = 0;
- npass--;
- if (rbytes > 0) {
- if (npass > 0)
- memcpy(passwords[i], pptr+1, rbytes);
- memset(pptr+1, '\0', rbytes);
- }
- }
- offset += rbytes;
- }
-
- /* clear up */
- if (offset > 0 && npass > 0) {
- memset(passwords[i], '\0', offset);
- }
-
- return i;
-}
-
#endif
/* ****************************************************************** *
* Copyright (c) Jan Rękorajski 1999.
diff --git a/modules/pam_unix/passverify.h b/modules/pam_unix/passverify.h
index e9a88fbf..463ef185 100644
--- a/modules/pam_unix/passverify.h
+++ b/modules/pam_unix/passverify.h
@@ -8,9 +8,7 @@
#define PAM_UNIX_RUN_HELPER PAM_CRED_INSUFFICIENT
-#define MAXPASS PAM_MAX_RESP_SIZE /* the maximum length of a password */
-
-#define OLD_PASSWORDS_FILE "/etc/security/opasswd"
+#define OLD_PASSWORDS_FILE SCONFIGDIR "/opasswd"
int
is_pwd_shadowed(const struct passwd *pwd);
@@ -50,8 +48,6 @@ setup_signals(void);
char *
getuidname(uid_t uid);
-int
-read_passwords(int fd, int npass, char **passwords);
#endif
#ifdef HELPER_COMPILE
diff --git a/modules/pam_unix/support.c b/modules/pam_unix/support.c
index 41db1f04..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
@@ -601,6 +601,9 @@ _unix_blankpasswd (pam_handle_t *pamh, unsigned long long ctrl, const char *name
char *salt = NULL;
int daysleft;
int retval;
+ int blank = 0;
+ int execloop;
+ int nonexistent_check = 1;
D(("called"));
@@ -624,32 +627,35 @@ _unix_blankpasswd (pam_handle_t *pamh, unsigned long long ctrl, const char *name
/* UNIX passwords area */
- retval = get_pwd_hash(pamh, name, &pwd, &salt);
-
- if (retval == PAM_UNIX_RUN_HELPER) {
- /* salt will not be set here so we can return immediately */
- if (_unix_run_helper_binary(pamh, NULL, ctrl, name) == PAM_SUCCESS)
- return 1;
- else
- return 0;
- }
+ /*
+ * Execute this loop twice: one checking the password hash of an existing
+ * user and another one for a non-existing user. This way the runtimes
+ * are equal, making it more difficult to differentiate existing from
+ * non-existing users.
+ */
+ for (execloop = 0; execloop < 2; ++execloop) {
+ retval = get_pwd_hash(pamh, name, &pwd, &salt);
- /* Does this user have a password? */
- if (salt == NULL) {
- retval = 0;
- } else {
- if (strlen(salt) == 0)
- retval = 1;
- else
- retval = 0;
+ if (retval == PAM_UNIX_RUN_HELPER) {
+ if (_unix_run_helper_binary(pamh, NULL, ctrl, name) == PAM_SUCCESS)
+ blank = nonexistent_check;
+ } else if (retval == PAM_USER_UNKNOWN) {
+ name = "root";
+ nonexistent_check = 0;
+ continue;
+ } else if (salt != NULL) {
+ if (strlen(salt) == 0)
+ blank = nonexistent_check;
+ }
+ name = "pam_unix_non_existent:";
+ /* non-existent user check will not affect the blank value */
}
/* tidy up */
-
if (salt)
_pam_delete(salt);
- return retval;
+ return blank;
}
int _unix_verify_password(pam_handle_t * pamh, const char *name
@@ -658,7 +664,7 @@ int _unix_verify_password(pam_handle_t * pamh, const char *name
struct passwd *pwd = NULL;
char *salt = NULL;
char *data_name;
- char pw[MAXPASS + 1];
+ char pw[PAM_MAX_RESP_SIZE + 1];
int retval;
@@ -685,7 +691,7 @@ int _unix_verify_password(pam_handle_t * pamh, const char *name
strcpy(data_name + sizeof(FAIL_PREFIX) - 1, name);
}
- if (p != NULL && strlen(p) > MAXPASS) {
+ if (p != NULL && strlen(p) > PAM_MAX_RESP_SIZE) {
memset(pw, 0, sizeof(pw));
p = strncpy(pw, p, sizeof(pw) - 1);
}
@@ -799,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 e5d40ad3..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: 06/08/2020
+.\" 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" "06/08/2020" "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 88647e58..556a2e2c 100644
--- a/modules/pam_unix/unix_chkpwd.c
+++ b/modules/pam_unix/unix_chkpwd.c
@@ -33,6 +33,7 @@
#include <security/_pam_macros.h>
#include "passverify.h"
+#include "pam_inline.h"
static int _check_expiry(const char *uname)
{
@@ -89,7 +90,7 @@ static int _audit_log(int type, const char *uname, int rc)
int main(int argc, char *argv[])
{
- char pass[MAXPASS + 1];
+ char pass[PAM_MAX_RESP_SIZE + 1];
char *option;
int npass, nullok;
int blankpass = 0;
@@ -136,7 +137,7 @@ int main(int argc, char *argv[])
user = getuidname(getuid());
/* if the caller specifies the username, verify that user
matches it */
- if (strcmp(user, argv[1])) {
+ if (user == NULL || strcmp(user, argv[1])) {
user = argv[1];
/* no match -> permanently change to the real user and proceed */
if (setuid(getuid()) != 0)
@@ -162,7 +163,7 @@ int main(int argc, char *argv[])
}
/* read the password from stdin (a pipe from the pam_unix module) */
- npass = read_passwords(STDIN_FILENO, 1, passwords);
+ npass = pam_read_passwords(STDIN_FILENO, 1, passwords);
if (npass != 1) { /* is it a valid password? */
helper_log_err(LOG_DEBUG, "no password supplied");
@@ -175,7 +176,7 @@ int main(int argc, char *argv[])
retval = helper_verify_password(user, pass, nullok);
- memset(pass, '\0', MAXPASS); /* 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 4a7a3d1b..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: 06/08/2020
+.\" 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" "06/08/2020" "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 6ea7ea51..49a70ff3 100644
--- a/modules/pam_unix/unix_update.c
+++ b/modules/pam_unix/unix_update.c
@@ -32,14 +32,15 @@
#include <security/_pam_macros.h>
#include "passverify.h"
+#include "pam_inline.h"
static int
set_password(const char *forwho, const char *shadow, const char *remember)
{
struct passwd *pwd = NULL;
int retval;
- char pass[MAXPASS + 1];
- char towhat[MAXPASS + 1];
+ char pass[PAM_MAX_RESP_SIZE + 1];
+ char towhat[PAM_MAX_RESP_SIZE + 1];
int npass = 0;
/* we don't care about number format errors because the helper
should be called internally only */
@@ -49,20 +50,23 @@ set_password(const char *forwho, const char *shadow, const char *remember)
/* read the password from stdin (a pipe from the pam_unix module) */
- npass = read_passwords(STDIN_FILENO, 2, passwords);
+ npass = pam_read_passwords(STDIN_FILENO, 2, passwords);
if (npass != 2) { /* is it a valid password? */
if (npass == 1) {
helper_log_err(LOG_DEBUG, "no new password supplied");
- memset(pass, '\0', MAXPASS);
+ 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);
@@ -97,8 +101,8 @@ set_password(const char *forwho, const char *shadow, const char *remember)
}
done:
- memset(pass, '\0', MAXPASS);
- memset(towhat, '\0', MAXPASS);
+ 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 6473b138..c19b4231 100644
--- a/modules/pam_userdb/Makefile.in
+++ b/modules/pam_userdb/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_userdb
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -376,6 +379,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -420,10 +424,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -433,12 +441,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -452,7 +464,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -471,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@
@@ -499,8 +512,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -511,11 +523,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -560,7 +577,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -568,9 +584,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -580,6 +593,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -592,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)
@@ -917,7 +932,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_userdb/README b/modules/pam_userdb/README
index 1765591b..9d931bb5 100644
--- a/modules/pam_userdb/README
+++ b/modules/pam_userdb/README
@@ -25,7 +25,8 @@ db=/path/database
debug
- Print debug information.
+ Print debug information. Note that password hashes, both from db and
+ computed, will be printed to syslog.
dump
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 40bd2006..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: 06/08/2020
+.\" 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" "06/08/2020" "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\&.
+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 fa628ada..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,17 +93,18 @@
</varlistentry>
<varlistentry>
<term>
- <option>debug</option>
+ debug
</term>
<listitem>
<para>
- Print debug information.
+ Print debug information. Note that password hashes, both from db
+ and computed, will be printed to syslog.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- <option>dump</option>
+ dump
</term>
<listitem>
<para>
@@ -117,7 +115,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>icase</option>
+ icase
</term>
<listitem>
<para>
@@ -130,7 +128,7 @@
<varlistentry>
<term>
- <option>try_first_pass</option>
+ try_first_pass
</term>
<listitem>
<para>
@@ -145,7 +143,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_first_pass</option>
+ use_first_pass
</term>
<listitem>
<para>
@@ -160,7 +158,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>unknown_ok</option>
+ unknown_ok
</term>
<listitem>
<para>
@@ -173,7 +171,7 @@
</varlistentry>
<varlistentry>
<term>
- <option>key_only</option>
+ key_only
</term>
<listitem>
<para>
@@ -190,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
@@ -198,7 +196,7 @@
</para>
</refsect1>
- <refsect1 id='pam_userdb-return_values'>
+ <refsect1 xml:id="pam_userdb-return_values">
<title>RETURN VALUES</title>
<variablelist>
<varlistentry>
@@ -258,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>
@@ -283,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 a46cd276..297403b0 100644
--- a/modules/pam_userdb/pam_userdb.c
+++ b/modules/pam_userdb/pam_userdb.c
@@ -17,9 +17,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
-#ifdef HAVE_LIBXCRYPT
-#include <xcrypt.h>
-#elif defined(HAVE_CRYPT_H)
+#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
@@ -64,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) ||
@@ -133,7 +131,7 @@ _pam_parse (pam_handle_t *pamh, int argc, const char **argv,
/*
- * Looks up an user name in a database and checks the password
+ * Looks up a user name in a database and checks the password
*
* return values:
* 1 = User not found
@@ -183,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);
}
@@ -194,7 +192,7 @@ user_lookup (pam_handle_t *pamh, const char *database, const char *cryptmode,
}
if (data.dptr != NULL) {
- int compare = 0;
+ int compare = -2;
if (ctrl & PAM_KEY_ONLY_ARG)
{
@@ -209,36 +207,51 @@ user_lookup (pam_handle_t *pamh, const char *database, const char *cryptmode,
char *cryptpw = NULL;
if (data.dsize < 13) {
- compare = -2;
+ /* hash is too short */
+ pam_syslog(pamh, LOG_INFO, "password hash in database is too short");
} else if (ctrl & PAM_ICASE_ARG) {
- compare = -2;
+ pam_syslog(pamh, LOG_INFO,
+ "case-insensitive comparison only works with plaintext passwords");
} else {
+ /* libdb is not guaranteed to produce null terminated strings */
+ char *pwhash = strndup(data.dptr, data.dsize);
+
+ if (pwhash == NULL) {
+ pam_syslog(pamh, LOG_CRIT, "strndup failed: data.dptr");
+ } else {
#ifdef HAVE_CRYPT_R
- struct crypt_data *cdata = NULL;
- cdata = malloc(sizeof(*cdata));
- if (cdata != NULL) {
- cdata->initialized = 0;
- cryptpw = crypt_r(pass, data.dptr, cdata);
- }
+ struct crypt_data *cdata = NULL;
+ cdata = malloc(sizeof(*cdata));
+ if (cdata == NULL) {
+ pam_syslog(pamh, LOG_CRIT, "malloc failed: struct crypt_data");
+ } else {
+ cdata->initialized = 0;
+ cryptpw = crypt_r(pass, pwhash, cdata);
+ }
#else
- cryptpw = crypt (pass, data.dptr);
+ cryptpw = crypt (pass, pwhash);
#endif
- if (cryptpw && strlen(cryptpw) == (size_t)data.dsize) {
- compare = memcmp(data.dptr, cryptpw, data.dsize);
- } else {
- compare = -2;
- if (ctrl & PAM_DEBUG_ARG) {
- if (cryptpw)
- pam_syslog(pamh, LOG_INFO, "lengths of computed and stored hashes differ");
- else
- pam_syslog(pamh, LOG_INFO, "crypt() returned NULL");
+ if (cryptpw && strlen(cryptpw) == (size_t)data.dsize) {
+ compare = memcmp(data.dptr, cryptpw, data.dsize);
+ } else {
+ if (ctrl & PAM_DEBUG_ARG) {
+ if (cryptpw) {
+ pam_syslog(pamh, LOG_INFO, "lengths of computed and stored hashes differ");
+ pam_syslog(pamh, LOG_INFO, "computed hash: %s", cryptpw);
+ } else {
+ pam_syslog(pamh, LOG_ERR, "crypt() returned NULL");
+ }
+ }
}
- }
#ifdef HAVE_CRYPT_R
- free(cdata);
+ 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 125235b4..28b96739 100644
--- a/modules/pam_usertype/Makefile.in
+++ b/modules/pam_usertype/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_usertype
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -374,6 +377,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -418,10 +422,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -431,12 +439,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -450,7 +462,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -469,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@
@@ -497,8 +510,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -509,11 +521,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -558,7 +575,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -566,9 +582,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -578,6 +591,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -590,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)
@@ -913,7 +928,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 16a18080..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: 06/08/2020
-.\" 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" "06/08/2020" "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 2807c306..cfd9c8bb 100644
--- a/modules/pam_usertype/pam_usertype.c
+++ b/modules/pam_usertype/pam_usertype.c
@@ -139,8 +139,11 @@ pam_usertype_get_uid(struct pam_usertype_opts *opts,
"error retrieving information about user %s", username);
}
+ pam_modutil_getpwnam(pamh, "root");
+
return PAM_USER_UNKNOWN;
}
+ pam_modutil_getpwnam(pamh, "pam_usertype_non_existent:");
*_uid = pwd->pw_uid;
@@ -191,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) {
@@ -199,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
@@ -250,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 b3118f88..aff1ee54 100644
--- a/modules/pam_warn/Makefile.in
+++ b/modules/pam_warn/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -97,18 +97,21 @@ host_triplet = @host@
check_PROGRAMS = tst-pam_warn-retval$(EXEEXT)
subdir = modules/pam_warn
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -378,6 +381,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -422,10 +426,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -435,12 +443,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -454,7 +466,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -473,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@
@@ -501,8 +514,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -513,11 +525,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -562,7 +579,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -570,9 +586,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -582,6 +595,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -594,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)
@@ -932,7 +947,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 c2e2b15a..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: 06/08/2020
+.\" 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" "06/08/2020" "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 6059555c..d9ea36d3 100644
--- a/modules/pam_wheel/Makefile.in
+++ b/modules/pam_wheel/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_wheel
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/modules/pam_wheel/README b/modules/pam_wheel/README
index bcb2d297..5dae4b61 100644
--- a/modules/pam_wheel/README
+++ b/modules/pam_wheel/README
@@ -41,9 +41,9 @@ trust
use_uid
- The check for wheel membership will be done against the current uid instead
- of the original one (useful when jumping with su from one account to
- another for example).
+ 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
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 5aa4f148..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: 06/08/2020
+.\" 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" "06/08/2020" "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,26 +56,26 @@ 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 for wheel membership will be done against the current uid instead of the original one (useful when jumping with su from one account to another for example)\&.
+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
diff --git a/modules/pam_wheel/pam_wheel.8.xml b/modules/pam_wheel/pam_wheel.8.xml
index b32f5e2b..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,28 +115,28 @@
</varlistentry>
<varlistentry>
<term>
- <option>use_uid</option>
+ use_uid
</term>
<listitem>
<para>
- The check for wheel membership will be done against
- the current uid instead of the original one (useful when
- jumping with su from one account to another for example).
+ 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>
- <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_wheel/pam_wheel.c b/modules/pam_wheel/pam_wheel.c
index a025ebaf..179f56b3 100644
--- a/modules/pam_wheel/pam_wheel.c
+++ b/modules/pam_wheel/pam_wheel.c
@@ -44,17 +44,6 @@
#include <security/pam_ext.h>
#include "pam_inline.h"
-/* checks if a user is on a list of members of the GID 0 group */
-static int is_on_list(char * const *list, const char *member)
-{
- while (list && *list) {
- if (strcmp(*list, member) == 0)
- return 1;
- list++;
- }
- return 0;
-}
-
/* argument parsing */
#define PAM_DEBUG_ARG 0x0001
@@ -130,25 +119,37 @@ perform_check (pam_handle_t *pamh, int ctrl, const char *use_group)
}
if (ctrl & PAM_USE_UID_ARG) {
- tpwd = pam_modutil_getpwuid (pamh, getuid());
- if (!tpwd) {
- if (ctrl & PAM_DEBUG_ARG) {
+ tpwd = pam_modutil_getpwuid (pamh, getuid());
+ if (tpwd == NULL) {
+ if (ctrl & PAM_DEBUG_ARG) {
pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
- }
- return PAM_SERVICE_ERR;
- }
- fromsu = tpwd->pw_name;
+ }
+ return PAM_SERVICE_ERR;
+ }
+ fromsu = tpwd->pw_name;
} else {
- fromsu = pam_modutil_getlogin(pamh);
- if (fromsu) {
- tpwd = pam_modutil_getpwnam (pamh, fromsu);
- }
- if (!fromsu || !tpwd) {
- if (ctrl & PAM_DEBUG_ARG) {
- pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
- }
- return PAM_SERVICE_ERR;
- }
+ fromsu = pam_modutil_getlogin(pamh);
+
+ /* if getlogin fails try a fallback to PAM_RUSER */
+ if (fromsu == NULL) {
+ const char *rhostname;
+
+ retval = pam_get_item(pamh, PAM_RHOST, (const void **)&rhostname);
+ if (retval != PAM_SUCCESS || rhostname == NULL) {
+ retval = pam_get_item(pamh, PAM_RUSER, (const void **)&fromsu);
+ }
+ }
+
+ if (fromsu != NULL) {
+ tpwd = pam_modutil_getpwnam (pamh, fromsu);
+ }
+
+ if (fromsu == NULL || tpwd == NULL) {
+ if (ctrl & PAM_DEBUG_ARG) {
+ pam_syslog(pamh, LOG_NOTICE, "who is running me ?!");
+ }
+ return PAM_SERVICE_ERR;
+ }
}
/*
@@ -163,7 +164,7 @@ perform_check (pam_handle_t *pamh, int ctrl, const char *use_group)
grp = pam_modutil_getgrnam (pamh, use_group);
}
- if (!grp || (!grp->gr_mem && (tpwd->pw_gid != grp->gr_gid))) {
+ if (grp == NULL) {
if (ctrl & PAM_DEBUG_ARG) {
if (!use_group[0]) {
pam_syslog(pamh, LOG_NOTICE, "no members in a GID 0 group");
@@ -188,7 +189,7 @@ perform_check (pam_handle_t *pamh, int ctrl, const char *use_group)
* user has the "wheel" (sic) group as its primary group.
*/
- if (is_on_list(grp->gr_mem, fromsu) || (tpwd->pw_gid == grp->gr_gid)) {
+ if (pam_modutil_user_in_group_uid_gid(pamh, tpwd->pw_uid, grp->gr_gid)) {
if (ctrl & PAM_DENY_ARG) {
retval = PAM_PERM_DENIED;
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 7025c400..4d3a6b79 100644
--- a/modules/pam_xauth/Makefile.in
+++ b/modules/pam_xauth/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -96,18 +96,21 @@ host_triplet = @host@
@HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map
subdir = modules/pam_xauth
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
@@ -373,6 +376,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -417,10 +421,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -430,12 +438,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -449,7 +461,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -468,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@
@@ -496,8 +509,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -508,11 +520,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -557,7 +574,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -565,9 +581,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -577,6 +590,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -589,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)
@@ -912,7 +927,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
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 9521f0cf..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: 06/08/2020
+.\" 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" "06/08/2020" "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 ae731211..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;
}
@@ -532,7 +545,7 @@ pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED,
xauth, "-f", cookiefile, "nlist", display,
NULL) == 0) {
#ifdef WITH_SELINUX
- security_context_t context = NULL;
+ char *context_raw = NULL;
#endif
PAM_MODUTIL_DEF_PRIVS(privs);
@@ -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. */
@@ -626,16 +638,16 @@ pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED,
if (is_selinux_enabled() > 0) {
struct selabel_handle *ctx = selabel_open(SELABEL_CTX_FILE, NULL, 0);
if (ctx != NULL) {
- if (selabel_lookup(ctx, &context,
- xauthority + sizeof(XAUTHENV), S_IFREG) != 0) {
+ if (selabel_lookup_raw(ctx, &context_raw,
+ xauthority + sizeof(XAUTHENV), S_IFREG) != 0) {
pam_syslog(pamh, LOG_WARNING,
"could not get SELinux label for '%s'",
xauthority + sizeof(XAUTHENV));
}
selabel_close(ctx);
- if (setfscreatecon(context)) {
+ if (setfscreatecon_raw(context_raw)) {
pam_syslog(pamh, LOG_WARNING,
- "setfscreatecon(%s) failed: %m", context);
+ "setfscreatecon_raw(%s) failed: %m", context_raw);
}
}
}
@@ -646,9 +658,9 @@ pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED,
"error creating temporary file `%s': %m",
xauthority + sizeof(XAUTHENV));
#ifdef WITH_SELINUX
- if (context != NULL) {
- free(context);
- setfscreatecon(NULL);
+ if (context_raw != NULL) {
+ free(context_raw);
+ setfscreatecon_raw(NULL);
}
#endif /* WITH_SELINUX */
if (fd >= 0)
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 14873926..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.4.0\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: 2020-06-08 10:18+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,61 +18,48 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -212,134 +199,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -348,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:1088
+#: 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
@@ -394,22 +346,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -439,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -469,62 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -544,7 +441,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -552,28 +449,36 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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/POTFILES.in b/po/POTFILES.in
index f96264b9..cd057f1f 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,100 +1,95 @@
-./libpamc/pamc_client.c
-./libpamc/pamc_converse.c
-./libpamc/pamc_load.c
-./libpam_misc/help_env.c
-./libpam_misc/misc_conv.c
-./libpam/pam_account.c
-./libpam/pam_audit.c
-./libpam/pam_auth.c
-./libpam/pam_data.c
-./libpam/pam_delay.c
-./libpam/pam_dispatch.c
-./libpam/pam_dynamic.c
-./libpam/pam_end.c
-./libpam/pam_env.c
-./libpam/pam_get_authtok.c
-./libpam/pam_handlers.c
-./libpam/pam_item.c
-./libpam/pam_misc.c
-./libpam/pam_modutil_cleanup.c
-./libpam/pam_modutil_getgrgid.c
-./libpam/pam_modutil_getgrnam.c
-./libpam/pam_modutil_getlogin.c
-./libpam/pam_modutil_getpwnam.c
-./libpam/pam_modutil_getpwuid.c
-./libpam/pam_modutil_getspnam.c
-./libpam/pam_modutil_ingroup.c
-./libpam/pam_modutil_ioloop.c
-./libpam/pam_password.c
-./libpam/pam_prelude.c
-./libpam/pam_session.c
-./libpam/pam_start.c
-./libpam/pam_strerror.c
-./libpam/pam_syslog.c
-./libpam/pam_vprompt.c
-./modules/pam_access/pam_access.c
-./modules/pam_cracklib/pam_cracklib.c
-./modules/pam_debug/pam_debug.c
-./modules/pam_deny/pam_deny.c
-./modules/pam_echo/pam_echo.c
-./modules/pam_env/pam_env.c
-./modules/pam_exec/pam_exec.c
-./modules/pam_faildelay/pam_faildelay.c
-./modules/pam_faillock/main.c
-./modules/pam_faillock/pam_faillock.c
-./modules/pam_filter/pam_filter.c
-./modules/pam_filter/upperLOWER/upperLOWER.c
-./modules/pam_ftp/pam_ftp.c
-./modules/pam_group/pam_group.c
-./modules/pam_issue/pam_issue.c
-./modules/pam_keyinit/pam_keyinit.c
-./modules/pam_lastlog/pam_lastlog.c
-./modules/pam_limits/pam_limits.c
-./modules/pam_listfile/pam_listfile.c
-./modules/pam_localuser/pam_localuser.c
-./modules/pam_loginuid/pam_loginuid.c
-./modules/pam_mail/pam_mail.c
-./modules/pam_mkhomedir/pam_mkhomedir.c
-./modules/pam_motd/pam_motd.c
-./modules/pam_namespace/md5.c
-./modules/pam_namespace/pam_namespace.c
-./modules/pam_nologin/pam_nologin.c
-./modules/pam_permit/pam_permit.c
-./modules/pam_pwhistory/opasswd.c
-./modules/pam_pwhistory/pam_pwhistory.c
-./modules/pam_rhosts/pam_rhosts.c
-./modules/pam_rootok/pam_rootok.c
-./modules/pam_securetty/pam_securetty.c
-./modules/pam_selinux/pam_selinux.c
-./modules/pam_selinux/pam_selinux_check.c
-./modules/pam_sepermit/pam_sepermit.c
-./modules/pam_shells/pam_shells.c
-./modules/pam_stress/pam_stress.c
-./modules/pam_succeed_if/pam_succeed_if.c
-./modules/pam_tally/pam_tally_app.c
-./modules/pam_tally/pam_tally.c
-./modules/pam_tally2/pam_tally2_app.c
-./modules/pam_tally2/pam_tally2.c
-./modules/pam_time/pam_time.c
-./modules/pam_timestamp/pam_timestamp.c
-./modules/pam_timestamp/pam_timestamp_check.c
-./modules/pam_tty_audit/pam_tty_audit.c
-./modules/pam_umask/pam_umask.c
-./modules/pam_unix/bigcrypt.c
-./modules/pam_unix/bigcrypt_main.c
-./modules/pam_unix/md5_broken.c
-./modules/pam_unix/md5.c
-./modules/pam_unix/md5_crypt.c
-./modules/pam_unix/md5_good.c
-./modules/pam_unix/pam_unix_acct.c
-./modules/pam_unix/pam_unix_auth.c
-./modules/pam_unix/pam_unix_passwd.c
-./modules/pam_unix/pam_unix_sess.c
-./modules/pam_unix/passverify.c
-./modules/pam_unix/support.c
-./modules/pam_unix/unix_chkpwd.c
-./modules/pam_unix/yppasswd_xdr.c
-./modules/pam_userdb/pam_userdb.c
-./modules/pam_warn/pam_warn.c
-./modules/pam_wheel/pam_wheel.c
-./modules/pam_xauth/pam_xauth.c
+libpam/pam_account.c
+libpam/pam_audit.c
+libpam/pam_auth.c
+libpam/pam_data.c
+libpam/pam_delay.c
+libpam/pam_dispatch.c
+libpam/pam_dynamic.c
+libpam/pam_end.c
+libpam/pam_env.c
+libpam/pam_get_authtok.c
+libpam/pam_handlers.c
+libpam/pam_item.c
+libpam/pam_misc.c
+libpam/pam_modutil_cleanup.c
+libpam/pam_modutil_getgrgid.c
+libpam/pam_modutil_getgrnam.c
+libpam/pam_modutil_getlogin.c
+libpam/pam_modutil_getpwnam.c
+libpam/pam_modutil_getpwuid.c
+libpam/pam_modutil_getspnam.c
+libpam/pam_modutil_ingroup.c
+libpam/pam_modutil_ioloop.c
+libpam/pam_password.c
+libpam/pam_prelude.c
+libpam/pam_session.c
+libpam/pam_start.c
+libpam/pam_strerror.c
+libpam/pam_syslog.c
+libpam/pam_vprompt.c
+libpam_misc/help_env.c
+libpam_misc/misc_conv.c
+libpamc/pamc_client.c
+libpamc/pamc_converse.c
+libpamc/pamc_load.c
+modules/pam_access/pam_access.c
+modules/pam_debug/pam_debug.c
+modules/pam_deny/pam_deny.c
+modules/pam_echo/pam_echo.c
+modules/pam_env/pam_env.c
+modules/pam_exec/pam_exec.c
+modules/pam_faildelay/pam_faildelay.c
+modules/pam_faillock/main.c
+modules/pam_faillock/pam_faillock.c
+modules/pam_filter/pam_filter.c
+modules/pam_filter/upperLOWER/upperLOWER.c
+modules/pam_ftp/pam_ftp.c
+modules/pam_group/pam_group.c
+modules/pam_issue/pam_issue.c
+modules/pam_keyinit/pam_keyinit.c
+modules/pam_lastlog/pam_lastlog.c
+modules/pam_limits/pam_limits.c
+modules/pam_listfile/pam_listfile.c
+modules/pam_localuser/pam_localuser.c
+modules/pam_loginuid/pam_loginuid.c
+modules/pam_mail/pam_mail.c
+modules/pam_mkhomedir/pam_mkhomedir.c
+modules/pam_motd/pam_motd.c
+modules/pam_namespace/md5.c
+modules/pam_namespace/pam_namespace.c
+modules/pam_nologin/pam_nologin.c
+modules/pam_permit/pam_permit.c
+modules/pam_pwhistory/opasswd.c
+modules/pam_pwhistory/pam_pwhistory.c
+modules/pam_rhosts/pam_rhosts.c
+modules/pam_rootok/pam_rootok.c
+modules/pam_securetty/pam_securetty.c
+modules/pam_selinux/pam_selinux.c
+modules/pam_selinux/pam_selinux_check.c
+modules/pam_sepermit/pam_sepermit.c
+modules/pam_shells/pam_shells.c
+modules/pam_stress/pam_stress.c
+modules/pam_succeed_if/pam_succeed_if.c
+modules/pam_time/pam_time.c
+modules/pam_timestamp/pam_timestamp.c
+modules/pam_timestamp/pam_timestamp_check.c
+modules/pam_tty_audit/pam_tty_audit.c
+modules/pam_umask/pam_umask.c
+modules/pam_unix/bigcrypt.c
+modules/pam_unix/bigcrypt_main.c
+modules/pam_unix/md5.c
+modules/pam_unix/md5_broken.c
+modules/pam_unix/md5_crypt.c
+modules/pam_unix/md5_good.c
+modules/pam_unix/pam_unix_acct.c
+modules/pam_unix/pam_unix_auth.c
+modules/pam_unix/pam_unix_passwd.c
+modules/pam_unix/pam_unix_sess.c
+modules/pam_unix/passverify.c
+modules/pam_unix/support.c
+modules/pam_unix/unix_chkpwd.c
+modules/pam_unix/yppasswd_xdr.c
+modules/pam_userdb/pam_userdb.c
+modules/pam_warn/pam_warn.c
+modules/pam_wheel/pam_wheel.c
+modules/pam_xauth/pam_xauth.c
diff --git a/po/af.po b/po/af.po
index e25f3eca..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 b52f0e28..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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.gmo b/po/ar.gmo
index 1ed32a92..e7523c79 100644
--- a/po/ar.gmo
+++ b/po/ar.gmo
Binary files differ
diff --git a/po/ar.po b/po/ar.po
index 0846f43d..fd2d5b39 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -4,78 +4,67 @@
#
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# Yaron Shahrabani <sh.yaron@gmail.com>, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2011-11-30 06:57-0500\n"
-"Last-Translator: Tomáš Mráz <tmraz@fedoraproject.org>\n"
-"Language-Team: Arabic <trans-ar@lists.fedoraproject.org>\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-"
+"pam/master/ar/>\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
-"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
-"X-Generator: Zanata 3.8.3\n"
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Weblate 4.1.1\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...الوقت ÙŠÙ†ÙØ¯...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...عذرًا، انتهى الوقت!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "محادثة خاطئة (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "كلمة السر التي تم إدخالها مستخدمة Ø¨Ø§Ù„ÙØ¹Ù„. اختر كلمة سر أخرى."
@@ -216,137 +205,104 @@ msgstr "يحتاج التطبيق إلى استدعاء libpam مرة أخرى"
msgid "Unknown PAM error"
msgstr "خطأ PAM غير معروÙ"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "لا يوجد اختلا٠عن كلمة السر القديمة"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "كلمة سر يمكن قراءتها من الجهتين"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "لم يتم سوى تغيير حالة الأحرÙ"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "كلمة السر الجديدة شديدة الشبه بكلمة السر القديمة"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "كلمة السر شديدة البساطة"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "كلمة مرور Ù…Ù„ØªÙØ©"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "لم يتم إدخال كلمة السر"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...الوقت ÙŠÙ†ÙØ¯...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "تعذر تغيير كلمة السر الخاصة بـ NIS."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...عذرًا، انتهى الوقت!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "كلمة سر سيئة: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "محادثة خاطئة (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -359,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:1088
+#: 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
@@ -406,22 +362,22 @@ msgstr "لديك بريد قديم ÙÙŠ مجلد %s."
msgid "You have mail in folder %s."
msgstr "لديك بريد ÙÙŠ مجلد %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "كلمة السر التي تم إدخالها مستخدمة Ø¨Ø§Ù„ÙØ¹Ù„. اختر كلمة سر أخرى."
@@ -453,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "تم تخصيص سياق الأمان %s"
@@ -483,63 +439,7 @@ msgstr "ÙØ´Ù„ pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "تسجيل الدخول: ÙØ´Ù„ تشعيب: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "خطأ ÙÙŠ التصديق"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "خطأ ÙÙŠ الخدمة"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "مستخدم غير معروÙ"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "خطأ غير معروÙ"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: تم إعطاء رقم خطأ لـ --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: خيار غير معرو٠%s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: لا يمكن إعادة تعيين ÙƒØ§ÙØ© المستخدمين إلى رقم غير Ø§Ù„ØµÙØ±\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -562,7 +462,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "مطلوب منك تغيير كلمة السر على الÙور (كلمة السر قديمة جدًا)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -574,30 +474,91 @@ msgstr[4] ""
msgstr[5] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "لم يتم إدخال كلمة السر"
+
+#: 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: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 "لا يوجد اختلا٠عن كلمة السر القديمة"
+
+#~ msgid "is a palindrome"
+#~ msgstr "كلمة سر يمكن قراءتها من الجهتين"
+
+#~ msgid "case changes only"
+#~ msgstr "لم يتم سوى تغيير حالة الأحرÙ"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "كلمة السر الجديدة شديدة الشبه بكلمة السر القديمة"
+
+#~ msgid "is too simple"
+#~ msgstr "كلمة السر شديدة البساطة"
+
+#~ msgid "is rotated"
+#~ msgstr "كلمة مرور Ù…Ù„ØªÙØ©"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "كلمة سر سيئة: %s"
+
+#~ msgid "Authentication error"
+#~ msgstr "خطأ ÙÙŠ التصديق"
+
+#~ msgid "Service error"
+#~ msgstr "خطأ ÙÙŠ الخدمة"
+
+#~ msgid "Unknown user"
+#~ msgstr "مستخدم غير معروÙ"
+
+#~ msgid "Unknown error"
+#~ msgstr "خطأ غير معروÙ"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: تم إعطاء رقم خطأ لـ ‎--reset=‎\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: خيار غير معرو٠%s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: لا يمكن إعادة تعيين ÙƒØ§ÙØ© المستخدمين إلى رقم غير Ø§Ù„ØµÙØ±\n"
diff --git a/po/as.gmo b/po/as.gmo
index e42ca3f7..63eda1e8 100644
--- a/po/as.gmo
+++ b/po/as.gmo
Binary files differ
diff --git a/po/as.po b/po/as.po
index c119243c..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: 2020-06-08 10:18+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,62 +23,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...সময় পাৰ হৈ গৈছে...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...কà§à¦·à¦®à¦¾ কৰিব, আপোনাৰ বাবে সময় অনà§à¦¤ হ'ল!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "ভà§à¦² সমà§à¦¬à¦¾à¦¦ (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "গà§à¦ªà§à¦¤ শবà§à¦¦ সলনি কৰা বাতিল কৰা হ'ল ।"
@@ -219,137 +206,100 @@ msgstr "অনà§à¦ªà§à§°à§Ÿà§‹à¦—ে আকৌ libpam ক মাতিব লà
msgid "Unknown PAM error"
msgstr "অজà§à¦žà¦¾à¦¤ PAM ভà§à¦²"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "পà§à§°à¦£à¦¿à¦Ÿà§‹à§° সৈতে à¦à¦•েই"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "মেমৰি আবনà§à¦Ÿà¦¨ তà§à§°à§à¦Ÿà¦¿"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "à¦à¦Ÿà¦¾ অনà§à¦²à§‹à¦®â€Œ-বিলোম বাকà§à¦¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "অকল কেচ সলনি কৰা"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "পৰণিটোৰ সৈতে বহà§à¦¤ à¦à¦•েই"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "বৰ সৰল"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "পকোৱা হৈছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "পৰà§à¦¯à¦¾à¦ªà§à¦¤ character classes নাই"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "à¦à¦Ÿà¦¾à§° পিছত à¦à¦Ÿà¦¾ বহà§à¦¤à§‹ à¦à¦•েই আখৰ আছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "অতি দীঘল à¦à¦•েধৰণৰ আখৰ কà§à§°à¦®à§° অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰে"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "কিবা ধৰনত বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° নাম আছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "কোনো গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦ দিয়া হোৱা নাই"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...সময় পাৰ হৈ গৈছে...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦ সলনি কৰিব পৰা নহয় ।"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...কà§à¦·à¦®à¦¾ কৰিব, আপোনাৰ বাবে সময় অনà§à¦¤ হ'ল!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "বেয়া গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "ভà§à¦² সমà§à¦¬à¦¾à¦¦ (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s বিফল: পà§à§°à¦¸à§à¦¥à¦¾à¦¨à§° কোড %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -358,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:1088
+#: 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
@@ -405,22 +355,22 @@ msgstr "%s ফোলডাৰত আপোনাৰ পà§à§°à¦£à¦¿ ডাক à¦
msgid "You have mail in folder %s."
msgstr "%s ফোলà§à¦¡à¦¾à§°à¦¤ আপোনাৰ ডাক আছে ।"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "'%s' পঞà§à¦œà¦¿à¦•া সৃষà§à¦Ÿà¦¿ কৰা হৈছে ।"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "%s পঞà§à¦œà¦¿à¦•া সৃষà§à¦Ÿà¦¿ আৰৠআৰমà§à¦­ কৰিব পৰা নাই ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "পাছৱাৰà§à¦¡ ইতিমধà§à¦¯à§‡ বà§à¦¯à§±à¦¹à¦¾à§° হৈছে।"
@@ -451,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "চাবি নিৰà§à¦®à¦¾à¦£à§° সনà§à¦¦à§°à§à¦­ %s নিযà§à¦•à§à¦¤ কৰা হ'ল"
@@ -481,66 +431,7 @@ msgstr "pam_set_item() কৰোà¦à¦¤à§‡ বিফল\n"
msgid "login: failure forking: %m"
msgstr "পà§à§°à§±à§‡à¦¶: forking ত বিফল: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "হিচাপ অসà§à¦¥à¦¾à§Ÿà§€à§°à§‚পে লক কৰা হৈছে (%ld ছেকেণà§à¦¡ আৰৠআছে)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "পà§à§°à¦®à¦¾à¦£à§€à¦•ৰণত ভà§à¦²"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "সেৱাৰ ভà§à¦²"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "অজà§à¦žà¦¾à¦¤ বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§‹à¦à¦¤à¦¾"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "অজà§à¦žà¦¾à¦¤ ভà§à¦²"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= লৈ বেয়া সংখà§à¦¯à¦¾ দিয়া গৈছে\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: অপৰিচিত বিকলà§à¦ª %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§‹à¦à¦¤à¦¾à¦• শূণà§à¦¯ নোহোৱা অৱসà§à¦¥à¦¾à¦²à§ˆ পà§à¦¨à¦ƒ পà§à§°à¦¤à¦¿à¦·à§à¦ à¦¾ কৰিব নোৱাৰি\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "পà§à§°à§±à§‡à¦¶ বিফল শেহতীয়া বিফলতা -à§° পৰা\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "অভিগমà§à¦¯à¦¤à¦¾à§° অনà§à¦®à¦¤à¦¿ (শেহতীয়া অভিগমà§à¦¯à¦¤à¦¾ %ld ছেকেণà§à¦¡ আগতে) ।"
@@ -563,7 +454,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "আপà§à¦¨à¦¿ আপোনাৰ গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦ সলনি কৰাটো পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ হৈ পৰিছে (গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦ পà§à§°à¦£à¦¿ হ'ল)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -571,31 +462,120 @@ msgstr[0] "সকীয়নী: আপোনাৰ গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦ %d
msgstr[1] "সকীয়নী: আপোনাৰ গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦ %d দিনত অনà§à¦¤ হ'ব"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "কোনো গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦ দিয়া হোৱা নাই"
+
+#: 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: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 "পà§à§°à¦£à¦¿à¦Ÿà§‹à§° সৈতে à¦à¦•েই"
+
+#~ msgid "memory allocation error"
+#~ msgstr "মেমৰি আবনà§à¦Ÿà¦¨ তà§à§°à§à¦Ÿà¦¿"
+
+#~ msgid "is a palindrome"
+#~ msgstr "à¦à¦Ÿà¦¾ অনà§à¦²à§‹à¦®â€Œ-বিলোম বাকà§à¦¯"
+
+#~ msgid "case changes only"
+#~ msgstr "অকল কেচ সলনি কৰা"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "পৰণিটোৰ সৈতে বহà§à¦¤ à¦à¦•েই"
+
+#~ msgid "is too simple"
+#~ msgstr "বৰ সৰল"
+
+#~ msgid "is rotated"
+#~ msgstr "পকোৱা হৈছে"
+
+#~ msgid "not enough character classes"
+#~ msgstr "পৰà§à¦¯à¦¾à¦ªà§à¦¤ character classes নাই"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "à¦à¦Ÿà¦¾à§° পিছত à¦à¦Ÿà¦¾ বহà§à¦¤à§‹ à¦à¦•েই আখৰ আছে"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "অতি দীঘল à¦à¦•েধৰণৰ আখৰ কà§à§°à¦®à§° অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰে"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "কিবা ধৰনত বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° নাম আছে"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "বেয়া গà§à¦ªà§à¦¤à¦¶à¦¬à§à¦¦: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "হিচাপ অসà§à¦¥à¦¾à§Ÿà§€à§°à§‚পে লক কৰা হৈছে (%ld ছেকেণà§à¦¡ আৰৠআছে)"
+
+#~ msgid "Authentication error"
+#~ msgstr "পà§à§°à¦®à¦¾à¦£à§€à¦•ৰণত ভà§à¦²"
+
+#~ msgid "Service error"
+#~ msgstr "সেৱাৰ ভà§à¦²"
+
+#~ msgid "Unknown user"
+#~ msgstr "অজà§à¦žà¦¾à¦¤ বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§‹à¦à¦¤à¦¾"
+
+#~ msgid "Unknown error"
+#~ msgstr "অজà§à¦žà¦¾à¦¤ ভà§à¦²"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= লৈ বেয়া সংখà§à¦¯à¦¾ দিয়া গৈছে\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: অপৰিচিত বিকলà§à¦ª %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§‹à¦à¦¤à¦¾à¦• শূণà§à¦¯ নোহোৱা অৱসà§à¦¥à¦¾à¦²à§ˆ পà§à¦¨à¦ƒ পà§à§°à¦¤à¦¿à¦·à§à¦ à¦¾ কৰিব নোৱাৰি\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/az.po b/po/az.po
index 83459905..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.1\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Bağışlayın, vaxtınız bitdi!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -215,134 +202,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr ""
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Bağışlayın, vaxtınız bitdi!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -351,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:1088
+#: 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
@@ -397,22 +349,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -442,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -472,62 +424,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -547,7 +444,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -555,28 +452,36 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 c0d34d47..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: 2020-06-08 10:18+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,61 +21,48 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -215,134 +202,101 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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[3] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -353,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:1088
+#: 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
@@ -399,22 +353,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -444,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -474,62 +428,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -549,7 +448,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -559,31 +458,39 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 e22cd0d2..dd6ce4bc 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 9c5800de..85091196 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -5,78 +5,65 @@
# Translators:
# Valentin Laskov <laskov@festa.bg>, 2012-2013
# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2013-08-09 10:31-0400\n"
-"Last-Translator: Valentin Laskov <laskov@festa.bg>\n"
-"Language-Team: Bulgarian <trans-bg@lists.fedoraproject.org>\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-"
+"pam/master/bg/>\n"
"Language: bg\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.3.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Времето изтича...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...СъжалÑваме, Вашето време изтече!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "погрешен разговор (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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
-#, fuzzy, c-format
+#: libpam/pam_get_authtok.c:42
+#, c-format
msgid "Current %s password: "
-msgstr "Ðова %s парола: "
+msgstr "Nastoyashta парола %s: "
-#: libpam/pam_get_authtok.c:42
-#, fuzzy
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr "Ðова парола: "
+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
-#, fuzzy
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "ПромÑната на паролата е прекратена."
@@ -219,137 +206,101 @@ msgstr "Приложението Ñе нуждае от повторно извÐ
msgid "Unknown PAM error"
msgstr "Ðепозната PAM грешка"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "е Ñъщата като Ñтарата"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "грешка при заделÑне на памет"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "е палиндром"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "променена е Ñамо големината на буквите"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "е твърде подобна на Ñтарата"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "е много леÑна"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "е завъртÑна"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "недоÑтатъчно клаÑове знаци"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "Ñъдържа твърде много еднакви поÑледователни знаци"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "Ñъдържа твърде дълга еднообразна поÑледователноÑÑ‚ знаци"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "под нÑкаква форма Ñъдържа името на потребителÑ"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Ðе е предоÑтавена парола"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Времето изтича...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS парола не може да бъде променена."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...СъжалÑваме, Вашето време изтече!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ЛОШРПÐРОЛÐ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "погрешен разговор (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s Ñе провали: код на грешка %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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"
+"Usage: %s [--dir /път/към/директориÑта-на-tally] [--user потребителÑко_име] "
+"[--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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: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 мин. за отключване)"
+msgstr[1] "(оÑтават %d мин. за отключване)"
-#: modules/pam_faillock/pam_faillock.c:650
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 " %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 ""
@@ -360,19 +311,19 @@ 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:1088
-#, fuzzy, c-format
+#: 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
#, fuzzy
-msgid "You have no mail."
+msgid "You do not have any new mail."
msgstr "Имате нови пиÑма."
#: modules/pam_mail/pam_mail.c:292
@@ -407,29 +358,29 @@ msgstr "Имате Ñтари пиÑма в папка %s."
msgid "You have mail in folder %s."
msgstr "Имате пиÑма в папка %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Създаване на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Ðе мога да Ñъздам и наÑÑ‚Ñ€Ð¾Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: 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?"
@@ -440,33 +391,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:629
-#, 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:645
-#, fuzzy, c-format
+#: modules/pam_selinux/pam_selinux.c:655
+#, c-format
msgid "Key creation context %s has been assigned."
-msgstr "Зададен е Key Creation Context %s"
+msgstr "Зададен е key creation context %s."
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
@@ -483,122 +433,143 @@ msgstr "pam_set_item() не уÑÐ¿Ñ \n"
msgid "login: failure forking: %m"
msgstr "вход: неуÑпех при Ñтартиране: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Ðкаунтът е заключен временно (%ld оÑтават Ñекунди)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Грешка при удоÑтоверÑването"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Грешка в уÑлугата"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Ðепознат потребител"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Ðепозната грешка"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Грешно чиÑло, подадено на --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Ðеразпозната Ð¾Ð¿Ñ†Ð¸Ñ %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Ðе мога да уÑÑ‚Ð°Ð½Ð¾Ð²Ñ Ð²Ñички потребители на non-zero\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "ВлÑзъл ÐеуÑпехи ПоÑледен неуÑпех От\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
-#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
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 ""
"Срокът на акаунта Ви е изтекъл; молÑ, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора на "
-"ÑиÑтемата"
+"ÑиÑтемата."
#: modules/pam_unix/pam_unix_acct.c:238
-#, fuzzy
msgid ""
"You are required to change your password immediately (administrator "
"enforced)."
-msgstr "ИзиÑква Ñе веднага да Ñмените паролата Ñи (изиÑкано от root)"
+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:265 modules/pam_unix/pam_unix_acct.c:272
-#, fuzzy, c-format
+#: 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[1] "Внимание: Ñрокът на паролата Ви изтича Ñлед %d дни"
+msgstr[0] "Внимание: Ñрокът на паролата Ви изтича Ñлед %d ден."
+msgstr[1] "Внимание: Ñрокът на паролата Ви изтича Ñлед %d дни."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
-#, fuzzy, c-format
+#: 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 парола не може да бъде променена."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "Ðе е предоÑтавена парола."
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "Паролата не е променена."
+
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
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."
-#: 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 "е Ñъщата като Ñтарата"
+
+#~ msgid "memory allocation error"
+#~ msgstr "грешка при заделÑне на памет"
+
+#~ msgid "is a palindrome"
+#~ msgstr "е палиндром"
+
+#~ msgid "case changes only"
+#~ msgstr "променена е Ñамо големината на буквите"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "е твърде подобна на Ñтарата"
+
+#~ msgid "is too simple"
+#~ msgstr "е много леÑна"
+
+#~ msgid "is rotated"
+#~ msgstr "е завъртÑна"
+
+#~ msgid "not enough character classes"
+#~ msgstr "недоÑтатъчно клаÑове знаци"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "Ñъдържа твърде много еднакви поÑледователни знаци"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "Ñъдържа твърде дълга еднообразна поÑледователноÑÑ‚ знаци"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "под нÑкаква форма Ñъдържа името на потребителÑ"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ЛОШРПÐРОЛÐ: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Ðкаунтът е заключен временно (%ld оÑтават Ñекунди)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Грешка при удоÑтоверÑването"
+
+#~ msgid "Service error"
+#~ msgstr "Грешка в уÑлугата"
+
+#~ msgid "Unknown user"
+#~ msgstr "Ðепознат потребител"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ðепозната грешка"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Грешно чиÑло, подадено на --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Ðеразпозната Ð¾Ð¿Ñ†Ð¸Ñ %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: Ðе мога да уÑÑ‚Ð°Ð½Ð¾Ð²Ñ Ð²Ñички потребители на non-zero\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/bn.gmo b/po/bn.gmo
index 04a888dc..83588ba4 100644
--- a/po/bn.gmo
+++ b/po/bn.gmo
Binary files differ
diff --git a/po/bn.po b/po/bn.po
index 336344e2..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: 2020-06-08 10:18+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,62 +27,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...সময় সমাপà§à¦¤à¦¿à¦° পথে...⎠\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...দà§à¦ƒà¦–িত, সময় সমাপà§à¦¤!⎠\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "তà§à¦°à§à¦Ÿà¦¿à¦ªà§‚রà§à¦£ তথà§à¦¯à¦¬à¦¿à¦¨à¦¿à¦®à§Ÿ (%d)âŽ\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "পাসওয়ারà§à¦¡ পরিবরà§à¦¤à¦¨ পà§à¦°à¦•à§à¦°à¦¿à§Ÿà¦¾ বাতিল করা হয়েছে।"
@@ -223,138 +210,100 @@ msgstr "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশন দà§à¦¬à¦¾à¦°à¦¾ পà§à¦¨à¦°à¦¾à
msgid "Unknown PAM error"
msgstr "PAM সংকà§à¦°à¦¾à¦¨à§à¦¤ অজানা তà§à¦°à§à¦Ÿà¦¿"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "পà§à¦°à§‹à¦¨à§‹à¦Ÿà¦¿à¦° অনà§à¦°à§‚প"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "মেমরি বরাদà§à¦¦ করতে সমসà§à¦¯à¦¾"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "উভমà§à¦–à§€ শবà§à¦¦"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° হরফের ছাà¦à¦¦ পরিবরà§à¦¤à¦¨ করা হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "পà§à¦°à§‹à¦¨à§‹ পাসওয়ারà§à¦¡à§‡à¦° সমতূলà§à¦¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "জটিল নয়"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "ঘোরানো হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "পরà§à¦¯à¦¾à¦ªà§à¦¤ অকà§à¦·à¦° শà§à¦°à§‡à¦£à§€ উপসà§à¦¥à¦¿à¦¤ নেই"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "à¦à¦•ই অকà§à¦·à¦° অতà§à¦¯à¦¾à¦§à¦¿à¦• বার কà§à¦°à¦®à¦¾à¦—ত বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-#, fuzzy
-msgid "contains too long of a monotonic character sequence"
-msgstr "à¦à¦•ই অকà§à¦·à¦° অতà§à¦¯à¦¾à¦§à¦¿à¦• বার কà§à¦°à¦®à¦¾à¦—ত বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "কোনো রূপে বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী নাম অনà§à¦¤à¦°à§à¦­à§à¦•à§à¦¤ হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "কোনো পাসওয়ারà§à¦¡ উলà§à¦²à¦¿à¦–িত হয়নি"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...সময় সমাপà§à¦¤à¦¿à¦° পথে...⎠\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS পাসওয়ারà§à¦¡ পরিবরà§à¦¤à¦¨ করা সমà§à¦­à¦¬ হয়নি।"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...দà§à¦ƒà¦–িত, সময় সমাপà§à¦¤!⎠\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "পাসওয়ারà§à¦¡ ভাল নয়: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿à¦ªà§‚রà§à¦£ তথà§à¦¯à¦¬à¦¿à¦¨à¦¿à¦®à§Ÿ (%d)âŽ\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s বিফল: পà§à¦°à¦¸à§à¦¥à¦¾à¦¨à¦•ালীন কোড %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -363,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:1088
+#: 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
@@ -410,22 +359,22 @@ msgstr "%s ফোলà§à¦¡à¦¾à¦°à§‡ পà§à¦°à§‹à¦¨à§‹ মেইল উপসà§
msgid "You have mail in folder %s."
msgstr "%s ফোলà§à¦¡à¦¾à¦°à§‡ মেইল উপসà§à¦¥à¦¿à¦¤ রয়েছে।"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "'%s' ডিরেকà§à¦Ÿà¦°à¦¿ নিরà§à¦®à¦¾à¦£ করা হচà§à¦›à§‡à¥¤"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "ডিরেকà§à¦Ÿà¦°à¦¿ '%s' নিরà§à¦®à¦¾à¦£ ও আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "পাসওয়ারà§à¦¡ পূরà§à¦¬à§‡ বà§à¦¯à¦¬à¦¹à§ƒà¦¤ হয়েছে। à¦à¦•টি পৃথক পাসওয়ারà§à¦¡ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤"
@@ -457,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "কি নিরà§à¦®à¦¾à¦£à§‡à¦° Context %s ধারà§à¦¯ করা হয়েছে"
@@ -487,66 +436,7 @@ msgstr "pam_set_item() করতে বà§à¦¯à¦°à§à¦¥\n"
msgid "login: failure forking: %m"
msgstr "লগ-ইন: fork করতে বà§à¦¯à¦°à§à¦¥: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "সাময়িকরূপে অà§à¦¯à¦¾à¦•াউনà§à¦Ÿ লক করা হয়েছে (%ld সেকেনà§à¦¡ অবশিষà§à¦Ÿ)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "অনà§à¦®à§‹à¦¦à¦¨ সংকà§à¦°à¦¾à¦¨à§à¦¤ সমসà§à¦¯à¦¾"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "পরিসেবা সংকà§à¦°à¦¾à¦¨à§à¦¤ সমসà§à¦¯à¦¾"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "অজানা বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "অজানা সমসà§à¦¯à¦¾"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= à¦à¦° জনà§à¦¯ ভà§à¦² সংখà§à¦¯à¦¾ উলà§à¦²à¦¿à¦–িত\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: অজানা বিকলà§à¦ª %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: সব বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর জনà§à¦¯ শূণà§à¦¯-ভিনà§à¦¨ মান ধারà§à¦¯ করতে বà§à¦¯à¦°à§à¦¥\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "লগ-ইন বিফলতা সরà§à¦¬à¦¶à§‡à¦· বিফলতা চিহà§à¦¨à¦¿à¦¤ সà§à¦¥à¦¾à¦¨ থেকে\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "পà§à¦°à¦¬à§‡à¦¶à¦¾à¦§à¦¿à¦•ার পà§à¦°à¦¦à¦¾à¦¨ করা হয়েছে (%ld পূরà§à¦¬à§‡ সরà§à¦¬à¦¶à§‡à¦· লগ-ইন করা হয়েছে)।"
@@ -571,7 +461,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "আপনার পাসওয়ারà§à¦¡ à¦à¦‡ মà§à¦¹à§‚রà§à¦¤à§‡ পরিবরà§à¦¤à¦¨ করা আবশà§à¦¯à¦• (password-র মেয়াদ পূরà§à¦£ হয়েছে)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -579,30 +469,120 @@ msgstr[0] "সতরà§à¦•বাণী: %d দিন পরে পাসওয়à¦
msgstr[1] "সতরà§à¦•বাণী: %d দিন পরে পাসওয়ারà§à¦¡à§‡à¦° মেয়াদপূরà§à¦£ হবে"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "কোনো পাসওয়ারà§à¦¡ উলà§à¦²à¦¿à¦–িত হয়নি"
+
+#: 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: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 "পà§à¦°à§‹à¦¨à§‹à¦Ÿà¦¿à¦° অনà§à¦°à§‚প"
+
+#~ msgid "memory allocation error"
+#~ msgstr "মেমরি বরাদà§à¦¦ করতে সমসà§à¦¯à¦¾"
+
+#~ msgid "is a palindrome"
+#~ msgstr "উভমà§à¦–à§€ শবà§à¦¦"
+
+#~ msgid "case changes only"
+#~ msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° হরফের ছাà¦à¦¦ পরিবরà§à¦¤à¦¨ করা হয়েছে"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "পà§à¦°à§‹à¦¨à§‹ পাসওয়ারà§à¦¡à§‡à¦° সমতূলà§à¦¯"
+
+#~ msgid "is too simple"
+#~ msgstr "জটিল নয়"
+
+#~ msgid "is rotated"
+#~ msgstr "ঘোরানো হয়েছে"
+
+#~ msgid "not enough character classes"
+#~ msgstr "পরà§à¦¯à¦¾à¦ªà§à¦¤ অকà§à¦·à¦° শà§à¦°à§‡à¦£à§€ উপসà§à¦¥à¦¿à¦¤ নেই"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "à¦à¦•ই অকà§à¦·à¦° অতà§à¦¯à¦¾à¦§à¦¿à¦• বার কà§à¦°à¦®à¦¾à¦—ত বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়েছে"
+
+#, fuzzy
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "à¦à¦•ই অকà§à¦·à¦° অতà§à¦¯à¦¾à¦§à¦¿à¦• বার কà§à¦°à¦®à¦¾à¦—ত বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়েছে"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "কোনো রূপে বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী নাম অনà§à¦¤à¦°à§à¦­à§à¦•à§à¦¤ হয়েছে"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "পাসওয়ারà§à¦¡ ভাল নয়: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "সাময়িকরূপে অà§à¦¯à¦¾à¦•াউনà§à¦Ÿ লক করা হয়েছে (%ld সেকেনà§à¦¡ অবশিষà§à¦Ÿ)"
+
+#~ msgid "Authentication error"
+#~ msgstr "অনà§à¦®à§‹à¦¦à¦¨ সংকà§à¦°à¦¾à¦¨à§à¦¤ সমসà§à¦¯à¦¾"
+
+#~ msgid "Service error"
+#~ msgstr "পরিসেবা সংকà§à¦°à¦¾à¦¨à§à¦¤ সমসà§à¦¯à¦¾"
+
+#~ msgid "Unknown user"
+#~ msgstr "অজানা বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
+
+#~ msgid "Unknown error"
+#~ msgstr "অজানা সমসà§à¦¯à¦¾"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= à¦à¦° জনà§à¦¯ ভà§à¦² সংখà§à¦¯à¦¾ উলà§à¦²à¦¿à¦–িত\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: অজানা বিকলà§à¦ª %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: সব বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর জনà§à¦¯ শূণà§à¦¯-ভিনà§à¦¨ মান ধারà§à¦¯ করতে বà§à¦¯à¦°à§à¦¥\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/bn_IN.gmo b/po/bn_IN.gmo
index aca51432..60578a7e 100644
--- a/po/bn_IN.gmo
+++ b/po/bn_IN.gmo
Binary files differ
diff --git a/po/bn_IN.po b/po/bn_IN.po
index 915400bb..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: 2020-06-08 10:18+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,62 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...সময় সমাপà§à¦¤à¦¿à¦° পথে...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...দà§à¦ƒà¦–িত, সময় সমাপà§à¦¤!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "তà§à¦°à§à¦Ÿà¦¿à¦ªà§‚রà§à¦£ তথà§à¦¯à¦¬à¦¿à¦¨à¦¿à¦®à§Ÿ (conversation) (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "পাসওয়ারà§à¦¡ পরিবরà§à¦¤à¦¨à§‡à¦° করà§à¦® পরিতà§à¦¯à¦¾à¦— করা হয়েছে।"
@@ -218,138 +205,100 @@ msgstr "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশন দà§à¦¬à¦¾à¦°à¦¾ পà§à¦¨à¦°à¦¾à
msgid "Unknown PAM error"
msgstr "PAM সংকà§à¦°à¦¾à¦¨à§à¦¤ অজানা তà§à¦°à§à¦Ÿà¦¿"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "পà§à¦°à§‹à¦¨à§‹à¦Ÿà¦¿à¦° অনà§à¦°à§‚প"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "মেমরি বরাদà§à¦¦ করতে সমসà§à¦¯à¦¾"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "উভমà§à¦–à§€ শবà§à¦¦"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° হরফের ছাà¦à¦¦ পরিবরà§à¦¤à¦¨ করা হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "পà§à¦°à§‹à¦¨à§‹ পাসওয়ারà§à¦¡à§‡à¦° সমতূলà§à¦¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "জটিল নয়"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "ঘোরানো হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "পরà§à¦¯à¦¾à¦ªà§à¦¤ অকà§à¦·à¦° শà§à¦°à§‡à¦£à§€ উপসà§à¦¥à¦¿à¦¤ নেই"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "à¦à¦•ই অকà§à¦·à¦° অতà§à¦¯à¦¾à¦§à¦¿à¦• বার কà§à¦°à¦®à¦¾à¦—ত বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-#, fuzzy
-msgid "contains too long of a monotonic character sequence"
-msgstr "à¦à¦•ই অকà§à¦·à¦° অতà§à¦¯à¦¾à¦§à¦¿à¦• বার কà§à¦°à¦®à¦¾à¦—ত বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "কোনো রূপে বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী নাম অনà§à¦¤à¦°à§à¦­à§à¦•à§à¦¤ হয়েছে"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "কোনো পাসওয়ারà§à¦¡ উলà§à¦²à¦¿à¦–িত হয়নি"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...সময় সমাপà§à¦¤à¦¿à¦° পথে...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS পাসওয়ারà§à¦¡ পরিবরà§à¦¤à¦¨ করা সমà§à¦­à¦¬ হয়নি।"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...দà§à¦ƒà¦–িত, সময় সমাপà§à¦¤!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "পাসওয়ারà§à¦¡ ভাল নয়: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿à¦ªà§‚রà§à¦£ তথà§à¦¯à¦¬à¦¿à¦¨à¦¿à¦®à§Ÿ (conversation) (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s বিফল: পà§à¦°à¦¸à§à¦¥à¦¾à¦¨à¦•ালীন কোড %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -358,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:1088
+#: 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
@@ -405,22 +354,22 @@ msgstr "%s ফোলà§à¦¡à¦¾à¦°à§‡ পà§à¦°à§‹à¦¨à§‹ মেইল উপসà§
msgid "You have mail in folder %s."
msgstr "%s ফোলà§à¦¡à¦¾à¦°à§‡ মেইল উপসà§à¦¥à¦¿à¦¤ রয়েছে।"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "'%s' ডিরেকà§à¦Ÿà¦°à¦¿ নিরà§à¦®à¦¾à¦£ করা হচà§à¦›à§‡à¥¤"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "ডিরেকà§à¦Ÿà¦°à¦¿ '%s' নিরà§à¦®à¦¾à¦£ ও আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "পাসওয়ারà§à¦¡ পূরà§à¦¬à§‡ বà§à¦¯à¦¬à¦¹à§ƒà¦¤ হয়েছে। à¦à¦•টি পৃথক পাসওয়ারà§à¦¡ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤"
@@ -452,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "কি নিরà§à¦®à¦¾à¦£à§‡à¦° Context %s ধারà§à¦¯ করা হয়েছে"
@@ -482,66 +431,7 @@ msgstr "pam_set_item() করতে বà§à¦¯à¦°à§à¦¥\n"
msgid "login: failure forking: %m"
msgstr "লগ-ইন: fork করতে বà§à¦¯à¦°à§à¦¥: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "সাময়িকরূপে অà§à¦¯à¦¾à¦•াউনà§à¦Ÿ লক করা হয়েছে (%ld সেকেনà§à¦¡ অবশিষà§à¦Ÿ)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "অনà§à¦®à§‹à¦¦à¦¨ সংকà§à¦°à¦¾à¦¨à§à¦¤ সমসà§à¦¯à¦¾"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "পরিসেবা সংকà§à¦°à¦¾à¦¨à§à¦¤ সমসà§à¦¯à¦¾"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "অজানা বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "অজানা সমসà§à¦¯à¦¾"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= à¦à¦° জনà§à¦¯ ভà§à¦² সংখà§à¦¯à¦¾ উলà§à¦²à¦¿à¦–িত\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: অজানা বিকলà§à¦ª %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: সব বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর জনà§à¦¯ শূণà§à¦¯-ভিনà§à¦¨ মান ধারà§à¦¯ করতে বà§à¦¯à¦°à§à¦¥\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "লগ-ইন বিফলতা সরà§à¦¬à¦¶à§‡à¦· বিফলতা চিহà§à¦¨à¦¿à¦¤ সà§à¦¥à¦¾à¦¨ থেকে\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "পà§à¦°à¦¬à§‡à¦¶à¦¾à¦§à¦¿à¦•ার পà§à¦°à¦¦à¦¾à¦¨ করা হয়েছে (%ld পূরà§à¦¬à§‡ সরà§à¦¬à¦¶à§‡à¦· লগ-ইন করা হয়েছে)।"
@@ -566,7 +456,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "আপনার পাসওয়ারà§à¦¡ à¦à¦‡ মà§à¦¹à§‚রà§à¦¤à§‡ পরিবরà§à¦¤à¦¨ করা আবশà§à¦¯à¦• (password-র মেয়াদ পূরà§à¦£ হয়েছে)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -574,30 +464,120 @@ msgstr[0] "সতরà§à¦•বাণী: %d দিন পরে পাসওয়à¦
msgstr[1] "সতরà§à¦•বাণী: %d দিন পরে পাসওয়ারà§à¦¡à§‡à¦° মেয়াদপূরà§à¦£ হবে"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "কোনো পাসওয়ারà§à¦¡ উলà§à¦²à¦¿à¦–িত হয়নি"
+
+#: 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: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 "পà§à¦°à§‹à¦¨à§‹à¦Ÿà¦¿à¦° অনà§à¦°à§‚প"
+
+#~ msgid "memory allocation error"
+#~ msgstr "মেমরি বরাদà§à¦¦ করতে সমসà§à¦¯à¦¾"
+
+#~ msgid "is a palindrome"
+#~ msgstr "উভমà§à¦–à§€ শবà§à¦¦"
+
+#~ msgid "case changes only"
+#~ msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° হরফের ছাà¦à¦¦ পরিবরà§à¦¤à¦¨ করা হয়েছে"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "পà§à¦°à§‹à¦¨à§‹ পাসওয়ারà§à¦¡à§‡à¦° সমতূলà§à¦¯"
+
+#~ msgid "is too simple"
+#~ msgstr "জটিল নয়"
+
+#~ msgid "is rotated"
+#~ msgstr "ঘোরানো হয়েছে"
+
+#~ msgid "not enough character classes"
+#~ msgstr "পরà§à¦¯à¦¾à¦ªà§à¦¤ অকà§à¦·à¦° শà§à¦°à§‡à¦£à§€ উপসà§à¦¥à¦¿à¦¤ নেই"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "à¦à¦•ই অকà§à¦·à¦° অতà§à¦¯à¦¾à¦§à¦¿à¦• বার কà§à¦°à¦®à¦¾à¦—ত বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়েছে"
+
+#, fuzzy
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "à¦à¦•ই অকà§à¦·à¦° অতà§à¦¯à¦¾à¦§à¦¿à¦• বার কà§à¦°à¦®à¦¾à¦—ত বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়েছে"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "কোনো রূপে বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী নাম অনà§à¦¤à¦°à§à¦­à§à¦•à§à¦¤ হয়েছে"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "পাসওয়ারà§à¦¡ ভাল নয়: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "সাময়িকরূপে অà§à¦¯à¦¾à¦•াউনà§à¦Ÿ লক করা হয়েছে (%ld সেকেনà§à¦¡ অবশিষà§à¦Ÿ)"
+
+#~ msgid "Authentication error"
+#~ msgstr "অনà§à¦®à§‹à¦¦à¦¨ সংকà§à¦°à¦¾à¦¨à§à¦¤ সমসà§à¦¯à¦¾"
+
+#~ msgid "Service error"
+#~ msgstr "পরিসেবা সংকà§à¦°à¦¾à¦¨à§à¦¤ সমসà§à¦¯à¦¾"
+
+#~ msgid "Unknown user"
+#~ msgstr "অজানা বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
+
+#~ msgid "Unknown error"
+#~ msgstr "অজানা সমসà§à¦¯à¦¾"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= à¦à¦° জনà§à¦¯ ভà§à¦² সংখà§à¦¯à¦¾ উলà§à¦²à¦¿à¦–িত\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: অজানা বিকলà§à¦ª %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: সব বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর জনà§à¦¯ শূণà§à¦¯-ভিনà§à¦¨ মান ধারà§à¦¯ করতে বà§à¦¯à¦°à§à¦¥\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/bs.po b/po/bs.po
index ea6c060a..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: 2020-06-08 10:18+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,61 +21,48 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -215,134 +202,100 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -352,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:1088
+#: 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
@@ -398,22 +351,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -443,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -473,62 +426,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -548,7 +446,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -557,31 +455,39 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 358f8761..efe52ead 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index b6ffac6e..2ec6108a 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,13 +9,13 @@
# xqueralt <xqueralt@gmail.com>, 2008
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Robert Antoni Buj Gelonch <robert.buj@gmail.com>, 2020.
-# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# Dmitry V. Levin <ldv@altlinux.org>, 2020, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-17 18:48+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-"
"pam/master/ca/>\n"
@@ -24,63 +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.0.4\n"
+"X-Generator: Weblate 4.7.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...S'acaba el temps...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...S'ha acabat el temps.\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "conversa errònia (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -221,135 +208,101 @@ msgstr "L'aplicació necessita cridar novament libpam"
msgid "Unknown PAM error"
msgstr "Error de PAM desconegut"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "és la mateixa que l'antiga"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "Error d'assignació de memòria"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "és un palíndrom"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "només canvien les majúscules i minúscules"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "és massa semblant a l'antiga"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "és massa senzilla"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "està girada"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "no hi ha suficients classes de caràcters"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "conté massa caràcters idèntics consecutius"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "conté una seqüència de caràcters monòtona massa llarga"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "conté el nom d'usuari d'alguna forma"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "No s'ha proporcionat cap contrasenya."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...S'acaba el temps...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "No s'ha canviat la contrasenya."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...S'ha acabat el temps.\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "CONTRASENYA INCORRECTA: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "conversa errònia (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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 nom_fitxer_arrel] [--user nom_usuari] [--reset[=n]] [--quiet]\n"
+"Forma d’ús: %s: [--dir /directori/path/to/tally] [--user nom_usuari] [--"
+"reset]\n"
+
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] "(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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
@@ -362,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:1088
+#: 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."
@@ -410,22 +364,22 @@ msgstr "Teniu correu antic a la carpeta %s."
msgid "You have mail in folder %s."
msgstr "Teniu correu a la carpeta %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Creant el directori '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
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:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "La contrasenya ja ha estat utilitzada."
@@ -455,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:629
+#: 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:645
+#: 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."
@@ -485,67 +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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "El compte està bloquejat temporalment (queden %ld segons)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Error d'autenticació"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Error del servei"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Usuari desconegut"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Error desconegut"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: número incorrecte assignat a --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: opció %s no reconeguda\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file nom_fitxer_arrel] [--user nom_usuari] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-"%s: no es poden restablir tots els usuaris a un valor diferent de zero\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Entrada Fallades Última fallada Des de\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f nom_fitxer_arrel] [--file nom_fitxer_arrel]\n"
-" [-u nom_usuari] [--user nom_usuari]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -568,7 +462,7 @@ msgid ""
msgstr ""
"Heu de canviar la contrasenya immediatament (la contrasenya ha vençut)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -576,28 +470,115 @@ msgstr[0] "Atenció: la contrasenya venç d'aquí a %d dia."
msgstr[1] "Atenció: la contrasenya venç d'aquí a %d dies."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "No s'ha canviat la contrasenya."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "Error d'assignació de memòria"
+
+#~ msgid "is a palindrome"
+#~ msgstr "és un palíndrom"
+
+#~ msgid "case changes only"
+#~ msgstr "només canvien les majúscules i minúscules"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "és massa semblant a l'antiga"
+
+#~ msgid "is too simple"
+#~ msgstr "és massa senzilla"
+
+#~ msgid "is rotated"
+#~ msgstr "està girada"
+
+#~ msgid "not enough character classes"
+#~ msgstr "no hi ha suficients classes de caràcters"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "conté massa caràcters idèntics consecutius"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "conté una seqüència de caràcters monòtona massa llarga"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "conté el nom d'usuari d'alguna forma"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "CONTRASENYA INCORRECTA: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "El compte està bloquejat temporalment (queden %ld segons)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Error d'autenticació"
+
+#~ msgid "Service error"
+#~ msgstr "Error del servei"
+
+#~ msgid "Unknown user"
+#~ msgstr "Usuari desconegut"
+
+#~ msgid "Unknown error"
+#~ msgstr "Error desconegut"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: número incorrecte assignat a --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: opció %s no reconeguda\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file nom_fitxer_arrel] [--user nom_usuari] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr ""
+#~ "%s: no es poden restablir tots els usuaris a un valor diferent de zero\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f nom_fitxer_arrel] [--file nom_fitxer_arrel]\n"
+#~ " [-u nom_usuari] [--user nom_usuari]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index b21aceee..4e7efec7 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index fcdaa340..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: 2020-06-08 10:18+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,63 +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_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Dochází Äas...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Promiňte, Äas vyprÅ¡el!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "nesprávná konverzace (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -219,136 +207,102 @@ msgstr "Aplikace musí znovu zavolat libpam"
msgid "Unknown PAM error"
msgstr "Neznámá chyba PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "je stejné jako předcházející"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "chyba alokace paměti"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "je palindrom"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "pouze mění velikost"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "je příliš podobné předcházejícímu"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "je příliš jednoduché"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "je posunuté"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "nemá dostatek různých druhů znaků"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "obsahuje příliš mnoho stejných znaků za sebou"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "obsahuje příliš dlouhou postupnou sekvenci znaků"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "obsahuje v nějaké formě uživatelské jméno"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Heslo nebylo zadáno."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Dochází Äas...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Heslo nebylo změněno."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Promiňte, Äas vyprÅ¡el!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ŠPATNÉ HESLO: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "nesprávná konverzace (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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: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 ""
@@ -358,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:1088
+#: 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."
@@ -404,22 +358,22 @@ msgstr "Máte starou poštu ve složce %s."
msgid "You have mail in folder %s."
msgstr "Máte poštu ve složce %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Vytváření adresáře '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Nezdařilo se vytvořit a inicializovat adresář '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Heslo již bylo použito."
@@ -449,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:629
+#: 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:645
+#: 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."
@@ -479,67 +433,7 @@ msgstr "chyba pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: chyba forku: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "ÚÄet je doÄasnÄ› uzamÄen (zbývá %ld vteÅ™in)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Chyba autentizace"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Chyba služby"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Neznámý uživatel"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Neznámá chyba"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Zadána špatná hodnota --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Neznámá volba %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file jmeno_souboru] [--user uzivatelske_jmeno] [--reset[=n]] [--"
-"quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Nelze resetovat všechny uživatele nenulově\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Selhání Poslední selhání Od\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f plna-cesta-k-souboru] [--file plna-cesta-k-souboru]\n"
-" [-u uzivatelske-jmeno] [--user uzivatelske-jmeno]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -559,7 +453,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Nyní musíte změnit své heslo (heslo vypršelo)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -568,28 +462,114 @@ msgstr[1] "Varování: Vaše heslo vyprší za %d dny."
msgstr[2] "Varování: Vaše heslo vyprší za %d dní."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Heslo nebylo změněno."
+
+#: 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í"
+
+#~ msgid "memory allocation error"
+#~ msgstr "chyba alokace paměti"
+
+#~ msgid "is a palindrome"
+#~ msgstr "je palindrom"
+
+#~ msgid "case changes only"
+#~ msgstr "pouze mění velikost"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "je příliš podobné předcházejícímu"
+
+#~ msgid "is too simple"
+#~ msgstr "je příliš jednoduché"
+
+#~ msgid "is rotated"
+#~ msgstr "je posunuté"
+
+#~ msgid "not enough character classes"
+#~ msgstr "nemá dostatek různých druhů znaků"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "obsahuje příliš mnoho stejných znaků za sebou"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "obsahuje příliš dlouhou postupnou sekvenci znaků"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "obsahuje v nějaké formě uživatelské jméno"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ŠPATNÉ HESLO: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "ÚÄet je doÄasnÄ› uzamÄen (zbývá %ld vteÅ™in)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Chyba autentizace"
+
+#~ msgid "Service error"
+#~ msgstr "Chyba služby"
+
+#~ msgid "Unknown user"
+#~ msgstr "Neznámý uživatel"
+
+#~ msgid "Unknown error"
+#~ msgstr "Neznámá chyba"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Zadána špatná hodnota --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Neznámá volba %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file jmeno_souboru] [--user uzivatelske_jmeno] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: Nelze resetovat všechny uživatele nenulově\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f plna-cesta-k-souboru] [--file plna-cesta-k-souboru]\n"
+#~ " [-u uzivatelske-jmeno] [--user uzivatelske-jmeno]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/cy.po b/po/cy.po
index 8b375595..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: 2020-06-08 10:18+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,61 +21,48 @@ msgstr ""
"11) ? 2 : 3;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -215,134 +202,101 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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[3] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -353,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:1088
+#: 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
@@ -399,22 +353,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -444,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -474,62 +428,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -549,7 +448,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -559,31 +458,39 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 2f3bca35..cb7d31fd 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 1b142aac..e5e5f56e 100644
--- a/po/da.po
+++ b/po/da.po
@@ -6,13 +6,14 @@
# Kris Thomsen <lakristho@gmail.com>, 2009,2012-2013
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# scootergrisen <scootergrisen@gmail.com>, 2020.
+# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-02 09:40+0000\n"
-"Last-Translator: scootergrisen <scootergrisen@gmail.com>\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-"
"pam/master/da/>\n"
"Language: da\n"
@@ -20,63 +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.0.1\n"
+"X-Generator: Weblate 4.7.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Tiden er ved at udløbe...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Din tid er desværre gået!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "konversationsfejl (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -216,135 +204,100 @@ msgstr "Programmet skal kalde libpam igen"
msgid "Unknown PAM error"
msgstr "Ukendt PAM-fejl"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "er den samme som den gamle"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "fejl under hukommelsesallokering"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "det staves ens forfra og bagfra"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "kun forskel i store/små bogstaver"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ligner for meget den gamle"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "er for simpel"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "er roteret"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "ikke nok tegnklasser"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "indeholder for mange af de samme tegn"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "indeholder en for lang sekvens af monotone tegn"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "indeholder brugernavnet i en eller anden form"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Der er ikke angivet nogen adgangskode."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Tiden er ved at udløbe...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Adgangskoden er ikke blevet ændret."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Din tid er desværre gået!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "DÃ…RLIG ADGANGSKODE: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "konversationsfejl (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
-#, 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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: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 ""
@@ -353,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:1088
+#: 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."
@@ -399,22 +353,22 @@ msgstr "Du har gammel e-post i mappe %s."
msgid "You have mail in folder %s."
msgstr "Du har e-post i mappe %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Opretter mappe \"%s\"."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Kunne ikke oprette og initialisere mappe \"%s\"."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Adgangskode er allerede i brug."
@@ -444,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Nøgleoprettelseskonteksten %s er blevet tildelt."
@@ -474,65 +428,7 @@ msgstr "pam_set_item() mislykkedes\n"
msgid "login: failure forking: %m"
msgstr "login: fejl ved forgrening: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Kontoen er midlertidigt låst (%ld sekunder tilbage)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Fejl ved godkendelse"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Fejl ved tjeneste"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Ukendt bruger"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Ukendt fejl"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Der er angivet et forkert tal til --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Ikke genkendt indstilling %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr "%s: [--file rodfilnavn] [--user brugernavn] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Alle brugere kunne ikke nulstilles til ikke-nul\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Fejlende Sidste fejl Fra\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rodfilnavn] [--file rodfilnavn]\n"
-" [-u brugernavn] [--user brugernavn]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -553,7 +449,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Du skal ændre din adgangskode omgående (adgangskoden er god gammel)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -561,28 +457,113 @@ msgstr[0] "Advarsel: Din adgangskode udløber om %d dag."
msgstr[1] "Advarsel: Din adgangskode udløber om %d dage."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Adgangskoden er ikke blevet ændret."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "fejl under hukommelsesallokering"
+
+#~ msgid "is a palindrome"
+#~ msgstr "det staves ens forfra og bagfra"
+
+#~ msgid "case changes only"
+#~ msgstr "kun forskel i store/små bogstaver"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ligner for meget den gamle"
+
+#~ msgid "is too simple"
+#~ msgstr "er for simpel"
+
+#~ msgid "is rotated"
+#~ msgstr "er roteret"
+
+#~ msgid "not enough character classes"
+#~ msgstr "ikke nok tegnklasser"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "indeholder for mange af de samme tegn"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "indeholder en for lang sekvens af monotone tegn"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "indeholder brugernavnet i en eller anden form"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "DÃ…RLIG ADGANGSKODE: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Kontoen er midlertidigt låst (%ld sekunder tilbage)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Fejl ved godkendelse"
+
+#~ msgid "Service error"
+#~ msgstr "Fejl ved tjeneste"
+
+#~ msgid "Unknown user"
+#~ msgstr "Ukendt bruger"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ukendt fejl"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Der er angivet et forkert tal til --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Ikke genkendt indstilling %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rodfilnavn] [--user brugernavn] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: Alle brugere kunne ikke nulstilles til ikke-nul\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rodfilnavn] [--file rodfilnavn]\n"
+#~ " [-u brugernavn] [--user brugernavn]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/de.gmo b/po/de.gmo
index 97dd4578..536fea82 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index ba1d6a97..a611941d 100644
--- a/po/de.po
+++ b/po/de.po
@@ -5,14 +5,15 @@
# Translators:
# Roman Spirgi <bigant@fedoraproject.org>, 2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-03-15 23: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: 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,63 +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 3.11.3\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Time läuft ab...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Ihre Zeit ist abgelaufen.\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "fehlerhafte Kommunikation (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -220,135 +208,101 @@ msgstr "Anwendung muss libpam wieder aufrufen"
msgid "Unknown PAM error"
msgstr "Unbekannter PAM-Fehler"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ist das gleiche wie das Alte"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "Fehler beim Allozieren von Speicher"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "ist ein Palindrome"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "nur Änderungen bei der Gross-/Kleinschreibung"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ist dem alten zu ähnlich"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "ist zu einfach"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "wurde gedreht"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "nicht genug unterschiedliche Arten von Zeichen"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "das gleiche Zeichen wurde so oft hintereinander verwendet"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "Der gesetzte Wert beinhaltet zu lange monotone Zeichenfolgen"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "enthält den Benutzernamen in irgendeiner Form"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Kein Passwort angegeben."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Zeit läuft ab...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Passwort nicht geändert."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Ihre Zeit ist abgelaufen!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "Schlechtes Passwort: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "fehlerhafte Kommunikation (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
-#, fuzzy, c-format
+#: 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: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+"Aufruf: %s [--dir /path/to/tally-Verzeichnis] [--user Benutzername] [--"
+"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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] "(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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
@@ -359,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:1088
+#: 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."
@@ -406,22 +360,22 @@ msgstr "Sie haben alte Nachrichten in %s."
msgid "You have mail in folder %s."
msgstr "Sie haben Nachrichten in %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Erstelle Verzeichnis '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Verzeichnis '%s' kann nicht erstellt und initialisiert werden."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Das gleiche Passwort wurde bereits einmal verwendet."
@@ -451,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Schlüssel-Erzeugungskontext %s zugeordnet."
@@ -481,67 +435,7 @@ msgstr "Fehler bei pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "Anmeldung: Fehler bei Abspaltung: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Konto temporär gesperrt (noch %ld Sekunden)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Authentifizierungsfehler"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Dienstfehler"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Unbekannter Benutzer"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Unbekannter Fehler"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Ungültige Nummer für --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Nicht erkannte Option: %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-"%s: Es können nicht alle Benutzer auf Nicht-null zurückgesetzt werden\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Account Fehler Letzter Versuch Von\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -561,7 +455,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Sie müssen Ihr Passwort sofort ändern (Passwortablauf)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -569,28 +463,115 @@ msgstr[0] "Warnung: Ihr Passwort läuft in %d Tag ab."
msgstr[1] "Warnung: Ihr Passwort läuft in %d Tagen ab."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Passwort nicht geändert."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "Fehler beim Allozieren von Speicher"
+
+#~ msgid "is a palindrome"
+#~ msgstr "ist ein Palindrome"
+
+#~ msgid "case changes only"
+#~ msgstr "nur Änderungen bei der Gross-/Kleinschreibung"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ist dem alten zu ähnlich"
+
+#~ msgid "is too simple"
+#~ msgstr "ist zu einfach"
+
+#~ msgid "is rotated"
+#~ msgstr "wurde gedreht"
+
+#~ msgid "not enough character classes"
+#~ msgstr "nicht genug unterschiedliche Arten von Zeichen"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "das gleiche Zeichen wurde so oft hintereinander verwendet"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "Der gesetzte Wert beinhaltet zu lange monotone Zeichenfolgen"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "enthält den Benutzernamen in irgendeiner Form"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "Schlechtes Passwort: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Konto temporär gesperrt (noch %ld Sekunden)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Authentifizierungsfehler"
+
+#~ msgid "Service error"
+#~ msgstr "Dienstfehler"
+
+#~ msgid "Unknown user"
+#~ msgstr "Unbekannter Benutzer"
+
+#~ msgid "Unknown error"
+#~ msgstr "Unbekannter Fehler"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Ungültige Nummer für --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Nicht erkannte Option: %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file verwurzelter-Dateiname] [--user Benutzername] [--reset[=n]] "
+#~ "[--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr ""
+#~ "%s: Es können nicht alle Benutzer auf Nicht-null zurückgesetzt werden\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/de_CH.po b/po/de_CH.po
index 60656754..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 cabc80b4..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: 2020-06-08 10:18+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,61 +19,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -213,134 +200,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -349,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:1088
+#: 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
@@ -395,22 +347,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -440,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -470,62 +422,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -545,7 +442,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -553,31 +450,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 bee23e88..8eb7cc21 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index a8da4b66..d03f0e37 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -4,99 +4,87 @@
#
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# Carmen Bianca Bakker <carmen@carmenbianca.eu>, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2011-11-30 06:56-0500\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Esperanto (http://www.transifex.com/projects/p/fedora/"
-"language/eo/)\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-"
+"pam/master/eo/>\n"
"Language: eo\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.4.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
+#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr ""
+msgstr "Pasvorto: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
-msgstr ""
+msgstr "Aktuala %s pasvorto: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr ""
+msgstr "Aktuala pasvorto: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
-msgstr ""
+msgstr "Nova %s pasvorto: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
-msgstr ""
+msgstr "Nova pasvorto: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
-msgstr ""
+msgstr "Retajpu novan %s pasvorton: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
-msgstr ""
+msgstr "Retajpu novan pasvorton: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
-msgstr ""
+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 ""
+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 ""
+msgstr "PasvortoÅanÄo ĉesis."
#: libpam/pam_item.c:311
msgid "login:"
-msgstr ""
+msgstr "saluto:"
#: libpam/pam_strerror.c:40
msgid "Success"
-msgstr ""
+msgstr "Sukceso"
#: libpam/pam_strerror.c:42
msgid "Critical error - immediate abort"
-msgstr ""
+msgstr "Kritika eraro - tuja ĉeso"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
-msgstr ""
+msgstr "Malsukcesis Åargi modulon"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr ""
+msgstr "Ne trovis simbolon"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
@@ -104,7 +92,7 @@ msgstr ""
#: libpam/pam_strerror.c:50
msgid "System error"
-msgstr ""
+msgstr "Sistema eraro"
#: libpam/pam_strerror.c:52
msgid "Memory buffer error"
@@ -112,15 +100,15 @@ msgstr ""
#: libpam/pam_strerror.c:54
msgid "Permission denied"
-msgstr ""
+msgstr "Permeso rifuzita"
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
-msgstr ""
+msgstr "AÅ­tentiga malsukceso"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
-msgstr ""
+msgstr "Nesufiĉaj salutiloj por atingi aŭtentigajn datumojn"
#: libpam/pam_strerror.c:60
msgid "Authentication service cannot retrieve authentication info"
@@ -212,208 +200,174 @@ msgstr ""
#: libpam/pam_strerror.c:105
msgid "Unknown PAM error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
+msgstr "Nekonata PAM-eraro"
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] "(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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
+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 ""
+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 ""
+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 ""
+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 ""
+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 ""
+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 ""
"There were %d failed login attempts since the last successful login."
-msgstr[0] ""
-msgstr[1] ""
+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 ""
+msgstr "Estis %d malsukcesaj salutprovoj ekde la lasta sukcesa saluto."
-#: modules/pam_limits/pam_limits.c:1088
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
-msgstr ""
+msgstr "Estis tro multaj salutoj por '%s'."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr ""
+#, 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."
-msgstr ""
+msgstr "Vi havas novan poÅton."
#: modules/pam_mail/pam_mail.c:295
msgid "You have old mail."
-msgstr ""
+msgstr "Vi havas malnovan poÅton."
#: modules/pam_mail/pam_mail.c:299
msgid "You have mail."
-msgstr ""
+msgstr "Vi havas poÅton."
#: modules/pam_mail/pam_mail.c:306
#, c-format
msgid "You have no mail in folder %s."
-msgstr ""
+msgstr "Vi havas neniun poÅton en dosierujo %s."
#: modules/pam_mail/pam_mail.c:310
#, c-format
msgid "You have new mail in folder %s."
-msgstr ""
+msgstr "Vi havas novan poÅton en dosierujo %s."
#: modules/pam_mail/pam_mail.c:314
#, c-format
msgid "You have old mail in folder %s."
-msgstr ""
+msgstr "Vi havas malnovan poÅton en dosierujo %s."
#: modules/pam_mail/pam_mail.c:319
#, c-format
msgid "You have mail in folder %s."
-msgstr ""
+msgstr "Vi havas poÅton en dosierujo %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr ""
+msgstr "Kreante dosierujon '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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 "Pasvorto jam uzita. Elektu alian."
-#: modules/pam_pwhistory/pam_pwhistory.c:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
-msgstr ""
+msgstr "Pasvorto jam uzita."
#: modules/pam_selinux/pam_selinux.c:172
#, c-format
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +425,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +445,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +453,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:576
msgid "You must choose a longer password."
-msgstr "Vi devas elekti pli mallongan pasvorton."
+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
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:713
msgid "You must wait longer to change your password."
-msgstr "Vi devas elekti pli mallongan pasvorton."
+msgstr ""
+
+#~ msgid "You have no mail."
+#~ msgstr "Vi ne havas poÅton."
diff --git a/po/es.gmo b/po/es.gmo
index d497caad..b06cdb3a 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 1b642108..086743be 100644
--- a/po/es.po
+++ b/po/es.po
@@ -13,13 +13,14 @@
# 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, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-06 11:40+0000\n"
-"Last-Translator: Ãlvaro Castillo <sincorchetes@gmail.com>\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"
"Language: es\n"
@@ -27,63 +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.0.3\n"
+"X-Generator: Weblate 4.14.1\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...El tiempo se está agotando...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Lo sentimos, el tiempo se ha agotado.\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "conversación incorrecta (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -226,138 +214,101 @@ msgstr "La aplicación debe llamar a libpam de nuevo"
msgid "Unknown PAM error"
msgstr "Error desconocido de PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "es igual que la antigua"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "error de asignación de memoria"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "es un palíndromo"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "sólo hay cambios de minúsculas y mayúsculas"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "es demasiado similar a la antigua"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "es demasiado sencilla"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "es igual pero al revés"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "no hay suficientes clases de caracteres"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "contiene demasiados carateres iguales consecutivos"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "contiene demasiados carateres iguales consecutivos"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "de alguna manera contiene el nombre del usuario"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "No se ha proporcionado ninguna contraseña"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...El tiempo se está agotando...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "No es posible cambiar la contraseña NIS."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Lo sentimos, el tiempo se ha agotado.\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "CONTRASEÑA INCORRECTA: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "conversación incorrecta (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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 nombre de archivo-raíz] [--user nombre de usuario] [--reset[=n]] "
-"[--quiet]\n"
+"Usage: %s [--dir /ruta/al/directorio-de-conteo] [--user nombre-de-usuario] "
+"[--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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 logueo fallidos"
+msgstr "La cuenta está bloqueada debido a %u inicios de sesión fallidos."
+
+#: 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 minuto restante para el desbloqueo)"
+msgstr[1] "(%d minutos restantes para el desbloqueo)"
-#: modules/pam_faillock/pam_faillock.c:650
+#. TRANSLATORS: only used if dngettext is not supported.
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
@@ -367,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:1088
-#, 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
@@ -414,29 +365,29 @@ msgstr "Tiene correo antiguo en la carpeta %s."
msgid "You have mail in folder %s."
msgstr "Tiene correo en la carpeta %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Creando directorio '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "No se pudo crear e inicializar el directorio '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: 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?"
@@ -447,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:629
-#, 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:645
-#, 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
@@ -490,69 +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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "La cuenta está temporalmente bloqueada (%ld segundos restantes)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Error de autenticación"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Error de servicio"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Usuario desconocido"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Error desconocido"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Número incorrecto proporcionado a --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Opción no reconocida %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file nombre de archivo-raíz] [--user nombre de usuario] [--reset[=n]] "
-"[--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-"%s: No es posible restaurar a todos los usuarios a un número distinto de "
-"cero\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Fallo de Ingresos Ultimo fallo desde\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f nombre-arch-completo] [--file nombre-arch-completo]\n"
-" [-u nombre-de-usuario] [--user nombre-de-usuario]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -577,7 +465,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Debe cambiar la contraseña inmediatamente (la contraseña ha caducado)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -585,30 +473,121 @@ msgstr[0] "Advertencia: la contraseña caducará dentro de %d día"
msgstr[1] "Advertencia: la contraseña caducará dentro de %d días"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: 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: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: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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "error de asignación de memoria"
+
+#~ msgid "is a palindrome"
+#~ msgstr "es un palíndromo"
+
+#~ msgid "case changes only"
+#~ msgstr "sólo hay cambios de minúsculas y mayúsculas"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "es demasiado similar a la antigua"
+
+#~ msgid "is too simple"
+#~ msgstr "es demasiado sencilla"
+
+#~ msgid "is rotated"
+#~ msgstr "es igual pero al revés"
+
+#~ msgid "not enough character classes"
+#~ msgstr "no hay suficientes clases de caracteres"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "contiene demasiados carateres iguales consecutivos"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "contiene demasiados carateres iguales consecutivos"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "de alguna manera contiene el nombre del usuario"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "CONTRASEÑA INCORRECTA: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "La cuenta está temporalmente bloqueada (%ld segundos restantes)"
+
+#~ msgid "Authentication error"
+#~ msgstr "Error de autenticación"
+
+#~ msgid "Service error"
+#~ msgstr "Error de servicio"
+
+#~ msgid "Unknown user"
+#~ msgstr "Usuario desconocido"
+
+#~ msgid "Unknown error"
+#~ msgstr "Error desconocido"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Número incorrecto proporcionado a --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Opción no reconocida %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file nombre de archivo-raíz] [--user nombre de usuario] [--"
+#~ "reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr ""
+#~ "%s: No es posible restaurar a todos los usuarios a un número distinto de "
+#~ "cero\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f nombre-arch-completo] [--file nombre-arch-completo]\n"
+#~ " [-u nombre-de-usuario] [--user nombre-de-usuario]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/et.gmo b/po/et.gmo
index edd152b3..eb719b98 100644
--- a/po/et.gmo
+++ b/po/et.gmo
Binary files differ
diff --git a/po/et.po b/po/et.po
index 7e851926..aa19290c 100644
--- a/po/et.po
+++ b/po/et.po
@@ -3,80 +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: 2020-06-08 10:18+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_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Aeg hakkab otsa saama...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Kahjuks on su aeg otsas!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "vigane vestlus (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -217,136 +205,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr "Tundmatu PAM-i viga"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "on sama kui vana"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "on palindroom"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "on liiga sarnane vanale"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "on liiga lihtne"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "on roteeruv"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Parooli on juba kasutatud. Vali uus parool."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Aeg hakkab otsa saama...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "Parooli on juba kasutatud. Vali uus parool."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Kahjuks on su aeg otsas!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr ""
+msgid "erroneous conversation (%d)\n"
+msgstr "vigane vestlus (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -355,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:1088
+#: 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
@@ -402,22 +353,22 @@ msgstr "Sul on vanu poste kaustas %s."
msgid "You have mail in folder %s."
msgstr "Sul on poste kaustas %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "loon kataloogi '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "Parooli on juba kasutatud. Vali uus parool."
@@ -448,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -478,62 +429,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Autentimise viga"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Teenuse viga"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Tundmatu kasutaja"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Tundmatu viga"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -554,7 +450,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -562,30 +458,67 @@ msgstr[0] "Hoiatus: su parool aegub %d päeva pärast"
msgstr[1] "Hoiatus: su parool aegub %d päeva pärast"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: 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:555
+#, fuzzy
+msgid "The password has not been changed."
+msgstr "Parooli on juba kasutatud. Vali uus parool."
+
+#: 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"
+
+#~ msgid "is the same as the old one"
+#~ msgstr "on sama kui vana"
+
+#~ msgid "is a palindrome"
+#~ msgstr "on palindroom"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "on liiga sarnane vanale"
+
+#~ msgid "is too simple"
+#~ msgstr "on liiga lihtne"
+
+#~ msgid "is rotated"
+#~ msgstr "on roteeruv"
+
+#~ msgid "Authentication error"
+#~ msgstr "Autentimise viga"
+
+#~ msgid "Service error"
+#~ msgstr "Teenuse viga"
+
+#~ msgid "Unknown user"
+#~ msgstr "Tundmatu kasutaja"
+
+#~ msgid "Unknown error"
+#~ msgstr "Tundmatu viga"
diff --git a/po/eu.gmo b/po/eu.gmo
index ae98e145..97527f7b 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 816dfe96..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: 2020-06-08 10:18+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,62 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -216,134 +203,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -352,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:1088
+#: 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
@@ -398,22 +350,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -443,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -473,62 +425,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Errore ezezaguna"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -548,7 +445,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -556,31 +453,42 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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."
+
+#~ msgid "Unknown error"
+#~ msgstr "Errore ezezaguna"
diff --git a/po/fa.po b/po/fa.po
index 21bf302f..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -349,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:1088
+#: 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
@@ -395,22 +346,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -440,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -470,62 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -545,38 +441,46 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 20e8159c..8a79199f 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index e9d92232..49e720d6 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -10,13 +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, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-03-19 09:38+0000\n"
-"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\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"
@@ -24,69 +27,56 @@ 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 3.11.3\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Aika on loppumassa...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Aikasi on loppunut!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "virheellinen keskustelu (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
#: libpam/pam_item.c:311
msgid "login:"
-msgstr "kirjautuminen:"
+msgstr "sisäänkirjautuminen:"
#: libpam/pam_strerror.c:40
msgid "Success"
@@ -158,7 +148,7 @@ msgstr "Tunnistautumispalvelu ei pääse käyttäjän valtuustietoihin"
#: libpam/pam_strerror.c:74
msgid "User credentials expired"
-msgstr "Käyttäjän valtuustiedot vanhentunut"
+msgstr "Käyttäjän valtuustiedot vanhentuneet"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
@@ -220,137 +210,101 @@ msgstr "Sovelluksen tarvitsee kutsua uudelleen libpam:ia"
msgid "Unknown PAM error"
msgstr "Tuntematon PAM-virhe"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "on sama kuin vanha"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "muistinvarausvirhe"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "on palindromi"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "vain kirjainkoko muutos"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "on liian samankaltainen vanhan kanssa"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "on liian yksinkertainen"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "on kierrätetty"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "liian vähän merkkiluokkia"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "sisältää liian monta samaa merkkiä peräkkäin"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "sisältää liian pitkän yksitoikkoisen merkkijonon"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "sisältää käyttäjätunnuksen jossakin muodossa"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Et antanut salasanaa"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Aika on loppumassa...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Salasanaa ei vaihdettu."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Aikasi on loppunut!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "HUONO SALASANA: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "virheellinen keskustelu (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
-#, fuzzy, c-format
+#: 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: [--file juurrutettu-tiedostonimi] [--user käyttäjätunnus] [--reset[=n]] "
-"[--quiet]\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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
@@ -363,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:1088
-#, fuzzy, c-format
+#: modules/pam_limits/pam_limits.c:1269
+#, c-format
msgid "There were too many logins for '%s'."
-msgstr "Liian monta kirjautumista '%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."
@@ -411,29 +365,29 @@ msgstr "Sinulla on vanhaa postia kansiossa %s."
msgid "You have mail in folder %s."
msgstr "Sinulla on postia kansiossa %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Luodaan hakemisto â€%sâ€."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Hakemistoa â€%s†ei voida luoda eikä alustaa."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Salasana on jo käytetty."
#: modules/pam_selinux/pam_selinux.c:172
-#, fuzzy, c-format
+#, c-format
msgid "The default security context is %s."
-msgstr "Oletustietoturvaympäristö %s\n"
+msgstr "Oletustietoturvaympäristö on %s."
#: modules/pam_selinux/pam_selinux.c:176
msgid "Would you like to enter a different role or level?"
@@ -444,33 +398,32 @@ msgid "role:"
msgstr "rooli:"
#: modules/pam_selinux/pam_selinux.c:193
-#, fuzzy, c-format
+#, c-format
msgid "There is no default type for role %s."
-msgstr "Roolilla %s ei ole oletustyyppiä\n"
+msgstr "Roolilla %s ei ole oletustyyppiä."
#: modules/pam_selinux/pam_selinux.c:225
msgid "level:"
msgstr "taso:"
#: modules/pam_selinux/pam_selinux.c:259
-#, fuzzy
msgid "This is not a valid security context."
-msgstr "Ei kelvollinen tietoturvaympäristö"
+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 ""
+msgstr "Kelvollista sisältöä %s:lle ei pystytty saamaan."
-#: modules/pam_selinux/pam_selinux.c:629
-#, fuzzy, c-format
+#: modules/pam_selinux/pam_selinux.c:639
+#, c-format
msgid "Security context %s has been assigned."
-msgstr "Tietoturvaympäristö %s asetettiin"
+msgstr "Tietoturvaympäristö %s asetettiin."
-#: modules/pam_selinux/pam_selinux.c:645
-#, fuzzy, c-format
+#: modules/pam_selinux/pam_selinux.c:655
+#, c-format
msgid "Key creation context %s has been assigned."
-msgstr "Avaimenluontiympäristö %s asetettiin"
+msgstr "Avaimenluontiympäristö %s asetettiin."
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
@@ -487,67 +440,7 @@ msgstr "pam_set_item() kutsu epäonnistui\n"
msgid "login: failure forking: %m"
msgstr "sisäänkirjautuminen: virhe haarautumisessa: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Käyttäjätili on lukittu tilapäisesti (%ld sekuntia jäljellä)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Tunnistautumisvirhe"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Palveluvirhe"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Tuntematon käyttäjä"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Tuntematon virhe"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Väärä numero annettu valinnalle --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Tunnistamaton valinta %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file juurrutettu-tiedostonimi] [--user käyttäjätunnus] [--reset[=n]] "
-"[--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Ei voida palauttaa kaikkia käyttäjiä ei-nolliksi\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Tunnus Epäonnistuneita Viimeisin Koneelta\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f juurrutettu-tiedostonimi] [--file juurrutettu-tiedostonimi]\n"
-" [-u käyttäjätunnus] [--user käyttäjätunnus]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -567,7 +460,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Salasanasi täytyy vaihtaa heti (salasana vanhentunut)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -575,28 +468,114 @@ msgstr[0] "Varoitus: salasanasi vanhentuu %d päivän kuluttua."
msgstr[1] "Varoitus: salasanasi vanhentuu %d päivän kuluttua."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Salasanaa ei vaihdettu."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "muistinvarausvirhe"
+
+#~ msgid "is a palindrome"
+#~ msgstr "on palindromi"
+
+#~ msgid "case changes only"
+#~ msgstr "vain kirjainkoko muutos"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "on liian samankaltainen vanhan kanssa"
+
+#~ msgid "is too simple"
+#~ msgstr "on liian yksinkertainen"
+
+#~ msgid "is rotated"
+#~ msgstr "on kierrätetty"
+
+#~ msgid "not enough character classes"
+#~ msgstr "liian vähän merkkiluokkia"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "sisältää liian monta samaa merkkiä peräkkäin"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "sisältää liian pitkän yksitoikkoisen merkkijonon"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "sisältää käyttäjätunnuksen jossakin muodossa"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "HUONO SALASANA: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Käyttäjätili on lukittu tilapäisesti (%ld sekuntia jäljellä)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Tunnistautumisvirhe"
+
+#~ msgid "Service error"
+#~ msgstr "Palveluvirhe"
+
+#~ msgid "Unknown user"
+#~ msgstr "Tuntematon käyttäjä"
+
+#~ msgid "Unknown error"
+#~ msgstr "Tuntematon virhe"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Väärä numero annettu valinnalle --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Tunnistamaton valinta %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file juurrutettu-tiedostonimi] [--user käyttäjätunnus] [--"
+#~ "reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: Ei voida palauttaa kaikkia käyttäjiä ei-nolliksi\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f juurrutettu-tiedostonimi] [--file juurrutettu-tiedostonimi]\n"
+#~ " [-u käyttäjätunnus] [--user käyttäjätunnus]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index 1792808c..ecd8f482 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index bad82cbb..72c62ca3 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -12,13 +12,14 @@
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Julien Humbert <julroy67@gmail.com>, 2020.
# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# Jérôme Fenal <jfenal@free.fr>, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-02 09:40+0000\n"
-"Last-Translator: Julien Humbert <julroy67@gmail.com>\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-"
"pam/master/fr/>\n"
"Language: fr\n"
@@ -26,63 +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.0.1\n"
+"X-Generator: Weblate 4.7.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Temps bientôt écoulé...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Votre temps est épuisé !\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "conversation erronnée (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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é."
@@ -231,136 +219,101 @@ msgstr "L’application doit à nouveau appeler libpam"
msgid "Unknown PAM error"
msgstr "Erreur PAM inconnue"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "est identique à l’ancien"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "erreur d’allocation de mémoire"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "est un palindrome"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "changement de casse uniquement"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ressemble trop à l’ancien"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "est trop simple"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "est inversé"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "les caractères utilisés ne sont pas suffisamment variés"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "contient trop de caractères consécutifs identiques"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "contient trop de caractères consécutifs identiques"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "contient le nom d’utilisateur d’une certaine manière"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Aucun mot de passe n’a été fourni."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Temps bientôt écoulé...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Le mot de passe n’a pas été modifié."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Votre temps est épuisé !\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "MOT DE PASSE INCORRECT : %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "conversation erronnée (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
-#, 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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: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 ""
@@ -373,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:1088
+#: 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."
@@ -421,22 +375,22 @@ msgstr "Vous avez un ancien message dans le dossier %s."
msgid "You have mail in folder %s."
msgstr "Vous avez des messages dans le dossier %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Création du répertoire « %s »."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
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:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Mot de passe déjà utilisé."
@@ -466,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:629
+#: 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:645
+#: 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é."
@@ -496,67 +450,7 @@ msgstr "échec de pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login : échec du clonage : %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Le compte est temporairement verrouillé (%ld secondes restantes)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Erreur d’authentification"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Erreur de service"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Utilisateur inconnu"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Erreur inconnue"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s : Numéro incorrect attribué à --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s : Option non reconnue %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s : [--file chemin du fichier] [--user nom d’utilisateur] [--reset[=n]] [--"
-"quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s : Impossible de réinitialiser tous les utilisateurs à non-zéro\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Connexion Échecs Dernier échec De\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s : [-f chemin du fichier] [--file chemin du fichier]\n"
-" [-u nom d’utilisateur] [--user nom d’utilisateur]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -580,7 +474,7 @@ msgid ""
msgstr ""
"Vous devez changer votre mot de passe immédiatement (mot de passe expiré)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -588,30 +482,116 @@ msgstr[0] "Attention : votre mot de passe expirera dans %d jour."
msgstr[1] "Attention : votre mot de passe expirera dans %d jours."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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: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: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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "erreur d’allocation de mémoire"
+
+#~ msgid "is a palindrome"
+#~ msgstr "est un palindrome"
+
+#~ msgid "case changes only"
+#~ msgstr "changement de casse uniquement"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ressemble trop à l’ancien"
+
+#~ msgid "is too simple"
+#~ msgstr "est trop simple"
+
+#~ msgid "is rotated"
+#~ msgstr "est inversé"
+
+#~ msgid "not enough character classes"
+#~ msgstr "les caractères utilisés ne sont pas suffisamment variés"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "contient trop de caractères consécutifs identiques"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "contient trop de caractères consécutifs identiques"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "contient le nom d’utilisateur d’une certaine manière"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "MOT DE PASSE INCORRECT : %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Le compte est temporairement verrouillé (%ld secondes restantes)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Erreur d’authentification"
+
+#~ msgid "Service error"
+#~ msgstr "Erreur de service"
+
+#~ msgid "Unknown user"
+#~ msgstr "Utilisateur inconnu"
+
+#~ msgid "Unknown error"
+#~ msgstr "Erreur inconnue"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s : Numéro incorrect attribué à --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s : Option non reconnue %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s : [--file chemin du fichier] [--user nom d’utilisateur] [--reset[=n]] "
+#~ "[--quiet]\n"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s : [-f chemin du fichier] [--file chemin du fichier]\n"
+#~ " [-u nom d’utilisateur] [--user nom d’utilisateur]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ga.gmo b/po/ga.gmo
index 97017df3..36924913 100644
--- a/po/ga.gmo
+++ b/po/ga.gmo
Binary files differ
diff --git a/po/ga.po b/po/ga.po
index 17cdf489..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: 2020-06-08 10:18+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,62 +23,49 @@ msgstr ""
"4);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Tá am ag imeacht...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Tá brón orm, tá do chuid ama imithe!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "comhrá earráideach (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -223,138 +210,104 @@ msgstr "Ní mór don fheidhmchlár libpam a ghlaoch arís"
msgid "Unknown PAM error"
msgstr "Earráid PAM anaithnid"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "tá sé díreach cosúil leis an seancheann"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "earráid dála chuimhne"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "is palandróm é"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "athruithe cáis amháin"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "tá sé ró-chosúil leis an seancheann"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "tá sé ró-shimplí"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "tá sé rothlaithe"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "níl go leor aicmí carachtar ann"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "tá an iomarca carachtar céanna ann go leantach"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "tá seicheamh carachtar aontonach ró-fhada ann"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "tá an t-ainm úsáideora ann i bhfoirm éigin"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Níor soláthraíodh aon fhocal faire"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Tá am ag imeacht...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "Níorbh fhéidir focal faire NIS a athrú."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Tá brón orm, tá do chuid ama imithe!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "DROCHFHOCAL FAIRE: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "comhrá earráideach (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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[3] ""
+msgstr[4] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -376,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:1088
+#: 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
@@ -425,22 +378,22 @@ msgstr "Tá seanphost agat i bhfillteán %s."
msgid "You have mail in folder %s."
msgstr "Tá post agat i bhfillteán %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Comhadlann '%s' á cruthú."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
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:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Úsáidtear an focal faire cheana."
@@ -471,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:629
+#: 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:645
+#: 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"
@@ -501,67 +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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Cuireadh an cuntas faoi ghlas go sealadach (%ld soicind fágtha)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Earráid fhíordheimhnithe"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Earráid seirbhíse"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Úsáideoir anaithnid"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Earráid anaithnid"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Tugadh drochuimhir do --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Rogha anaithnid %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file ainm-comhad-le-fréamh] [--user úsáideoir] [--reset[=u]]\n"
-"[--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Ní féidir gach úsáideoir a athrú go neamhnialasach\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Logáil isteach Teipeanna Teip is déanaí Ó\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f ainm-comhad-le-fréamh] [--file ainm-comhad-le-fréamh]\n"
-" [-u úsáideoir] [--user úsáideoir]\n"
-" [-r] [--reset[=u]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -587,7 +480,7 @@ msgid ""
msgstr ""
"Ní mór duit d'fhocal faire a athrú láithreach (chuaigh focal faire in aos)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -598,30 +491,120 @@ msgstr[3] "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá"
msgstr[4] "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: 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: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: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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "earráid dála chuimhne"
+
+#~ msgid "is a palindrome"
+#~ msgstr "is palandróm é"
+
+#~ msgid "case changes only"
+#~ msgstr "athruithe cáis amháin"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "tá sé ró-chosúil leis an seancheann"
+
+#~ msgid "is too simple"
+#~ msgstr "tá sé ró-shimplí"
+
+#~ msgid "is rotated"
+#~ msgstr "tá sé rothlaithe"
+
+#~ msgid "not enough character classes"
+#~ msgstr "níl go leor aicmí carachtar ann"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "tá an iomarca carachtar céanna ann go leantach"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "tá seicheamh carachtar aontonach ró-fhada ann"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "tá an t-ainm úsáideora ann i bhfoirm éigin"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "DROCHFHOCAL FAIRE: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Cuireadh an cuntas faoi ghlas go sealadach (%ld soicind fágtha)"
+
+#~ msgid "Authentication error"
+#~ msgstr "Earráid fhíordheimhnithe"
+
+#~ msgid "Service error"
+#~ msgstr "Earráid seirbhíse"
+
+#~ msgid "Unknown user"
+#~ msgstr "Úsáideoir anaithnid"
+
+#~ msgid "Unknown error"
+#~ msgstr "Earráid anaithnid"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Tugadh drochuimhir do --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Rogha anaithnid %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file ainm-comhad-le-fréamh] [--user úsáideoir] [--reset[=u]]\n"
+#~ "[--quiet]\n"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f ainm-comhad-le-fréamh] [--file ainm-comhad-le-fréamh]\n"
+#~ " [-u úsáideoir] [--user úsáideoir]\n"
+#~ " [-r] [--reset[=u]] [--quiet]\n"
diff --git a/po/gl.po b/po/gl.po
index 04d45bfb..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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.gmo b/po/gu.gmo
index 2ceada0c..97a493f4 100644
--- a/po/gu.gmo
+++ b/po/gu.gmo
Binary files differ
diff --git a/po/gu.po b/po/gu.po
index b1b1fb12..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: 2020-06-08 10:18+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,62 +23,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...સમય ચાલà«àª¯à«‹ જઈ રહà«àª¯à«‹ છે...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...માફ કરજો, તમારો સમય સમાપà«àª¤ થયો!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "કà«àª·àª¤àª¿àª¯à«àª•à«àª¤ વારà«àª¤àª¾àª²àª¾àªª (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "પાસવરà«àª¡ બદલાવનો અંત આવેલ છે."
@@ -219,137 +206,100 @@ msgstr "કારà«àª¯àª•à«àª°àª®àª¨à«‡ libpam ફરીથી બોલાવ
msgid "Unknown PAM error"
msgstr "અજà«àªžàª¾àª¤ PAM ભૂલ"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ઠજૂના જેવો જ છે"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "મેમરી ફાળવણી ભૂલ"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "ઠપેલીનà«àª¡à«àª°à«‹àª® છે"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "કેસ ફેરફાર માતà«àª°"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ઠજૂના સાથે àªàª•દમ સરખો છે"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "ઠખૂબ સાદો છે"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "ઠફેરવાયેલ છે"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "પૂરતા અકà«àª·àª° વરà«àª—à«‹ નથી"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "àªàª•પછી àªàª• ઘણા બધા સરખા અકà«àª·àª°à«‹àª¨à«‡ સમાવે છે"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "મૉનોટોનિક અકà«àª·àª° કà«àª°àª® ઘણો લાંબો સમાવે છે"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "અમà«àª• ફોરà«àª®àª®àª¾àª‚ વપરાશકરà«àª¤àª¾ નામ ને સમાવે છે"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "કોઈ પાસવરà«àª¡ પૂરો પડાયેલ નથી"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...સમય ચાલà«àª¯à«‹ જઈ રહà«àª¯à«‹ છે...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS પાસવરà«àª¡ બદલી શકà«àª¯àª¾ નહિં."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...માફ કરજો, તમારો સમય સમાપà«àª¤ થયો!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ખરાબ પાસવરà«àª¡: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "કà«àª·àª¤àª¿àª¯à«àª•à«àª¤ વારà«àª¤àª¾àª²àª¾àªª (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s નિષà«àª«àª³: બહાર નીકળà«àª¯àª¾àª¨à«‹ કોડ %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -358,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:1088
+#: 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
@@ -405,22 +355,22 @@ msgstr "તમારી પાસે ફોલà«àª¡àª° %s માં જૂનà«
msgid "You have mail in folder %s."
msgstr "તમારી પાસે ફોલà«àª¡àª° %s માં મેઈલ છે."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "ડિરેકà«àªŸàª°à«€ '%s' બનાવી રહà«àª¯àª¾ છીàª."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "ડિરેકà«àªŸàª°à«€ '%s' ને શરૂ કરવામાં અને બનાવવામાં અસમરà«àª¥."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "પાસવરà«àª¡àª¨à«‡ વાપરી દેવામાં આવà«àª¯à«‹ છે."
@@ -451,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "કી બનાવટ સંદરà«àª­ %s સોંપાયેલ"
@@ -481,66 +431,7 @@ msgstr "pam_set_item() કરવામાં નિષà«àª«àª³\n"
msgid "login: failure forking: %m"
msgstr "પà«àª°àªµà«‡àª¶: ફોરà«àª•માં નિષà«àª«àª³: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "ખાતૠથોડા વખત માટે તાળૠમારેલ છે (%ld સેકંડો ડાબે)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "સતà«àª¤àª¾àª§àª¿àª•રણ ભૂલ"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "સેવા ભૂલ"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "અજà«àªžàª¾àª¤ વપરાશકરà«àª¤àª¾"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "અજà«àªžàª¾àª¤ ભૂલ"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= ને ખોટો નંબર અપાયેલ છે\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: નહિં ઓળખાતો વિકલà«àªª %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: બધા વપરાશકરà«àª¤àª¾àª“ને બિન-શૂનà«àª¯àª®àª¾àª‚ પà«àª¨àªƒàª¸à«àª¯à«‹àªœàª¿àª¤ કરી શકતા નથી\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "પà«àª°àªµà«‡àª¶ ઠતે માંથી તાજેતરની નિષà«àª«àª³àª¤àª¾àª¨à«‡ નિષà«àª«àª³ કરે છે\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "પà«àª°àªµà«‡àª¶àª¨à«€ મંજૂરી આપેલ છે (છેલà«àª²à«‹ પà«àª°àªµà«‡àª¶ ઠ%ld સેકંડો પહેલા હતો)."
@@ -563,7 +454,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "તમારે તમારો પાસવરà«àª¡ તà«àª°àª‚ત જ બદલવાની જરૂર છે (પાસવરà«àª¡ વયમરà«àª¯àª¾àª¦àª¿àª¤ કરાયેલ)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -571,30 +462,119 @@ msgstr[0] "ચેતવણી: તમારો પાસવરà«àª¡ %d દિàª
msgstr[1] "ચેતવણી: તમારો પાસવરà«àª¡ %d દિવસોમાં નિવૃતà«àª¤ થઈ જશે"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "કોઈ પાસવરà«àª¡ પૂરો પડાયેલ નથી"
+
+#: 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: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 "ઠજૂના જેવો જ છે"
+
+#~ msgid "memory allocation error"
+#~ msgstr "મેમરી ફાળવણી ભૂલ"
+
+#~ msgid "is a palindrome"
+#~ msgstr "ઠપેલીનà«àª¡à«àª°à«‹àª® છે"
+
+#~ msgid "case changes only"
+#~ msgstr "કેસ ફેરફાર માતà«àª°"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ઠજૂના સાથે àªàª•દમ સરખો છે"
+
+#~ msgid "is too simple"
+#~ msgstr "ઠખૂબ સાદો છે"
+
+#~ msgid "is rotated"
+#~ msgstr "ઠફેરવાયેલ છે"
+
+#~ msgid "not enough character classes"
+#~ msgstr "પૂરતા અકà«àª·àª° વરà«àª—à«‹ નથી"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "àªàª•પછી àªàª• ઘણા બધા સરખા અકà«àª·àª°à«‹àª¨à«‡ સમાવે છે"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "મૉનોટોનિક અકà«àª·àª° કà«àª°àª® ઘણો લાંબો સમાવે છે"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "અમà«àª• ફોરà«àª®àª®àª¾àª‚ વપરાશકરà«àª¤àª¾ નામ ને સમાવે છે"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ખરાબ પાસવરà«àª¡: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "ખાતૠથોડા વખત માટે તાળૠમારેલ છે (%ld સેકંડો ડાબે)"
+
+#~ msgid "Authentication error"
+#~ msgstr "સતà«àª¤àª¾àª§àª¿àª•રણ ભૂલ"
+
+#~ msgid "Service error"
+#~ msgstr "સેવા ભૂલ"
+
+#~ msgid "Unknown user"
+#~ msgstr "અજà«àªžàª¾àª¤ વપરાશકરà«àª¤àª¾"
+
+#~ msgid "Unknown error"
+#~ msgstr "અજà«àªžàª¾àª¤ ભૂલ"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= ને ખોટો નંબર અપાયેલ છે\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: નહિં ઓળખાતો વિકલà«àªª %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: બધા વપરાશકરà«àª¤àª¾àª“ને બિન-શૂનà«àª¯àª®àª¾àª‚ પà«àª¨àªƒàª¸à«àª¯à«‹àªœàª¿àª¤ કરી શકતા નથી\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/he.gmo b/po/he.gmo
index a1871312..a2c76f7d 100644
--- a/po/he.gmo
+++ b/po/he.gmo
Binary files differ
diff --git a/po/he.po b/po/he.po
index 9fec5bca..3528108c 100644
--- a/po/he.po
+++ b/po/he.po
@@ -4,80 +4,66 @@
#
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2011-11-30 06:57-0500\n"
-"Last-Translator: Tomáš Mráz <tmraz@fedoraproject.org>\n"
-"Language-Team: Hebrew <he-users@lists.fedoraproject.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"
"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.15.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...הזמן עומד להיגמר...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...מצטער, הזמן נגמר!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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
-#, fuzzy, c-format
+#: libpam/pam_get_authtok.c:42
+#, c-format
msgid "Current %s password: "
-msgstr "ססמת יוניקס (נוכחית): "
+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
-#, fuzzy, c-format
+#: libpam/pam_get_authtok.c:45
+#, c-format
msgid "New %s password: "
-msgstr "ססמת יוניקס (נוכחית): "
+msgstr "ססמת %s חדשה: "
-#: libpam/pam_get_authtok.c:45
-#, fuzzy
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
-msgstr "ססמה: "
+msgstr "ססמה חדשה: "
-#: libpam/pam_get_authtok.c:47
-#, fuzzy, c-format
+#: libpam/pam_get_authtok.c:48
+#, c-format
msgid "Retype new %s password: "
-msgstr "הקלד שוב ססמת STRESS חדשה:"
+msgstr "להקליד שוב ססמת %s חדשה: "
-#: libpam/pam_get_authtok.c:48
-#, fuzzy
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
-msgstr "הקלד שוב ססמת STRESS חדשה:"
+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 ""
+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 "שינוי ססמה בוטל."
@@ -95,15 +81,15 @@ msgstr "שגי××” קריטית - ביטול מידי"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
-msgstr ""
+msgstr "טעינת המודול נכשלה"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr ""
+msgstr "הסמל ×œ× × ×ž×¦×"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
-msgstr ""
+msgstr "שגי××” במודול השירות"
#: libpam/pam_strerror.c:50
msgid "System error"
@@ -111,7 +97,7 @@ msgstr "שגי×ת מערכת"
#: libpam/pam_strerror.c:52
msgid "Memory buffer error"
-msgstr ""
+msgstr "שגי×ת ×ž×›×œ× ×–×™×›×¨×•×Ÿ"
#: libpam/pam_strerror.c:54
msgid "Permission denied"
@@ -123,23 +109,23 @@ 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"
@@ -147,206 +133,171 @@ 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 "פריט פסול הועבר ×ל to 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"
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
-msgstr ""
+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 ×œ× ×ž×•×›×¨×ª"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "זהה לישנה"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "פילנדרו×"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "יותר מדי דומה לישנה"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "פשוטה מדי."
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "×œ× ×¡×•×¤×§×” ססמה"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...הזמן עומד להיגמר...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "×œ× ×”×™×” ניתן לשנות ססמת NIS."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...סליחה, זמנך עבר!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ססמה ×œ× ×˜×•×‘×”: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "דיון שגוי (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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] [--"
+"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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
-#, fuzzy, c-format
+#: 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: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] "(נותרו %d דקות לשחרור)"
-#: modules/pam_faillock/pam_faillock.c:650
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -355,20 +306,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 ""
+msgstr "היו %d ניסיונות התחברות שנכשלו מ××– ההתחברות ×”×חרונה שהצליחה."
-#: modules/pam_limits/pam_limits.c:1088
+#: 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."
@@ -385,60 +335,59 @@ 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:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr ""
+msgstr "התיקייה ‚%s’ נוצרת."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: 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:211
-#: 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:218
-#, fuzzy
+#: 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 ""
+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:"
-msgstr "תפקיד: "
+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:"
@@ -446,148 +395,170 @@ 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:629
+#: 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:645
+#: 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_item()‎ נכשל\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "החשבון נעול זמנית (%ld שניות נותרו)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "שגי×ת ×ימות"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "שגי×ת שירות"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "משתמש ×œ× ×™×“×•×¢"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "שגי××” ×œ× ×ž×•×›×¨×ª"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
+msgstr "כניסה: פיצול נכשל: %m"
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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
-#, 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:265 modules/pam_unix/pam_unix_acct.c:272
-#, fuzzy, c-format
+#: 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[1] "×זהרה: הססמה שלך תפוג תוך %d ימי×"
+msgstr[0] "×זהרה: הססמה שלך תפוג מחר."
+msgstr[1] "×זהרה: הססמה שלך תפוג תוך %d ימי×."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
-#, fuzzy, c-format
+#: 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."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "×œ× ×¡×•×¤×§×” ססמה."
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "הססמה ×œ× ×”×•×—×œ×¤×”."
+
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
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 "is the same as the old one"
+#~ msgstr "זהה לישנה"
+
+#~ msgid "memory allocation error"
+#~ msgstr "שגי×ת הקצ×ת זכרון"
+
+#~ msgid "is a palindrome"
+#~ msgstr "פילנדרו×"
+
+#~ msgid "case changes only"
+#~ msgstr "שינויי גודל ×ותיות בלבד"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "יותר מדי דומה לישנה"
+
+#~ msgid "is too simple"
+#~ msgstr "פשוטה מדי"
+
+#~ msgid "is rotated"
+#~ msgstr "×”×× ×©×•× ×” הסדר"
+
+#~ msgid "not enough character classes"
+#~ msgstr "×ין מספיק מחלקות תווי×"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "יותר מדי ×ª×•×•×™× ×–×”×™× ×‘×–×” ×חר ×–×”"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "מכיל רצף ×ª×•×•×™× ×ž×•× ×•×˜×•× ×™ ×רוך מדי"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "מכיל ×ת ×©× ×”×ž×©×ª×ž×© בצורה כלשהי"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ססמה ×œ× ×˜×•×‘×”: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "החשבון נעול זמנית (%ld שניות נותרו)."
+
+#~ msgid "Authentication error"
+#~ msgstr "שגי×ת ×ימות"
+
+#~ msgid "Service error"
+#~ msgstr "שגי×ת שירות"
+
+#~ msgid "Unknown user"
+#~ msgstr "משתמש ×œ× ×™×“×•×¢"
+
+#~ msgid "Unknown error"
+#~ msgstr "שגי××” ×œ× ×ž×•×›×¨×ª"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: המספר שהועבר ל־‎--reset=‎ שגוי\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: ×פשרות ×œ× ×ž×•×›×¨×ª %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: ×ין ×פשרות ל×פס ×ת כל ×”×ž×©×ª×ž×©×™× ×œ×ž×¡×¤×¨ ש×ינו ×פס\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/hi.gmo b/po/hi.gmo
index 6fcd606a..e6cd05db 100644
--- a/po/hi.gmo
+++ b/po/hi.gmo
Binary files differ
diff --git a/po/hi.po b/po/hi.po
index 36a47382..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: 2020-06-08 10:18+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,62 +24,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 3.11.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...समय समापà¥à¤¤ हो रहा है...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...कà¥à¤·à¤®à¤¾ करें, आपका समय समापà¥à¤¤ हो गया!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "अनियमित बातचीत (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "कूटशबà¥à¤¦ परिवरà¥à¤¤à¤¨ छोड़ा गया."
@@ -220,137 +207,100 @@ msgstr "अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— के libpam फिर आहà¥à¤µà¤¾à¤¨ à
msgid "Unknown PAM error"
msgstr "अनजान PAM तà¥à¤°à¥à¤Ÿà¤¿"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "पà¥à¤°à¤¾à¤¨à¥‡ की तरह समान है"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "सà¥à¤®à¥ƒà¤¤à¤¿ आबंटन तà¥à¤°à¥à¤Ÿà¤¿"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "à¤à¤• पालिनडà¥à¤°à¥‹à¤® है"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "सà¥à¤¥à¤¿à¤¤à¤¿ परिवरà¥à¤¤à¤¨ सिरà¥à¤«"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "पà¥à¤°à¤¾à¤¨à¥‡ के बहà¥à¤¤ समान है"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "बहà¥à¤¤ सरल है"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "घà¥à¤®à¤¾à¤¯à¤¾ गया है"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "परà¥à¤¯à¤¾à¤ªà¥à¤¤ वरà¥à¤£ वरà¥à¤— नहीं"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "कई समान वरà¥à¤£ लगातार समाहित करता है"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "समान वरà¥à¤£ का लमà¥à¤¬à¤¾ अनà¥à¤•à¥à¤°à¤® समाहित करता है "
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "कà¥à¤› रूप में उपयोकà¥à¤¤à¤¾ नाम समाहित करता है"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "कोई कूटशबà¥à¤¦ नहीं दिया गया है"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...समय समापà¥à¤¤ हो रहा है...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS शबà¥à¤¦à¤•ूट बदला नहीं जा सका."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...कà¥à¤·à¤®à¤¾ करें, आपका समय समापà¥à¤¤ हो गया!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "खराब शबà¥à¤¦à¤•ूट: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "अनियमित बातचीत (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s विफल: निकास कोड %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -359,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:1088
+#: 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
@@ -406,22 +356,22 @@ msgstr "आपके लिठ%s फोलà¥à¤¡à¤° में पà¥à¤°à¤¾à¤¨à¤
msgid "You have mail in folder %s."
msgstr "आपके लिठ%s फोलà¥à¤¡à¤° में मेल है."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "निरà¥à¤¦à¥‡à¤¶à¤¿à¤•ा '%s' बना रहा है."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "निरà¥à¤¦à¥‡à¤¶à¤¿à¤•ा '%s' बनाने और आरंभ करने में असमरà¥à¤¥."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "शबà¥à¤¦à¤•ूट पà¥à¤°à¤¯à¥‹à¤— हो चूका है. दूसरा चà¥à¤¨à¥‡à¤‚ "
@@ -452,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "कà¥à¤‚जी निरà¥à¤®à¤¾à¤£ संदरà¥à¤­ %s नियत"
@@ -482,66 +432,7 @@ msgstr "pam_set_item() में विफल\n"
msgid "login: failure forking: %m"
msgstr "लॉगिन: विफल फोरà¥à¤•िंग: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "खाता असà¥à¤¥à¤¾à¤¯à¥€ रूप से लॉक (%ld seconds left)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "सतà¥à¤¯à¤¾à¤ªà¤¨ तà¥à¤°à¥à¤Ÿà¤¿"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "सेवा तà¥à¤°à¥à¤Ÿà¤¿"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "अनजान उपयोकà¥à¤¤à¤¾"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "अनजान तà¥à¤°à¥à¤Ÿà¤¿"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: खराब संखà¥à¤¯à¤¾ को --reset= में दिया गया\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: अपरिचित विकलà¥à¤ª %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: सभी उपयोकà¥à¤¤à¤¾ को गैर शूनà¥à¤¯ में फिर सेट नहीं कर सकता है\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Failures Latest failure From\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -564,7 +455,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "आपके लिठअपना शबà¥à¤¦à¤•ूट ततà¥à¤•ाल बदलना जरूरी है (शबà¥à¤¦à¤•ूट à¤à¤œà¥à¤¡)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -572,30 +463,119 @@ msgstr[0] "चेतावनी: आपका शबà¥à¤¦à¤•ूट %d दिà¤
msgstr[1] "चेतावनी: आपका शबà¥à¤¦à¤•ूट %d दिन में समापà¥à¤¤ हो जायेगा"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "कोई कूटशबà¥à¤¦ नहीं दिया गया है"
+
+#: 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: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 "पà¥à¤°à¤¾à¤¨à¥‡ की तरह समान है"
+
+#~ msgid "memory allocation error"
+#~ msgstr "सà¥à¤®à¥ƒà¤¤à¤¿ आबंटन तà¥à¤°à¥à¤Ÿà¤¿"
+
+#~ msgid "is a palindrome"
+#~ msgstr "à¤à¤• पालिनडà¥à¤°à¥‹à¤® है"
+
+#~ msgid "case changes only"
+#~ msgstr "सà¥à¤¥à¤¿à¤¤à¤¿ परिवरà¥à¤¤à¤¨ सिरà¥à¤«"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "पà¥à¤°à¤¾à¤¨à¥‡ के बहà¥à¤¤ समान है"
+
+#~ msgid "is too simple"
+#~ msgstr "बहà¥à¤¤ सरल है"
+
+#~ msgid "is rotated"
+#~ msgstr "घà¥à¤®à¤¾à¤¯à¤¾ गया है"
+
+#~ msgid "not enough character classes"
+#~ msgstr "परà¥à¤¯à¤¾à¤ªà¥à¤¤ वरà¥à¤£ वरà¥à¤— नहीं"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "कई समान वरà¥à¤£ लगातार समाहित करता है"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "समान वरà¥à¤£ का लमà¥à¤¬à¤¾ अनà¥à¤•à¥à¤°à¤® समाहित करता है "
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "कà¥à¤› रूप में उपयोकà¥à¤¤à¤¾ नाम समाहित करता है"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "खराब शबà¥à¤¦à¤•ूट: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "खाता असà¥à¤¥à¤¾à¤¯à¥€ रूप से लॉक (%ld seconds left)"
+
+#~ msgid "Authentication error"
+#~ msgstr "सतà¥à¤¯à¤¾à¤ªà¤¨ तà¥à¤°à¥à¤Ÿà¤¿"
+
+#~ msgid "Service error"
+#~ msgstr "सेवा तà¥à¤°à¥à¤Ÿà¤¿"
+
+#~ msgid "Unknown user"
+#~ msgstr "अनजान उपयोकà¥à¤¤à¤¾"
+
+#~ msgid "Unknown error"
+#~ msgstr "अनजान तà¥à¤°à¥à¤Ÿà¤¿"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: खराब संखà¥à¤¯à¤¾ को --reset= में दिया गया\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: अपरिचित विकलà¥à¤ª %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: सभी उपयोकà¥à¤¤à¤¾ को गैर शूनà¥à¤¯ में फिर सेट नहीं कर सकता है\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\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 25aac718..a160c11b 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -4,584 +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: 2020-06-08 10:18+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_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
-
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
+msgstr "Nepoznata PAM greška"
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr ""
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Vrijeme istjeÄe...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr ""
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Nažalost, vaše je vrijeme isteklo!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr ""
+msgid "erroneous conversation (%d)\n"
+msgstr "pogrešan razgovor (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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/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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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: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:1088
+#: 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:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr ""
+msgstr "Stvaranje direktorija '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: 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:211
-#: 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:218
+#: 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:629
+#: 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:645
+#: 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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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:277
+#: 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:581
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "Lozinka nije navedena."
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "Lozinka nije promijenjena."
+
+#: 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.gmo b/po/hu.gmo
index 00faeebf..16ea34cb 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 017c6aec..3dd6ded9 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,13 +9,14 @@
# Zoltan Hoppár <hopparz@gmail.com>, 2012-2013
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# Balázs Meskó <meskobalazs@mailbox.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: 2020-06-08 10:18+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-02-10 19:40+0000\n"
+"Last-Translator: Balázs Meskó <meskobalazs@mailbox.org>\n"
"Language-Team: Hungarian <https://translate.fedoraproject.org/projects/linux-"
"pam/master/hu/>\n"
"Language: hu\n"
@@ -23,64 +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 3.11.2\n"
+"X-Generator: Weblate 4.4.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Fogy az idő...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Sajnos lejárt az idő!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "hibás beszélgetés (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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
-#, fuzzy, c-format
+#: libpam/pam_get_authtok.c:42
+#, c-format
msgid "Current %s password: "
-msgstr "Új %s jelszó: "
+msgstr "Jelenlegi %s jelszó: "
-#: libpam/pam_get_authtok.c:42
-#, fuzzy
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr "Új jelszó: "
+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."
@@ -223,137 +210,100 @@ msgstr "Az alkalmazásnak újra meg kell hívnia a libpam modult"
msgid "Unknown PAM error"
msgstr "Ismeretlen PAM hiba"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ugyanaz, mint a régi"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "memória allokációs hiba"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "palindrom"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "csak a kis/nagybetűkben változott"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "túl hasonló a régihez"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "túl egyszerű"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "forgatva"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "elégtelen betűcsoport"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "túl sok egymást követő betű egyezik meg"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "túl hosszú monoton karaktersorozatot tartalmaz"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "valahogy tartalmazza a felhasználó nevét"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Nincs jelszó megadva"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Fogy az idő...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS jelszót nem sikerült módosítani."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Sajnos lejárt az idő!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ROSSZ JELSZÓ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "hibás beszélgetés (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -362,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:1088
+#: 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
@@ -409,22 +359,22 @@ msgstr "%s mappában régi levél van."
msgid "You have mail in folder %s."
msgstr "%s mappában levelek vannak."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "\"%s\" mappa létrehozása."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
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:211
-#: 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:218
+#: 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."
@@ -455,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:629
+#: 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:645
+#: 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"
@@ -485,66 +435,7 @@ msgstr "pam_set_item() meghiúsult\n"
msgid "login: failure forking: %m"
msgstr "bejelentkezés: elágazás hiba: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Felhasználói azonosító átmenetileg zárolt (még %ld másodpercig)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Hitelesítési hiba"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Szolgáltatás hiba"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Ismeretlen felhasználó"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Ismeretlen hiba"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Rossz szám a --reset= opcióban\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: %s ismeretlen opció\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-fájlnév] [--user használó] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Nem állítható vissza minden felhasználó nem-nullára\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Belépés Hibák Utolsó hibák Innen\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-fájlnév] [--file rooted-fájlnév]\n"
-" [-u használó] [--user használó]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -570,7 +461,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Azonnal meg kell változtatnia a jelszavát (a jelszó elévült)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -578,30 +469,119 @@ msgstr[0] "Figyelmeztetés: a jelszava %d nap múlva lejár"
msgstr[1] "Figyelmeztetés: a jelszava %d nap múlva lejár"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: 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: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: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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "memória allokációs hiba"
+
+#~ msgid "is a palindrome"
+#~ msgstr "palindrom"
+
+#~ msgid "case changes only"
+#~ msgstr "csak a kis/nagybetűkben változott"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "túl hasonló a régihez"
+
+#~ msgid "is too simple"
+#~ msgstr "túl egyszerű"
+
+#~ msgid "is rotated"
+#~ msgstr "forgatva"
+
+#~ msgid "not enough character classes"
+#~ msgstr "elégtelen betűcsoport"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "túl sok egymást követő betű egyezik meg"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "túl hosszú monoton karaktersorozatot tartalmaz"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "valahogy tartalmazza a felhasználó nevét"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ROSSZ JELSZÓ: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Felhasználói azonosító átmenetileg zárolt (még %ld másodpercig)"
+
+#~ msgid "Authentication error"
+#~ msgstr "Hitelesítési hiba"
+
+#~ msgid "Service error"
+#~ msgstr "Szolgáltatás hiba"
+
+#~ msgid "Unknown user"
+#~ msgstr "Ismeretlen felhasználó"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ismeretlen hiba"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Rossz szám a --reset= opcióban\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: %s ismeretlen opció\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-fájlnév] [--user használó] [--reset[=n]] [--quiet]\n"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-fájlnév] [--file rooted-fájlnév]\n"
+#~ " [-u használó] [--user használó]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ia.gmo b/po/ia.gmo
index 88bbb382..9246e2e7 100644
--- a/po/ia.gmo
+++ b/po/ia.gmo
Binary files differ
diff --git a/po/ia.po b/po/ia.po
index feea5e3e..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: 2020-06-08 10:18+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,62 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Le tempore es perimente...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Le tempore ha perimite!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "conversation erronee (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -221,137 +208,100 @@ msgstr "Le application debe appellar a libpam de nove"
msgid "Unknown PAM error"
msgstr "Error incognite de PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "nove contrasigno es equl al previe"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "error al allocation de memoria"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "nove contrasigno es un polindromo"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "nove contrasigno cambia solo le registro de litteras"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "nove contrasigno es troppo simile al previe"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "nove contrasigno es troppo simple"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "nove contrasigno es un rotation del previe"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "nove contrasigno non ha satis de classes de character"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "nove contrasigno contine troppo de characteres identic consequente"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "nove contrasigno contine tro de characteres monotone in un sequentia"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "nove contrasigno contine le nomine de usator in alicun forma"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Necun contrasigno fornite"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Le tempore es perimente...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "Le contrasigno NIS non pote esser cambiate."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Le tempore ha perimite!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "CONTRASIGNO MALFORMATE: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "conversation erronee (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -362,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:1088
+#: 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
@@ -410,22 +360,22 @@ msgstr "Il ha currero vetule in le dossier %s."
msgid "You have mail in folder %s."
msgstr "Il ha currero in le dossier %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Creation del directorio '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Impossibile de crear e de initiar le directorio '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Le contrasigno se ha jam usate."
@@ -456,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:629
+#: 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:645
+#: 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"
@@ -486,66 +436,7 @@ msgstr "error in pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "apertura de session: insuccesso de autoclonage: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Le conto es blocate temporarimente (%ld secundas remanente)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Error de authentication"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Error de servicio"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Usator incognite"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Error incognite"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Numero incorrecte fornite a --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Option non recognoscite %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file percurso-integre] [--user usator] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Impossibile de reinitiar tote le usatores a non-zero\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Conto Fallimentos Ultime fallimento De\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f percurso-integre] [--file percurso-integre]\n"
-" [-u usator] [--user usator]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -568,7 +459,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Le contrasigno es troppo vetule e debe esser cambiate immediatemente."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -576,31 +467,121 @@ msgstr[0] "Advertimento: le contrasigno perimera in %d die"
msgstr[1] "Advertimento: le contrasigno perimera in %d dies"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: 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:555
+#, fuzzy
+msgid "The password has not been changed."
+msgstr "Le contrasigno NIS non pote esser cambiate."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "error al allocation de memoria"
+
+#~ msgid "is a palindrome"
+#~ msgstr "nove contrasigno es un polindromo"
+
+#~ msgid "case changes only"
+#~ msgstr "nove contrasigno cambia solo le registro de litteras"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "nove contrasigno es troppo simile al previe"
+
+#~ msgid "is too simple"
+#~ msgstr "nove contrasigno es troppo simple"
+
+#~ msgid "is rotated"
+#~ msgstr "nove contrasigno es un rotation del previe"
+
+#~ msgid "not enough character classes"
+#~ msgstr "nove contrasigno non ha satis de classes de character"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "nove contrasigno contine troppo de characteres identic consequente"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr ""
+#~ "nove contrasigno contine tro de characteres monotone in un sequentia"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "nove contrasigno contine le nomine de usator in alicun forma"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "CONTRASIGNO MALFORMATE: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Le conto es blocate temporarimente (%ld secundas remanente)"
+
+#~ msgid "Authentication error"
+#~ msgstr "Error de authentication"
+
+#~ msgid "Service error"
+#~ msgstr "Error de servicio"
+
+#~ msgid "Unknown user"
+#~ msgstr "Usator incognite"
+
+#~ msgid "Unknown error"
+#~ msgstr "Error incognite"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Numero incorrecte fornite a --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Option non recognoscite %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file percurso-integre] [--user usator] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: Impossibile de reinitiar tote le usatores a non-zero\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f percurso-integre] [--file percurso-integre]\n"
+#~ " [-u usator] [--user usator]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/id.gmo b/po/id.gmo
index 2be89f82..3c09a45f 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 2062fab9..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: 2020-06-08 10:18+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,63 +20,50 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -217,136 +204,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "terlalu panjang karakter berurutan"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Sandi sudah digunakan."
-
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "Sandi sudah digunakan."
-
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -354,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:1088
+#: 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
@@ -401,22 +350,22 @@ msgstr "Anda memiliki email lama di folder %s."
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Membuat direktori '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Tidak dapat membuat direktori '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Sandi sudah digunakan."
@@ -447,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -477,62 +426,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -552,38 +446,55 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+#, fuzzy
+msgid "The password has not been changed."
+msgstr "Sandi sudah digunakan."
+
+#: 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 0c146147..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 cd68dbe0..56e4e6f7 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 9f65835e..ddbcb065 100644
--- a/po/it.po
+++ b/po/it.po
@@ -10,13 +10,14 @@
# Novell Language <language@novell.com>, 2007
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# Milo Casagrande <milo@milo.name>, 2020.
+# Dmitry V. Levin <ldv@altlinux.org>, 2020, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-03-06 23:59+0000\n"
-"Last-Translator: Milo Casagrande <milo@milo.name>\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-"
"pam/master/it/>\n"
"Language: it\n"
@@ -24,63 +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 3.11.2\n"
+"X-Generator: Weblate 4.7.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Il tempo sta per scadere...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Tempo scaduto!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "conversazione errata (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -224,135 +212,100 @@ msgstr "L'applicazione richiede una nuova chiamata a libpam"
msgid "Unknown PAM error"
msgstr "Errore PAM sconosciuto"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "è la stessa di quella precedente"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "errore allocazione memoria"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "è un palindromo"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "cambiano solo le maiuscole/minuscole"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "è troppo simile alla precedente"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "è troppo semplice"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "è una rotazione della precedente"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "non ha abbastanza classi di caratteri"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "contiene troppi caratteri simili consecutivi"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "contiene una sequenza troppo lunga di caratteri simili"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "contiene il nome utente in alcune forme"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Nessuna password fornita."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Il tempo sta per scadere...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "La password non è stata modificata."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Tempo scaduto!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "Password errata: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "conversazione errata (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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 nomeutente] [--reset[=N]] [--quiet]\n"
+"Uso: %s [--dir /path/to/tally-directory] [--user nomeutente] [--reset]\n"
+
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
@@ -363,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:1088
+#: 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."
@@ -410,22 +364,22 @@ msgstr "La cartella %s contiene vecchie email."
msgid "You have mail in folder %s."
msgstr "La cartella %s contiene email."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Creazione della directory «%s»."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Impossibile creare e inizializzare la directory «%s»."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "La password è stata già utilizzata."
@@ -455,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Contesto di creazione chiave %s assegnato."
@@ -485,67 +439,7 @@ msgstr "Impossibile eseguire pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: fork non riuscita: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Account momentaneamente bloccato (%ld secondi rimanenti)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Errore di autenticazione"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Errore del servizio"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Utente sconosciuto"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Errore sconosciuto"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Numero errato fornito a --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Opzione non riconosciuta %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user nomeutente] [--reset[=N]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-"%s: impossibile ripristinare tutti gli utenti a valori diversi da zero\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Accesso Errori Ultimi errori Da\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u nomeutente] [--user nomeutente]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -567,7 +461,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "È richiesta la modifica immediata della password (password scaduta)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -575,28 +469,114 @@ msgstr[0] "Avviso: la password scadrà tra %d giorno."
msgstr[1] "Avviso: la password scadrà tra %d giorni."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "La password non è stata modificata."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "errore allocazione memoria"
+
+#~ msgid "is a palindrome"
+#~ msgstr "è un palindromo"
+
+#~ msgid "case changes only"
+#~ msgstr "cambiano solo le maiuscole/minuscole"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "è troppo simile alla precedente"
+
+#~ msgid "is too simple"
+#~ msgstr "è troppo semplice"
+
+#~ msgid "is rotated"
+#~ msgstr "è una rotazione della precedente"
+
+#~ msgid "not enough character classes"
+#~ msgstr "non ha abbastanza classi di caratteri"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "contiene troppi caratteri simili consecutivi"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "contiene una sequenza troppo lunga di caratteri simili"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "contiene il nome utente in alcune forme"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "Password scadente: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Account momentaneamente bloccato (%ld secondi rimanenti)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Errore di autenticazione"
+
+#~ msgid "Service error"
+#~ msgstr "Errore del servizio"
+
+#~ msgid "Unknown user"
+#~ msgstr "Utente sconosciuto"
+
+#~ msgid "Unknown error"
+#~ msgstr "Errore sconosciuto"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Numero errato fornito a --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: opzione non riconosciuta %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user nomeutente] [--reset[=N]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr ""
+#~ "%s: impossibile ripristinare tutti gli utenti a valori diversi da zero\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u nomeutente] [--user nomeutente]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index 8891d91e..da496eba 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index f081e2ce..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: 2020-06-08 10:18+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,67 +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_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...時間ãŒåˆ‡ã‚Œã‹ã‹ã£ã¦ã„ã¾ã™...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...時間切れã§ã™ã€‚\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "誤ã£ãŸä¼šè©±(%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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:"
@@ -95,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"
@@ -103,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"
@@ -119,7 +105,7 @@ msgstr "メモリーãƒãƒƒãƒ•ァエラー"
#: libpam/pam_strerror.c:54
msgid "Permission denied"
-msgstr "æ‹’å¦ã•れãŸãƒ‘ーミッション"
+msgstr "許å¯ãŒã‚りã¾ã›ã‚“"
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
@@ -127,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"
@@ -147,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"
@@ -159,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"
@@ -221,157 +207,119 @@ msgstr "アプリケーションã¯libpamã‚’å†ã³å‘¼ã³å‡ºã™å¿…è¦ãŒã‚りã¾
msgid "Unknown PAM error"
msgstr "䏿˜Žãª PAM エラー"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "パスワードãŒå¤ã„ã‚‚ã®ã¨åŒã˜ã§ã™ã€‚"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "メモリー割り当ã¦ã‚¨ãƒ©ãƒ¼"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "å‰å¾Œã©ã¡ã‚‰ã‹ã‚‰èª­ã‚“ã§ã‚‚åŒã˜ãƒ‘スワードã§ã™ã€‚"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "å¤§æ–‡å­—å°æ–‡å­—を変ãˆãŸã ã‘ã®ãƒ‘スワード"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "å¤ã„ã‚‚ã®ã¨ä¼¼ã¦ã„ã¾ã™"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "ç°¡å˜ã™ãŽã¾ã™"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "回転ã—ã¦ã„ã¾ã™"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "文字クラスãŒä¸å分ã§ã™"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "連続的ãªåŒä¸€æ–‡å­—ãŒå¤šãå«ã¾ã‚ŒéŽãŽã§ã™"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "å˜èª¿ãªæ–‡å­—åˆ—ãŒæ•°å¤šãå«ã¾ã‚Œã¦ã„ã¾ã™"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "ãªã‚“らã‹ã®å½¢å¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’å«ã¿ã¾ã™"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "パスワードãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...時間ãŒåˆ‡ã‚Œã‹ã‹ã£ã¦ã„ã¾ã™...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS パスワードを変更ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...時間切れã§ã™ã€‚\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "よããªã„パスワード: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "誤ã£ãŸä¼šè©±(%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s 失敗: 終了コード %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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: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 分)"
-#: modules/pam_faillock/pam_faillock.c:650
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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:1088
-#, 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
@@ -406,30 +354,30 @@ msgstr "フォルダ%sã«å¤ã„メールãŒã‚りã¾ã™ã€‚"
msgid "You have mail in folder %s."
msgstr "フォルダ%sã«ãƒ¡ãƒ¼ãƒ«ãŒã‚りã¾ã™ã€‚"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr "ディレクトリ '%s' を作æˆä¸­"
+msgstr "ディレクトリ '%s' を作æˆã—ã¦ã„ã¾ã™ã€‚"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: 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:211
-#: 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:218
+#: 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?"
@@ -440,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:629
-#, 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:645
-#, 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
@@ -481,122 +428,143 @@ msgstr "pam_set_item()ã«å¤±æ•—ã—ã¾ã—ãŸ\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr "ログイン: ã„ã¾ã„ã¾ã—ã„失敗: %m"
-
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "アカウントã¯ä¸€æ™‚çš„ã«ãƒ­ãƒƒã‚¯ã•れã¦ã„ã¾ã™ (残り %ld ç§’)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "サービスエラー"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "䏿˜Žãªãƒ¦ãƒ¼ã‚¶ãƒ¼"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "䏿˜Žãªã‚¨ãƒ©ãƒ¼"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: 䏿­£ç•ªå·ãŒ--reset=ã«ä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: 未èªè­˜ã‚ªãƒ—ション%s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+msgstr "ログイン: fork失敗: %m"
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’éžã‚¼ãƒ­ã«ãƒªã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "ログイン 失敗。最後ã®å¤±æ•—㯠以下ã§ç™ºç”Ÿ\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
-#, fuzzy, 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:265 modules/pam_unix/pam_unix_acct.c:272
-#, fuzzy, c-format
+#: 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:277
-#, fuzzy, c-format
+#: 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 パスワードを変更ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "パスワードãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "パスワードを変更ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: 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 "パスワードãŒå¤ã„ã‚‚ã®ã¨åŒã˜ã§ã™ã€‚"
+
+#~ msgid "memory allocation error"
+#~ msgstr "メモリー割り当ã¦ã‚¨ãƒ©ãƒ¼"
+
+#~ msgid "is a palindrome"
+#~ msgstr "å‰å¾Œã©ã¡ã‚‰ã‹ã‚‰èª­ã‚“ã§ã‚‚åŒã˜ãƒ‘スワードã§ã™ã€‚"
+
+#~ msgid "case changes only"
+#~ msgstr "å¤§æ–‡å­—å°æ–‡å­—を変ãˆãŸã ã‘ã®ãƒ‘スワード"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "å¤ã„ã‚‚ã®ã¨ä¼¼ã¦ã„ã¾ã™"
+
+#~ msgid "is too simple"
+#~ msgstr "ç°¡å˜ã™ãŽã¾ã™"
+
+#~ msgid "is rotated"
+#~ msgstr "回転ã—ã¦ã„ã¾ã™"
+
+#~ msgid "not enough character classes"
+#~ msgstr "文字クラスãŒä¸å分ã§ã™"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "連続的ãªåŒä¸€æ–‡å­—ãŒå¤šãå«ã¾ã‚ŒéŽãŽã§ã™"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "å˜èª¿ãªæ–‡å­—åˆ—ãŒæ•°å¤šãå«ã¾ã‚Œã¦ã„ã¾ã™"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "ãªã‚“らã‹ã®å½¢å¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’å«ã¿ã¾ã™"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "よããªã„パスワード: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "アカウントã¯ä¸€æ™‚çš„ã«ãƒ­ãƒƒã‚¯ã•れã¦ã„ã¾ã™ (残り %ld ç§’)"
+
+#~ msgid "Authentication error"
+#~ msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼"
+
+#~ msgid "Service error"
+#~ msgstr "サービスエラー"
+
+#~ msgid "Unknown user"
+#~ msgstr "䏿˜Žãªãƒ¦ãƒ¼ã‚¶ãƒ¼"
+
+#~ msgid "Unknown error"
+#~ msgstr "䏿˜Žãªã‚¨ãƒ©ãƒ¼"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: 䏿­£ç•ªå·ãŒ--reset=ã«ä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: 未èªè­˜ã‚ªãƒ—ション%s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’éžã‚¼ãƒ­ã«ãƒªã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ka.gmo b/po/ka.gmo
index a015a0d8..93a49d32 100644
--- a/po/ka.gmo
+++ b/po/ka.gmo
Binary files differ
diff --git a/po/ka.po b/po/ka.po
index 3325be1e..9876465a 100644
--- a/po/ka.po
+++ b/po/ka.po
@@ -5,81 +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: 2020-06-08 10:18+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_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...დრრგáƒáƒ“ის...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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:"
@@ -91,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"
@@ -119,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"
@@ -203,171 +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-ის უცნáƒáƒ‘ი შეცდáƒáƒ›áƒ"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ძáƒáƒšáƒ˜áƒáƒœ გáƒáƒ•ს ძველს"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "ძáƒáƒšáƒ˜áƒáƒœ მáƒáƒ áƒ¢áƒ˜áƒ•იáƒ"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "შებრუნებულიáƒ"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "რáƒáƒ¦áƒáƒª ფáƒáƒ áƒ›áƒ˜áƒ— გáƒáƒ•ს მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლს"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "პáƒáƒ áƒáƒšáƒ˜ áƒáƒ  იქნრმითითებული"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...დრრგáƒáƒ“ის...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "პáƒáƒ áƒáƒšáƒ˜ უკვე იყრგáƒáƒ›áƒáƒ§áƒ”ნებული."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...უკáƒáƒªáƒ áƒáƒ•áƒáƒ“, თქვენი დრრგáƒáƒ•იდáƒ!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ცუდი პáƒáƒ áƒáƒšáƒ˜: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "შეცდáƒáƒ›áƒ˜áƒ—ი სáƒáƒ£áƒ‘áƒáƒ áƒ˜ (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
+msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი შეცდáƒáƒ›áƒ”ბი ბáƒáƒšáƒáƒ¨áƒ”ცდáƒáƒ›áƒ სáƒáƒ˜áƒ“áƒáƒœ\n"
-#: modules/pam_faillock/pam_faillock.c:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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:1088
+#: 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."
@@ -375,59 +328,59 @@ 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:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "'%s' დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ შექმნáƒ."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: 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:211
-#: 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:218
+#: 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:"
@@ -436,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:"
@@ -444,145 +397,123 @@ 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:629
+#: 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:645
+#: 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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "სერვისის შეცდáƒáƒ›áƒ"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "უცნáƒáƒ‘ი მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "უცნáƒáƒ‘ი შეცდáƒáƒ›áƒ"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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:277
+#: 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:581
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "პáƒáƒ áƒáƒšáƒ˜ áƒáƒ  იქნრმითითებული."
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "პáƒáƒ áƒáƒšáƒ˜ áƒáƒ  შეცვლილáƒ."
+
+#: 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 "ძáƒáƒšáƒ˜áƒáƒœ გáƒáƒ•ს ძველს"
+
+#~ msgid "is too simple"
+#~ msgstr "ძáƒáƒšáƒ˜áƒáƒœ მáƒáƒ áƒ¢áƒ˜áƒ•იáƒ"
+
+#~ msgid "is rotated"
+#~ msgstr "შებრუნებულიáƒ"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "რáƒáƒ¦áƒáƒª ფáƒáƒ áƒ›áƒ˜áƒ— გáƒáƒ•ს მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლს"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ცუდი პáƒáƒ áƒáƒšáƒ˜: %s"
+
+#~ msgid "Service error"
+#~ msgstr "სერვისის შეცდáƒáƒ›áƒ"
+
+#~ msgid "Unknown user"
+#~ msgstr "უცნáƒáƒ‘ი მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი"
+
+#~ msgid "Unknown error"
+#~ msgstr "უცნáƒáƒ‘ი შეცდáƒáƒ›áƒ"
diff --git a/po/kk.gmo b/po/kk.gmo
index c3a492d1..39279e14 100644
--- a/po/kk.gmo
+++ b/po/kk.gmo
Binary files differ
diff --git a/po/kk.po b/po/kk.po
index b745315c..8c956af0 100644
--- a/po/kk.po
+++ b/po/kk.po
@@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Baurzhan Muftakhidinov <baurthefirst@gmail.com>, 2012
+# 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: 2020-06-08 10:18+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: 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"
"Language: kk\n"
@@ -20,65 +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 3.11.2\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Уақытыңыз бітіп барады...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Кешіріңіз, Ñіздің уақытыңыз бітті!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "қате Ñұхбат (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 үшін жаңа пароль: "
-#: 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
-#, fuzzy
+#: libpam/pam_get_authtok.c:183 libpam/pam_get_authtok.c:263
msgid "Password change has been aborted."
msgstr "Парольді өзгертуден Ð±Ð°Ñ Ñ‚Ð°Ñ€Ñ‚Ñ‹Ð»Ð´Ñ‹."
@@ -220,137 +205,100 @@ msgstr "Бағдарлама libpam-ды қайтадан шақыруы керÐ
msgid "Unknown PAM error"
msgstr "БелгіÑіз PAM қатеÑÑ–"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "алдыңғыÑына ÑÓ™Ð¹ÐºÐµÑ Ð±Ð¾Ð»Ñ‹Ð¿ тұр"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "жадыны бөлу қатеÑÑ–"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "палиндром болып тұр"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "өзгеріÑтер таңбалардың региÑтрінде ғана"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "еÑкі парольге өте Ò±Ò›ÑаÑ"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "өте оңай болып тұр"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "аударылған еÑкі пароль"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "керек таңбалар клаÑтары жоқ"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "құрамында бірдей таңбалардың тізбегі бар"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "құрамында біркелкі таңбалардың тым ұзын тізбегі бар"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "құрамында пайдаланушы аты бар"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Пароль көрÑетілмеді"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Уақытыңыз бітіп барады...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS паролін өзгерту мүмкін емеÑ."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Кешіріңіз, Ñіздің уақытыңыз бітті!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ÒšÐТЕ ПÐРОЛЬ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "қате Ñұхбат (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s қатеÑÑ–: шығу коды %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
-#, fuzzy, c-format
+#: 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: [--file түбірлік_файл_аты] [--user пайдаланушы] [--reset[=n]] [--quiet]\n"
+"Қолданылуы: %s: [--dir /tally-бумаÑына/дейінгі/жол] [--user пайдаланушы] [--"
+"reset] [--legacy-output]\n"
-#: modules/pam_faillock/pam_faillock.c:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
-#, fuzzy, c-format
+#: 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 рет қате кіру талабы еÑебінен оқшауланды"
+msgstr "Тіркелгі %u рет қате кіру талабы Ñалдарынан бұғатталды."
-#: modules/pam_faillock/pam_faillock.c:650
+#: 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: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 " %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 ""
@@ -358,20 +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:1088
-#, 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."
-msgstr "Сізде жаңа поштаңыз бар."
+msgid "You do not have any new mail."
+msgstr "Сізде жаңа пошта жоқ."
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -405,29 +352,29 @@ msgstr "Сізде %s бумаÑында еÑкі поштаңыз бар."
msgid "You have mail in folder %s."
msgstr "Сізде %s бумаÑында поштаңыз бар."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "'%s' бумаÑын жаÑау."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "'%s' бумаÑын жаÑау мүмкін емеÑ."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: 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?"
@@ -438,33 +385,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:629
-#, 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:645
-#, 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
@@ -481,120 +427,141 @@ msgstr "pam_set_item() орындау мүмкін емеÑ\n"
msgid "login: failure forking: %m"
msgstr "login: үрдіÑті баÑтау мүмкін емеÑ: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Тіркелгі уақытша оқшауланған (%ld Ñекунд қалды)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Шындылықты анықтау қатеÑÑ–"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Қызмет қатеÑÑ–"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "БелгіÑіз пайдаланушы"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "БелгіÑіз қате"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= үшін қате Ñан берілді\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: %s опциÑÑÑ‹ белгіÑіз\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file түбірлік_файл_аты] [--user пайдаланушы] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Барлық пайдаланушыларды нөлдік ÐµÐ¼ÐµÑ Ð¼Ó™Ð½Ð³Ðµ таÑтау мүмкін емеÑ\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Пайдаланушы аты СәтÑіз кіру Ñаны Соңғы қате Қайдан\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f түбірлік_файл_аты] [--file түбірлік_файл_аты]\n"
-" [-u пайдаланушы_аты] [--user пайдаланушы_аты]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
-#, fuzzy, 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 "Сізге пароліңізді қазір ауыÑтыру керек (root мәжбүрлеген)"
+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:265 modules/pam_unix/pam_unix_acct.c:272
-#, fuzzy, c-format
+#: 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:277
-#, fuzzy, c-format
+#: 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 паролін өзгерту мүмкін емеÑ."
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "Пароль көрÑетілмеді."
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "Пароль өзгертілмеді."
+
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
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 үшін парольді өзгерту."
-#: 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 "алдыңғыÑына ÑÓ™Ð¹ÐºÐµÑ Ð±Ð¾Ð»Ñ‹Ð¿ тұр"
+
+#~ msgid "memory allocation error"
+#~ msgstr "жадыны бөлу қатеÑÑ–"
+
+#~ msgid "is a palindrome"
+#~ msgstr "палиндром болып тұр"
+
+#~ msgid "case changes only"
+#~ msgstr "өзгеріÑтер таңбалардың региÑтрінде ғана"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "еÑкі парольге өте Ò±Ò›ÑаÑ"
+
+#~ msgid "is too simple"
+#~ msgstr "өте оңай болып тұр"
+
+#~ msgid "is rotated"
+#~ msgstr "аударылған еÑкі пароль"
+
+#~ msgid "not enough character classes"
+#~ msgstr "керек таңбалар клаÑтары жоқ"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "құрамында бірдей таңбалардың тізбегі бар"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "құрамында біркелкі таңбалардың тым ұзын тізбегі бар"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "құрамында пайдаланушы аты бар"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ÒšÐТЕ ПÐРОЛЬ: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Тіркелгі уақытша бұғатталған (%ld Ñекунд қалды)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Шындылықты анықтау қатеÑÑ–"
+
+#~ msgid "Service error"
+#~ msgstr "Қызмет қатеÑÑ–"
+
+#~ msgid "Unknown user"
+#~ msgstr "БелгіÑіз пайдаланушы"
+
+#~ msgid "Unknown error"
+#~ msgstr "БелгіÑіз қате"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= үшін қате Ñан берілді\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: %s опциÑÑÑ‹ белгіÑіз\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file түбірлік_файл_аты] [--user пайдаланушы] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: Барлық пайдаланушыларды нөлдік ÐµÐ¼ÐµÑ Ð¼Ó™Ð½Ð³Ðµ таÑтау мүмкін емеÑ\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f түбірлік_файл_аты] [--file түбірлік_файл_аты]\n"
+#~ " [-u пайдаланушы_аты] [--user пайдаланушы_аты]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/km.gmo b/po/km.gmo
index 19d03f92..ee7497e8 100644
--- a/po/km.gmo
+++ b/po/km.gmo
Binary files differ
diff --git a/po/km.po b/po/km.po
index faaca0ee..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: 2020-06-08 10:18+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,62 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...អស់​ពáŸáž›...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...សូម​ទោស អ្នក​អស់​ពáŸáž›â€‹áž áž¾áž™Â !\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "សន្ទនាច្រឡំ (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "ពាក្យសម្ងាážáŸ‹â€‹ážáŸ’រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀážÂ áŸ”"
@@ -217,137 +204,99 @@ msgstr "កម្មវិធី​ážáŸ’រូវ​ážáŸ‚​ហៅ libpam មá
msgid "Unknown PAM error"
msgstr "មិន​ស្គាល់​កំហុស PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ដូច​គ្នា​នឹង​ពាក្យ​សម្ងាážáŸ‹â€‹áž…ាស់"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "ážáŸ’រឡប់​ចុះ​ឡើង"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "គ្រាន់​ážáŸ‚​ផ្លាស់ប្ដូរ​លក្ážážŽáŸˆâ€‹áž¢áž€áŸ’សរ​ប៉ុណ្ណោះ​"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ស្រដៀង​គ្នា​ណាស់​នឹង​ពាក្យ​សម្ងាážáŸ‹â€‹áž…ាស់"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "សាមញ្ញ​ពáŸáž€"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "បាន​បង្វិល"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "មិន​បាន​ផ្ដល់​ពាក្យសម្ងាážáŸ‹"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...អស់​ពáŸáž›...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "មិន​អាច​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាážáŸ‹ NIS បាន​ឡើយ ។"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...សូម​ទោស អ្នក​អស់​ពáŸáž›â€‹áž áž¾áž™Â !\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ពាក្យ​សម្ងាážáŸ‹â€‹áž˜áž·áž“​ល្អ ៖ %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "សន្ទនាច្រឡំ (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -355,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:1088
+#: 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
@@ -402,22 +351,22 @@ msgstr "អ្នក​មាន​សំបុážáŸ’រ​ចាស់​នៅ
msgid "You have mail in folder %s."
msgstr "អ្នក​មាន​សំបុážáŸ’រ​នៅ​ក្នុង​ážáž %s ។"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "ពាក្យសម្ងាážáŸ‹â€‹ážáŸ’រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀážÂ áŸ”"
@@ -449,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "បរិបទ​សុវážáŸ’ážáž·áž—áž¶áž– %s បាន​ផ្ដល់​ážáž˜áŸ’លៃ​"
@@ -479,63 +428,7 @@ msgstr "បាន​បរាជáŸáž™ pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "ចូល ៖ ចម្លង​ážáŸ’លួន​ឯង​មិន​បាន​ជោគជáŸáž™Â áŸ– %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "កំហុស​ក្នុង​ការ​ផ្ទៀងផ្ទាážáŸ‹â€‹áž—ាព​ážáŸ’រឹមážáŸ’រូវ"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "កំហុស​សáŸážœáž¶"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "មិន​ស្គាល់​អ្នក​ប្រើ"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "មិន​ស្គាល់​កំហុស"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s ៖ áž›áŸážâ€‹áž˜áž·áž“​ល្អ​បាន​ផ្ដល់​ទៅ --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s ៖ ជម្រើស​ដែល​មិន​ស្គាល់ %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s ៖ [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s ៖ មិន​អាច​កំណážáŸ‹â€‹áž¢áŸ’នក​ប្រើ​ទាំងអស់​ទៅ​មិនមែន​សូន្យ​ឡើងវិញ​បានទáŸ\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -558,37 +451,98 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "អ្នក​ážáŸ’រូវ​ážáŸ‚​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាážáŸ‹â€‹ážšáž”ស់​អ្នក​ឥឡូវ​នáŸáŸ‡ (ពាក្យសម្ងាážáŸ‹â€‹áž…ាស់​ហើយ)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "មិន​បាន​ផ្ដល់​ពាក្យសម្ងាážáŸ‹"
+
+#: 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: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 "ដូច​គ្នា​នឹង​ពាក្យ​សម្ងាážáŸ‹â€‹áž…ាស់"
+
+#~ msgid "is a palindrome"
+#~ msgstr "ážáŸ’រឡប់​ចុះ​ឡើង"
+
+#~ msgid "case changes only"
+#~ msgstr "គ្រាន់​ážáŸ‚​ផ្លាស់ប្ដូរ​លក្ážážŽáŸˆâ€‹áž¢áž€áŸ’សរ​ប៉ុណ្ណោះ​"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ស្រដៀង​គ្នា​ណាស់​នឹង​ពាក្យ​សម្ងាážáŸ‹â€‹áž…ាស់"
+
+#~ msgid "is too simple"
+#~ msgstr "សាមញ្ញ​ពáŸáž€"
+
+#~ msgid "is rotated"
+#~ msgstr "បាន​បង្វិល"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ពាក្យ​សម្ងាážáŸ‹â€‹áž˜áž·áž“​ល្អ ៖ %s"
+
+#~ msgid "Authentication error"
+#~ msgstr "កំហុស​ក្នុង​ការ​ផ្ទៀងផ្ទាážáŸ‹â€‹áž—ាព​ážáŸ’រឹមážáŸ’រូវ"
+
+#~ msgid "Service error"
+#~ msgstr "កំហុស​សáŸážœáž¶"
+
+#~ msgid "Unknown user"
+#~ msgstr "មិន​ស្គាល់​អ្នក​ប្រើ"
+
+#~ msgid "Unknown error"
+#~ msgstr "មិន​ស្គាល់​កំហុស"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s ៖ áž›áŸážâ€‹áž˜áž·áž“​ល្អ​បាន​ផ្ដល់​ទៅ --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s ៖ ជម្រើស​ដែល​មិន​ស្គាល់ %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s ៖ [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s ៖ មិន​អាច​កំណážáŸ‹â€‹áž¢áŸ’នក​ប្រើ​ទាំងអស់​ទៅ​មិនមែន​សូន្យ​ឡើងវិញ​បានទáŸ\n"
diff --git a/po/kn.gmo b/po/kn.gmo
index 771f3b8b..a1022d3e 100644
--- a/po/kn.gmo
+++ b/po/kn.gmo
Binary files differ
diff --git a/po/kn.po b/po/kn.po
index f89f742c..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: 2020-06-08 10:18+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,62 +23,49 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...ಸಮಯ ಸರಿಯà³à²¤à³à²¤à²¿à²¦à³†...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...ಕà³à²·à²®à²¿à²¸à²¿, ನಿಮà³à²® ಸಮಯ ಮà³à²—ಿಯಿತà³!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "ದೋಷಪೂರಿತ ಸಂವಾದ (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "ಗà³à²ªà³à²¤à²ªà²¦ ಬದಲಾವಣೆಯನà³à²¨à³ ಸà³à²¥à²—ಿತಗೊಳಿಸಲಾಗಿದೆ."
@@ -219,137 +206,99 @@ msgstr "ಅನà³à²µà²¯à²µà³ libpam ಅನà³à²¨à³ ಪà³à²¨à²ƒ ಕರೆಯà²
msgid "Unknown PAM error"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ PAM ದೋಷ"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ಇದೠಹಳೆಯದರ ಹಾಗೆಯೇ ಇದೆ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "ಮೆಮೊರಿ ನಿಯೋಜನಾ ದೋಷ"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "ಇದೠಒಂದೠಸಮಾನ ಪೂರà³à²µà²¾à²ªà²°à²µà²¾à²—ಿದೆ (palindrome)"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "ಕೇವಲ ಕೇಸೠಗಳ ಬದಲಾವಣೆಯಾಗಿದೆ ಅಷà³à²Ÿà³†"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ಇದೠಹಳೆಯದಕà³à²•ೆ ಬಹಳಷà³à²Ÿà³ ಹೋಲà³à²¤à³à²¤à²¦à³†"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "ಇದೠಬಹಳ ಸರಳವಾಗಿದೆ"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "ಇದೠತಿರà³à²—ಿಸಲಾಗಿದೆ"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "ಸಾಕಷà³à²Ÿà³ ಕà³à²¯à²¾à²°à³†à²•à³à²Ÿà²°à³ ವರà³à²—ಗಳೠಇಲà³à²²"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "ಇದೠಒಂದೇ ಬಗೆಯ ಬಹಳಷà³à²Ÿà³ ಕà³à²¯à²¾à²°à³†à²•à³à²Ÿà²°à³à²—ಳನà³à²¨à³ ಅನà³à²•à³à²°à²®à²µà²¾à²—ಿ ಹೊಂದಿದೆ"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "ಇದೠಒಂದೇ ಬಗೆಯ ಉದà³à²¦à²¨à³†à²¯ ಅಕà³à²·à²°à²—ಳ ಅನà³à²•à³à²°à²®à²µà²¨à³à²¨à³ ಹೊಂದಿದೆ"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "ಇದೠಯಾವà³à²¦à³Š ಒಂದೠಬಗೆಯಲà³à²²à²¿ ಬಳಕೆದಾರ ಹೆಸರನà³à²¨à³ ಒಳಗೊಂಡಿದೆ"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "ಯಾವà³à²¦à³‡ ಗà³à²ªà³à²¤à²ªà²¦ ನೀಡಲಾಗಿಲà³à²²"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...ಸಮಯ ಸರಿಯà³à²¤à³à²¤à²¿à²¦à³†...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ಬದಲಾಯಿಸಲಾಗà³à²µà³à²¦à²¿à²²à³à²²à³à²²."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...ಕà³à²·à²®à²¿à²¸à²¿, ನಿಮà³à²® ಸಮಯ ಮà³à²—ಿಯಿತà³!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ಕೆಟà³à²Ÿ ಗà³à²ªà³à²¤à²ªà²¦: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "ದೋಷಪೂರಿತ ಸಂವಾದ (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s ವಿಫಲಗೊಂಡಿದೆ: ನಿರà³à²—ಮಿಸಲೠಸಂಜà³à²žà³† %d "
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -357,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:1088
+#: 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
@@ -404,22 +353,22 @@ msgstr "%s ಫೋಲà³à²¡à²°à²¿à²¨à²²à³à²²à²¿ ನಿಮಗಾಗಿ ಹಳೆ
msgid "You have mail in folder %s."
msgstr "%s ಫೋಲà³à²¡à²°à²¿à²¨à²²à³à²²à²¿ ನಿಮಗಾಗಿ ಮೈಲೠಇದೆ."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "ಕೋಶ '%s' ಅನà³à²¨à³ ರಚಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "ಕೋಶ '%s' ಅನà³à²¨à³ ರಚಿಸಲೠಹಾಗೠಆರಂಭಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ಈಗಾಗಲೆ ಬಳಸಲಾಗಿದೆ."
@@ -450,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "ಕೀಲಿ ನಿರà³à²®à²¾à²£ ಸನà³à²¨à²¿à²µà³‡à²¶ %s ವನà³à²¨à³ ನಿಯೋಜಿಸಲಾಗಿದೆ"
@@ -480,66 +429,7 @@ msgstr "pam_set_item() ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲತೆ\n"
msgid "login: failure forking: %m"
msgstr "ಲಾಗಿನà³: ಫೋರà³à²•ಿಂಗೠಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲತೆ:%m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "ಖಾತೆಯನà³à²¨à³ ತಾತà³à²•ಾಲಿಕವಾಗಿ ಲಾಕೠಮಾಡಲಾಗಿದೆ (%ld ಸೆಕೆಂಡà³à²—ಳೠಉಳಿದಿವೆ)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "ದೃಢೀಕರಣ ದೋಷ"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "ಸೇವಾ ದೋಷ"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಬಳಕೆದಾರ"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= ಗೆ ಕೊಡಲಾದ ಕೆಟà³à²Ÿ ಸಂಖà³à²¯à³†\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ದ ಆಯà³à²•ೆ %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: ಎಲà³à²²à²¾ ಬಳಕೆದಾರರನà³à²¨à³ ಶೂನà³à²¯à²µà²²à³à²²à²¦à³à²¦à²•à³à²•ೆ ಪà³à²¨à²°à³ ಸಂಯೋಜಿಸಲೠಆಗà³à²µà³à²¦à²¿à²²à³à²²\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "ಪà³à²°à²µà³‡à²¶ ವಿಫಲತೆಗಳೠಇತà³à²¤à³€à²šà²¿à²¨ ವಿಫಲತೆ ಇಂದ\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -564,37 +454,126 @@ msgid ""
msgstr ""
"ನೀವೠಈ ಕೂಡಲೆ ನಿಮà³à²® ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ಬದಲಿಸà³à²µ ಅಗತà³à²¯à²µà²¿à²¦à³† (ಗà³à²ªà³à²¤à²ªà²¦à²µà³ ಬಹಳ ಹಳೆಯದಾಗಿದೆ)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
msgstr[0] "ಎಚà³à²šà²°à²¿à²•ೆ: ನಿಮà³à²® ಗà³à²ªà³à²¤à²ªà²¦à²¦ ವಾಯಿದೆಯೠ%d ದಿನಗಳ ನಂತರ ತೀರಿಹೋಗà³à²¤à³à²¤à²¦à³†"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "ಯಾವà³à²¦à³‡ ಗà³à²ªà³à²¤à²ªà²¦ ನೀಡಲಾಗಿಲà³à²²"
+
+#: 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: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 "ಇದೠಹಳೆಯದರ ಹಾಗೆಯೇ ಇದೆ"
+
+#~ msgid "memory allocation error"
+#~ msgstr "ಮೆಮೊರಿ ನಿಯೋಜನಾ ದೋಷ"
+
+#~ msgid "is a palindrome"
+#~ msgstr "ಇದೠಒಂದೠಸಮಾನ ಪೂರà³à²µà²¾à²ªà²°à²µà²¾à²—ಿದೆ (palindrome)"
+
+#~ msgid "case changes only"
+#~ msgstr "ಕೇವಲ ಕೇಸೠಗಳ ಬದಲಾವಣೆಯಾಗಿದೆ ಅಷà³à²Ÿà³†"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ಇದೠಹಳೆಯದಕà³à²•ೆ ಬಹಳಷà³à²Ÿà³ ಹೋಲà³à²¤à³à²¤à²¦à³†"
+
+#~ msgid "is too simple"
+#~ msgstr "ಇದೠಬಹಳ ಸರಳವಾಗಿದೆ"
+
+#~ msgid "is rotated"
+#~ msgstr "ಇದೠತಿರà³à²—ಿಸಲಾಗಿದೆ"
+
+#~ msgid "not enough character classes"
+#~ msgstr "ಸಾಕಷà³à²Ÿà³ ಕà³à²¯à²¾à²°à³†à²•à³à²Ÿà²°à³ ವರà³à²—ಗಳೠಇಲà³à²²"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "ಇದೠಒಂದೇ ಬಗೆಯ ಬಹಳಷà³à²Ÿà³ ಕà³à²¯à²¾à²°à³†à²•à³à²Ÿà²°à³à²—ಳನà³à²¨à³ ಅನà³à²•à³à²°à²®à²µà²¾à²—ಿ ಹೊಂದಿದೆ"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "ಇದೠಒಂದೇ ಬಗೆಯ ಉದà³à²¦à²¨à³†à²¯ ಅಕà³à²·à²°à²—ಳ ಅನà³à²•à³à²°à²®à²µà²¨à³à²¨à³ ಹೊಂದಿದೆ"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "ಇದೠಯಾವà³à²¦à³Š ಒಂದೠಬಗೆಯಲà³à²²à²¿ ಬಳಕೆದಾರ ಹೆಸರನà³à²¨à³ ಒಳಗೊಂಡಿದೆ"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ಕೆಟà³à²Ÿ ಗà³à²ªà³à²¤à²ªà²¦: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "ಖಾತೆಯನà³à²¨à³ ತಾತà³à²•ಾಲಿಕವಾಗಿ ಲಾಕೠಮಾಡಲಾಗಿದೆ (%ld ಸೆಕೆಂಡà³à²—ಳೠಉಳಿದಿವೆ)"
+
+#~ msgid "Authentication error"
+#~ msgstr "ದೃಢೀಕರಣ ದೋಷ"
+
+#~ msgid "Service error"
+#~ msgstr "ಸೇವಾ ದೋಷ"
+
+#~ msgid "Unknown user"
+#~ msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಬಳಕೆದಾರ"
+
+#~ msgid "Unknown error"
+#~ msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= ಗೆ ಕೊಡಲಾದ ಕೆಟà³à²Ÿ ಸಂಖà³à²¯à³†\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ದ ಆಯà³à²•ೆ %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: ಎಲà³à²²à²¾ ಬಳಕೆದಾರರನà³à²¨à³ ಶೂನà³à²¯à²µà²²à³à²²à²¦à³à²¦à²•à³à²•ೆ ಪà³à²¨à²°à³ ಸಂಯೋಜಿಸಲೠಆಗà³à²µà³à²¦à²¿à²²à³à²²\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ko.gmo b/po/ko.gmo
index 2945f324..be272149 100644
--- a/po/ko.gmo
+++ b/po/ko.gmo
Binary files differ
diff --git a/po/ko.po b/po/ko.po
index 2d045e8d..60694014 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -7,81 +7,69 @@
# eukim <eukim@redhat.com>, 2007,2009
# 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, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2013-04-16 09:34-0400\n"
-"Last-Translator: eukim <eukim@redhat.com>\n"
-"Language-Team: Korean (http://www.transifex.com/projects/p/fedora/language/"
-"ko/)\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"
"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.15.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "..시간 초과...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...죄송합니다. ì‹œê°„ì´ ì´ˆê³¼ë˜ì—ˆìŠµë‹ˆë‹¤!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "ìž˜ëª»ëœ ì¸ì¦ 대화 (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "죄송합니다. 암호가 ì¼ì¹˜í•˜ì§€ 않습니다."
+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
-#, 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:"
@@ -97,11 +85,11 @@ msgstr "치명ì ì¸ 오류 - 즉시 중지"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
-msgstr "모듈 가져오기 실패"
+msgstr "모듈 불러오기 실패"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr "기호를 ì°¾ì„ ìˆ˜ ì—†ìŒ"
+msgstr "ì‹¬ë³¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
@@ -125,39 +113,39 @@ 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"
@@ -165,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"
@@ -205,265 +193,226 @@ 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 오류"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ì´ì „ 암호와 ê°™ìŒ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "메모리 할당 오류 "
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "앞뒤 ì–´ëŠìª½ì—서 ì½ì–´ë„ ê°™ì€ ë¬¸ë§¥ìž„"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "대소문ìžë§Œ 변경"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ì´ì „ 암호와 유사함"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "너무 간단함"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "êµì²´ë¨"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "ë¬¸ìž í´ëž˜ìŠ¤ê°€ 부족합니다 "
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "너무 ë§Žì€ ë™ì¼í•œ 문ìžê°€ ì—°ì†ì ìœ¼ë¡œ í¬í•¨ë˜ì–´ìžˆìŠµë‹ˆë‹¤ "
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "너무 길게 단순한 문ìžê°€ ì—°ì†ì ìœ¼ë¡œ í¬í•¨ë˜ì–´ 있습니다 "
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "어떠한 형ì‹ìœ¼ë¡œ ì‚¬ìš©ìž ì´ë¦„ì„ í¬í•¨í•©ë‹ˆë‹¤. "
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "암호가 ì—†ìŒ"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...ì‹œê°„ì´ ì´‰ë°•í•©ë‹ˆë‹¤...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS 암호는 변경할 수 없습니다."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...미안합니다, ì‹œê°„ì´ ë‹¤ ë˜ì—ˆìŠµë‹ˆë‹¤!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ìž˜ëª»ëœ ì•”í˜¸: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "ìž˜ëª»ëœ ì¸ì¦ 처리과정 (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s 실패: 종료 코드 %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
-#, fuzzy, c-format
+#: 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: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
-#, fuzzy, c-format
+#: 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: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분 남았습니다)"
-#: modules/pam_faillock/pam_faillock.c:650
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 " %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 "
+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:1088
-#, 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."
-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:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr "'%s' 디렉토리 ìƒì„± 중. "
+msgstr "디렉토리 '%s'를 ìƒì„± 중."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: 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:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
-msgstr "ì´ë¯¸ 사용ë˜ê³  있는 암호입니다."
+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?"
-msgstr "다른 ì—­í•  ë˜ëŠ” ë ˆë²¨ì„ ìž…ë ¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ? "
+msgstr "다른 ì—­í•  ë˜ëŠ” ìˆ˜ì¤€ì„ ìž…ë ¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
#: modules/pam_selinux/pam_selinux.c:189
msgid "role:"
-msgstr "ì—­í• : "
+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 "레벨: "
+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:629
-#, 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:645
-#, 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
@@ -478,121 +427,143 @@ msgstr "pam_set_item() 실패\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr "로그ì¸: í¬í¬ 작업(forking) 실패: %m"
-
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "ì¼ì‹œì ìœ¼ë¡œ ê³„ì •ì´ ìž ê¸ˆë˜ì—ˆìŠµë‹ˆë‹¤ (%ld ì´ˆ 남ìŒ) "
+msgstr "로그ì¸: í¬í¬ 작업 실패: %m"
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "ì¸ì¦ 오류"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "서비스 오류"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "알 수 없는 사용ìž"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "알 수 없는 오류"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: ìž˜ëª»ëœ ìˆ«ìžê°€ --reset=ì— ì„¤ì •ë¨\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: 알려지지 ì•Šì€ ì˜µì…˜ %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: 모든 사용ìžë¥¼ ì˜ì´ 아닌 값으로 설정할 수 ì—†ìŒ\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "ë¡œê·¸ì¸ ì‹¤íŒ¨ 마지막 실패 다ìŒì—서 ë°œìƒ\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
-#, fuzzy, 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 "암호를 즉시 변경해 주십시오 (root가 강제 설정함)"
+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:265 modules/pam_unix/pam_unix_acct.c:272
-#, fuzzy, c-format
+#: 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:277
-#, fuzzy, c-format
+#: 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:554
+msgid "No password has been supplied."
+msgstr "비밀번호를 입력하지 않았습니다."
+
+#: 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 "ë” ì§§ì€ ì•”í˜¸ë¥¼ ì„ íƒí•´ì•¼í•©ë‹ˆë‹¤."
+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 "ì´ì „ 암호와 ê°™ìŒ"
+
+#~ msgid "memory allocation error"
+#~ msgstr "메모리 할당 오류 "
+
+#~ msgid "is a palindrome"
+#~ msgstr "앞뒤 ì–´ëŠìª½ì—서 ì½ì–´ë„ ê°™ì€ ë¬¸ë§¥ìž„"
+
+#~ msgid "case changes only"
+#~ msgstr "대소문ìžë§Œ 변경"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ì´ì „ 암호와 유사함"
+
+#~ msgid "is too simple"
+#~ msgstr "너무 간단함"
+
+#~ msgid "is rotated"
+#~ msgstr "êµì²´ë¨"
+
+#~ msgid "not enough character classes"
+#~ msgstr "ë¬¸ìž í´ëž˜ìŠ¤ê°€ 부족합니다 "
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "너무 ë§Žì€ ë™ì¼í•œ 문ìžê°€ ì—°ì†ì ìœ¼ë¡œ í¬í•¨ë˜ì–´ìžˆìŠµë‹ˆë‹¤ "
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "너무 길게 단순한 문ìžê°€ ì—°ì†ì ìœ¼ë¡œ í¬í•¨ë˜ì–´ 있습니다 "
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "어떠한 형ì‹ìœ¼ë¡œ ì‚¬ìš©ìž ì´ë¦„ì„ í¬í•¨í•©ë‹ˆë‹¤. "
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ìž˜ëª»ëœ ì•”í˜¸: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "ì¼ì‹œì ìœ¼ë¡œ ê³„ì •ì´ ìž ê¸ˆë˜ì—ˆìŠµë‹ˆë‹¤ (%ld ì´ˆ 남ìŒ) "
+
+#~ msgid "Authentication error"
+#~ msgstr "ì¸ì¦ 오류"
+
+#~ msgid "Service error"
+#~ msgstr "서비스 오류"
+
+#~ msgid "Unknown user"
+#~ msgstr "알 수 없는 사용ìž"
+
+#~ msgid "Unknown error"
+#~ msgstr "알 수 없는 오류"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: ìž˜ëª»ëœ ìˆ«ìžê°€ --reset=ì— ì„¤ì •ë¨\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: 알려지지 ì•Šì€ ì˜µì…˜ %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: 모든 사용ìžë¥¼ ì˜ì´ 아닌 값으로 설정할 수 ì—†ìŒ\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/kw_GB.po b/po/kw_GB.po
index 6591c585..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: 2020-06-08 10:18+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,61 +19,48 @@ msgstr ""
"3\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -213,134 +200,101 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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[3] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -348,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:1088
+#: 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
@@ -394,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -439,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -469,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -544,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,28 +453,36 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 ec16f1f9..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -349,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:1088
+#: 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
@@ -395,22 +346,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -440,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -470,62 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -545,38 +441,46 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 bf1b3eef..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: 2020-06-08 10:18+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,61 +21,48 @@ msgstr ""
"%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -215,134 +202,100 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -352,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:1088
+#: 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
@@ -398,22 +351,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -443,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -473,62 +426,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -548,7 +446,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -557,31 +455,39 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 c3da9d75..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: 2020-06-08 10:18+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,61 +21,48 @@ msgstr ""
"2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -215,134 +202,100 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -352,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:1088
+#: 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
@@ -398,22 +351,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -443,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -473,62 +426,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -548,7 +446,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -557,31 +455,39 @@ msgstr[1] ""
msgstr[2] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 429e9a74..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: 2020-06-08 10:18+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,61 +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_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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.gmo b/po/ml.gmo
index a0a0b06f..ca5e541d 100644
--- a/po/ml.gmo
+++ b/po/ml.gmo
Binary files differ
diff --git a/po/ml.po b/po/ml.po
index 3b3843d5..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: 2020-06-08 10:18+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,62 +20,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...സമയപരിധി അവസാനികàµà´•àµà´¨àµà´¨àµ...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...à´•àµà´·à´®à´¿à´•àµà´•ണം, നിങàµà´™à´³àµà´Ÿàµ† സമയം à´•à´´à´¿à´žàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "തെറàµà´±à´¾à´¯ സംവാദം (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "അടയാളവാകàµà´•ൠമാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´¨àµà´¨à´¤àµàµ നിരàµâ€à´¤àµà´¤à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ."
@@ -216,137 +203,100 @@ msgstr "à´ªàµà´°à´¯àµ‹à´—à´™àµà´™à´³àµâ€à´•àµà´•ൠവീണàµà´Ÿàµà´‚ l
msgid "Unknown PAM error"
msgstr "അപരിചിതമായ PAM പിശകàµ"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "പഴയതൠപോലെ തനàµà´¨àµ†à´¯à´¾à´•àµà´¨àµà´¨à´¤àµàµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "ഒരൠപാലിനàµâ€à´¡àµà´°àµ‹à´‚ ആണàµàµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "à´…à´•àµà´·à´°à´™àµà´™à´³àµà´Ÿàµ† വലിപàµà´ªà´‚ മാതàµà´°à´‚ മാറàµà´¨àµà´¨à´¤àµàµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "പഴയതിനൠസാമàµà´¯à´®àµà´³àµà´³à´¤àµàµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "സാധാരണയàµà´³àµà´³à´¤àµàµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "is rotated"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "മതിയായ à´•àµà´¯à´¾à´°à´•àµà´Ÿà´°àµâ€ à´•àµà´²à´¾à´¸àµà´¸àµà´•à´³àµâ€ ലഭàµà´¯à´®à´²àµà´²"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "à´…à´Ÿàµà´¤àµà´¤à´Ÿàµà´¤àµà´¤àµ ഒരേപോലàµà´³àµà´³ അനവധി à´…à´•àµà´·à´°à´™àµà´™à´³àµà´£àµà´Ÿàµàµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "വളരെയധികം ഒരേ തരതàµà´¤à´¿à´²àµà´³àµà´³ à´…à´•àµà´·à´°à´™àµà´™à´³à´Ÿà´™àµà´™àµà´¨àµà´¨àµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´±àµ† നാമം à´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚ ഒരൠതരതàµà´¤à´¿à´²àµà´£àµà´Ÿàµàµ"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "അടയാളവാകàµà´•ൠനലàµâ€à´•ിയിടàµà´Ÿà´¿à´²àµà´²"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...സമയപരിധി അവസാനികàµà´•àµà´¨àµà´¨àµ...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS അടയാളവാകàµà´•ൠമാറàµà´±àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´•àµà´¨àµà´¨à´¿à´²àµà´²."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...à´•àµà´·à´®à´¿à´•àµà´•ണം, നിങàµà´™à´³àµà´Ÿàµ† സമയം à´•à´´à´¿à´žàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "തെറàµà´±à´¾à´¯ അടയാളവാകàµà´•àµ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "തെറàµà´±à´¾à´¯ സംവാദം (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s പരാâ€à´œà´¯à´ªàµà´ªàµ†à´Ÿàµà´Ÿàµ: %d à´Žà´¨àµà´¨ കോഡിലàµâ€ നിനàµà´¨àµà´‚ à´ªàµà´±à´¤àµà´¤àµ à´•à´Ÿà´•àµà´•àµà´•"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -355,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:1088
+#: 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
@@ -402,22 +352,22 @@ msgstr "%s ഫോളàµâ€à´¡à´±à´¿à´²àµâ€ നിങàµà´™à´³àµâ€à´•àµà´•àµ
msgid "You have mail in folder %s."
msgstr "%s ഫോളàµâ€à´¡à´±à´¿à´²àµâ€ നിങàµà´™à´³àµâ€à´•àµà´•ൠമെയിലàµâ€ ഉണàµà´Ÿàµ."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "'%s' ഡയറകàµà´Ÿà´±à´¿ ഉണàµà´Ÿà´¾à´•àµà´•àµà´¨àµà´¨àµ."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "%s ഡയറകàµà´Ÿà´±à´¿ ഉണàµà´Ÿà´¾à´•àµà´•àµà´µà´¾à´¨àµà´‚ ആരംഭികàµà´•àµà´µà´¾à´¨àµà´‚ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "രഹസàµà´¯à´µà´¾à´•àµà´•ൠനിലവിലàµâ€ ഉപയോഗിചàµà´šà´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ."
@@ -448,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "കീ ഉണàµà´Ÿà´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആയ %s നലàµâ€à´•ിയിരികàµà´•àµà´¨àµà´¨àµ"
@@ -478,66 +428,7 @@ msgstr "pam_set_item() ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജà´
msgid "login: failure forking: %m"
msgstr "login: ഫോരàµâ€à´•àµà´•ൠചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "à´…à´•àµà´•ൌണàµà´Ÿàµ താലàµâ€à´•àµà´•ാലികമായി പൂടàµà´Ÿà´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ (%ld നിമിഷങàµà´™à´³àµâ€ ബാകàµà´•à´¿)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "ആധികാരികത ഉറപàµà´ªà´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "സരàµâ€à´µàµ€à´¸àµ പിശകàµ"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "അപരിചിതമായ ഉപയോകàµà´¤à´¾à´µàµàµ"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "അപരിചിതമായ പിശകàµ"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s:നലàµâ€à´•ിയിരികàµà´•àµà´¨àµà´¨ നംബരàµâ€ തെറàµà´±à´¾à´£àµ, --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Unrecognised ഉപാധി %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: à´Žà´²àµà´²à´¾ ഉപയോകàµà´¤à´¾à´•àµà´•à´³àµâ€à´•àµà´•àµà´‚ പൂജàµà´¯à´‚ à´…à´²àµà´²à´¾à´¤àµ† à´•àµà´°à´®à´¿à´•à´°à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Failures Latest failure From\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "à´…à´¨àµà´µà´¾à´¦à´‚ നലàµâ€à´•ിയിരികàµà´•àµà´¨àµà´¨àµ (à´’à´Ÿàµà´µà´¿à´²àµâ€ à´ªàµà´°à´µàµ‡à´¶à´¿à´šàµà´šà´¤àµàµ %ld സെകàµà´•à´¨àµâ€à´¡àµà´•à´³àµâ€à´•àµà´•àµàµ à´®àµà´®àµà´ªà´¾à´£àµàµ)."
@@ -562,7 +453,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "നിങàµà´™à´³àµà´Ÿàµ† അടയാളവാകàµà´•ൠഉടനെ മാറàµà´±àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµ (അടയാളവാകàµà´•ൠമാറàµà´±àµà´¨àµà´¨à´¤à´¿à´¨àµ സമയമായി)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -570,30 +461,119 @@ msgstr[0] "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ: നിങàµà´™à´³àµà´Ÿàµ†
msgstr[1] "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ: നിങàµà´™à´³àµà´Ÿàµ† അടയാളവാകàµà´•à´¿à´¨àµà´±àµ† കാലാവധി %d ദിവസതàµà´¤à´¿à´¨àµà´³àµà´³à´¿à´²àµâ€ അവസാനികàµà´•àµà´¨àµà´¨àµ"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "അടയാളവാകàµà´•ൠനലàµâ€à´•ിയിടàµà´Ÿà´¿à´²àµà´²"
+
+#: 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: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 "പഴയതൠപോലെ തനàµà´¨àµ†à´¯à´¾à´•àµà´¨àµà´¨à´¤àµàµ"
+
+#~ msgid "memory allocation error"
+#~ msgstr "മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ"
+
+#~ msgid "is a palindrome"
+#~ msgstr "ഒരൠപാലിനàµâ€à´¡àµà´°àµ‹à´‚ ആണàµàµ"
+
+#~ msgid "case changes only"
+#~ msgstr "à´…à´•àµà´·à´°à´™àµà´™à´³àµà´Ÿàµ† വലിപàµà´ªà´‚ മാതàµà´°à´‚ മാറàµà´¨àµà´¨à´¤àµàµ"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "പഴയതിനൠസാമàµà´¯à´®àµà´³àµà´³à´¤àµàµ"
+
+#~ msgid "is too simple"
+#~ msgstr "സാധാരണയàµà´³àµà´³à´¤àµàµ"
+
+#~ msgid "is rotated"
+#~ msgstr "is rotated"
+
+#~ msgid "not enough character classes"
+#~ msgstr "മതിയായ à´•àµà´¯à´¾à´°à´•àµà´Ÿà´°àµâ€ à´•àµà´²à´¾à´¸àµà´¸àµà´•à´³àµâ€ ലഭàµà´¯à´®à´²àµà´²"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "à´…à´Ÿàµà´¤àµà´¤à´Ÿàµà´¤àµà´¤àµ ഒരേപോലàµà´³àµà´³ അനവധി à´…à´•àµà´·à´°à´™àµà´™à´³àµà´£àµà´Ÿàµàµ"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "വളരെയധികം ഒരേ തരതàµà´¤à´¿à´²àµà´³àµà´³ à´…à´•àµà´·à´°à´™àµà´™à´³à´Ÿà´™àµà´™àµà´¨àµà´¨àµ"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´±àµ† നാമം à´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚ ഒരൠതരതàµà´¤à´¿à´²àµà´£àµà´Ÿàµàµ"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "തെറàµà´±à´¾à´¯ അടയാളവാകàµà´•àµ: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "à´…à´•àµà´•ൌണàµà´Ÿàµ താലàµâ€à´•àµà´•ാലികമായി പൂടàµà´Ÿà´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ (%ld നിമിഷങàµà´™à´³àµâ€ ബാകàµà´•à´¿)"
+
+#~ msgid "Authentication error"
+#~ msgstr "ആധികാരികത ഉറപàµà´ªà´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ"
+
+#~ msgid "Service error"
+#~ msgstr "സരàµâ€à´µàµ€à´¸àµ പിശകàµ"
+
+#~ msgid "Unknown user"
+#~ msgstr "അപരിചിതമായ ഉപയോകàµà´¤à´¾à´µàµàµ"
+
+#~ msgid "Unknown error"
+#~ msgstr "അപരിചിതമായ പിശകàµ"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s:നലàµâ€à´•ിയിരികàµà´•àµà´¨àµà´¨ നംബരàµâ€ തെറàµà´±à´¾à´£àµ, --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Unrecognised ഉപാധി %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: à´Žà´²àµà´²à´¾ ഉപയോകàµà´¤à´¾à´•àµà´•à´³àµâ€à´•àµà´•àµà´‚ പൂജàµà´¯à´‚ à´…à´²àµà´²à´¾à´¤àµ† à´•àµà´°à´®à´¿à´•à´°à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/mn.po b/po/mn.po
index 136e2b73..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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.gmo b/po/mr.gmo
index 41579e9b..8fa51112 100644
--- a/po/mr.gmo
+++ b/po/mr.gmo
Binary files differ
diff --git a/po/mr.po b/po/mr.po
index a6432e07..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: 2020-06-08 10:18+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,62 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...वेळ फारच कमी आहे...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...माफ करा, तà¥à¤®à¤šà¥€ वेळ समापà¥à¤¤ à¤à¤¾à¤²à¥€ आहे!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "सदोषीत संवाद (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "परवलीचा शबà¥à¤¦ रदà¥à¤¦ केले."
@@ -218,137 +205,100 @@ msgstr "अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—ास libpam ची आवशà¥à¤šà¤•ता
msgid "Unknown PAM error"
msgstr "अपरिचीत PAM तà¥à¤°à¥à¤Ÿà¥€"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ केलेले जà¥à¤£à¥à¤¯à¤¾ पà¥à¤°à¤®à¤¾à¤£à¥‡à¤š आहे"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "मेमरि वाटपवेळी तà¥à¤°à¥à¤Ÿà¥€"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "पॅलींडà¥à¤°à¥‹à¤® आहे"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "फकà¥à¤¤ आकार बदलाव"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ केलेले जà¥à¤£à¥à¤¯à¤¾ नà¥à¤°à¥‚पच आहे"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "खूपच सोपे आहे"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "सà¥à¤¤à¤° बदलविले गेले"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "अतिरिकà¥à¤¤ अकà¥à¤·à¤° गट उपलबà¥à¤§ नाही"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "पाठोपाठ खूप जासà¥à¤¤ समान अकà¥à¤·à¤° आढळले"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "मोनोटोनिक अकà¥à¤·à¤° शà¥à¤°à¥ƒà¤‚खला खूपच लांब आहे"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "कà¥à¤ à¤²à¥à¤¯à¤¾à¤¤à¤°à¥€ सà¥à¤µà¤°à¥‚पात वापरकरà¥à¤¤à¤¾ नाव आढळले"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ दिलेला नाही"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...वेळ फारच कमी आहे...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ बदलविले जाऊ शकत नाही."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...माफ करा, तà¥à¤®à¤šà¥€ वेळ समापà¥à¤¤ à¤à¤¾à¤²à¥€ आहे!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "अयोगà¥à¤¯ गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "सदोषीत संवाद (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s अपयशी: à¤à¤•à¥à¤œà¥€à¤Ÿ कोड %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -357,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:1088
+#: 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
@@ -404,22 +354,22 @@ msgstr "संचयीका %s अंतरà¥à¤—त जà¥à¤£à¥‡ मेल à¤
msgid "You have mail in folder %s."
msgstr "संचयीका %s अंतरà¥à¤—त मेल आढळले गेले."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "संचयीका '%s' बनवित आहे."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ '%s' बनवणà¥à¤¯à¤¾à¤¸ व पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "पासवरà¥à¤¡ आधिपासूनच वापरले आहे."
@@ -450,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "कि निरà¥à¤®à¤¾à¤£ संदरà¥à¤­ %s लागू केले गेले"
@@ -480,66 +430,7 @@ msgstr "pam_set_item() कारà¥à¤¯à¤¾à¤¨à¥à¤µà¥€à¤¤ करणà¥à¤¯à¤¾à¤¸ à
msgid "login: failure forking: %m"
msgstr "दाखलन: विभाजन अपयशी: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "खातं तातà¥à¤ªà¥‚रà¥à¤¤à¥‡ कà¥à¤²à¥‚पबंद केले (%ld सेकंद शिलà¥à¤²à¤•)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "अधिपà¥à¤°à¤®à¤¾à¤£à¤¨ तà¥à¤°à¥à¤Ÿà¥€"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "सेवा तà¥à¤°à¥à¤Ÿà¥€"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "अपरिचीत वापरकरà¥à¤¤à¤¾"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "अपरिचित चूक"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= करीता अयोगà¥à¤¯ संखà¥à¤¯à¤¾ पà¥à¤°à¤µà¤¿à¤²à¥€ गेली\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: अपरिचीत परà¥à¤¯à¤¾à¤¯ %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file रूटेड-फाइलनाव] [--user वापरकरà¥à¤¤à¥à¤¯à¤¾à¤šà¥‡ नाव] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: सरà¥à¤µ वापरकरà¥à¤¤à¤¾ विना-शूनà¥à¤¯ असे पà¥à¤¨à¥à¤¹à¤¸à¥à¤¥à¤¾à¤ªà¤¨ करू शकत नाही\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "पà¥à¤°à¤µà¥‡à¤¶ अपयशी अलिकडील अपयश पासून\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "पà¥à¤°à¤µà¥‡à¤¶ सà¥à¤µà¥€à¤•ारले (शेवटचा पà¥à¤°à¤µà¥‡à¤¶ %ld सेकंद पूरà¥à¤µà¥€ आढळला)."
@@ -562,7 +453,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "तà¥à¤®à¤šà¤¾ गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ ततà¥à¤•ाळ बदलणà¥à¤¯à¤¾à¤šà¥€ आवशà¥à¤¯à¤•ता आहे (गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ जà¥à¤¨à¤¾ आहे)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -570,30 +461,119 @@ msgstr[0] "सावधानता: तà¥à¤®à¤šà¥‡ गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦
msgstr[1] "सावधानता: तà¥à¤®à¤šà¥‡ गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ %d दिवस अंतरà¥à¤—त कालबाहà¥à¤¯ होईल"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ दिलेला नाही"
+
+#: 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: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 "पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ केलेले जà¥à¤£à¥à¤¯à¤¾ पà¥à¤°à¤®à¤¾à¤£à¥‡à¤š आहे"
+
+#~ msgid "memory allocation error"
+#~ msgstr "मेमरि वाटपवेळी तà¥à¤°à¥à¤Ÿà¥€"
+
+#~ msgid "is a palindrome"
+#~ msgstr "पॅलींडà¥à¤°à¥‹à¤® आहे"
+
+#~ msgid "case changes only"
+#~ msgstr "फकà¥à¤¤ आकार बदलाव"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ केलेले जà¥à¤£à¥à¤¯à¤¾ नà¥à¤°à¥‚पच आहे"
+
+#~ msgid "is too simple"
+#~ msgstr "खूपच सोपे आहे"
+
+#~ msgid "is rotated"
+#~ msgstr "सà¥à¤¤à¤° बदलविले गेले"
+
+#~ msgid "not enough character classes"
+#~ msgstr "अतिरिकà¥à¤¤ अकà¥à¤·à¤° गट उपलबà¥à¤§ नाही"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "पाठोपाठ खूप जासà¥à¤¤ समान अकà¥à¤·à¤° आढळले"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "मोनोटोनिक अकà¥à¤·à¤° शà¥à¤°à¥ƒà¤‚खला खूपच लांब आहे"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "कà¥à¤ à¤²à¥à¤¯à¤¾à¤¤à¤°à¥€ सà¥à¤µà¤°à¥‚पात वापरकरà¥à¤¤à¤¾ नाव आढळले"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "अयोगà¥à¤¯ गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "खातं तातà¥à¤ªà¥‚रà¥à¤¤à¥‡ कà¥à¤²à¥‚पबंद केले (%ld सेकंद शिलà¥à¤²à¤•)"
+
+#~ msgid "Authentication error"
+#~ msgstr "अधिपà¥à¤°à¤®à¤¾à¤£à¤¨ तà¥à¤°à¥à¤Ÿà¥€"
+
+#~ msgid "Service error"
+#~ msgstr "सेवा तà¥à¤°à¥à¤Ÿà¥€"
+
+#~ msgid "Unknown user"
+#~ msgstr "अपरिचीत वापरकरà¥à¤¤à¤¾"
+
+#~ msgid "Unknown error"
+#~ msgstr "अपरिचित चूक"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= करीता अयोगà¥à¤¯ संखà¥à¤¯à¤¾ पà¥à¤°à¤µà¤¿à¤²à¥€ गेली\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: अपरिचीत परà¥à¤¯à¤¾à¤¯ %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file रूटेड-फाइलनाव] [--user वापरकरà¥à¤¤à¥à¤¯à¤¾à¤šà¥‡ नाव] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: सरà¥à¤µ वापरकरà¥à¤¤à¤¾ विना-शूनà¥à¤¯ असे पà¥à¤¨à¥à¤¹à¤¸à¥à¤¥à¤¾à¤ªà¤¨ करू शकत नाही\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ms.po b/po/ms.po
index 0f965429..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: 2020-06-08 10:18+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,64 +20,51 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -217,134 +204,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -352,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:1088
+#: 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
@@ -398,22 +349,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -443,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -473,62 +424,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -548,38 +444,46 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 91a627c2..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -349,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:1088
+#: 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
@@ -395,22 +346,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -440,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -470,62 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -545,38 +441,46 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 0ff85cfe..bfb5fc6d 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index c52adeb7..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: 2020-06-08 10:18+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,61 +24,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.4\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Tiden er i ferd med utløpe..\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Beklager, tiden er utløpt!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "mislykket dialog (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -218,134 +205,99 @@ msgstr "Programmet må spørre libpam på nytt"
msgid "Unknown PAM error"
msgstr "Ukjent PAM-feil"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "er det samme som det gamle"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "feil med minneallokering"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "er et palindrom"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "kun endring av små/store bokstaver"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "er for likt det gamle"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "er for enkelt"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "er rotert"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "ikke nok tegnklasser"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "inneholder for mange like tegn etter hverandre"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "inneholder for lang monoton tegnsekvens"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "inneholder brukernavnet i en eller annen form"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Inget passord har blitt angitt."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Tiden er i ferd med utløpe..\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Passordet kunne ikke endres."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Beklager, tiden er utløpt!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "SVAKT PASSORD: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "mislykket dialog (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
-#, 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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: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 ""
@@ -356,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:1088
+#: 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."
@@ -403,22 +356,22 @@ msgstr "Du har ulest e-post i mappen %s."
msgid "You have mail in folder %s."
msgstr "Du har e-post i mappen %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Oppretter katalog «%s»."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Kan ikke lage og initiere katalog «%s»."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Passordet har allerede vært brukt."
@@ -448,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:629
+#: 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:645
+#: 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."
@@ -478,66 +431,7 @@ msgstr "kunne ikke pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: feil under forgrening: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Konto midlertidig låst (%ld sekunder igjen)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Autentiseringsfeil"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Tjenestefeil"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Ukjent bruker"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Ukjent feil"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Ugyldig tall angitt for --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Ukjent valg %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filnavn] [--user brukernavn] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Kan ikke tilbakestille alle brukere til non-zero\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Brukernavn Feil Siste feil Fra\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filnavn] [--file rooted-filnavn]\n"
-"[-u brukernavn] [--user brukernavn]\n"
-"[-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -557,7 +451,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Du må straks endre passordet ditt (passordet har utløpt)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -565,28 +459,113 @@ msgstr[0] "Advarsel: Passordet ditt utløper om %d dag."
msgstr[1] "Advarsel: Passordet ditt utløper om %d dager."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Passordet kunne ikke endres."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "feil med minneallokering"
+
+#~ msgid "is a palindrome"
+#~ msgstr "er et palindrom"
+
+#~ msgid "case changes only"
+#~ msgstr "kun endring av små/store bokstaver"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "er for likt det gamle"
+
+#~ msgid "is too simple"
+#~ msgstr "er for enkelt"
+
+#~ msgid "is rotated"
+#~ msgstr "er rotert"
+
+#~ msgid "not enough character classes"
+#~ msgstr "ikke nok tegnklasser"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "inneholder for mange like tegn etter hverandre"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "inneholder for lang monoton tegnsekvens"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "inneholder brukernavnet i en eller annen form"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "SVAKT PASSORD: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Konto midlertidig låst (%ld sekunder igjen)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Autentiseringsfeil"
+
+#~ msgid "Service error"
+#~ msgstr "Tjenestefeil"
+
+#~ msgid "Unknown user"
+#~ msgstr "Ukjent bruker"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ukjent feil"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Ugyldig tall angitt for --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Ukjent valg %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filnavn] [--user brukernavn] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: Kan ikke tilbakestille alle brukere til non-zero\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filnavn] [--file rooted-filnavn]\n"
+#~ "[-u brukernavn] [--user brukernavn]\n"
+#~ "[-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ne.po b/po/ne.po
index 0ee068d0..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 bcece567..81f85a05 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index f887e781..401d7001 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -11,13 +11,14 @@
# R.F. Pels <ruurd@tiscali.nl>, 2005
# Rinse de Vries <rinsedevries@kde.nl>, 2005-2006
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# Dmitry V. Levin <ldv@altlinux.org>, 2020, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-03-15 23:38+0000\n"
-"Last-Translator: Geert Warrink <geert.warrink@onsnet.nu>\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/"
"master/nl/>\n"
"Language: nl\n"
@@ -25,63 +26,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 3.11.3\n"
+"X-Generator: Weblate 4.7.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "…De tijd raakt op…\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "…Sorry, uw tijd is verlopen!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "foutieve conversatie (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -222,136 +210,101 @@ msgstr "Toepassing moet libpam nogmaals aanroepen"
msgid "Unknown PAM error"
msgstr "Onbekende PAM-fout"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "is hetzelfde als het oude"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "geheugentoekenningsfout"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "is een palindroom"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "alleen veranderingen in hoofd-/kleine letters"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "lijkt te veel op het oude"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "is te eenvoudig"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "is omgedraaid"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "onvoldoende tekensoorten"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "bevat teveel dezelfde opeenvolgende karakters"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "bevat een te lange monotone tekenreeks"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "bevat de gebruikersnaam in een of andere vorm"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Geen wachtwoord opgegeven."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "…De tijd raakt op…\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Het wachtwoord is niet gewijzigd."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "…Sorry, uw tijd is verlopen!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "SLECHT WACHTWOORD: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "foutieve conversatie (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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-bestandsnaam] [--user gebruikersnaam] [--reset[=n]] [--"
-"quiet]\n"
+"Gebruik: %s [--dir /pad/naar/tally-directory] [--user gebruikersnaam] [--"
+"reset]\n"
+
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] "(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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
@@ -362,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:1088
+#: 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."
@@ -409,22 +363,22 @@ msgstr "Je hebt oude e-mail in map %s."
msgid "You have mail in folder %s."
msgstr "Je hebt e-mail in map %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Aanmaken van map '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Niet in staat om map '%s' aan te maken."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Wachtwoord is al eens gebruikt."
@@ -454,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Sleutelaanmaakcontext %s is toegewezen."
@@ -484,67 +438,7 @@ msgstr "pam_set_item() is mislukt\n"
msgid "login: failure forking: %m"
msgstr "aanmelding: beginnen van nieuw proces mislukt: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Het account is tijdelijk vergrendeld (%ld seconden resterend)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Authenticatiefout"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Servicefout"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Onbekende gebruiker"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Onbekende fout"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Onjuist getal gegeven aan --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Onbekende optie %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s [--file rooted-bestandsnaam] [--user gebruikersnaam] [--reset[=n]] [--"
-"quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: kan niet alle gebruikers terugzetten naar non-zero\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Aanmelding Mislukte Laatst mislukte Van\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-bestandsnaam] [--file rooted-bestandsnaam]\n"
-" [-u gebruikersnaam] [--user gebruikersnaam]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -565,7 +459,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Je moet onmiddellijk je wachtwoord wijzigen (wachtwoord is verouderd)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -573,28 +467,114 @@ msgstr[0] "Waarschuwing: je wachtwoord zal binnen %d dag verlopen."
msgstr[1] "Waarschuwing: je wachtwoord zal binnen %d dagen verlopen."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Het wachtwoord is niet gewijzigd."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "geheugentoekenningsfout"
+
+#~ msgid "is a palindrome"
+#~ msgstr "is een palindroom"
+
+#~ msgid "case changes only"
+#~ msgstr "alleen veranderingen in hoofd-/kleine letters"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "lijkt te veel op het oude"
+
+#~ msgid "is too simple"
+#~ msgstr "is te eenvoudig"
+
+#~ msgid "is rotated"
+#~ msgstr "is omgedraaid"
+
+#~ msgid "not enough character classes"
+#~ msgstr "onvoldoende tekensoorten"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "bevat teveel dezelfde opeenvolgende karakters"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "bevat een te lange monotone tekenreeks"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "bevat de gebruikersnaam in een of andere vorm"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "SLECHT WACHTWOORD: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Het account is tijdelijk vergrendeld (%ld seconden resterend)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Authenticatiefout"
+
+#~ msgid "Service error"
+#~ msgstr "Servicefout"
+
+#~ msgid "Unknown user"
+#~ msgstr "Onbekende gebruiker"
+
+#~ msgid "Unknown error"
+#~ msgstr "Onbekende fout"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Onjuist getal gegeven aan --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Onbekende optie %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s [--file rooted-bestandsnaam] [--user gebruikersnaam] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: kan niet alle gebruikers terugzetten naar non-zero\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-bestandsnaam] [--file rooted-bestandsnaam]\n"
+#~ " [-u gebruikersnaam] [--user gebruikersnaam]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/nn.gmo b/po/nn.gmo
index 6f71dec3..53862251 100644
--- a/po/nn.gmo
+++ b/po/nn.gmo
Binary files differ
diff --git a/po/nn.po b/po/nn.po
index 60062265..d6ad55bd 100644
--- a/po/nn.po
+++ b/po/nn.po
@@ -4,580 +4,491 @@
#
# Translators:
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
+# Andreas-Johann Ø Ulvestad <aj@aju.no>, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2011-11-30 06:56-0500\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Norwegian Nynorsk <i18n-nn@lister.ping.uio.no>\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/"
+"projects/linux-pam/master/nn/>\n"
"Language: nn\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.4.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
+#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr ""
+msgstr "Passord: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
-msgstr ""
+msgstr "Noverande %s-passord: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr ""
+msgstr "Noverande passord: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
-msgstr ""
+msgstr "Nytt %s-passord: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
-msgstr ""
+msgstr "Nytt passord: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
-msgstr ""
+msgstr "Stadfest nytt %s-passord: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
-msgstr ""
+msgstr "Stadfest nytt passord: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
-msgstr ""
+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 ""
+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 ""
+msgstr "Skifte av passord vart avbrote."
#: libpam/pam_item.c:311
msgid "login:"
-msgstr ""
+msgstr "logg inn:"
#: libpam/pam_strerror.c:40
msgid "Success"
-msgstr ""
+msgstr "Utføyrd"
#: libpam/pam_strerror.c:42
msgid "Critical error - immediate abort"
-msgstr ""
+msgstr "Kristisk feil - avbryt med ein gong"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
-msgstr ""
+msgstr "Klarte ikkje å laste modul"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr ""
+msgstr "Fann ikkje symbol"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
-msgstr ""
+msgstr "Feil i tenestemodul"
#: libpam/pam_strerror.c:50
msgid "System error"
-msgstr ""
+msgstr "Systemfeil"
#: libpam/pam_strerror.c:52
msgid "Memory buffer error"
-msgstr ""
+msgstr "Minnebufferfeil"
#: libpam/pam_strerror.c:54
msgid "Permission denied"
-msgstr ""
+msgstr "Nekta tilgang"
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
-msgstr ""
+msgstr "Autentiseringsfeil"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
-msgstr ""
+msgstr "Utilstrekkelege rettar for tilgang til informasjon om autentisering"
#: libpam/pam_strerror.c:60
msgid "Authentication service cannot retrieve authentication info"
-msgstr ""
+msgstr "Teneste for autentisering kan ikkje hente informasjon om autentisering"
#: libpam/pam_strerror.c:62
msgid "User not known to the underlying authentication module"
-msgstr ""
+msgstr "Brukar udkjend for autentiseringsmodul"
#: libpam/pam_strerror.c:64
msgid "Have exhausted maximum number of retries for service"
-msgstr ""
+msgstr "Maks tal på forsøk er overskride for tenesta"
#: libpam/pam_strerror.c:66
msgid "Authentication token is no longer valid; new one required"
-msgstr ""
+msgstr "Autentiseringspollett er ikkje lenger gyldig; ny kode kravd"
#: libpam/pam_strerror.c:68
msgid "User account has expired"
-msgstr ""
+msgstr "Brukarkonto er utgått"
#: libpam/pam_strerror.c:70
msgid "Cannot make/remove an entry for the specified session"
-msgstr ""
+msgstr "Kan ikkje opprette/fjerne oppføring for vald økt"
#: libpam/pam_strerror.c:72
msgid "Authentication service cannot retrieve user credentials"
-msgstr ""
+msgstr "Autentiseringsteneste kan ikkje hente brukarrettar"
#: libpam/pam_strerror.c:74
msgid "User credentials expired"
-msgstr ""
+msgstr "Brukarrettar er utløpt"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
-msgstr ""
+msgstr "Feil under definering av brukarrettar"
#: libpam/pam_strerror.c:78
msgid "No module specific data is present"
-msgstr ""
+msgstr "Ingen modulspesifikk data finst"
#: libpam/pam_strerror.c:80
msgid "Bad item passed to pam_*_item()"
-msgstr ""
+msgstr "Ugyldig oppføring spesifisert for pam_*_item()"
#: libpam/pam_strerror.c:82
msgid "Conversation error"
-msgstr ""
+msgstr "Dialogfeil"
#: libpam/pam_strerror.c:84
msgid "Authentication token manipulation error"
-msgstr ""
+msgstr "Manipulasjonsfeil for autentiseringspollett"
#: libpam/pam_strerror.c:86
msgid "Authentication information cannot be recovered"
-msgstr ""
+msgstr "Autentiseringsinformasjon kan ikkje bli gjenoppretta"
#: libpam/pam_strerror.c:88
msgid "Authentication token lock busy"
-msgstr ""
+msgstr "LÃ¥sing av autentiseringskode er oppteken"
#: libpam/pam_strerror.c:90
msgid "Authentication token aging disabled"
-msgstr ""
+msgstr "Tidsavgrensing for autentiseringspollett er deaktivert"
#: libpam/pam_strerror.c:92
msgid "Failed preliminary check by password service"
-msgstr ""
+msgstr "Posstordtenesta sin innledande kontroll feila"
#: libpam/pam_strerror.c:94
msgid "The return value should be ignored by PAM dispatch"
-msgstr ""
+msgstr "Resultatverdien bør bli ignorert av PAM"
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
-msgstr ""
+msgstr "Modulen er ukjend"
#: libpam/pam_strerror.c:98
msgid "Authentication token expired"
-msgstr ""
+msgstr "Autentiseringspollett er utgått"
#: libpam/pam_strerror.c:100
msgid "Conversation is waiting for event"
-msgstr ""
+msgstr "Dialogen ventar på hending"
#: libpam/pam_strerror.c:102
msgid "Application needs to call libpam again"
-msgstr ""
+msgstr "Programmet må spørre libpam på ny"
#: libpam/pam_strerror.c:105
msgid "Unknown PAM error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
+msgstr "Ukjend PAM-feil"
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr ""
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Tida held på å gå ut...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr ""
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Beklagar, tida er gått ut\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr ""
+msgid "erroneous conversation (%d)\n"
+msgstr "mislykka dialog (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
-msgstr ""
+msgstr "%s feila: sluttkode %d"
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
-msgstr ""
+msgstr "%s feila: fekk signal %d%s"
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
-msgstr ""
+msgstr "%s feila: ukjend status 0x%x"
-#: modules/pam_faillock/main.c:104
-#, 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/main.c:181
+#, c-format
+msgid "Login Failures Latest failure From\n"
msgstr ""
-#: modules/pam_faillock/pam_faillock.c:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
-msgstr ""
+msgstr "Konto er låst som følgje av %u mislukka innloggingar."
-#: modules/pam_faillock/pam_faillock.c:650
+#: 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 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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
+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 " 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 ""
+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 ""
+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 ""
+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 ""
+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 ""
"There were %d failed login attempts since the last successful login."
msgstr[0] ""
+"Det har vore %d feila innloggingsforsøk utan feil sidan førre innlogging."
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:1088
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
-msgstr ""
+msgstr "For mange innlogginga for «%s»."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr ""
+#, 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."
-msgstr ""
+msgstr "Du har fått ny e-post."
#: modules/pam_mail/pam_mail.c:295
msgid "You have old mail."
-msgstr ""
+msgstr "Du har ulest e-post."
#: modules/pam_mail/pam_mail.c:299
msgid "You have mail."
-msgstr ""
+msgstr "Du har fått e-post."
#: modules/pam_mail/pam_mail.c:306
#, c-format
msgid "You have no mail in folder %s."
-msgstr ""
+msgstr "Du har ingan e-post i mappen %s."
#: modules/pam_mail/pam_mail.c:310
#, c-format
msgid "You have new mail in folder %s."
-msgstr ""
+msgstr "Du har ny e-post i mappa %s."
#: modules/pam_mail/pam_mail.c:314
#, c-format
msgid "You have old mail in folder %s."
-msgstr ""
+msgstr "Du har ulest e-post i mappa %s."
#: modules/pam_mail/pam_mail.c:319
#, c-format
msgid "You have mail in folder %s."
-msgstr ""
+msgstr "Du har e-post i mappa %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr ""
+msgstr "Opprettar kataloge «%s»."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
-msgstr ""
+msgstr "Kan ikkje lage og initiere katalog «%s»."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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 "Passord er allereie nytta. Vel eit anna."
-#: modules/pam_pwhistory/pam_pwhistory.c:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
-msgstr ""
+msgstr "Passordet har allereie vore brukt."
#: modules/pam_selinux/pam_selinux.c:172
#, c-format
msgid "The default security context is %s."
-msgstr ""
+msgstr "Forehandvald sikkerheitskontekst er %s."
#: modules/pam_selinux/pam_selinux.c:176
msgid "Would you like to enter a different role or level?"
-msgstr ""
+msgstr "Vil du angje ei anna rolle eller nivå?"
#: modules/pam_selinux/pam_selinux.c:189
msgid "role:"
-msgstr ""
+msgstr "rolle:"
#: modules/pam_selinux/pam_selinux.c:193
#, c-format
msgid "There is no default type for role %s."
-msgstr ""
+msgstr "Inga førehandvald type for rolla %s."
#: modules/pam_selinux/pam_selinux.c:225
msgid "level:"
-msgstr ""
+msgstr "nivå:"
#: modules/pam_selinux/pam_selinux.c:259
msgid "This is not a valid security context."
-msgstr ""
+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 ""
+msgstr "Kunne ikkje innhente gyldig kontekst for %s."
-#: modules/pam_selinux/pam_selinux.c:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
-msgstr ""
+msgstr "Sikkerheitskontekst «%s» tilordna."
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
-msgstr ""
+msgstr "Kontekst «%s» for oppretting av nøkkel er tilordna."
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
msgid "failed to initialize PAM\n"
-msgstr ""
+msgstr "Kunne ikkje initiere PAM\n"
#: modules/pam_selinux/pam_selinux_check.c:105
#, c-format
msgid "failed to pam_set_item()\n"
-msgstr ""
+msgstr "kunne ikkje pam_set_item()\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr ""
+msgstr "login: feil under forgreining: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
-msgstr ""
+msgstr "Tilgang innvilga (siste tilgang var for %ld sekund sidan)."
#: 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 "Kontoen din er utløpt; kontakt systemadministratoren din."
#: modules/pam_unix/pam_unix_acct.c:238
msgid ""
"You are required to change your password immediately (administrator "
"enforced)."
-msgstr ""
+msgstr "Du må straks endre passordet ditt (kravd av administrator)."
#: modules/pam_unix/pam_unix_acct.c:244
msgid ""
"You are required to change your password immediately (password expired)."
-msgstr ""
+msgstr "Du må straks endre passordet ditt (passordet har utløpt)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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[0] "Advarsel: Passordet ditt utløper om %d dag."
+msgstr[1] "Advarsel: Passordet ditt utløper om %d dagar."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
msgid "Warning: your password will expire in %d days."
-msgstr ""
+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 ""
+msgstr "NIS-passord kunne ikkje bli endra."
-#: modules/pam_unix/pam_unix_passwd.c:581
-#, fuzzy
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Passordet kunne ikkje bli endra."
+
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
-msgstr "Du må velge et kortere passord."
+msgstr "Du må velje eit kortare passord."
-#: 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 "Du må velge et kortere passord."
+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 ""
+msgstr "Skiftar passord for %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 "Du må velge et kortere passord."
+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 59cd6d5d..fef87521 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 2d337e03..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: 2020-06-08 10:18+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,61 +24,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.11.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...ସମୟ ସମାପà­à¬¤ ହେଉଛି...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...କà­à¬·à¬®à¬¾ କରିବେ, ଆପଣଙà­à¬• ସମୟ ସମାପà­à¬¤ ହୋଇଯାଇଛି!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "ତୃଟିପୂରà­à¬£à­à¬£ କଥୋପକଥନ (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ ପରିବରà­à¬¤à­à¬¤à¬¨à¬•ୠପà­à¬°à¬¤à­à­Ÿà¬¾à¬–ାନ କରାଯାଇଛି।"
@@ -218,135 +205,100 @@ msgstr "ପà­à¬°à­Ÿà­‹à¬— libpam କୠପà­à¬¨à¬°à­à¬¬à¬¾à¬° ଆହà­à¬¬à¬
msgid "Unknown PAM error"
msgstr "ଅଜଣା PAM ତୃଟି"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ପà­à¬°à­à¬£à¬¾ ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ ସହିତ à¬à¬¹à¬¾ ସମାନ ଅଟେ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "ସà­à¬®à­ƒà¬¤à¬¿à¬¸à­à¬¥à¬¾à¬¨ ବଣà­à¬Ÿà¬¨ ତà­à¬°à­à¬Ÿà¬¿"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତଟି ଗୋଟିଠପାଲିନଡà­à¬°à­‹à¬® ଅଟେ"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "କେବଳ ଅକà­à¬·à¬° ପà­à¬°à¬•ାର ପରିବରà­à¬¤à­à¬¤à¬¿à¬¤ ହୋଇଥାà¬"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "à¬à¬¹à¬¾ ପୂରà­à¬¬ ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ ସହିତ ବହà­à¬¤ ସମାନ ଅଟେ"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "à¬à¬¹à¬¾ ଅତି ସହଜ ଅଟେ"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "à¬à¬¹à¬¾ ଘୂରà­à¬£à­à¬£à­Ÿà¬®à¬¾à¬¨ ଅଟେ"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "ଯଥେଷà­à¬Ÿ ବରà­à¬£à­à¬£ ଶà­à¬°à­‡à¬£à­€ ନାହିà¬"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "ଅତà­à­Ÿà¬§à¬¿à¬• ସମାନ ଅକà­à¬·à¬°à¬•ୠଲଗାତାର ଧାରଣ କରିଥାà¬"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "ନିରସ ବରà­à¬£à­à¬£à¬° ବଡ଼ କà­à¬°à¬® ଧାରଣ କରିଅଛି"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "ଚାଳକ ନାମକୠକୌଣସି ଉପାୟରେ ଧାରଣ କରିଥାà¬"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "କୌଣସି ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ ପà­à¬°à¬¦à¬¾à¬¨ କରାଯାଇ ନାହିà¬à¥¤"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...ସମୟ ସମାପà­à¬¤ ହେଉଛି...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତକୠପରିବରà­à¬¤à­à¬¤à¬¨ କରା ଯାଇ ନାହିà¬à¥¤"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...କà­à¬·à¬®à¬¾ କରିବେ, ଆପଣଙà­à¬• ସମୟ ସମାପà­à¬¤ ହୋଇଯାଇଛି!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ଖରାପ ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "ତୃଟିପୂରà­à¬£à­à¬£ କଥୋପକଥନ (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s ବିଫଳ: %d ସଙà­à¬•େତରୠପà­à¬°à¬¸à­à¬¥à¬¾à¬¨ କରà­à¬…ଛି"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -355,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:1088
+#: 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."
@@ -401,22 +354,22 @@ msgstr "ଆପଣଙà­à¬• ନିକଟରେ %s ଫୋଲଡରରେ ପà­à¬°
msgid "You have mail in folder %s."
msgstr "ଆପଣଙà­à¬• ନିକଟରେ %s ଫୋଲଡରରେ ଚିଠି ଅଛି।"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "ଡ଼ିରେକà­à¬Ÿà­‹à¬°à­€ '%s' ନିରà­à¬®à¬¾à¬£ କରà­à¬…ଛି."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "ଡ଼ିରେକà­à¬Ÿà­‹à¬°à­€ '%s'କୠନିରà­à¬®à¬¾à¬£ à¬à¬¬à¬‚ ପà­à¬°à¬¾à¬°à¬®à­à¬­ କରିବାରେ ଅସମରà­à¬¥à¥¤"
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତକୠପୂରà­à¬¬à¬°à­ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରାଯାଇଛି।"
@@ -446,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "%s ସà­à¬°à¬•à­à¬·à¬¾ ପà­à¬°à¬¸à¬™à­à¬— ନà­à¬¯à¬¸à­à¬¤ କରାଯାଇଛି।"
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "କୀ ନିରà­à¬®à¬¾à¬£ ପà­à¬°à¬¸à¬™à­à¬— %s ନà­à¬¯à¬¸à­à¬¤ କରାଯାଇଛି।"
@@ -476,66 +429,7 @@ msgstr "pam_set_item() କରିବାରେ ବିଫଳ\n"
msgid "login: failure forking: %m"
msgstr "ଲଗଇନ: fork କରିବାରେ ବିଫଳ: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "ଖାତା ଅସà­à¬¥à­Ÿà­€ ଭାବରେ ଅପରିବରà­à¬¤à­à¬¤à¬¨à¬¶à­€à¬³ ହୋଇଯାଇଛି (%ld ସେକେଣà­à¬¡à¬¸à­ ବଳିଛି)।"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "ବୈଧିକରଣ ତୃଟି"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "ସେବା ତୃଟି"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "ଅଜଣା ଚାଳକ"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "ଅଜଣା ତୃଟି"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= ପାଇଠଖରାପ ସଂଖà­à¬¯à¬¾ ଦିଆଯାଇଛି\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: ଅଚିହà­à¬¨à¬¿à¬¤ ବିକଳà­à¬ª %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: ସମସà­à¬¤ ଚାଳକ ମାନଙà­à¬•ୠଶୂନà­à¬¯ ବିହୀନ ଭାବରେ ପà­à¬¨à¬°à­à¬¬à¬¾à¬° ବିନà­à¬¯à¬¾à¬¸ କରିପାରିବ ନାହିà¬\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "ଲଗଇନ ବିଫଳତାର ନୂତନତମ ବିଫଳତା ରà­\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "ପà­à¬°à¬¬à­‡à¬¶ ଗà­à¬°à¬¹à¬£à­€à­Ÿ ହୋଇଛି (ପୂରà­à¬¬ ପà­à¬°à¬¬à­‡à¬¶ ହୋଇଥିଲା %ld ସେକଣà­à¬¡ ପୂରà­à¬¬à¬°à­)।"
@@ -556,7 +450,7 @@ msgid ""
msgstr ""
"ଆପଣ ଆପଣଙà­à¬•ର ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତକୠଯଥାଶୀଘà­à¬° ବଦଳାଇବା ଆବଶà­à¬¯à¬• (ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତର ବୈଧତା ସରି ଯାଇଛି)।"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -564,28 +458,113 @@ msgstr[0] "ଚେତାବନୀ: ଆପଣଙà­à¬• ପà­à¬°à¬¬à­‡à¬¶ ସଙà­
msgstr[1] "ଚେତାବନୀ: ଆପଣଙà­à¬• ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ %d ଦିନରେ ଅକାମି ହୋଇଯିବ।"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "କୌଣସି ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ ପà­à¬°à¬¦à¬¾à¬¨ କରାଯାଇ ନାହିà¬à¥¤"
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତକୠପରିବରà­à¬¤à­à¬¤à¬¨ କରା ଯାଇ ନାହିà¬à¥¤"
+
+#: 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 "ପà­à¬°à­à¬£à¬¾ ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ ସହିତ à¬à¬¹à¬¾ ସମାନ ଅଟେ"
+
+#~ msgid "memory allocation error"
+#~ msgstr "ସà­à¬®à­ƒà¬¤à¬¿à¬¸à­à¬¥à¬¾à¬¨ ବଣà­à¬Ÿà¬¨ ତà­à¬°à­à¬Ÿà¬¿"
+
+#~ msgid "is a palindrome"
+#~ msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତଟି ଗୋଟିଠପାଲିନଡà­à¬°à­‹à¬® ଅଟେ"
+
+#~ msgid "case changes only"
+#~ msgstr "କେବଳ ଅକà­à¬·à¬° ପà­à¬°à¬•ାର ପରିବରà­à¬¤à­à¬¤à¬¿à¬¤ ହୋଇଥାà¬"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "à¬à¬¹à¬¾ ପୂରà­à¬¬ ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ ସହିତ ବହà­à¬¤ ସମାନ ଅଟେ"
+
+#~ msgid "is too simple"
+#~ msgstr "à¬à¬¹à¬¾ ଅତି ସହଜ ଅଟେ"
+
+#~ msgid "is rotated"
+#~ msgstr "à¬à¬¹à¬¾ ଘୂରà­à¬£à­à¬£à­Ÿà¬®à¬¾à¬¨ ଅଟେ"
+
+#~ msgid "not enough character classes"
+#~ msgstr "ଯଥେଷà­à¬Ÿ ବରà­à¬£à­à¬£ ଶà­à¬°à­‡à¬£à­€ ନାହିà¬"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "ଅତà­à­Ÿà¬§à¬¿à¬• ସମାନ ଅକà­à¬·à¬°à¬•ୠଲଗାତାର ଧାରଣ କରିଥାà¬"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "ନିରସ ବରà­à¬£à­à¬£à¬° ବଡ଼ କà­à¬°à¬® ଧାରଣ କରିଅଛି"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "ଚାଳକ ନାମକୠକୌଣସି ଉପାୟରେ ଧାରଣ କରିଥାà¬"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ଖରାପ ପà­à¬°à¬¬à­‡à¬¶ ସଙà­à¬•େତ: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "ଖାତା ଅସà­à¬¥à­Ÿà­€ ଭାବରେ ଅପରିବରà­à¬¤à­à¬¤à¬¨à¬¶à­€à¬³ ହୋଇଯାଇଛି (%ld ସେକେଣà­à¬¡à¬¸à­ ବଳିଛି)।"
+
+#~ msgid "Authentication error"
+#~ msgstr "ବୈଧିକରଣ ତୃଟି"
+
+#~ msgid "Service error"
+#~ msgstr "ସେବା ତୃଟି"
+
+#~ msgid "Unknown user"
+#~ msgstr "ଅଜଣା ଚାଳକ"
+
+#~ msgid "Unknown error"
+#~ msgstr "ଅଜଣା ତୃଟି"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= ପାଇଠଖରାପ ସଂଖà­à¬¯à¬¾ ଦିଆଯାଇଛି\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: ଅଚିହà­à¬¨à¬¿à¬¤ ବିକଳà­à¬ª %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: ସମସà­à¬¤ ଚାଳକ ମାନଙà­à¬•ୠଶୂନà­à¬¯ ବିହୀନ ଭାବରେ ପà­à¬¨à¬°à­à¬¬à¬¾à¬° ବିନà­à¬¯à¬¾à¬¸ କରିପାରିବ ନାହିà¬\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/pa.gmo b/po/pa.gmo
index fe3bdeaa..858fbcd9 100644
--- a/po/pa.gmo
+++ b/po/pa.gmo
Binary files differ
diff --git a/po/pa.po b/po/pa.po
index 94ed6704..8ba68814 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -7,78 +7,65 @@
# 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, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2013-08-29 08:55-0400\n"
-"Last-Translator: asaini <asaini@redhat.com>\n"
-"Language-Team: Panjabi (Punjabi) <punjabi-users@lists.sf.net>\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"
"Language: pa\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"
+"X-Generator: Weblate 4.15.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਰਿਹਾ ਹੈ...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...ਅਫਸੋਸ, ਤà©à¨¹à¨¾à¨¡à¨¾ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "ਗਲਤ ਅਨà©à¨µà¨¾à¨¦ (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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
-#, 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 ਪਾਸਵਰਡ: "
-#: 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 "ਮਾਫ ਕਰਨਾ ਪਾਸਵਰਡ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ।"
+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 "ਪਾਸਵਰਡ ਤਬਦੀਲੀ ਅਧੂਰੀ ਛੱਡੀ ਗਈ।"
@@ -92,7 +79,7 @@ msgstr "ਸਫ਼ਲ"
#: libpam/pam_strerror.c:42
msgid "Critical error - immediate abort"
-msgstr "ਨਾਜ਼à©à¨• ਗਲਤੀ - ਤਰà©à©°à¨¤ ਅਧੂਰਾ ਛੱਡਿਆ"
+msgstr "ਗੰਭੀਰ ਗਲਤੀ - ਫ਼ੌਰੀ ਅਧੂਰਾ ਛੱਡਿਆ"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
@@ -132,11 +119,11 @@ 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"
@@ -144,7 +131,7 @@ 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"
@@ -152,15 +139,15 @@ 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"
@@ -188,11 +175,11 @@ 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"
@@ -218,159 +205,122 @@ msgstr "ਕਾਰਜ ਲਈ ਫਿਰ libpam ਨੂੰ ਕਾਲ ਕਰਨ ਦà©
msgid "Unknown PAM error"
msgstr "ਅਣਜਾਣ PAM ਗਲਤੀ"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ਪà©à¨°à¨¾à¨£à©‡ ਵਰਗਾ ਹੈ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "ਮੈਮੋਰੀ ਨਿਰਧਾਰਨ ਗਲਤੀ"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "ਇੱਕ palindrome ਹੈ"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "ਸਿਰਫ ਅੱਖਰ ਤਬਦੀਲੀ"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ਪà©à¨°à¨¾à¨£à©‡ ਨਾਲ ਬਹà©à¨¤ ਮਿਲਦਾ-ਜà©à¨²à¨¦à¨¾ ਹੈ"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "ਬਹà©à¨¤ ਸਧਾਰਨ ਹੈ"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "ਘà©à©°à¨®à¨¾à¨‡à¨† ਹੈ"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "ਲੋੜੀਂਦੀਆਂ ਅੱਖਰ ਸ਼à©à¨°à©‡à¨£à©€à¨†à¨‚ ਨਹੀਂ ਹਨ"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "ਲਗਾਤਾਰ ਬਹà©à¨¤ ਸਾਰੇ ਮਿਲਦੇ-ਜà©à¨²à¨¦à©‡ ਅੱਖਰ ਸ਼ਾਮਿਲ ਹਨ"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "ਇੱਕ ਬਹà©à¨¤ ਜਿਆਦਾ ਲੰਬੀ ਇਕਸà©à¨°à¨¤à¨¾ ਵਾਲੀ ਅੱਖਰ ਲੜੀ ਸਮਾਈ ਹੋਈ ਹੈ"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "ਕà©à¨¸à©‡ ਰੂਪ ਵਿੱਚ ਉਪਭੋਗੀ ਨਾਂ ਸ਼ਾਮਿਲ ਹੈ"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "ਕੋਈ ਪਾਸਵਰਡ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਰਿਹਾ ਹੈ...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS ਪਾਸਵਰਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...ਅਫਸੋਸ, ਤà©à¨¹à¨¾à¨¡à¨¾ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ਗਲਤ ਪਾਸਵਰਡ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "ਗਲਤ ਗੱਲ (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s ਫੇਲ ਹੋਇਆ: ਕੋਡ %d ਨਾਲ ਬੰਦ ਹੋ ਗਿਆ"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
-#, fuzzy, c-format
+#: 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: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+"ਵਰਤੋੰ: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
-#: modules/pam_faillock/pam_faillock.c:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
-#, fuzzy, c-format
+#: 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 ਫੇਲ ਹੋਠਲਾਗਇਨਾਂ ਕਰਕੇ ਖਾਤਾ ਲਾਕ ਕੀਤਾ ਹੈ"
+msgstr "%u ਫੇਲà©à¨¹ ਹੋਠਲਾਗਇਨਾਂ ਕਰਕੇ ਖਾਤਾ ਲਾਕ ਕੀਤਾ ਹੈ।"
-#: modules/pam_faillock/pam_faillock.c:650
+#: 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: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 " %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 " 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 " 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"
+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[1] "ਪਿਛਲੇ ਸਫਲਤਾਪੂਰਕ ਲਾਗਇਨ ਤੋਂ ਬਾਇਦ %d ਫੇਲ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਹਨ।"
+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 ਫੇਲ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਹਨ।"
+msgstr "ਪਿਛਲੇ ਕਾਮਯਾਬ ਲਾਗਇਨ ਤੋਂ ਬਾਅਦ %d ਫੇਲà©à¨¹ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਸਨ।"
-#: modules/pam_limits/pam_limits.c:1088
-#, 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."
-msgstr "ਤà©à¨¹à¨¾à¨¡à©€ ਨਵੀਂ ਮੇਲ ਹੈ।"
+msgid "You do not have any new mail."
+msgstr "ਤà©à¨¹à¨¾à¨¡à©‡ ਲਈ ਕੋਈ ਨਵੀੰ ਈਮੇਲ ਨਹੀਂ ਹੈ।"
#: modules/pam_mail/pam_mail.c:292
msgid "You have new mail."
@@ -404,66 +354,65 @@ msgstr "ਫੋਲਡਰ %s ਵਿੱਚ ਤà©à¨¹à¨¾à¨¡à©€ ਪà©à¨°à¨¾à¨£à©€ à¨
msgid "You have mail in folder %s."
msgstr "ਫੇਲਡਰ %s ਵਿੱਚ ਤà©à¨¹à¨¾à¨¡à©€ ਮੇਲ ਹੈ।"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਬਣਾ ਰਿਹਾ ਹੈ।"
+msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਬਣਾਈ ਜਾ ਰਹੀ ਹੈ।"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਨੂੰ ਬਣਾਉਣ ਅਤੇ ਸ਼à©à¨°à©‚ ਕਰਨ ਵਿੱਚ ਅਸਮਰਥ।"
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
-msgstr "ਗà©à¨ªà¨¤-ਸ਼ਬਦ ਪਹਿਲਾਂ ਹੀ ਵਰਤਿਆ ਜਾ ਚà©à©±à¨•ਾ ਹੈ।"
+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?"
-msgstr "ਕੀ ਤà©à¨¸à©€à¨‚ ਇੱਕ ਵੱਖਰਾ ਰੋਲ ਜਾਂ ਲੈਵਲ ਦੇਣਾ ਚਾਹà©à©°à¨¦à©‡ ਹੋ?"
+msgstr "ਕੀ ਤà©à¨¸à©€à¨‚ ਵੱਖਰਾ ਰੋਲ ਜਾਂ ਲੈਵਲ ਦੇਣਾ ਚਾਹà©à©°à¨¦à©‡ ਹੋ?"
#: modules/pam_selinux/pam_selinux.c:189
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:629
-#, 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:645
-#, 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
@@ -480,120 +429,141 @@ msgstr "pam_set_item() ਲਈ ਫੇਲ\n"
msgid "login: failure forking: %m"
msgstr "ਲਾਗਇਨ: ਫੋਰਕਿੰਗ ਫੇਲ: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "ਖਾਤਾ ਆਰਜੀ ਤੌਰ ਤੇ ਲਾਕ ਕੀਤਾ ਹੈ (%ld ਸਕਿੰਟ ਬਾਕੀ ਹਨ)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "ਪਰਮਾਣਕਿਤਾ ਗਲਤੀ"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "ਸੇਵਾ ਗਲਤੀ"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "ਅਣਜਾਣ ਉਪਭੋਗੀ"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "ਅਣਜਾਣੀ ਗਲਤੀ"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset= ਲਈ ਗਲਤ ਨੰਬਰ ਦਿੱਤਾ ਗਿਆ\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: ਬੇਪਛਾਣ ਚੋਣ %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: ਸਭ ਉਪਭੋਗੀਆਂ ਨੂੰ ਨਾਨ-ਜ਼ੀਰੋ ਰੀਸੈੱਟ ਨਹੀਂ ਕਰ ਸਕਦਾ\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Failures Latest failure From\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
-#, fuzzy, 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:265 modules/pam_unix/pam_unix_acct.c:272
-#, fuzzy, c-format
+#: 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[1] "ਚੇਤਾਵਨੀ: ਤà©à¨¹à¨¾à¨¡à©‡ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨਾਂ ਵਿੱਚ ਪà©à©±à¨— ਜਾਵੇਗੀ"
+msgstr[0] "ਚੇਤਾਵਨੀ: ਤà©à¨¹à¨¾à¨¡à©‡ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨ ‘ਚ ਪà©à©±à¨— ਜਾਵੇਗੀ।"
+msgstr[1] "ਚੇਤਾਵਨੀ: ਤà©à¨¹à¨¾à¨¡à©‡ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨਾਂ ‘ਚ ਪà©à©±à¨— ਜਾਵੇਗੀ।"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
-#, fuzzy, c-format
+#: 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 ਪਾਸਵਰਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "ਕੋਈ ਪਾਸਵਰਡ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ।"
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "ਪਾਸਵਰਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਗਿਆ।"
+
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
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 ਲਈ ਪਾਸਵਰਡ ਤਬਦੀਲ ਕਰ ਰਿਹਾ ਹੈ।"
-#: 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 "ਪà©à¨°à¨¾à¨£à©‡ ਵਰਗਾ ਹੈ"
+
+#~ msgid "memory allocation error"
+#~ msgstr "ਮੈਮੋਰੀ ਨਿਰਧਾਰਨ ਗਲਤੀ"
+
+#~ msgid "is a palindrome"
+#~ msgstr "ਘà©à©°à¨®à¨¾à¨‰ ਸ਼ਬਦ ਹੈ"
+
+#~ msgid "case changes only"
+#~ msgstr "ਸਿਰਫ ਅੱਖਰ ਤਬਦੀਲੀ"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ਪà©à¨°à¨¾à¨£à©‡ ਨਾਲ ਬਹà©à¨¤ ਮਿਲਦਾ-ਜà©à¨²à¨¦à¨¾ ਹੈ"
+
+#~ msgid "is too simple"
+#~ msgstr "ਬਹà©à¨¤ ਸਧਾਰਨ ਹੈ"
+
+#~ msgid "is rotated"
+#~ msgstr "ਘà©à©°à¨®à¨¾à¨‡à¨† ਹੈ"
+
+#~ msgid "not enough character classes"
+#~ msgstr "ਲੋੜੀਂਦੀਆਂ ਅੱਖਰ ਸ਼à©à¨°à©‡à¨£à©€à¨†à¨‚ ਨਹੀਂ ਹਨ"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "ਲਗਾਤਾਰ ਬਹà©à¨¤ ਸਾਰੇ ਮਿਲਦੇ-ਜà©à¨²à¨¦à©‡ ਅੱਖਰ ਸ਼ਾਮਿਲ ਹਨ"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "ਇੱਕ ਬਹà©à¨¤ ਜਿਆਦਾ ਲੰਬੀ ਇਕਸà©à¨°à¨¤à¨¾ ਵਾਲੀ ਅੱਖਰ ਲੜੀ ਸਮਾਈ ਹੋਈ ਹੈ"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "ਕਿਸੇ ਢੰਗ ਨਾਲ ਵਰਤੋਂਕਾਰ ਨਾਂ ਮੌਜੂਦ ਹੈ"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ਗਲਤ ਪਾਸਵਰਡ: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "ਖਾਤਾ ਆਰਜ਼ੀ ਤੌਰ ‘ਤੇ ਲਾਕ ਕੀਤਾ ਹੈ (%ld ਸਕਿੰਟ ਬਾਕੀ ਹਨ)।"
+
+#~ msgid "Authentication error"
+#~ msgstr "ਪਰਮਾਣਕਿਤਾ ਗਲਤੀ"
+
+#~ msgid "Service error"
+#~ msgstr "ਸੇਵਾ ਗਲਤੀ"
+
+#~ msgid "Unknown user"
+#~ msgstr "ਅਣਪਛਾਤਾ ਵਰਤੋਂਕਾਰ"
+
+#~ msgid "Unknown error"
+#~ msgstr "ਅਣਜਾਣੀ ਗਲਤੀ"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset= ਲਈ ਗਲਤ ਨੰਬਰ ਦਿੱਤਾ ਗਿਆ\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: ਬੇਪਛਾਣ ਚੋਣ %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਗ਼ੈਰ-ਸਿਫ਼ਰ ਲਈ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u ਵਰਤੋਂਕਾਰ-ਨਾਂ] [--user ਵਰਤੋਂਕਾਰ-ਨਾਂ]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index 2130bc22..6616c186 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 5f3444cb..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.
+# 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.
+# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-01 09:26+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,63 +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.0.1\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "…czas mija…\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "…czas minął.\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "błędna rozmowa (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -219,136 +206,102 @@ msgstr "Aplikacja musi jeszcze raz wywołać libpam"
msgid "Unknown PAM error"
msgstr "Nieznany błąd PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "jest identyczne z poprzednim"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "błąd przydziału pamięci"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "jest palindromem"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "ma zmienioną tylko wielkość znaków"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "jest za bardzo podobne do poprzedniego"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "jest za proste"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "jest obrócone"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "za mało rodzajów znaków"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "zawiera za dużo takich samych znaków po sobie"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "zawiera za dużo takich samych znaków po sobie"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "zawiera nazwę użytkownika w jakiejś formie"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Nie podano hasła."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "…czas mija…\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Hasło nie zostało zmienione."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "…czas minął.\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "BÅĘDNE HASÅO: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "błędna rozmowa (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] "(pozostała %d minuta do odblokowania)"
+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: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 ""
@@ -361,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:1088
+#: 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."
@@ -408,22 +361,22 @@ msgstr "Stare wiadomości w katalogu %s."
msgid "You have mail in folder %s."
msgstr "Wiadomości w katalogu %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Tworzenie katalogu „%sâ€."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Nie można utworzyć i zainicjować katalogu „%sâ€."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Hasło było już używane."
@@ -453,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Przypisano kontekst tworzenia klucza %s."
@@ -483,67 +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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Konto zostało tymczasowo zablokowane (pozostało %ld s)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Błąd uwierzytelniania"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Błąd usługi"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Nieznany użytkownik"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Nieznany błąd"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: podano błędny numer dla „--reset=â€\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: nierozpoznana opcja %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file nazwa-pliku-root] [--user nazwa-użytkownika] [--reset[=n]] [--"
-"quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: nie można przywrócić wszystkich użytkowników\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Niepowodzenia Ostatnie niepowodzenie Z\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f nazwa-pliku-root] [--file nazwa-pliku-root]\n"
-" [-u nazwa-użytkownika] [--user nazwa-użytkownika]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -564,7 +457,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Wymagana jest natychmiastowa zmiana hasła (hasło wygasło)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -573,28 +466,114 @@ msgstr[1] "Ostrzeżenie: hasło wygaśnie za %d dni."
msgstr[2] "Ostrzeżenie: hasło wygaśnie za %d dni."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Hasło nie zostało zmienione."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "błąd przydziału pamięci"
+
+#~ msgid "is a palindrome"
+#~ msgstr "jest palindromem"
+
+#~ msgid "case changes only"
+#~ msgstr "ma zmienioną tylko wielkość znaków"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "jest za bardzo podobne do poprzedniego"
+
+#~ msgid "is too simple"
+#~ msgstr "jest za proste"
+
+#~ msgid "is rotated"
+#~ msgstr "jest obrócone"
+
+#~ msgid "not enough character classes"
+#~ msgstr "za mało rodzajów znaków"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "zawiera za dużo takich samych znaków po sobie"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "zawiera za dużo takich samych znaków po sobie"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "zawiera nazwę użytkownika w jakiejś formie"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "BÅĘDNE HASÅO: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Konto zostało tymczasowo zablokowane (pozostało %ld s)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Błąd uwierzytelniania"
+
+#~ msgid "Service error"
+#~ msgstr "Błąd usługi"
+
+#~ msgid "Unknown user"
+#~ msgstr "Nieznany użytkownik"
+
+#~ msgid "Unknown error"
+#~ msgstr "Nieznany błąd"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: podano błędny numer dla „--reset=â€\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: nierozpoznana opcja %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file nazwa-pliku-root] [--user nazwa-użytkownika] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: nie można przywrócić wszystkich użytkowników\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f nazwa-pliku-root] [--file nazwa-pliku-root]\n"
+#~ " [-u nazwa-użytkownika] [--user nazwa-użytkownika]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/pt.gmo b/po/pt.gmo
index b516adeb..78e7db37 100644
--- a/po/pt.gmo
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
index 6ae80500..b04dfde9 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -8,15 +8,15 @@
# Rui Gouveia <rui.gouveia@globaltek.pt>, 2009
# Rui Gouveia <rui.gouveia@gmail.com>, 2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# Dmitry V. Levin <ldv@altlinux.org>, 2020, 2021.
# Manuela Silva <mmsrs@sky.com>, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-06 11:40+0000\n"
-"Last-Translator: Manuela Silva <mmsrs@sky.com>\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/"
"linux-pam/master/pt/>\n"
"Language: pt\n"
@@ -24,63 +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.0.3\n"
+"X-Generator: Weblate 4.7.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...O tempo está a esgotar-se...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Desculpe, o seu tempo expirou!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "conversação errónea (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -221,136 +208,101 @@ msgstr "A aplicação necessita de invocar o libpam novamente"
msgid "Unknown PAM error"
msgstr "Erro PAM desconhecido"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "é igual à anterior"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "erro de alocação de memória"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "é um palíndromo"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "apenas muda a capitulação"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "é muito semelhante à anterior"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "é demasiado simples"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "é rodada"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "não tem classes de caracteres suficientes"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "contém demasiados caracteres iguais consecutivos"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "contém demasiados caracteres iguais consecutivos"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "contém, de alguma forma, o nome do utilizador"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Não foi fornecida uma senha."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...O tempo está a esgotar-se...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "A senha não foi alterada."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Desculpe, o seu tempo expirou!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "MÃ SENHA: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "conversação errónea (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
-#, 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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: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 ""
@@ -363,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:1088
+#: 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."
@@ -411,22 +364,22 @@ msgstr "Tem correio electrónico antigo na pasta %s."
msgid "You have mail in folder %s."
msgstr "Tem correio electrónico na pasta %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "A criar directório '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
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:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "A senha já foi utilizada anteriormente."
@@ -456,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:629
+#: 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:645
+#: 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."
@@ -486,66 +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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Conta temporariamente bloqueada (faltam %ld segundos)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Erro de autenticação"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Erro de serviço"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Utilizador desconhecido"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Erro desconhecido"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Número errado fornecido a --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Opção não reconhecida %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file ficheiro-raiz] [--user nome-utilizador] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Não foi possível reiniciar todos os utilizadores para não zero\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Sessão Falhas Última falha De\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u nome-de-utilizador] [--user nome-de-utilizador]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -568,7 +462,7 @@ msgid ""
msgstr ""
"É obrigatório que altere de imediato a sua senha (antiguidade da password)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -576,28 +470,115 @@ msgstr[0] "Aviso: a sua senha expira em %d dia."
msgstr[1] "Aviso: a sua senha expira em %d dias."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "A senha não foi alterada."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "erro de alocação de memória"
+
+#~ msgid "is a palindrome"
+#~ msgstr "é um palíndromo"
+
+#~ msgid "case changes only"
+#~ msgstr "apenas muda a capitulação"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "é muito semelhante à anterior"
+
+#~ msgid "is too simple"
+#~ msgstr "é demasiado simples"
+
+#~ msgid "is rotated"
+#~ msgstr "é rodada"
+
+#~ msgid "not enough character classes"
+#~ msgstr "não tem classes de caracteres suficientes"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "contém demasiados caracteres iguais consecutivos"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "contém demasiados caracteres iguais consecutivos"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "contém, de alguma forma, o nome do utilizador"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "MÃ SENHA: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Conta temporariamente bloqueada (faltam %ld segundos)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Erro de autenticação"
+
+#~ msgid "Service error"
+#~ msgstr "Erro de serviço"
+
+#~ msgid "Unknown user"
+#~ msgstr "Utilizador desconhecido"
+
+#~ msgid "Unknown error"
+#~ msgstr "Erro desconhecido"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Número errado fornecido a --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Opção não reconhecida %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file ficheiro-raiz] [--user nome-utilizador] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr ""
+#~ "%s: Não foi possível reiniciar todos os utilizadores para não zero\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u nome-de-utilizador] [--user nome-de-utilizador]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 63b46195..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 a8d2e975..454ec9c7 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -10,13 +10,13 @@
# Marcelo Barbosa <firemanxbr@fedoraproject.org>, 2013
# Taylon Silmer <taylonsilva@gmail.com>, 2008-2009
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# Dmitry V. Levin <ldv@altlinux.org>, 2020, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-03-15 23:38+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/"
"projects/linux-pam/master/pt_BR/>\n"
@@ -25,63 +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 3.11.3\n"
+"X-Generator: Weblate 4.7.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...O tempo está acabando...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Desculpe, seu tempo está aumentando!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "conversação errônea (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -221,135 +208,101 @@ msgstr "O aplicativo precisa chamar libpam novamente"
msgid "Unknown PAM error"
msgstr "Erro desconhecido no PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "é igual à antiga senha"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "Erro de alocação de memória"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "é um palíndromo"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "mudou apenas maiúsculas/minúsculas"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "é muito semelhante à antiga"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "é simples demais"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "foi invertida"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "classes de caractere insuficientes"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "contém muitos caracteres igual consecutivamente"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "contém muito longo de uma seqüência de caracteres monotônica"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "contém o nome de usuário em algum formulário"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Nenhuma senha informada."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...O tempo está acabando...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Senha inalterada."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Desculpe, seu tempo está aumentando!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "SENHA INCORRETA: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "conversação errônea (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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 ficheiro-raiz [--user nome-utilizador] [--reset[=n]] [--quiet]\n"
+"Uso: %s [--dir /caminho/para/diretório-tally] [--user nome-utilizador] [--"
+"reset]\n"
+
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
@@ -358,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:1088
+#: 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."
@@ -404,22 +358,22 @@ msgstr "Há mensagens antigas na pasta %s."
msgid "You have mail in folder %s."
msgstr "Há mensagens na pasta %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Criando o diretório '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Impossível criar e inicializar o diretório \"%s\"."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "A senha já foi usada."
@@ -449,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:629
+#: 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:645
+#: 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."
@@ -479,66 +433,7 @@ msgstr "falha em pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: falha na bifurcação: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Conta temporariamente bloqueada (restam %ld segundos)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Erro de autenticação"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Erro de serviço"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Usuário desconhecido"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Erro desconhecido"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Número insuficiente fornecido para --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Opção não reconhecida %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file ficheiro-raiz [--user nome-utilizador] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-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"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Falhas Último falha De\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f ficheiro-raiz] [--file ficheiro-raiz]\n"
-" [-u nome-utilizador] [--user nome-utilizador]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -558,7 +453,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Mude sua senha imediatamente (senha expirada)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -566,28 +461,114 @@ msgstr[0] "Aviso: sua senha irá expirar em %d dia."
msgstr[1] "Aviso: sua senha irá expirar em %d dias."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Senha inalterada."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "Erro de alocação de memória"
+
+#~ msgid "is a palindrome"
+#~ msgstr "é um palíndromo"
+
+#~ msgid "case changes only"
+#~ msgstr "mudou apenas maiúsculas/minúsculas"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "é muito semelhante à antiga"
+
+#~ msgid "is too simple"
+#~ msgstr "é simples demais"
+
+#~ msgid "is rotated"
+#~ msgstr "foi invertida"
+
+#~ msgid "not enough character classes"
+#~ msgstr "classes de caractere insuficientes"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "contém muitos caracteres igual consecutivamente"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "contém muito longo de uma seqüência de caracteres monotônica"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "contém o nome de usuário em algum formulário"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "SENHA INCORRETA: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Conta temporariamente bloqueada (restam %ld segundos)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Erro de autenticação"
+
+#~ msgid "Service error"
+#~ msgstr "Erro de serviço"
+
+#~ msgid "Unknown user"
+#~ msgstr "Usuário desconhecido"
+
+#~ msgid "Unknown error"
+#~ msgstr "Erro desconhecido"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Número insuficiente fornecido para --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Opção não reconhecida %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file ficheiro-raiz [--user nome-utilizador] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f ficheiro-raiz] [--file ficheiro-raiz]\n"
+#~ " [-u nome-utilizador] [--user nome-utilizador]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ro.gmo b/po/ro.gmo
index 5fb5dd9a..8fa14e9e 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index aba58519..c09c3179 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -4,584 +4,505 @@
#
# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2011-11-30 06:56-0500\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Romanian (http://www.transifex.com/projects/p/fedora/language/"
-"ro/)\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
-"2:1));\n"
-"X-Generator: Zanata 3.8.3\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+"X-Generator: Weblate 4.15.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: libpam/pam_get_authtok.c:40 modules/pam_exec/pam_exec.c:183
+#: modules/pam_userdb/pam_userdb.c:53
msgid "Password: "
-msgstr ""
+msgstr "Parola: "
-#: libpam/pam_get_authtok.c:41
+#: libpam/pam_get_authtok.c:42
#, c-format
msgid "Current %s password: "
-msgstr ""
+msgstr "Parolă curentă %s: "
-#: libpam/pam_get_authtok.c:42
+#: libpam/pam_get_authtok.c:43
msgid "Current password: "
-msgstr ""
+msgstr "Parolă curentă: "
-#: libpam/pam_get_authtok.c:44
+#: libpam/pam_get_authtok.c:45
#, c-format
msgid "New %s password: "
-msgstr ""
+msgstr "Parolă nouă %s: "
-#: libpam/pam_get_authtok.c:45
+#: libpam/pam_get_authtok.c:46
msgid "New password: "
-msgstr ""
+msgstr "Parolă nouă: "
-#: libpam/pam_get_authtok.c:47
+#: libpam/pam_get_authtok.c:48
#, c-format
msgid "Retype new %s password: "
-msgstr ""
+msgstr "Rescrieți parola nouă %s: "
-#: libpam/pam_get_authtok.c:48
+#: libpam/pam_get_authtok.c:49
msgid "Retype new password: "
-msgstr ""
+msgstr "Rescrieți parola nouă: "
-#: libpam/pam_get_authtok.c:49
+#: libpam/pam_get_authtok.c:50
msgid "Sorry, passwords do not match."
-msgstr ""
+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 ""
+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 ""
+msgstr "Schimbarea parolei a fost anulată."
#: libpam/pam_item.c:311
msgid "login:"
-msgstr ""
+msgstr "autentificare:"
#: libpam/pam_strerror.c:40
msgid "Success"
-msgstr ""
+msgstr "Succes"
#: libpam/pam_strerror.c:42
msgid "Critical error - immediate abort"
-msgstr ""
+msgstr "Eroare critică - abandonare imediată"
#: libpam/pam_strerror.c:44
msgid "Failed to load module"
-msgstr ""
+msgstr "Încărcarea modulului a eșuat"
#: libpam/pam_strerror.c:46
msgid "Symbol not found"
-msgstr ""
+msgstr "Simbolul nu a fost găsit"
#: libpam/pam_strerror.c:48
msgid "Error in service module"
-msgstr ""
+msgstr "Eroare în modulul de serviciu"
#: libpam/pam_strerror.c:50
msgid "System error"
-msgstr ""
+msgstr "Eroare de sistem"
#: libpam/pam_strerror.c:52
msgid "Memory buffer error"
-msgstr ""
+msgstr "Eroare în memoria tampon"
#: libpam/pam_strerror.c:54
msgid "Permission denied"
-msgstr ""
+msgstr "Acces refuzat"
#: libpam/pam_strerror.c:56
msgid "Authentication failure"
-msgstr ""
+msgstr "Autentificare eșuată"
#: libpam/pam_strerror.c:58
msgid "Insufficient credentials to access authentication data"
-msgstr ""
+msgstr "Acreditări insuficiente pentru a accesa datele de autentificare"
#: libpam/pam_strerror.c:60
msgid "Authentication service cannot retrieve authentication info"
msgstr ""
+"Serviciul de autentificare nu poate obține informațiile de autentificare"
#: libpam/pam_strerror.c:62
msgid "User not known to the underlying authentication module"
-msgstr ""
+msgstr "Utilizator necunoscut de modulul de autentificare subiacent"
#: libpam/pam_strerror.c:64
msgid "Have exhausted maximum number of retries for service"
-msgstr ""
+msgstr "S-a atins numărul maxim de încercări pentru serviciu"
#: libpam/pam_strerror.c:66
msgid "Authentication token is no longer valid; new one required"
msgstr ""
+"Autentificarea nu mai este valabilă; o nouă autentificare este necesară"
#: libpam/pam_strerror.c:68
msgid "User account has expired"
-msgstr ""
+msgstr "Contul utilizatorului a expirat"
#: libpam/pam_strerror.c:70
msgid "Cannot make/remove an entry for the specified session"
-msgstr ""
+msgstr "Nu se poate crea/șterge o intrare pentru sesiunea specificată"
#: libpam/pam_strerror.c:72
msgid "Authentication service cannot retrieve user credentials"
-msgstr ""
+msgstr "Serviciul de autentificare nu poate obține acreditările utilizatorului"
#: libpam/pam_strerror.c:74
msgid "User credentials expired"
-msgstr ""
+msgstr "Acreditările utilizatorului au expirat"
#: libpam/pam_strerror.c:76
msgid "Failure setting user credentials"
-msgstr ""
+msgstr "Eșec la definirea acreditărilor pentru utilizator"
#: libpam/pam_strerror.c:78
msgid "No module specific data is present"
-msgstr ""
+msgstr "Nu există date specifice pentru modul"
#: libpam/pam_strerror.c:80
msgid "Bad item passed to pam_*_item()"
-msgstr ""
+msgstr "A fost trimis un element incorect către pam_*_item()"
#: libpam/pam_strerror.c:82
msgid "Conversation error"
-msgstr ""
+msgstr "Eroare de conversație"
#: libpam/pam_strerror.c:84
msgid "Authentication token manipulation error"
-msgstr ""
+msgstr "Eroare la manipularea informației de autentificare"
#: libpam/pam_strerror.c:86
msgid "Authentication information cannot be recovered"
-msgstr ""
+msgstr "Informația de autentificare nu poate fi recuperată"
#: libpam/pam_strerror.c:88
msgid "Authentication token lock busy"
-msgstr ""
+msgstr "Blocarea informației de autentificare este rezervată"
#: libpam/pam_strerror.c:90
msgid "Authentication token aging disabled"
-msgstr ""
+msgstr "Perioada de validitate a informației de autentificare este dezactivată"
#: libpam/pam_strerror.c:92
msgid "Failed preliminary check by password service"
-msgstr ""
+msgstr "Eroare la verificarea preliminară făcută de către serviciul de parole"
#: libpam/pam_strerror.c:94
msgid "The return value should be ignored by PAM dispatch"
-msgstr ""
+msgstr "Valoarea de returnare trebuie să fie ignorată de către expeditorul PAM"
#: libpam/pam_strerror.c:96
msgid "Module is unknown"
-msgstr ""
+msgstr "Modul necunoscut"
#: libpam/pam_strerror.c:98
msgid "Authentication token expired"
-msgstr ""
+msgstr "Informația de autentificare a expirat"
#: libpam/pam_strerror.c:100
msgid "Conversation is waiting for event"
-msgstr ""
+msgstr "Conversația așteaptă după un eveniment"
#: libpam/pam_strerror.c:102
msgid "Application needs to call libpam again"
-msgstr ""
+msgstr "Aplicația trebuie să cheme din nou libpam"
#: libpam/pam_strerror.c:105
msgid "Unknown PAM error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
+msgstr "Eroare PAM necunoscută"
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr ""
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Timpul se scurge...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr ""
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Timpul a expirat!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr ""
+msgid "erroneous conversation (%d)\n"
+msgstr "conversație eronată (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
-msgstr ""
+msgstr "%s a eșuat: codul de ieșire %d"
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
-msgstr ""
+msgstr "%s a eșuat: semnalul captat %d%s"
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
-msgstr ""
+msgstr "%s a eșuat: stare necunoscută 0x%x"
-#: modules/pam_faillock/main.c:104
+#: 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 /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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: modules/pam_faillock/pam_faillock.c:404
#, c-format
msgid "The account is locked due to %u failed logins."
-msgstr ""
+msgstr "Contul este blocat din cauza a %u autentificări eșuate."
+
+#: 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] "(un minut rămas până la deblocare)"
+msgstr[1] "(%d minute rămase până la deblocare)"
+msgstr[2] "(%d de minute rămase până la deblocare)"
-#: modules/pam_faillock/pam_faillock.c:650
+#. TRANSLATORS: only used if dngettext is not supported.
+#: modules/pam_faillock/pam_faillock.c:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
+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 ""
+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 ""
+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 ""
+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 ""
+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 ""
+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 avut loc %d încercare nereușită de autentificare de la ultima "
+"autentificare reușită."
msgstr[1] ""
+"Au avut loc %d încercări nereușite de autentificare de la ultima "
+"autentificare reușită."
msgstr[2] ""
+"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 avut loc %d încercări nereușite de autentificare de la ultima "
+"autentificare reușită."
-#: modules/pam_limits/pam_limits.c:1088
+#: modules/pam_limits/pam_limits.c:1269
#, c-format
msgid "There were too many logins for '%s'."
-msgstr ""
+msgstr "Sunt prea multe autentificări pentru „%sâ€."
#: modules/pam_mail/pam_mail.c:289
-msgid "You have no mail."
-msgstr ""
+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 ""
+msgstr "Aveți un mesaj nou."
#: modules/pam_mail/pam_mail.c:295
msgid "You have old mail."
-msgstr ""
+msgstr "Aveți un mesaj vechi."
#: modules/pam_mail/pam_mail.c:299
msgid "You have mail."
-msgstr ""
+msgstr "Aveți un mesaj."
#: modules/pam_mail/pam_mail.c:306
#, c-format
msgid "You have no mail in folder %s."
-msgstr ""
+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 ""
+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 ""
+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 ""
+msgstr "Aveți un mesaj în directorul %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr ""
+msgstr "Se creează directorul „%sâ€."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
-msgstr ""
+msgstr "Nu se poate crea È™i iniÈ›ializa directorul „%sâ€."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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 "Parola a fost deja utilizată. Alegeți alta."
-#: modules/pam_pwhistory/pam_pwhistory.c:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
-msgstr ""
+msgstr "Parola a fost deja utilizată."
#: modules/pam_selinux/pam_selinux.c:172
#, c-format
msgid "The default security context is %s."
-msgstr ""
+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 ""
+msgstr "Vreți să introduceți un rol sau nivel diferit?"
#: modules/pam_selinux/pam_selinux.c:189
msgid "role:"
-msgstr ""
+msgstr "rol:"
#: modules/pam_selinux/pam_selinux.c:193
#, c-format
msgid "There is no default type for role %s."
-msgstr ""
+msgstr "Nu există un tip implicit pentru rolul %s."
#: modules/pam_selinux/pam_selinux.c:225
msgid "level:"
-msgstr ""
+msgstr "nivel:"
#: modules/pam_selinux/pam_selinux.c:259
msgid "This is not a valid security context."
-msgstr ""
+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 ""
+msgstr "Nu s-a putut obține un context valid pentru %s."
-#: modules/pam_selinux/pam_selinux.c:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
-msgstr ""
+msgstr "Contextul de securitate %s a fost asignat."
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
-msgstr ""
+msgstr "Cheia pentru crearea contextului %s a fost asignată."
#: modules/pam_selinux/pam_selinux_check.c:99
#, c-format
msgid "failed to initialize PAM\n"
-msgstr ""
+msgstr "eroare la inițializarea PAM\n"
#: modules/pam_selinux/pam_selinux_check.c:105
#, c-format
msgid "failed to pam_set_item()\n"
-msgstr ""
+msgstr "eroare la pam_set_item()\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr ""
+msgstr "autentificare: eroare la bifurcare %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
-msgstr ""
+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 ""
+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 ""
+"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 ""
+msgstr "Vi se cere să vă schimbați parola imediat (parola a expirat)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] "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:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
msgid "Warning: your password will expire in %d days."
-msgstr ""
+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 ""
+msgstr "Parola pentru NIS nu poate fi schimbată."
-#: modules/pam_unix/pam_unix_passwd.c:581
-#, fuzzy
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Parola nu a fost schimbată."
+
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
msgstr "Trebuie să alegeți o parolă mai scurtă."
-#: 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 "Trebuie să alegeți o parolă mai scurtă."
+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 ""
+msgstr "Se schimbă parola pentru %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 "Trebuie să alegeți o parolă mai scurtă."
+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 4449b0cc..aacfa1b2 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index cb0abb4f..9812e7c7 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,13 +8,13 @@
# Yulia <yulia.poyarkova@redhat.com>, 2007,2009
# Yulia <yulia.poyarkova@redhat.com>, 2013
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# Dmitry V. Levin <ldv@altlinux.org>, 2020.
+# Dmitry V. Levin <ldv@altlinux.org>, 2020, 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-03 12:21+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-"
"pam/master/ru/>\n"
@@ -24,63 +24,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.0.3\n"
+"X-Generator: Weblate 4.7.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Ð’Ñ€ÐµÐ¼Ñ Ð¸Ñтекает...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Извините, ваше Ð²Ñ€ÐµÐ¼Ñ Ð¸Ñтекло!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "ошибочный диалог (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "Изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½ÐµÐ½Ð¾."
@@ -222,138 +209,104 @@ msgstr "Приложение должно повторно вызвать libpam
msgid "Unknown PAM error"
msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "Ñовпадает Ñо Ñтарым"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "ÑвлÑетÑÑ Ð¿Ð°Ð»Ð¸Ð½Ð´Ñ€Ð¾Ð¼Ð¾Ð¼"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в региÑтре"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "Ñлишком похож на Ñтарый"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "Ñлишком проÑтой"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "ÑвлÑетÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð¼ чередованиÑ"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "Ñлишком мало Ñимволов различных типов"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "Ñодержит Ñлишком длинную поÑледовательноÑть одинаковых Ñимволов"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "Ñодержит Ñлишком много повторÑющихÑÑ Ñимволов"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "Ñодержит Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Пароль не указан."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Ð’Ñ€ÐµÐ¼Ñ Ð¸Ñтекает...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Пароль не изменен."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Извините, ваше Ð²Ñ€ÐµÐ¼Ñ Ð¸Ñтекло!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ÐЕУДÐЧÐЫЙ ПÐРОЛЬ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "ошибочный диалог (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "Сбой %s. Код выхода: %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 минуты до разблокировки)"
+msgstr[2] "(оÑталоÑÑŒ %d минут до разблокировки)"
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -363,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:1088
+#: 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
@@ -409,22 +362,22 @@ msgstr "ЕÑть ÑÑ‚Ð°Ñ€Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° в папке %s."
msgid "You have mail in folder %s."
msgstr "ЕÑть почта в папке %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Создание каталога %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Ðе удалоÑÑŒ Ñоздать и инициализировать каталог %s."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Этот пароль уже иÑпользовалÑÑ."
@@ -454,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "КонтекÑÑ‚ безопаÑноÑти %s назначен."
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "КонтекÑÑ‚ %s, иÑпользуемый при Ñоздании ключей, назначен."
@@ -484,68 +437,7 @@ msgstr "не удалоÑÑŒ выполнить pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "региÑтрациÑ: Ñбой при Ñоздании нового процеÑÑа: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ временно заблокирована (оÑталоÑÑŒ %ld Ñек.)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Ошибка при проверке подлинноÑти"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Ошибка Ñлужбы"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "ÐеизвеÑтный пользователь"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: указано неверное чиÑло Ð´Ð»Ñ --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: неопознанный параметр %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file имÑ_корневого_файла] [--user имÑ_пользователÑ] [--reset[=n]] [--"
-"quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-"%s: не удаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ ÑÐ±Ñ€Ð¾Ñ Ð²Ñех пользователей в ненулевое значение\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ Сбои ПоÑледний Ñбой С\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f имÑ_корневого_файла] [--file имÑ_корневого_файла]\n"
-" [-u имÑ_пользователÑ] [--user имÑ_пользователÑ]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "ДоÑтуп предоÑтавлен (поÑледнее обращение было %ld Ñек. назад)."
@@ -567,7 +459,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Вам необходимо немедленно Ñменить пароль (пароль уÑтарел)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -576,28 +468,112 @@ msgstr[1] "Предупреждение: Ñрок дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ
msgstr[2] "Предупреждение: Ñрок дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸Ñтекает через %d дней."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "Пароль не указан."
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "Пароль не изменен."
+
+#: 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 "is the same as the old one"
+#~ msgstr "Ñовпадает Ñо Ñтарым"
+
+#~ msgid "memory allocation error"
+#~ msgstr "ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти"
+
+#~ msgid "is a palindrome"
+#~ msgstr "ÑвлÑетÑÑ Ð¿Ð°Ð»Ð¸Ð½Ð´Ñ€Ð¾Ð¼Ð¾Ð¼"
+
+#~ msgid "case changes only"
+#~ msgstr "Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в региÑтре"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "Ñлишком похож на Ñтарый"
+
+#~ msgid "is too simple"
+#~ msgstr "Ñлишком проÑтой"
+
+#~ msgid "is rotated"
+#~ msgstr "ÑвлÑетÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð¼ чередованиÑ"
+
+#~ msgid "not enough character classes"
+#~ msgstr "Ñлишком мало Ñимволов различных типов"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "Ñодержит Ñлишком длинную поÑледовательноÑть одинаковых Ñимволов"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "Ñодержит Ñлишком много повторÑющихÑÑ Ñимволов"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "Ñодержит Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ÐЕУДÐЧÐЫЙ ПÐРОЛЬ: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ временно заблокирована (оÑталоÑÑŒ %ld Ñек.)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Ошибка при проверке подлинноÑти"
+
+#~ msgid "Service error"
+#~ msgstr "Ошибка Ñлужбы"
+
+#~ msgid "Unknown user"
+#~ msgstr "ÐеизвеÑтный пользователь"
+
+#~ msgid "Unknown error"
+#~ msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: указано неверное чиÑло Ð´Ð»Ñ --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: неопознанный параметр %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file имÑ_корневого_файла] [--user имÑ_пользователÑ] [--reset[=n]] "
+#~ "[--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr ""
+#~ "%s: не удаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ ÑÐ±Ñ€Ð¾Ñ Ð²Ñех пользователей в ненулевое значение\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f имÑ_корневого_файла] [--file имÑ_корневого_файла]\n"
+#~ " [-u имÑ_пользователÑ] [--user имÑ_пользователÑ]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/si.gmo b/po/si.gmo
index ecdad1b0..121f231d 100644
--- a/po/si.gmo
+++ b/po/si.gmo
Binary files differ
diff --git a/po/si.po b/po/si.po
index c3c1d64d..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: 2020-06-08 10:18+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,62 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 3.11.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...à¶šà·à¶½ සීමà·à·€ ඉක්මව෠ඇත...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...සමà·à·€à¶±à·Šà¶±, ොබගේ à¶šà·à¶½à¶º ඉක්ම විය!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "à·€à·à¶»à¶¯à·’ සගත පරිවර්තනයක්(%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "රහස්පදය දà·à¶±à¶§à¶¸à¶­à·Š à¶·à·à·€à·’ත෠වේ. වෙනත් à¶‘à¶šà¶šà·Š à¶­à·à¶»à·à¶œà¶±à·Šà¶±."
@@ -218,137 +205,100 @@ msgstr "යෙදුමට à¶´à·à¶»à¶«à·’ libpam ඇමතීමට à¶…à·€à·à·
msgid "Unknown PAM error"
msgstr "නොදන්න෠PAM දà·à·‚ය"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "එය à¶´à·à¶»à¶«à·’ රහස්පදය හ෠සමà·à¶± වේ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "එය à¶´à·à¶½à·’න්ඩ්â€à¶»à·œà¶¸à¶ºà¶šà·’"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "à¶šà·à¶´à·’ටල් සිම්පල් වෙනස්කම් පමණි"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "එය à¶´à·à¶»à¶«à·’ රහස්පදය බොගොදුරට සමà·à¶± වේ"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "එය සරළ à·€à·à¶©à·’ වේ"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "à¶·à·Šâ€à¶»à¶¸à¶«à¶º වි ඇත"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "රහස්පදය සපය෠නà·à¶­"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...à¶šà·à¶½ සීමà·à·€ ඉක්මව෠ඇත...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS රහස්පදය වෙනස් à¶šà·… නොහà·à¶š."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...සමà·à·€à¶±à·Šà¶±, ොබගේ à¶šà·à¶½à¶º ඉක්ම විය!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "à·€à·à¶»à¶¯à·’ සගත පරිවර්තනයක්(%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s අසමත් විය: ඉවතිවීමෙ කේතය %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -357,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:1088
+#: 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
@@ -404,22 +354,22 @@ msgstr "%s බහලුම තුළ ඔබට පරණ à¶­à·à¶´à·à¶½à·Š ඇà
msgid "You have mail in folder %s."
msgstr "%s බහලුම තුළ ඔබට à¶­à·à¶´à·à¶½à·Š ඇත."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "රහස්පදය දà·à¶±à¶§à¶¸à¶­à·Š à¶·à·à·€à·’ත෠වේ. වෙනත් à¶‘à¶šà¶šà·Š à¶­à·à¶»à·à¶œà¶±à·Šà¶±."
@@ -451,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "%s ආරක්â€à·‚à¶š à¶´à·Šâ€à¶»à¶šà¶»à¶«à¶º යොදව෠ඇත"
@@ -481,63 +431,7 @@ msgstr "pam_set_item() අසමත් විය\n"
msgid "login: failure forking: %m"
msgstr "පිවිසුම: ෆොර්කින් බිදවà·à¶§à·“මක්: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "තහවුරු කරගà·à¶±à·“මේ දà·à·‚ය"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "සේව෠දà·à·‚ය"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "නොදන්න෠පරිà·à·“ලකයෙක්"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "නොදන්න෠දà·à·‚යක්"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: à·ƒà·à·€à¶¯à·Šâ€à¶º අංකයක් ලබ෠දී ඇත --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: %s හදුන෠නොගත් විකල්පයකි\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: à·à·”න්â€à¶º නොවන අගයට සියළුම පරිà·à·“ලකයින් à¶±à·à·€à¶­ à·ƒà·à¶šà·ƒà·’ය නොහà·à¶š\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -560,7 +454,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "ඔබගේ රහස්පදය à·„à·à¶šà·’ ඉක්මනින් වෙනස් à¶šà·… යුතුව ඇත (රහස්පදය à¶´à·à¶»à¶«à·’යි)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -568,30 +462,91 @@ msgstr[0] "අවවà·à¶¯à¶ºà·’: ඔබගේ රහස්පදය දින %
msgstr[1] "අවවà·à¶¯à¶ºà·’: ඔබගේ රහස්පදය දින %d කින් කල්ඉකුත් වේ"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "රහස්පදය සපය෠නà·à¶­"
+
+#: 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: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 "එය à¶´à·à¶»à¶«à·’ රහස්පදය හ෠සමà·à¶± වේ"
+
+#~ msgid "is a palindrome"
+#~ msgstr "එය à¶´à·à¶½à·’න්ඩ්â€à¶»à·œà¶¸à¶ºà¶šà·’"
+
+#~ msgid "case changes only"
+#~ msgstr "à¶šà·à¶´à·’ටල් සිම්පල් වෙනස්කම් පමණි"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "එය à¶´à·à¶»à¶«à·’ රහස්පදය බොගොදුරට සමà·à¶± වේ"
+
+#~ msgid "is too simple"
+#~ msgstr "එය සරළ à·€à·à¶©à·’ වේ"
+
+#~ msgid "is rotated"
+#~ msgstr "à¶·à·Šâ€à¶»à¶¸à¶«à¶º වි ඇත"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "BAD PASSWORD: %s"
+
+#~ msgid "Authentication error"
+#~ msgstr "තහවුරු කරගà·à¶±à·“මේ දà·à·‚ය"
+
+#~ msgid "Service error"
+#~ msgstr "සේව෠දà·à·‚ය"
+
+#~ msgid "Unknown user"
+#~ msgstr "නොදන්න෠පරිà·à·“ලකයෙක්"
+
+#~ msgid "Unknown error"
+#~ msgstr "නොදන්න෠දà·à·‚යක්"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: à·ƒà·à·€à¶¯à·Šâ€à¶º අංකයක් ලබ෠දී ඇත --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: %s හදුන෠නොගත් විකල්පයකි\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: à·à·”න්â€à¶º නොවන අගයට සියළුම පරිà·à·“ලකයින් à¶±à·à·€à¶­ à·ƒà·à¶šà·ƒà·’ය නොහà·à¶š\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index f406d9e7..0d79190d 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 1ef32b4f..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: 2020-06-08 10:18+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: 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,63 +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.8\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...OdpoÄet bol spustený...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...PrepáÄte, váš Äas vyprÅ¡al!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "chybná konverzácia (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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á."
@@ -220,136 +207,102 @@ msgstr "Aplikácia musí znovu zavolať libpam"
msgid "Unknown PAM error"
msgstr "Neznáme chyba PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "je rovnaké ako predchádzajúce"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "chyba pridelenia pamäte"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "je palindróm"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "len zmena veľkosti"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "je príliš podobné predchádzajúcemu"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "je príliš jednoduché"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "je otoÄené"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "nedostatok rôznych druhov znakov"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "obsahuje príliš veľa rovnakých znakov za sebou"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "obsahuje príliš jednotvárnu postupnosť znakov"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "obsahuje v nejakej forme používateľské meno"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Heslo nezadané."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...OdpoÄet bol spustený...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Heslo nebolo zmenené."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...PrepáÄte, váš Äas vyprÅ¡al!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "NESPRÃVNE HESLO: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "chybná konverzácia (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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 meno_suboru] [--user pouzivatelske_meno] [--reset[=n]] [--"
-"quiet]\n"
+"Použitie: %s [--dir /cesta/k/zhodujú-directory] [--user pouzivatelske_meno] "
+"[--reset]\n"
+
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] "(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:422
#, c-format
msgid "(%d minutes left to unlock)"
-msgstr ""
+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 ""
@@ -365,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:1088
+#: 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."
@@ -413,22 +367,22 @@ msgstr "Máte starú poÅ¡tu v prieÄinku %s."
msgid "You have mail in folder %s."
msgstr "Máte poÅ¡tu v prieÄinku %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Vytváranie prieÄinka '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Nedá sa vytvoriÅ¥ a inicializovaÅ¥ prieÄinok '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Heslo už bolo použité."
@@ -458,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:629
+#: 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:645
+#: 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ý."
@@ -488,67 +442,7 @@ msgstr "chyba pri pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "login: chyba forku: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "ÚÄet doÄasne uzamknutý (zostáva %ld sekúnd)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Chyba overenia"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Chyba služby"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Neznámy používateľ"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Neznáma chyba"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Zadané zlé Äíslo pre --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Neznáma voľba %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file meno_suboru] [--user pouzivatelske_meno] [--reset[=n]] [--"
-"quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: Nedá sa resetovať všetkých používateľov nenulovo\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Zlyhaní Ostatné zlyhanie Z\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f meno_suboru] [--file meno_suboru]\n"
-" [-u pouzivatelske_meno] [--user pouzivatelske_meno]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -569,7 +463,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Je vyžadovaná okamžitá zmena vašeho hesla (heslo vypršalo)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -578,28 +472,114 @@ msgstr[1] "Upozornenie: vaše heslo vyprší za %d dni."
msgstr[2] "Upozornenie: vaše heslo vyprší za %d dní."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "Heslo nezadané."
+
+#: 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: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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "chyba pridelenia pamäte"
+
+#~ msgid "is a palindrome"
+#~ msgstr "je palindróm"
+
+#~ msgid "case changes only"
+#~ msgstr "len zmena veľkosti"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "je príliš podobné predchádzajúcemu"
+
+#~ msgid "is too simple"
+#~ msgstr "je príliš jednoduché"
+
+#~ msgid "is rotated"
+#~ msgstr "je otoÄené"
+
+#~ msgid "not enough character classes"
+#~ msgstr "nedostatok rôznych druhov znakov"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "obsahuje príliš veľa rovnakých znakov za sebou"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "obsahuje príliš jednotvárnu postupnosť znakov"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "obsahuje v nejakej forme používateľské meno"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "NESPRÃVNE HESLO: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "ÚÄet doÄasne uzamknutý (zostáva %ld sekúnd)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Chyba overenia"
+
+#~ msgid "Service error"
+#~ msgstr "Chyba služby"
+
+#~ msgid "Unknown user"
+#~ msgstr "Neznámy používateľ"
+
+#~ msgid "Unknown error"
+#~ msgstr "Neznáma chyba"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Zadané zlé Äíslo pre --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Neznáma voľba %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file meno_suboru] [--user pouzivatelske_meno] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f meno_suboru] [--file meno_suboru]\n"
+#~ " [-u pouzivatelske_meno] [--user pouzivatelske_meno]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\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 4c91e7ae..8d338145 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -4,78 +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: 2020-06-08 10:18+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_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -97,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"
@@ -117,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"
@@ -141,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"
@@ -169,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"
@@ -197,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"
@@ -213,136 +201,103 @@ msgstr ""
#: libpam/pam_strerror.c:105
msgid "Unknown PAM error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
+msgstr "Neznana napaka PAM"
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr ""
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "... ÄŒas se izteka ...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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[3] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -353,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:1088
+#: 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
@@ -399,22 +354,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -444,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -474,62 +429,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -549,7 +449,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -559,31 +459,37 @@ msgstr[2] ""
msgstr[3] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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 "Gesla NIS ni bilo možno spremeniti."
+
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
msgstr ""
-#: modules/pam_unix/pam_unix_passwd.c:581
-#, fuzzy
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 5ce8c4e1..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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.gmo b/po/sr.gmo
index ad13c91c..3ee7a027 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 8e6374ba..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: 2020-06-08 10:18+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,62 +26,49 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...ИÑтиче време...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Извините, време вам је иÑтекло!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "разговор пун грешака (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "Промена лозинке је прекинута."
@@ -222,138 +209,102 @@ msgstr "Програм мора поново да позове libpam"
msgid "Unknown PAM error"
msgstr "Ðепозната PAM грешка"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "иÑта је као и Ñтара"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "грешка у резервиÑању меморије"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "палиндром је"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "Ñамо промене величине Ñлова"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "Ñувише је Ñлична претходној"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "Ñувише је једноÑтавна"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "изокренута је"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "нема довољно клаÑа знакова"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "Ñадржи превише иÑтих знакова узаÑтопно"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "Ñадржи предугачак низ монотоних карактера"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "Ñадржи кориÑничко име у неком облику"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Ðије понуђена лозинка"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...ИÑтиче време...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS лозинка не може бити промењена."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Извините, време вам је иÑтекло!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ЛОШРЛОЗИÐКÐ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "разговор пун грешака (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s неуÑпех: излазни код %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -363,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:1088
+#: 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
@@ -410,22 +361,22 @@ msgstr "Имате Ñтару пошту у фаÑцикли %s."
msgid "You have mail in folder %s."
msgstr "Имате пошту у фаÑцикли %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Правим директоријум „%s“."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Ðе могу да направим директоријум „%s“."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Шифра је већ била у употреби."
@@ -456,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "КонтекÑÑ‚ прављења кључа %s је додељен"
@@ -486,67 +437,7 @@ msgstr "неуÑпешно извршавање функције pam_set_item()\
msgid "login: failure forking: %m"
msgstr "пријава: грешка при гранању: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Ðалог је привремено закључан (оÑтало је %ld Ñекунди)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Грешка при аутентификацији"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Грешка уÑлуге"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Ðепознат кориÑник"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Ðепозната грешка"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: задат је лош број за --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: није препозната опција %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file коренÑки-називдатотеке] [--user кориÑничкоиме] [--reset[=n]] [--"
-"quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: не могу да повратим Ñве кориÑнике на број различит од нуле\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Пријава ÐеуÑпеÑи ПоÑледњи неуÑпех Са\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [- коренÑки-називдатотеке] [--file коренÑки-називдатотеке]\n"
-" [-u кориÑничкоиме] [--user кориÑничкоиме]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "ПриÑтуп је одобрен (поÑледњи приÑтуп је био пре %ld Ñекунди)."
@@ -569,7 +460,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Морате одмах да промените вашу лозинку (заÑтарела је)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -578,30 +469,120 @@ msgstr[1] "Упозорење: ваша лозинка ће иÑтећи кроÐ
msgstr[2] "Упозорење: ваша лозинка ће иÑтећи кроз %d дана"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "Ðије понуђена лозинка"
+
+#: 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: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 "иÑта је као и Ñтара"
+
+#~ msgid "memory allocation error"
+#~ msgstr "грешка у резервиÑању меморије"
+
+#~ msgid "is a palindrome"
+#~ msgstr "палиндром је"
+
+#~ msgid "case changes only"
+#~ msgstr "Ñамо промене величине Ñлова"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "Ñувише је Ñлична претходној"
+
+#~ msgid "is too simple"
+#~ msgstr "Ñувише је једноÑтавна"
+
+#~ msgid "is rotated"
+#~ msgstr "изокренута је"
+
+#~ msgid "not enough character classes"
+#~ msgstr "нема довољно клаÑа знакова"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "Ñадржи превише иÑтих знакова узаÑтопно"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "Ñадржи предугачак низ монотоних карактера"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "Ñадржи кориÑничко име у неком облику"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ЛОШРЛОЗИÐКÐ: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Ðалог је привремено закључан (оÑтало је %ld Ñекунди)"
+
+#~ msgid "Authentication error"
+#~ msgstr "Грешка при аутентификацији"
+
+#~ msgid "Service error"
+#~ msgstr "Грешка уÑлуге"
+
+#~ msgid "Unknown user"
+#~ msgstr "Ðепознат кориÑник"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ðепозната грешка"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: задат је лош број за --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: није препозната опција %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file коренÑки-називдатотеке] [--user кориÑничкоиме] [--reset[=n]] "
+#~ "[--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: не могу да повратим Ñве кориÑнике на број различит од нуле\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [- коренÑки-називдатотеке] [--file коренÑки-називдатотеке]\n"
+#~ " [-u кориÑничкоиме] [--user кориÑничкоиме]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/sr@latin.gmo b/po/sr@latin.gmo
index ce08261d..1a05b4d3 100644
--- a/po/sr@latin.gmo
+++ b/po/sr@latin.gmo
Binary files differ
diff --git a/po/sr@latin.po b/po/sr@latin.po
index ec426db1..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: 2020-06-08 10:18+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,62 +24,49 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...IstiÄe vreme...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Izvinite, vreme vam je isteklo!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "razgovor pun grešaka (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -220,139 +207,102 @@ msgstr "Program mora ponovo da pozove libpam"
msgid "Unknown PAM error"
msgstr "Nepoznata PAM greška"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ista je kao i stara"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "palindrom je"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "samo promene veliÄine slova"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "suviÅ¡e je sliÄna prethodnoj"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "suviše je jednostavna"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "izokrenuta je"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "nema dovoljno klasa znakova"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "sadrži previše istih znakova uzastopno"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-#, fuzzy
-msgid "contains too long of a monotonic character sequence"
-msgstr "sadrži previše istih znakova uzastopno"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "sadrži korisniÄko ime u nekom obliku"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Nije ponuđena lozinka"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...IstiÄe vreme...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS lozinka ne može biti promenjena."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Izvinite, vreme vam je isteklo!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "LOÅ A LOZINKA: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "razgovor pun grešaka (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -362,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:1088
+#: 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
@@ -409,22 +359,22 @@ msgstr "Imate staru poštu u fascikli %s."
msgid "You have mail in folder %s."
msgstr "Imate poštu u fascikli %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Pravim direktorijum „%s“."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Ne mogu da napravim direktorijum „%s“."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "Lozinka je već u upotrebi. Izaberite drugu."
@@ -456,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:629
+#: 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:645
+#: 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"
@@ -486,67 +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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Nalog je privremeno zakljuÄan (ostalo je %ld sekundi)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Greška pri autentifikaciji"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Greška usluge"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Nepoznat korisnik"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Nepoznata greška"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: zadat je loš broj za --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: nije prepoznata opcija %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file korenski-nazivdatoteke] [--user korisniÄkoime] [--reset[=n]] [--"
-"quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-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"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Prijava Neuspesi Poslednji neuspeh Sa\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [- korenski-nazivdatoteke] [--file korenski-nazivdatoteke]\n"
-" [-u korisniÄkoime] [--user korisniÄkoime]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -569,7 +459,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Morate odmah da promenite vašu lozinku (zastarela je)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -578,31 +468,119 @@ msgstr[1] "Upozorenje: vaša lozinka će isteći kroz %d dana"
msgstr[2] "Upozorenje: vaša lozinka će isteći kroz %d dana"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: 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:555
+#, fuzzy
+msgid "The password has not been changed."
+msgstr "NIS lozinka ne može biti promenjena."
+
+#: 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"
+
+#~ msgid "is a palindrome"
+#~ msgstr "palindrom je"
+
+#~ msgid "case changes only"
+#~ msgstr "samo promene veliÄine slova"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "suviÅ¡e je sliÄna prethodnoj"
+
+#~ msgid "is too simple"
+#~ msgstr "suviše je jednostavna"
+
+#~ msgid "is rotated"
+#~ msgstr "izokrenuta je"
+
+#~ msgid "not enough character classes"
+#~ msgstr "nema dovoljno klasa znakova"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "sadrži previše istih znakova uzastopno"
+
+#, fuzzy
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "sadrži previše istih znakova uzastopno"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "sadrži korisniÄko ime u nekom obliku"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "LOÅ A LOZINKA: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Nalog je privremeno zakljuÄan (ostalo je %ld sekundi)"
+
+#~ msgid "Authentication error"
+#~ msgstr "Greška pri autentifikaciji"
+
+#~ msgid "Service error"
+#~ msgstr "Greška usluge"
+
+#~ msgid "Unknown user"
+#~ msgstr "Nepoznat korisnik"
+
+#~ msgid "Unknown error"
+#~ msgstr "Nepoznata greška"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: zadat je loš broj za --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: nije prepoznata opcija %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file korenski-nazivdatoteke] [--user korisniÄkoime] [--reset[=n]] "
+#~ "[--quiet]\n"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [- korenski-nazivdatoteke] [--file korenski-nazivdatoteke]\n"
+#~ " [-u korisniÄkoime] [--user korisniÄkoime]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index 47f6a7f1..25a52d01 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 50c9fde1..73755c91 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,13 +8,15 @@
# Göran Uddeborg <goeran@uddeborg.se>, 2012-2013
# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-21 16:51+0000\n"
-"Last-Translator: Andreas Henriksson <andreas+fedora@fatal.se>\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"
@@ -22,63 +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.0.4\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Tiden håller på att ta slut...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Tyvärr, din tid är ute!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "felaktig konversation (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -218,136 +207,101 @@ msgstr "Programmet behöver anropa libpam igen"
msgid "Unknown PAM error"
msgstr "Okänt PAM-fel"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "är samma som det gamla"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "minnesallokeringsfel"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "är ett palindrom"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "endast ändringar i gemener och versaler"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "är för likt det gamla"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "är för enkelt"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "är roterat"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "för få teckenklasser"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "innehåller för många tecken av samma sort i följd"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "innehåller en för lång monoton teckensekvens"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "innehåller användarnamnet i någon form"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Inget lösenord angavs."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Tiden håller på att ta slut...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Lösenordet har inte ändrats."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Tyvärr, din tid är ute!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "DÅLIGT LÖSENORD: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "felaktig konversation (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 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: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 ""
@@ -360,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:1088
+#: 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."
@@ -408,22 +362,22 @@ msgstr "Du har gamla brev i katalogen %s."
msgid "You have mail in folder %s."
msgstr "Du har brev i katalogen %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Skapar katalogen '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Kunde inte skapa och initiera katalogen '%s'."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Lösenordet har redan använts."
@@ -453,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Nyckelskapandekontext %s tilldelad."
@@ -483,66 +437,7 @@ msgstr "pam_set_item() misslyckades\n"
msgid "login: failure forking: %m"
msgstr "inloggning: fel vid grening: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Kontot är temporärt låst (%ld sekunder kvar)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Autentiseringsfel"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Tjänstefel"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Okänd användare"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Okänt fel"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Felaktigt nummer till --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Okänd flagga %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file absolut-filnamn] [--user användarnamn] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-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"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Inloggning Misslyck Senaste fel Från\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f absolut-filnamn] [--file absolut-filnamn]\n"
-" [-u användarnamn] [--user användarnamn]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -562,7 +457,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Du måste ändra ditt lösenord omedelbart (lösenord för gammalt)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -570,28 +465,114 @@ msgstr[0] "Varning: ditt lösenord går ut om %d dag."
msgstr[1] "Varning: ditt lösenord går ut om %d dagar."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+msgid "The password has not been changed."
+msgstr "Lösenordet har inte ändrats."
+
+#: 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"
+
+#~ msgid "memory allocation error"
+#~ msgstr "minnesallokeringsfel"
+
+#~ msgid "is a palindrome"
+#~ msgstr "är ett palindrom"
+
+#~ msgid "case changes only"
+#~ msgstr "endast ändringar i gemener och versaler"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "är för likt det gamla"
+
+#~ msgid "is too simple"
+#~ msgstr "är för enkelt"
+
+#~ msgid "is rotated"
+#~ msgstr "är roterat"
+
+#~ msgid "not enough character classes"
+#~ msgstr "för få teckenklasser"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "innehåller för många tecken av samma sort i följd"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "innehåller en för lång monoton teckensekvens"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "innehåller användarnamnet i någon form"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "DÅLIGT LÖSENORD: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Kontot är temporärt låst (%ld sekunder kvar)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Autentiseringsfel"
+
+#~ msgid "Service error"
+#~ msgstr "Tjänstefel"
+
+#~ msgid "Unknown user"
+#~ msgstr "Okänd användare"
+
+#~ msgid "Unknown error"
+#~ msgstr "Okänt fel"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Felaktigt nummer till --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Okänd flagga %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file absolut-filnamn] [--user användarnamn] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f absolut-filnamn] [--file absolut-filnamn]\n"
+#~ " [-u användarnamn] [--user användarnamn]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ta.gmo b/po/ta.gmo
index dafbe71b..163bd992 100644
--- a/po/ta.gmo
+++ b/po/ta.gmo
Binary files differ
diff --git a/po/ta.po b/po/ta.po
index 519a42da..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: 2020-06-08 10:18+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,62 +25,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.11.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "... நேரம௠போய௠கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•ிறதà¯...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "... உஙà¯à®•ள௠நேரம௠மà¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "பிழையான உரையாடல௠(%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "கடவà¯à®šà¯à®šà¯Šà®²à¯ மாறà¯à®±à®®à¯ கைவிடபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
@@ -221,137 +208,100 @@ msgstr "பயனà¯à®ªà®¾à®Ÿà¯ libpam ஠மீணà¯à®Ÿà¯à®®à¯ அழைà®
msgid "Unknown PAM error"
msgstr "தெரியாத PAM பிழை"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "இத௠பழையதைப௠போல உளà¯à®³à®¤à¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "நினைவக ஒதà¯à®•à¯à®•ீடà¯à®Ÿà®¿à®²à¯ பிழை"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "இத௠ஒர௠palindrome"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "எழà¯à®¤à¯à®¤à¯ வகை மாறà¯à®±à®™à¯à®•ள௠மடà¯à®Ÿà¯à®®à¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "இத௠பழையதை ஒதà¯à®¤à¯‡ உளà¯à®³à®¤à¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "இத௠மிகவà¯à®®à¯ எளிதாக உளà¯à®³à®¤à¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "இத௠சà¯à®´à®²à®•à¯à®•ூடியதà¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "போதிய எழà¯à®¤à¯à®¤à¯ வகà¯à®ªà¯à®ªà¯à®•ள௠இலà¯à®²à¯ˆ"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "நிறைய அதே எழà¯à®¤à¯à®¤à¯à®•à¯à®•ள௠தொடரà¯à®¨à¯à®¤à¯ கொணà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "நீளமான ஒர௠மோனோடோனிக௠எழà¯à®¤à¯à®¤à¯à®¤à¯ தொடரைக௠கொணà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "சில வடிவல௠பயனர௠பெயரை கொணà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯ கொடà¯à®•à¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "... நேரம௠போய௠கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•ிறதà¯...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "... உஙà¯à®•ள௠நேரம௠மà¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "தவறான கடவà¯à®šà¯à®šà¯Šà®²à¯: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "பிழையான உரையாடல௠(%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s செயலிழகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: வெளியேறà¯à®®à¯ கà¯à®±à®¿à®¯à¯€à®Ÿà¯ %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -360,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:1088
+#: 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
@@ -407,22 +357,22 @@ msgstr "உஙà¯à®•ளà¯à®•à¯à®•௠%s அடைவில௠பழைய à®…
msgid "You have mail in folder %s."
msgstr "உஙà¯à®•ளà¯à®•à¯à®•௠%s அடைவில௠அஞà¯à®šà®²à¯ உளà¯à®³à®¤à¯."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "அடைவ௠'%s'஠உரà¯à®µà®¾à®•à¯à®•à¯à®•ிறதà¯."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "அடைவ௠'%s'஠உரà¯à®µà®¾à®•à¯à®• மறà¯à®±à¯à®®à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯ à®à®±à¯à®•னவே பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
@@ -453,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "விசை உரà¯à®µà®¾à®•à¯à®• சூழல௠%s ஒதà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
@@ -483,66 +433,7 @@ msgstr "pam_set_item() செயலிழகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
msgid "login: failure forking: %m"
msgstr "login: failure forking: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "கணகà¯à®•௠தறà¯à®•ாலிகமாக பூடà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯ (%ld விநாடிகள௠உளà¯à®³à®©)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "உரிம பிழை"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "சேவை பிழை"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "தெரியாத பயனரà¯"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "தெரியாத பிழை"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: தவறான எண௠--reset= கà¯à®•௠கொடà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: à®…à®™à¯à®•ீகரிகà¯à®•பà¯à®ªà®Ÿà®¾à®¤ விரà¯à®ªà¯à®ªà®®à¯ %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: பூஜà¯à®œà®¿à®¯à®®à®¿à®²à¯à®²à®¾à®¤à®¤à®±à¯à®•௠அனைதà¯à®¤à¯ பயனரà¯à®•ளையà¯à®®à¯ மற௠அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "பà¯à®•à¯à®ªà®¤à®¿à®µà¯ கடைசி தோலà¯à®µà®¿ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯ இஙà¯à®•ிரà¯à®¨à¯à®¤à¯\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "அணà¯à®•ல௠வழஙà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (கடைசி அணà¯à®•ல௠%ld விநாடிகளà¯à®•à¯à®•௠மà¯à®©à¯)."
@@ -565,7 +456,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "நீஙà¯à®•ள௠உஙà¯à®•ள௠கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ உடனடியாக மாறà¯à®± வேணà¯à®Ÿà¯à®®à¯ (கடவà¯à®šà¯à®šà¯Šà®²à¯ மூபà¯à®ªà®¾à®•ிவிடà¯à®Ÿà®¤à¯)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -573,30 +464,119 @@ msgstr[0] "எசà¯à®šà®°à®¿à®•à¯à®•ை: கடவà¯à®šà¯à®šà¯Šà®²à¯ %d ந
msgstr[1] "எசà¯à®šà®°à®¿à®•à¯à®•ை: கடவà¯à®šà¯à®šà¯Šà®²à¯ %d நாடà¯à®•ளில௠மà¯à®Ÿà®¿à®µà¯à®±à¯à®®à¯"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯ கொடà¯à®•à¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#: 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: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 "இத௠பழையதைப௠போல உளà¯à®³à®¤à¯"
+
+#~ msgid "memory allocation error"
+#~ msgstr "நினைவக ஒதà¯à®•à¯à®•ீடà¯à®Ÿà®¿à®²à¯ பிழை"
+
+#~ msgid "is a palindrome"
+#~ msgstr "இத௠ஒர௠palindrome"
+
+#~ msgid "case changes only"
+#~ msgstr "எழà¯à®¤à¯à®¤à¯ வகை மாறà¯à®±à®™à¯à®•ள௠மடà¯à®Ÿà¯à®®à¯"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "இத௠பழையதை ஒதà¯à®¤à¯‡ உளà¯à®³à®¤à¯"
+
+#~ msgid "is too simple"
+#~ msgstr "இத௠மிகவà¯à®®à¯ எளிதாக உளà¯à®³à®¤à¯"
+
+#~ msgid "is rotated"
+#~ msgstr "இத௠சà¯à®´à®²à®•à¯à®•ூடியதà¯"
+
+#~ msgid "not enough character classes"
+#~ msgstr "போதிய எழà¯à®¤à¯à®¤à¯ வகà¯à®ªà¯à®ªà¯à®•ள௠இலà¯à®²à¯ˆ"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "நிறைய அதே எழà¯à®¤à¯à®¤à¯à®•à¯à®•ள௠தொடரà¯à®¨à¯à®¤à¯ கொணà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "நீளமான ஒர௠மோனோடோனிக௠எழà¯à®¤à¯à®¤à¯à®¤à¯ தொடரைக௠கொணà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "சில வடிவல௠பயனர௠பெயரை கொணà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "தவறான கடவà¯à®šà¯à®šà¯Šà®²à¯: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "கணகà¯à®•௠தறà¯à®•ாலிகமாக பூடà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯ (%ld விநாடிகள௠உளà¯à®³à®©)"
+
+#~ msgid "Authentication error"
+#~ msgstr "உரிம பிழை"
+
+#~ msgid "Service error"
+#~ msgstr "சேவை பிழை"
+
+#~ msgid "Unknown user"
+#~ msgstr "தெரியாத பயனரà¯"
+
+#~ msgid "Unknown error"
+#~ msgstr "தெரியாத பிழை"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: தவறான எண௠--reset= கà¯à®•௠கொடà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: à®…à®™à¯à®•ீகரிகà¯à®•பà¯à®ªà®Ÿà®¾à®¤ விரà¯à®ªà¯à®ªà®®à¯ %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: பூஜà¯à®œà®¿à®¯à®®à®¿à®²à¯à®²à®¾à®¤à®¤à®±à¯à®•௠அனைதà¯à®¤à¯ பயனரà¯à®•ளையà¯à®®à¯ மற௠அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/te.gmo b/po/te.gmo
index b6ddfbd9..23bb6a17 100644
--- a/po/te.gmo
+++ b/po/te.gmo
Binary files differ
diff --git a/po/te.po b/po/te.po
index b7bad9e1..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: 2020-06-08 10:18+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,62 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...సమయం అయిపోతోంది...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...à°•à±à°·à°®à°¿à°‚చాలి, మీ సమయం అయిపోయింది!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "తపà±à°ªà±à°¡à± సంభాషణలౠ(%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "సంకేతపదమౠమారà±à°ªà± తపà±à°ªà°¿à°‚చబడింది"
@@ -218,137 +205,100 @@ msgstr "libpamనౠఅనà±à°µà°°à±à°¤à°¨à°®à± మరలా కాలà±â€Œ
msgid "Unknown PAM error"
msgstr "తెలియని PAM దోషమà±"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "ఇది పాతదేనా"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "సంభాషణా దోషమà±"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "పాలిండà±à°°à±‹à°®à°¾"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "కేసౠమారà±à°ªà±à°²à± మాతà±à°°à°®à±‡"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "పాతదానికి మరీ దగà±à°—రపోలికగావà±à°‚ది"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "మరీ సరళంగావà±à°‚ది"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "ఇది పరà±à°¯à°¾à°¯à°‚గానా"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "సరిపోవà±à°¨à°‚à°¤ కారెకà±à°Ÿà°°à± à°•à±à°²à°¾à°¸à±†à°¸à± లేవà±"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "ఒకదానితరà±à°µà°¾à°¤ వొకటి అదే à°…à°•à±à°·à°°à°¾à°²à± చాలావà±à°¨à±à°¨à°¾à°¯à°¿"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "ఒకదానితరà±à°µà°¾à°¤ వొకటి అదే à°…à°•à±à°·à°°à°¾à°²à± చాలావà±à°¨à±à°¨à°¾à°¯à°¿"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "à°’à°•à°°à°•à°‚à°—à°¾ వినియోగదారి నామమà±à°¨à± కలిగివà±à°‚ది"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "à°Žà°Ÿà±à°µà°‚à°Ÿà°¿ సంకేతపదమౠయివà±à°µà°²à±‡à°¦à±"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...సమయం అయిపోతోంది...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS సంకేతపదమౠమారà±à°šà°¬à°¡ లేకపోయింది."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...à°•à±à°·à°®à°¿à°‚చాలి, మీ సమయం అయిపోయింది!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "చెడà±à°¡ సంకేతపదమà±: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "తపà±à°ªà±à°¡à± సంభాషణలౠ(%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s విఫలమైంది: బహిషà±à°•à°°à°£ కోడౠ%d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -357,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:1088
+#: 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
@@ -404,22 +354,22 @@ msgstr "మీరౠఫోలà±à°¡à°°à± %sనందౠపాతమెయిà
msgid "You have mail in folder %s."
msgstr "మీరౠఫోలà±à°¡à°°à± %sనందౠమెయిలà±â€Œà°¨à± కలిగివà±à°¨à±à°¨à°¾à°°à±."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "డెరెకà±à°Ÿà°°à±€ '%s' సృషà±à°Ÿà°¿à°‚à°šà±à°Ÿ."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "డైరెకà±à°Ÿà°°à±€ %sనౠసృషà±à°Ÿà°¿à°‚చలేక పోయింది మరియౠసిదà±à°¦à±€à°•రించలేక పోయింది."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "సంకేతపదమౠయిపà±à°ªà°Ÿà°¿à°•ే à°µà±à°ªà°¯à±‹à°—ించబడింది."
@@ -450,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "à°•à±€ సృషà±à°Ÿà±€à°•à°°à°£ సందరà±à°­à°®à± %s à°…à°ªà±à°ªà°—ించబడింది"
@@ -480,66 +430,7 @@ msgstr "pam_set_item() విఫలమైంది\n"
msgid "login: failure forking: %m"
msgstr "login: failure forking: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "ఖాతా తాతà±à°•ాలికంగా లాకà±â€Œà°šà±‡à°¯à°¬à°¡à°¿à°‚ది (%ld సెకనà±à°²à± మిగిలినవి)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "దృవీకరణం దోషమà±"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "సేవ దోషమà±"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "తెలియని వినియోగదారి"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "తెలియని దోషమà±"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s:చెడà±à°¡ సంఖà±à°¯ యివà±à°µà°¬à°¡à°¿à°‚ది --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: à°—à±à°°à±à°¤à°¿à°‚చని à°à°šà±à°šà°¿à°•మౠ%s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: వినియోగదారà±à°²à°¨à°‚దరిని à°¸à±à°¨à±à°¨à°¾-కానిదానికి తిరిగివà±à°‚చలేమà±\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "లాగినౠవిఫలమైంది సరికొతà±à°¤ వైఫలà±à°¯à°‚ దీనినà±à°‚à°¡à°¿\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, fuzzy, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "యాకà±à°¸à°¿à°¸à± యివà±à°µà°¬à°¡à°¿à°‚ది (చివరిగా యాకà±à°¸à°¿à°¸à± చేసినది %ld సెకనà±à°² à°•à±à°°à°¿à°¤à°‚)."
@@ -562,7 +453,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "మీరౠమీ సంకేతపదమà±à°¨à± తకà±à°·à°£à°®à±‡ మారà±à°šà°µà°²à°¸à°¿à°µà±à°‚ది (password aged)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
@@ -570,30 +461,119 @@ msgstr[0] "హెచà±à°šà°°à°¿à°•: మీ సంకేతపదమౠ%d à°°à±
msgstr[1] "హెచà±à°šà°°à°¿à°•: మీ సంకేతపదమౠ%d రోజà±à°²à°²à±‹ కాలమà±à°¤à±€à°°à±à°¤à±à°‚ది"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+#, fuzzy
+msgid "No password has been supplied."
+msgstr "à°Žà°Ÿà±à°µà°‚à°Ÿà°¿ సంకేతపదమౠయివà±à°µà°²à±‡à°¦à±"
+
+#: 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: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 "ఇది పాతదేనా"
+
+#~ msgid "memory allocation error"
+#~ msgstr "సంభాషణా దోషమà±"
+
+#~ msgid "is a palindrome"
+#~ msgstr "పాలిండà±à°°à±‹à°®à°¾"
+
+#~ msgid "case changes only"
+#~ msgstr "కేసౠమారà±à°ªà±à°²à± మాతà±à°°à°®à±‡"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "పాతదానికి మరీ దగà±à°—రపోలికగావà±à°‚ది"
+
+#~ msgid "is too simple"
+#~ msgstr "మరీ సరళంగావà±à°‚ది"
+
+#~ msgid "is rotated"
+#~ msgstr "ఇది పరà±à°¯à°¾à°¯à°‚గానా"
+
+#~ msgid "not enough character classes"
+#~ msgstr "సరిపోవà±à°¨à°‚à°¤ కారెకà±à°Ÿà°°à± à°•à±à°²à°¾à°¸à±†à°¸à± లేవà±"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "ఒకదానితరà±à°µà°¾à°¤ వొకటి అదే à°…à°•à±à°·à°°à°¾à°²à± చాలావà±à°¨à±à°¨à°¾à°¯à°¿"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "ఒకదానితరà±à°µà°¾à°¤ వొకటి అదే à°…à°•à±à°·à°°à°¾à°²à± చాలావà±à°¨à±à°¨à°¾à°¯à°¿"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "à°’à°•à°°à°•à°‚à°—à°¾ వినియోగదారి నామమà±à°¨à± కలిగివà±à°‚ది"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "చెడà±à°¡ సంకేతపదమà±: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "ఖాతా తాతà±à°•ాలికంగా లాకà±â€Œà°šà±‡à°¯à°¬à°¡à°¿à°‚ది (%ld సెకనà±à°²à± మిగిలినవి)"
+
+#~ msgid "Authentication error"
+#~ msgstr "దృవీకరణం దోషమà±"
+
+#~ msgid "Service error"
+#~ msgstr "సేవ దోషమà±"
+
+#~ msgid "Unknown user"
+#~ msgstr "తెలియని వినియోగదారి"
+
+#~ msgid "Unknown error"
+#~ msgstr "తెలియని దోషమà±"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s:చెడà±à°¡ సంఖà±à°¯ యివà±à°µà°¬à°¡à°¿à°‚ది --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: à°—à±à°°à±à°¤à°¿à°‚చని à°à°šà±à°šà°¿à°•మౠ%s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: వినియోగదారà±à°²à°¨à°‚దరిని à°¸à±à°¨à±à°¨à°¾-కానిదానికి తిరిగివà±à°‚చలేమà±\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/tg.po b/po/tg.po
index d8a79680..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -350,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:1088
+#: 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
@@ -396,22 +348,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -441,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -471,62 +423,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -546,7 +443,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -554,31 +451,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 9c9dd990..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: 2020-06-08 10:18+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,61 +20,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -214,134 +201,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -349,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:1088
+#: 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
@@ -395,22 +346,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -440,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -470,62 +421,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -545,38 +441,46 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 1d73f488..68112291 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 417c2616..9cb78938 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -9,14 +9,15 @@
# Onuralp SEZER <thunderbirdtr@gmail.com>, 2012
# Selim Åžumlu <selim@sum.lu>, 2012
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
-# OÄŸuz Ersen <oguzersen@protonmail.com>, 2020.
+# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-02 09:40+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,63 +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.0.1\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Zaman geçiyor...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Üzgünüm, süreniz doldu!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "hatalı etkileşim (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -220,136 +208,101 @@ msgstr "Uygulamanın libpam kütüphanesini yeniden çağırması gerekiyor"
msgid "Unknown PAM error"
msgstr "Bilinmeyen PAM hatası"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "eskisi ile aynı"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "bellek ayırma hatası"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "bir palindrom (iki yönden aynı şekilde okunuyor)"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "sadece büyük-küçük harf değişimi"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "eskisine çok benziyor"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "çok basit"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "deÄŸiÅŸtirilmiÅŸ"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "yetersiz karakter sınıfı"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "aynı karakterleri arka arkaya içeriyor"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "çok uzun tekdüze karakter sırası içeriyor"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "kullanıcı adını bir biçimde içeriyor"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Parola belirtilmedi."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Zaman geçiyor...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Parola deÄŸiÅŸtirilmedi."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Üzgünüm, süreniz doldu!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "KÖTÜ PAROLA: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "hatalı etkileşim (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] "(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: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 ""
@@ -358,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:1088
+#: 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."
@@ -405,22 +358,22 @@ msgstr "%s dizininde eski/okunmuÅŸ iletiniz var."
msgid "You have mail in folder %s."
msgstr "%s dizininde iletiniz var."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "%s dizini oluÅŸturuluyor."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "%s dizini oluşturulamadı."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Parola önceden kullanılmıştır."
@@ -450,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:629
+#: 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:645
+#: 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ı."
@@ -480,66 +433,7 @@ msgstr "pam_set_item() çalıştırılamadı\n"
msgid "login: failure forking: %m"
msgstr "giriş: çatallama yapılamadı: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Hesap geçici olarak kilitlendi (%ld saniye kaldı)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Yetkilendirme hatası"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Hizmet hatası"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Bilinmeyen kullanıcı"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Bilinmeyen hata"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: --reset argümanına geçersiz sayı verildi\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Tanınmayan seçenek %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file DosyanınTamYolu] [--user KullanıcıAdı] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-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"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "GiriÅŸ Hatalar Son hata Kim\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f kök-dosya-adı] [--file kök-dosya-adı]\n"
-" [-u kullanıcı-adı] [--user kullanıcı-adı]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)."
@@ -561,7 +455,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Parolanızı hemen değiştirmeniz gerekmektedir (parolanın süresi doldu)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -569,28 +463,114 @@ msgstr[0] "Uyarı: parolanızın süresi %d gün içinde dolacak."
msgstr[1] "Uyarı: parolanızın süresi %d gün içinde dolacak."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "Parola belirtilmedi."
+
+#: 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: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ı"
+
+#~ msgid "memory allocation error"
+#~ msgstr "bellek ayırma hatası"
+
+#~ msgid "is a palindrome"
+#~ msgstr "bir palindrom (iki yönden aynı şekilde okunuyor)"
+
+#~ msgid "case changes only"
+#~ msgstr "sadece büyük-küçük harf değişimi"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "eskisine çok benziyor"
+
+#~ msgid "is too simple"
+#~ msgstr "çok basit"
+
+#~ msgid "is rotated"
+#~ msgstr "deÄŸiÅŸtirilmiÅŸ"
+
+#~ msgid "not enough character classes"
+#~ msgstr "yetersiz karakter sınıfı"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "aynı karakterleri arka arkaya içeriyor"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "çok uzun tekdüze karakter sırası içeriyor"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "kullanıcı adını bir biçimde içeriyor"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "KÖTÜ PAROLA: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Hesap geçici olarak kilitlendi (%ld saniye kaldı)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Yetkilendirme hatası"
+
+#~ msgid "Service error"
+#~ msgstr "Hizmet hatası"
+
+#~ msgid "Unknown user"
+#~ msgstr "Bilinmeyen kullanıcı"
+
+#~ msgid "Unknown error"
+#~ msgstr "Bilinmeyen hata"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: --reset argümanına geçersiz sayı verildi\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Tanınmayan seçenek %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file DosyanınTamYolu] [--user KullanıcıAdı] [--reset[=n]] [--"
+#~ "quiet]\n"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f kök-dosya-adı] [--file kök-dosya-adı]\n"
+#~ " [-u kullanıcı-adı] [--user kullanıcı-adı]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index 12ea17fc..c47b6301 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 623c09f6..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.
+# 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.
+# 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: 2020-06-08 10:18+0000\n"
-"PO-Revision-Date: 2020-05-02 09:40+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,63 +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.0.1\n"
+"X-Generator: Weblate 4.14.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Ð§Ð°Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÑƒÑ”Ñ‚ÑŒÑÑ...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Вибачте, ваш Ñ‡Ð°Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð²ÑÑ!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "помилкова розмова (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "Зміну Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾."
@@ -218,136 +205,102 @@ msgstr "Програмі потрібно знов викликати libpam"
msgid "Unknown PAM error"
msgstr "Ðевідома помилка PAM"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "такий Ñамий, Ñк Ñ– Ñтарий"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "помилка під Ñ‡Ð°Ñ Ñпроби Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¾Ð±Ð»Ð°Ñті у пам’Ñті"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "— це паліндром"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "тільки зміни в регіÑтрі"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "занадто подібний до Ñтарого"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "занадто проÑтий"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "чергуєтьÑÑ"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "недоÑтатнє викориÑÑ‚Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ñів Ñимволів"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "міÑтить забагато поÑлідовних однакових Ñимволів"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "міÑтить надто довгу монотонну поÑлідовніÑть Ñимволів"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "міÑтить Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача з форми"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "Ðе було надано жодного паролÑ."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Ð§Ð°Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÑƒÑ”Ñ‚ÑŒÑÑ...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "Пароль не було змінено."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Вибачте, ваш Ñ‡Ð°Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð²ÑÑ!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ПОГÐÐИЙ ПÐРОЛЬ: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "помилкова розмова (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "Помилка %s: коди виходу %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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 хвилини до розблокуваннÑ)"
+msgstr[2] "(лишилоÑÑ %d хвилин до розблокуваннÑ)"
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -363,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:1088
+#: 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."
@@ -411,22 +364,22 @@ msgstr "У теці %s Ñ” Ñтарі поштові повідомленнÑ."
msgid "You have mail in folder %s."
msgstr "У теці %s Ñ” поштові повідомленнÑ."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ «%s»."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "Ðе вдалоÑÑ Ñтворити Ñ– ініціалізувати каталог «%s»."
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "Пароль вже викориÑтовувавÑÑ."
@@ -456,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "Призначено контекÑÑ‚ безпеки %s."
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "Призначено контекÑÑ‚ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð² %s."
@@ -486,67 +439,7 @@ msgstr "помилка pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "вхід: помилка розгалуженнÑ: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñово заблоковано (ще на %ld Ñекунд)."
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Помилка розпізнаваннÑ"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Помилка Ñлужби"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Ðевідомий кориÑтувач"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Ðевідома помилка"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: вказано помилкове чиÑло --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: нерозпізнано параметр %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file назва-файла-кориÑтувача-root] [--user ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача] [--"
-"reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: не вдаєтьÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "КориÑтувач Помилок ОÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° З\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f назва-файла-кориÑтувача-root] [--file назва-файла-кориÑтувача-root]\n"
-" [-u кориÑтувач] [--user кориÑтувач]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "Ðадано доÑтуп (оÑÑ‚Ð°Ð½Ð½Ñ Ñпроба доÑтупу ÑталаÑÑ %ld Ñекунд тому)."
@@ -569,7 +462,7 @@ msgid ""
msgstr ""
"Вам необхідно негайно змінити пароль (Ñтрок дії поточного Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð¾)."
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -578,28 +471,116 @@ msgstr[1] "ПопередженнÑ: Ñтрок дії вашого паролÑ
msgstr[2] "ПопередженнÑ: Ñтрок дії вашого Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð±ÑƒÐ´Ðµ вичерпано за %d днів."
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "Ðе було надано жодного паролÑ."
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "Пароль не було змінено."
+
+#: 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 "такий Ñамий, Ñк Ñ– Ñтарий"
+
+#~ msgid "memory allocation error"
+#~ msgstr "помилка під Ñ‡Ð°Ñ Ñпроби Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¾Ð±Ð»Ð°Ñті у пам’Ñті"
+
+#~ msgid "is a palindrome"
+#~ msgstr "— це паліндром"
+
+#~ msgid "case changes only"
+#~ msgstr "тільки зміни в регіÑтрі"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "занадто подібний до Ñтарого"
+
+#~ msgid "is too simple"
+#~ msgstr "занадто проÑтий"
+
+#~ msgid "is rotated"
+#~ msgstr "чергуєтьÑÑ"
+
+#~ msgid "not enough character classes"
+#~ msgstr "недоÑтатнє викориÑÑ‚Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ñів Ñимволів"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "міÑтить забагато поÑлідовних однакових Ñимволів"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "міÑтить надто довгу монотонну поÑлідовніÑть Ñимволів"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "міÑтить Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача з форми"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ПОГÐÐИЙ ПÐРОЛЬ: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñово заблоковано (ще на %ld Ñекунд)."
+
+#~ msgid "Authentication error"
+#~ msgstr "Помилка розпізнаваннÑ"
+
+#~ msgid "Service error"
+#~ msgstr "Помилка Ñлужби"
+
+#~ msgid "Unknown user"
+#~ msgstr "Ðевідомий кориÑтувач"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ðевідома помилка"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: вказано помилкове чиÑло --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: нерозпізнано параметр %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file назва-файла-кориÑтувача-root] [--user ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача] [--"
+#~ "reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr ""
+#~ "%s: не вдаєтьÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f назва-файла-кориÑтувача-root] [--file назва-файла-кориÑтувача-"
+#~ "root]\n"
+#~ " [-u кориÑтувач] [--user кориÑтувач]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/ur.po b/po/ur.po
index a9f9e817..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: 2020-06-08 10:18+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,61 +19,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -213,134 +200,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -349,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:1088
+#: 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
@@ -395,22 +347,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -440,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -470,62 +422,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -545,7 +442,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -553,31 +450,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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.gmo b/po/vi.gmo
index 213658c4..b7004dba 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 881d4abb..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: 2020-06-08 10:18+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,62 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Thá»i gian Ä‘ang dần hết...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Xin lá»—i, đã hết thá»i gian!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "hội thoại sai (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -217,139 +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"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "là giống như cũ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "Lỗi cấp phát bộ nhớ"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "là một xâu palindrome"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "chỉ thay đổi chữ thưá»ng/hoa"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "quá giống cái cũ"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "quá đơn giản"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "được sử dụng lại"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "không đủ các lớp nhân vật"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "chứa quá nhiá»u kí tá»± giống nhau liên tiếp"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-#, fuzzy
-msgid "contains too long of a monotonic character sequence"
-msgstr "chứa quá nhiá»u kí tá»± giống nhau liên tiếp"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "chứa tên user trong một số biểu mẫu"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Không có mật khẩu được cung cấp"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Thá»i gian Ä‘ang dần hết...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "NIS mật khẩu không thể được thay đổi."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Xin lá»—i, đã hết thá»i gian!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "Mật khẩu không an toàn: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "hội thoại sai (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: 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:284
+#: 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:293
+#: 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:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -358,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:1088
+#: 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
@@ -406,22 +354,22 @@ msgstr "Bạn có thư cũ trong thư mục %s."
msgid "You have mail in folder %s."
msgstr "Bạn có thư trong thư mục %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "Tạo thư mục '%s'."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
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:211
-#: 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:218
+#: 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."
@@ -453,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:629
+#: 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:645
+#: 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"
@@ -483,67 +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_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "Tài khoản tạm thá»i bị khóa (%ld giây còn lại)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Xác thực lỗi"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Lỗi dịch vụ"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Ngưá»i dùng không rõ"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Lỗi không rõ"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Xấu số cho --cài lại=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: ÄÆ°á»£c thừa nhận lá»±a chá»n%s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\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_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-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"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, 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_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: 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)"
@@ -567,37 +455,128 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "Bạn phải thay đổi ngay mật khẩu (mật khẩu quá cũ)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: modules/pam_unix/pam_unix_acct.c:269 modules/pam_unix/pam_unix_acct.c:276
#, fuzzy, c-format
msgid "Warning: your password will expire in %d day."
msgid_plural "Warning: your password will expire in %d days."
msgstr[0] "Cảnh báo: mật khẩu của bạn sẽ hết hạn trong %d ngày"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, fuzzy, c-format
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:581
+#: 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: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: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ũ"
+
+#~ msgid "memory allocation error"
+#~ msgstr "Lỗi cấp phát bộ nhớ"
+
+#~ msgid "is a palindrome"
+#~ msgstr "là một xâu palindrome"
+
+#~ msgid "case changes only"
+#~ msgstr "chỉ thay đổi chữ thưá»ng/hoa"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "quá giống cái cũ"
+
+#~ msgid "is too simple"
+#~ msgstr "quá đơn giản"
+
+#~ msgid "is rotated"
+#~ msgstr "được sử dụng lại"
+
+#~ msgid "not enough character classes"
+#~ msgstr "không đủ các lớp nhân vật"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "chứa quá nhiá»u kí tá»± giống nhau liên tiếp"
+
+#, fuzzy
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "chứa quá nhiá»u kí tá»± giống nhau liên tiếp"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "chứa tên user trong một số biểu mẫu"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "Mật khẩu không an toàn: %s"
+
+#, fuzzy
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "Tài khoản tạm thá»i bị khóa (%ld giây còn lại)"
+
+#~ msgid "Authentication error"
+#~ msgstr "Xác thực lỗi"
+
+#~ msgid "Service error"
+#~ msgstr "Lỗi dịch vụ"
+
+#~ msgid "Unknown user"
+#~ msgstr "Ngưá»i dùng không rõ"
+
+#~ msgid "Unknown error"
+#~ msgstr "Lỗi không rõ"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Xấu số cho --cài lại=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: ÄÆ°á»£c thừa nhận lá»±a chá»n%s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\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"
+
+#~ 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 ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/yo.po b/po/yo.po
index b5831214..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: 2020-06-08 10:18+0000\n"
+"POT-Creation-Date: 2023-04-29 11:11+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Yoruba\n"
@@ -18,61 +18,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 3.8.3\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -212,134 +199,99 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -347,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:1088
+#: 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
@@ -393,22 +345,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -438,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -468,62 +420,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -543,7 +440,7 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -551,31 +448,39 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 c6fc6b26..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 b7d2c832..3563f908 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,13 +9,17 @@
# Xi HUANG <xhuang@redhat.com>, 2007
# Tomáš Mráz <tmraz@fedoraproject.org>, 2016. #zanata
# 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: 2020-06-08 10:18+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: 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"
@@ -23,67 +27,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.12.1\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...æ—¶é—´å³å°†è€—å°½...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...对ä¸èµ·ï¼Œæ‚¨çš„æ—¶é—´å·²ç»è€—å°½ï¼\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "æœ‰é”™è¯¯çš„è½¬æ¢ (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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:"
@@ -95,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"
@@ -119,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"
@@ -151,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"
@@ -179,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"
@@ -207,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"
@@ -221,156 +210,118 @@ msgstr "应用程åºéœ€è¦å†æ¬¡è°ƒç”¨ libpam"
msgid "Unknown PAM error"
msgstr "未知的 PAM 错误"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "与旧密ç ç›¸åŒ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "内存分é…错误"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "是回文"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "仅更改了大å°å†™"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "与旧密ç è¿‡äºŽç›¸ä¼¼"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "过于简å•"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "是旧密ç çš„循环"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "没有足够的字符分类"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "包å«è¿‡å¤šè¿žç»­ç›¸åŒçš„字符"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "包å«è¿‡é•¿çš„å•一字符åºåˆ—"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "以æŸäº›å½¢å¼åŒ…å«ç”¨æˆ·å"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "å¯†ç æœªæä¾›"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...æ—¶é—´å³å°†è€—å°½...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "无法更改 NIS 密ç ã€‚"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...对ä¸èµ·ï¼Œæ‚¨çš„æ—¶é—´å·²ç»è€—å°½ï¼\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "无效的密ç ï¼š %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "æœ‰é”™è¯¯çš„è½¬æ¢ (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s å¤±è´¥ï¼šé€€å‡ºä»£ç  %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
+#: modules/pam_faillock/main.c:130
#, fuzzy, c-format
msgid ""
-"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset]\n"
-msgstr "%s: [--文件 根文件å] [--用户 用户å] [--é‡è®¾ç½®[=n]] [--安é™]\n"
+"Usage: %s [--dir /path/to/tally-directory] [--user username] [--reset] [--"
+"legacy-output]\n"
+msgstr "用法:%s [--dir /tally/目录的/路径] [--user 用户å] [--reset]\n"
-#: modules/pam_faillock/pam_faillock.c:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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 失败登录而é”å®šå¸æˆ·"
+msgstr "由于 %u æ¬¡ç™»å½•å¤±è´¥ï¼Œæ­¤å¸æˆ·å·²é”定。"
+
+#: 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 分钟åŽè§£é”)"
-#: modules/pam_faillock/pam_faillock.c:650
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 " %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:1088
-#, 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
@@ -405,29 +356,29 @@ msgstr "您在文件夹 %s 中有旧邮件。"
msgid "You have mail in folder %s."
msgstr "您在文件夹 %s 中有邮件。"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
-msgstr "创建目录 '%s'。"
+msgstr "正在创建目录“%sâ€ã€‚"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: 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:211
-#: 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:218
+#: 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?"
@@ -438,33 +389,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:629
-#, 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:645
-#, 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
@@ -479,120 +429,141 @@ msgstr "未能 pam_set_item()\n"
#: modules/pam_selinux/pam_selinux_check.c:133
#, c-format
msgid "login: failure forking: %m"
-msgstr "登录:故障派生:%m"
-
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, fuzzy, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "叿ˆ·æš‚æ—¶é”ä½ï¼ˆè¿˜æœ‰ %ld 秒)"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "鉴定错误"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "æœåŠ¡é”™è¯¯"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "未知的用户"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "未知的错误"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: 给定的数字无效 --é‡è®¾ç½®=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: 未识别的选项 %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr "%s: [--文件 根文件å] [--用户 用户å] [--é‡è®¾ç½®[=n]] [--安é™]\n"
+msgstr "登录:派生失败:%m"
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: 无法将所有用户é‡è®¾ç½®ä¸ºéžé›¶\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Failures Latest failure From\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
-#, fuzzy, 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 "您需è¦ç«‹å³æ›´æ”¹å¯†ç ï¼ˆroot 强制)"
+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:265 modules/pam_unix/pam_unix_acct.c:272
-#, fuzzy, c-format
+#: 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:277
-#, fuzzy, c-format
+#: 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 密ç ã€‚"
-#: modules/pam_unix/pam_unix_passwd.c:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "未æä¾›å¯†ç ã€‚"
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "å¯†ç æœªè¢«æ›´æ”¹ã€‚"
+
+#: modules/pam_unix/pam_unix_passwd.c:572
msgid "You must choose a shorter password."
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 更改 STRESS 密ç ã€‚"
+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 "与旧密ç ç›¸åŒ"
+
+#~ msgid "memory allocation error"
+#~ msgstr "内存分é…错误"
+
+#~ msgid "is a palindrome"
+#~ msgstr "是回文"
+
+#~ msgid "case changes only"
+#~ msgstr "仅更改了大å°å†™"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "与旧密ç è¿‡äºŽç›¸ä¼¼"
+
+#~ msgid "is too simple"
+#~ msgstr "过于简å•"
+
+#~ msgid "is rotated"
+#~ msgstr "是旧密ç çš„循环"
+
+#~ msgid "not enough character classes"
+#~ msgstr "没有足够的字符分类"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "包å«è¿‡å¤šè¿žç»­ç›¸åŒçš„字符"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "包å«è¿‡é•¿çš„å•一字符åºåˆ—"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "以æŸäº›å½¢å¼åŒ…å«ç”¨æˆ·å"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "无效的密ç ï¼š %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "叿ˆ·æš‚æ—¶é”定(剩余 %ld 秒)。"
+
+#~ msgid "Authentication error"
+#~ msgstr "鉴定错误"
+
+#~ msgid "Service error"
+#~ msgstr "æœåŠ¡é”™è¯¯"
+
+#~ msgid "Unknown user"
+#~ msgstr "未知的用户"
+
+#~ msgid "Unknown error"
+#~ msgstr "未知的错误"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: 给定的数字无效 --é‡è®¾ç½®=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: 未识别的选项 %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr "%s: [--文件 根文件å] [--用户 用户å] [--é‡è®¾ç½®[=n]] [--安é™]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: 无法将所有用户é‡è®¾ç½®ä¸ºéžé›¶\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\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 7301956f..212e024f 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -4,76 +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: 2020-06-08 10:18+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_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr ""
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr ""
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 ""
@@ -213,134 +202,98 @@ msgstr ""
msgid "Unknown PAM error"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
msgstr ""
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
+msgid "erroneous conversation (%d)\n"
msgstr ""
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -348,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:1088
+#: 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
@@ -394,22 +347,22 @@ msgstr ""
msgid "You have mail in folder %s."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr ""
@@ -439,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr ""
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr ""
@@ -469,62 +422,7 @@ msgstr ""
msgid "login: failure forking: %m"
msgstr ""
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -544,38 +442,46 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr ""
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr ""
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr ""
+
+#: 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 7b8f491b..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 59766d40..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: 2020-06-08 10:18+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,61 +23,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.0.4\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...時間已經超éŽ...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...抱歉,您的時間已到ï¼\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "錯誤的交談 (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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 "已中止密碼變更作業。"
@@ -217,135 +204,99 @@ msgstr "應用程å¼éœ€è¦å†æ¬¡å‘¼å« libpam"
msgid "Unknown PAM error"
msgstr "未知的 PAM 錯誤"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "與舊的密碼相åŒ"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr "記憶體分é…錯誤"
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "是一個回文"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "僅變更大å°å¯«"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "與舊的密碼太相似"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "太簡單"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "已旋轉"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr "字元類別ä¸è¶³"
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr "包å«äº†å¤ªå¤šé€£çºŒçš„相åŒå­—å…ƒ"
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr "包å«éŽå¤šçš„å–®èª¿å­—å…ƒåºæ®µ"
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr "包å«äº†æŸäº›æ ¼å¼çš„用戶å稱"
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-msgid "No password has been supplied."
-msgstr "未æä¾›å¯†ç¢¼ã€‚"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...時間已經超éŽ...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-msgid "The password has not been changed."
-msgstr "未變更密碼。"
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...抱歉,您的時間已到ï¼\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "ä¸è‰¯çš„密碼: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "錯誤的交談 (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr "%s 失敗:退出編碼 %d"
-#: modules/pam_exec/pam_exec.c:284
+#: 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:293
+#: 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:104
-#, 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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: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 ""
@@ -353,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:1088
+#: 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."
@@ -399,22 +351,22 @@ msgstr "資料夾 %s 中有您的舊郵件。"
msgid "You have mail in folder %s."
msgstr "資料夾 %s 中有您的郵件。"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr "建立目錄「%sã€ã€‚"
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr "無法建立和åˆå§‹åŒ–「%sã€ç›®éŒ„。"
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
msgid "Password has been already used."
msgstr "密碼已被使用éŽã€‚"
@@ -444,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:629
+#: modules/pam_selinux/pam_selinux.c:639
#, c-format
msgid "Security context %s has been assigned."
msgstr "已指定 %s 安全情境。"
-#: modules/pam_selinux/pam_selinux.c:645
+#: modules/pam_selinux/pam_selinux.c:655
#, c-format
msgid "Key creation context %s has been assigned."
msgstr "已指定 %s 金鑰建立情境。"
@@ -474,66 +426,7 @@ msgstr "pam_set_item() 失敗\n"
msgid "login: failure forking: %m"
msgstr "登入:失敗的分å‰ï¼š%m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr "帳號被暫時鎖定(剩餘 %ld 秒)。"
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "驗證錯誤"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "æœå‹™éŒ¯èª¤"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "未知的使用者"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "未知的錯誤"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: ä¸è‰¯çš„號碼æä¾›è‡³ --reset=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: 未識別的é¸é … %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr "%s: ç„¡æ³•å°‡æ‰€æœ‰ä½¿ç”¨è€…é‡æ–°è¨­å®šç‚ºéžé›¶\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr "Login Failures Latest failure From\n"
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr "å·²è³¦äºˆå­˜å–æ¬Šé™ï¼ˆæœ€å¾Œä¸€æ¬¡å­˜å–為 %ld ç§’å‰ï¼‰ã€‚"
@@ -553,35 +446,120 @@ msgid ""
"You are required to change your password immediately (password expired)."
msgstr "æ‚¨å¿…é ˆç«‹åˆ»è®Šæ›´æ‚¨çš„å¯†ç¢¼ï¼ˆå¯†ç¢¼å·²ç¶“éŽæœŸï¼‰ã€‚"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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 å¤©å¾ŒéŽæœŸã€‚"
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: modules/pam_unix/pam_unix_passwd.c:554
+msgid "No password has been supplied."
+msgstr "未æä¾›å¯†ç¢¼ã€‚"
+
+#: modules/pam_unix/pam_unix_passwd.c:555
+msgid "The password has not been changed."
+msgstr "未變更密碼。"
+
+#: 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 "與舊的密碼相åŒ"
+
+#~ msgid "memory allocation error"
+#~ msgstr "記憶體分é…錯誤"
+
+#~ msgid "is a palindrome"
+#~ msgstr "是一個回文"
+
+#~ msgid "case changes only"
+#~ msgstr "僅變更大å°å¯«"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "與舊的密碼太相似"
+
+#~ msgid "is too simple"
+#~ msgstr "太簡單"
+
+#~ msgid "is rotated"
+#~ msgstr "已旋轉"
+
+#~ msgid "not enough character classes"
+#~ msgstr "字元類別ä¸è¶³"
+
+#~ msgid "contains too many same characters consecutively"
+#~ msgstr "包å«äº†å¤ªå¤šé€£çºŒçš„相åŒå­—å…ƒ"
+
+#~ msgid "contains too long of a monotonic character sequence"
+#~ msgstr "包å«éŽå¤šçš„å–®èª¿å­—å…ƒåºæ®µ"
+
+#~ msgid "contains the user name in some form"
+#~ msgstr "包å«äº†æŸäº›æ ¼å¼çš„用戶å稱"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "ä¸è‰¯çš„密碼: %s"
+
+#~ msgid "The account is temporarily locked (%ld seconds left)."
+#~ msgstr "帳號被暫時鎖定(剩餘 %ld 秒)。"
+
+#~ msgid "Authentication error"
+#~ msgstr "驗證錯誤"
+
+#~ msgid "Service error"
+#~ msgstr "æœå‹™éŒ¯èª¤"
+
+#~ msgid "Unknown user"
+#~ msgstr "未知的使用者"
+
+#~ msgid "Unknown error"
+#~ msgstr "未知的錯誤"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: ä¸è‰¯çš„號碼æä¾›è‡³ --reset=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: 未識別的é¸é … %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr "%s: ç„¡æ³•å°‡æ‰€æœ‰ä½¿ç”¨è€…é‡æ–°è¨­å®šç‚ºéžé›¶\n"
+
+#~ msgid ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [-f rooted-filename] [--file rooted-filename]\n"
+#~ " [-u username] [--user username]\n"
+#~ " [-r] [--reset[=n]] [--quiet]\n"
diff --git a/po/zu.gmo b/po/zu.gmo
index 4affa76d..8f70af4e 100644
--- a/po/zu.gmo
+++ b/po/zu.gmo
Binary files differ
diff --git a/po/zu.po b/po/zu.po
index 1dd2d9ed..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: 2020-06-08 10:18+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,62 +21,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 3.11.2\n"
-#: libpam_misc/misc_conv.c:33
-msgid "...Time is running out...\n"
-msgstr "...Isikhathi siyaphela...\n"
-
-#: libpam_misc/misc_conv.c:34
-msgid "...Sorry, your time is up!\n"
-msgstr "...Uxolo, isikhathi sakho sesiphelile!\n"
-
-#: libpam_misc/misc_conv.c:346
-#, c-format
-msgid "erroneous conversation (%d)\n"
-msgstr "ingxoxo enephutha (%d)\n"
-
-#: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:178
-#: modules/pam_userdb/pam_userdb.c:55
+#: 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."
@@ -217,137 +204,100 @@ msgstr "Uhlelo ludinga ukubiza i-libpam futhi"
msgid "Unknown PAM error"
msgstr "Iphutha le-PAM elingaziwa"
-#: modules/pam_cracklib/pam_cracklib.c:601
-msgid "is the same as the old one"
-msgstr "iyafana nendala"
-
-#: modules/pam_cracklib/pam_cracklib.c:607
-#: modules/pam_cracklib/pam_cracklib.c:611
-#: modules/pam_cracklib/pam_cracklib.c:621
-msgid "memory allocation error"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:626
-msgid "is a palindrome"
-msgstr "iyi-palindrome"
-
-#: modules/pam_cracklib/pam_cracklib.c:629
-msgid "case changes only"
-msgstr "kushintshe onobumba kuphela"
-
-#: modules/pam_cracklib/pam_cracklib.c:632
-msgid "is too similar to the old one"
-msgstr "ifana kakhulu nendala"
-
-#: modules/pam_cracklib/pam_cracklib.c:635
-msgid "is too simple"
-msgstr "ilula kakhulu"
-
-#: modules/pam_cracklib/pam_cracklib.c:638
-msgid "is rotated"
-msgstr "ijikelezisiwe"
-
-#: modules/pam_cracklib/pam_cracklib.c:641
-msgid "not enough character classes"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:644
-msgid "contains too many same characters consecutively"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:647
-msgid "contains too long of a monotonic character sequence"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:650
-msgid "contains the user name in some form"
-msgstr ""
-
-#: modules/pam_cracklib/pam_cracklib.c:684
-#: modules/pam_unix/pam_unix_passwd.c:563
-#, fuzzy
-msgid "No password has been supplied."
-msgstr "Ayikho iphasiwedi enikeziwe"
+#: libpam_misc/misc_conv.c:34
+msgid "...Time is running out...\n"
+msgstr "...Isikhathi siyaphela...\n"
-#: modules/pam_cracklib/pam_cracklib.c:685
-#: modules/pam_unix/pam_unix_passwd.c:564
-#, fuzzy
-msgid "The password has not been changed."
-msgstr "Iphasiwedi ye-NIS ayivumanga ukushintshwa."
+#: libpam_misc/misc_conv.c:35
+msgid "...Sorry, your time is up!\n"
+msgstr "...Uxolo, isikhathi sakho sesiphelile!\n"
-#: modules/pam_cracklib/pam_cracklib.c:706
-#: modules/pam_cracklib/pam_cracklib.c:788
+#: libpam_misc/misc_conv.c:349
#, c-format
-msgid "BAD PASSWORD: %s"
-msgstr "IPHASIWEDI ENGASEBENZI: %s"
+msgid "erroneous conversation (%d)\n"
+msgstr "ingxoxo enephutha (%d)\n"
-#: modules/pam_exec/pam_exec.c:275
+#: modules/pam_exec/pam_exec.c:300
#, c-format
msgid "%s failed: exit code %d"
msgstr ""
-#: modules/pam_exec/pam_exec.c:284
+#: modules/pam_exec/pam_exec.c:310
#, c-format
msgid "%s failed: caught signal %d%s"
msgstr ""
-#: modules/pam_exec/pam_exec.c:293
+#: modules/pam_exec/pam_exec.c:320
#, c-format
msgid "%s failed: unknown status 0x%x"
msgstr ""
-#: modules/pam_faillock/main.c:104
+#: 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:645 modules/pam_tally/pam_tally.c:553
-#: modules/pam_tally2/pam_tally2.c:562
+#: 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:650
+#: 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] ""
+
+#. TRANSLATORS: only used if dngettext is not supported.
+#: 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 ""
@@ -356,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:1088
+#: 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
@@ -403,22 +353,22 @@ msgstr "Unemeyili endala kwifolda %s."
msgid "You have mail in folder %s."
msgstr "Unemeyili kwifolda %s."
-#: modules/pam_mkhomedir/pam_mkhomedir.c:107
+#: modules/pam_mkhomedir/pam_mkhomedir.c:123
#, c-format
msgid "Creating directory '%s'."
msgstr ""
-#: modules/pam_mkhomedir/pam_mkhomedir.c:174
+#: modules/pam_mkhomedir/pam_mkhomedir.c:206
#, c-format
msgid "Unable to create and initialize directory '%s'."
msgstr ""
-#: modules/pam_pwhistory/pam_pwhistory.c:211
-#: 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:218
+#: modules/pam_pwhistory/pam_pwhistory.c:385
#, fuzzy
msgid "Password has been already used."
msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye."
@@ -450,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:629
+#: 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:645
+#: modules/pam_selinux/pam_selinux.c:655
#, fuzzy, c-format
msgid "Key creation context %s has been assigned."
msgstr "Indawo %s Yokuphepha Yabelwe"
@@ -480,65 +430,7 @@ msgstr "Ihlulekile ukwenza i-pam_set_item()\n"
msgid "login: failure forking: %m"
msgstr "ngena: Ihlulekile ukuhlukanisa: %m"
-#: modules/pam_tally/pam_tally.c:528 modules/pam_tally2/pam_tally2.c:580
-#, c-format
-msgid "The account is temporarily locked (%ld seconds left)."
-msgstr ""
-
-#: modules/pam_tally/pam_tally.c:729 modules/pam_tally2/pam_tally2.c:846
-msgid "Authentication error"
-msgstr "Iphutha lokugunyaza"
-
-#: modules/pam_tally/pam_tally.c:730 modules/pam_tally2/pam_tally2.c:847
-msgid "Service error"
-msgstr "Iphutha lesevisi"
-
-#: modules/pam_tally/pam_tally.c:731 modules/pam_tally2/pam_tally2.c:848
-msgid "Unknown user"
-msgstr "Umsebenzisi ongaziwa"
-
-#: modules/pam_tally/pam_tally.c:732 modules/pam_tally2/pam_tally2.c:849
-msgid "Unknown error"
-msgstr "Iphutha elingaziwa"
-
-#: modules/pam_tally/pam_tally.c:751 modules/pam_tally2/pam_tally2.c:871
-#, c-format
-msgid "%s: Bad number given to --reset=\n"
-msgstr "%s: Inombolo eyiphutha enikeziwe ukuba --uqale kabusha=\n"
-
-#: modules/pam_tally/pam_tally.c:755 modules/pam_tally2/pam_tally2.c:875
-#, c-format
-msgid "%s: Unrecognised option %s\n"
-msgstr "%s: Okukhethile okungaziwa %s\n"
-
-#: modules/pam_tally/pam_tally.c:767
-#, c-format
-msgid ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-msgstr ""
-"%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
-
-#: modules/pam_tally/pam_tally.c:841 modules/pam_tally2/pam_tally2.c:1014
-#, c-format
-msgid "%s: Can't reset all users to non-zero\n"
-msgstr ""
-"%s: Ayikwazi ukusetha kabusha bonke abasebenzisi ibase enombolweni ongelona "
-"iqanda\n"
-
-#: modules/pam_tally2/pam_tally2.c:903
-#, c-format
-msgid "Login Failures Latest failure From\n"
-msgstr ""
-
-#: modules/pam_tally2/pam_tally2.c:919
-#, c-format
-msgid ""
-"%s: [-f rooted-filename] [--file rooted-filename]\n"
-" [-u username] [--user username]\n"
-" [-r] [--reset[=n]] [--quiet]\n"
-msgstr ""
-
-#: modules/pam_timestamp/pam_timestamp.c:354
+#: modules/pam_timestamp/pam_timestamp.c:382
#, c-format
msgid "Access has been granted (last access was %ld seconds ago)."
msgstr ""
@@ -566,7 +458,7 @@ msgid ""
msgstr ""
"Kudingeka ukuba ushintshe iphasiwedi yakho ngokushesha (iphasiwedi indala)"
-#: modules/pam_unix/pam_unix_acct.c:265 modules/pam_unix/pam_unix_acct.c:272
+#: 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."
@@ -574,30 +466,93 @@ msgstr[0] ""
msgstr[1] ""
#. TRANSLATORS: only used if dngettext is not supported
-#: modules/pam_unix/pam_unix_acct.c:277
+#: modules/pam_unix/pam_unix_acct.c:281
#, c-format
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:581
+#: 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:555
+#, fuzzy
+msgid "The password has not been changed."
+msgstr "Iphasiwedi ye-NIS ayivumanga ukushintshwa."
+
+#: 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"
+
+#~ msgid "is a palindrome"
+#~ msgstr "iyi-palindrome"
+
+#~ msgid "case changes only"
+#~ msgstr "kushintshe onobumba kuphela"
+
+#~ msgid "is too similar to the old one"
+#~ msgstr "ifana kakhulu nendala"
+
+#~ msgid "is too simple"
+#~ msgstr "ilula kakhulu"
+
+#~ msgid "is rotated"
+#~ msgstr "ijikelezisiwe"
+
+#~ msgid "BAD PASSWORD: %s"
+#~ msgstr "IPHASIWEDI ENGASEBENZI: %s"
+
+#~ msgid "Authentication error"
+#~ msgstr "Iphutha lokugunyaza"
+
+#~ msgid "Service error"
+#~ msgstr "Iphutha lesevisi"
+
+#~ msgid "Unknown user"
+#~ msgstr "Umsebenzisi ongaziwa"
+
+#~ msgid "Unknown error"
+#~ msgstr "Iphutha elingaziwa"
+
+#~ msgid "%s: Bad number given to --reset=\n"
+#~ msgstr "%s: Inombolo eyiphutha enikeziwe ukuba --uqale kabusha=\n"
+
+#~ msgid "%s: Unrecognised option %s\n"
+#~ msgstr "%s: Okukhethile okungaziwa %s\n"
+
+#~ msgid ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+#~ msgstr ""
+#~ "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n"
+
+#~ msgid "%s: Can't reset all users to non-zero\n"
+#~ msgstr ""
+#~ "%s: Ayikwazi ukusetha kabusha bonke abasebenzisi ibase enombolweni "
+#~ "ongelona iqanda\n"
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 09b560d0..bc0f56fe 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -102,18 +102,21 @@ TESTS = tst-pam_start$(EXEEXT) tst-pam_end$(EXEEXT) \
check_PROGRAMS = $(am__EXEEXT_1) tst-dlopen$(EXEEXT)
subdir = tests
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -467,6 +470,7 @@ am__set_TESTS_bases = \
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
@@ -511,10 +515,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -524,12 +532,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -543,7 +555,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -562,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@
@@ -590,8 +603,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -602,11 +614,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -651,7 +668,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -659,9 +675,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -671,6 +684,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -1009,7 +1023,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
diff --git a/tests/tst-pam_end.c b/tests/tst-pam_end.c
index 93c2fc32..d79df7c6 100644
--- a/tests/tst-pam_end.c
+++ b/tests/tst-pam_end.c
@@ -46,7 +46,7 @@ main (void)
{
const char *service = "dummy";
const char *user = "root";
- struct pam_conv conv;
+ struct pam_conv conv = { NULL, NULL };
pam_handle_t *pamh;
int retval;
diff --git a/tests/tst-pam_fail_delay.c b/tests/tst-pam_fail_delay.c
index c4323178..d81c5765 100644
--- a/tests/tst-pam_fail_delay.c
+++ b/tests/tst-pam_fail_delay.c
@@ -46,7 +46,7 @@ main (void)
{
const char *service = "dummy";
const char *user = "root";
- struct pam_conv conv;
+ struct pam_conv conv = { NULL, NULL };
pam_handle_t *pamh;
int retval;
diff --git a/tests/tst-pam_get_item.c b/tests/tst-pam_get_item.c
index 2b0cc7e2..c6e3d9fa 100644
--- a/tests/tst-pam_get_item.c
+++ b/tests/tst-pam_get_item.c
@@ -66,7 +66,7 @@ main (void)
{
const char *service = "dummy";
const char *user = "root";
- struct pam_conv conv;
+ struct pam_conv conv = { NULL, NULL };
pam_handle_t *pamh;
int retval;
unsigned int i;
diff --git a/tests/tst-pam_getenvlist.c b/tests/tst-pam_getenvlist.c
index d24a9bf9..a1184f1a 100644
--- a/tests/tst-pam_getenvlist.c
+++ b/tests/tst-pam_getenvlist.c
@@ -48,7 +48,7 @@ main (void)
{
const char *service = "dummy";
const char *user = "root";
- struct pam_conv conv;
+ struct pam_conv conv = { NULL, NULL };
pam_handle_t *pamh;
int retval;
char **ptr;
diff --git a/tests/tst-pam_set_data.c b/tests/tst-pam_set_data.c
index 9acab6a6..d1eaa3ea 100644
--- a/tests/tst-pam_set_data.c
+++ b/tests/tst-pam_set_data.c
@@ -275,7 +275,7 @@ main (void)
{
const char *service = "dummy";
const char *user = "root";
- struct pam_conv conv;
+ struct pam_conv conv = { NULL, NULL };
pam_handle_t *pamh;
void *dataptr;
int retval;
diff --git a/tests/tst-pam_set_item.c b/tests/tst-pam_set_item.c
index bd17e11a..3457b49c 100644
--- a/tests/tst-pam_set_item.c
+++ b/tests/tst-pam_set_item.c
@@ -67,7 +67,7 @@ main (void)
{
const char *service = "dummy";
const char *user = "root";
- struct pam_conv conv;
+ struct pam_conv conv = { NULL, NULL };
pam_handle_t *pamh;
int retval;
unsigned int i;
diff --git a/tests/tst-pam_start.c b/tests/tst-pam_start.c
index ce013633..8fa18f74 100644
--- a/tests/tst-pam_start.c
+++ b/tests/tst-pam_start.c
@@ -46,7 +46,7 @@ main (void)
{
const char *service = "dummy";
const char *user = "root";
- struct pam_conv conv;
+ struct pam_conv conv = { NULL, NULL };
pam_handle_t *pamh;
int retval;
diff --git a/tests/tst-pam_start_confdir.c b/tests/tst-pam_start_confdir.c
index e40b6e70..f731b2a5 100644
--- a/tests/tst-pam_start_confdir.c
+++ b/tests/tst-pam_start_confdir.c
@@ -50,7 +50,7 @@ main (void)
const char *user = "root";
const char *confdir;
const char *xconfdir = "/nonexistent-confdir";
- struct pam_conv conv;
+ struct pam_conv conv = { NULL, NULL };
pam_handle_t *pamh;
int retval;
diff --git a/xtests/Makefile.am b/xtests/Makefile.am
index 2e942e8d..acf97469 100644
--- a/xtests/Makefile.am
+++ b/xtests/Makefile.am
@@ -13,7 +13,6 @@ CLEANFILES = *~ $(XTESTS)
EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \
tst-pam_dispatch3.pamd tst-pam_dispatch4.pamd \
tst-pam_dispatch5.pamd \
- tst-pam_cracklib1.pamd tst-pam_cracklib2.pamd \
tst-pam_unix1.pamd tst-pam_unix2.pamd tst-pam_unix3.pamd \
tst-pam_unix4.pamd \
tst-pam_unix1.sh tst-pam_unix2.sh tst-pam_unix3.sh \
@@ -26,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 \
@@ -40,12 +40,12 @@ EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \
XTESTS = tst-pam_dispatch1 tst-pam_dispatch2 tst-pam_dispatch3 \
tst-pam_dispatch4 tst-pam_dispatch5 \
- tst-pam_cracklib1 tst-pam_cracklib2 \
tst-pam_unix1 tst-pam_unix2 tst-pam_unix3 tst-pam_unix4 \
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 02723870..e82d05a9 100644
--- a/xtests/Makefile.in
+++ b/xtests/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -94,18 +94,21 @@ host_triplet = @host@
EXTRA_PROGRAMS = $(am__EXEEXT_1)
subdir = xtests
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
- $(top_srcdir)/m4/japhar_grep_cflags.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/attribute.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/jh_path_xml_catalog.m4 \
$(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \
- $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/ld-no-undefined.m4 \
+ $(top_srcdir)/m4/ld-z-now.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libprelude.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/warn_lang_flags.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -115,8 +118,7 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__EXEEXT_1 = tst-pam_dispatch1$(EXEEXT) tst-pam_dispatch2$(EXEEXT) \
tst-pam_dispatch3$(EXEEXT) tst-pam_dispatch4$(EXEEXT) \
- tst-pam_dispatch5$(EXEEXT) tst-pam_cracklib1$(EXEEXT) \
- tst-pam_cracklib2$(EXEEXT) tst-pam_unix1$(EXEEXT) \
+ tst-pam_dispatch5$(EXEEXT) tst-pam_unix1$(EXEEXT) \
tst-pam_unix2$(EXEEXT) tst-pam_unix3$(EXEEXT) \
tst-pam_unix4$(EXEEXT) tst-pam_access1$(EXEEXT) \
tst-pam_access2$(EXEEXT) tst-pam_access3$(EXEEXT) \
@@ -124,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)
@@ -159,16 +161,6 @@ tst_pam_authsucceed_OBJECTS = tst-pam_authsucceed.$(OBJEXT)
tst_pam_authsucceed_LDADD = $(LDADD)
tst_pam_authsucceed_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
$(top_builddir)/libpam_misc/libpam_misc.la
-tst_pam_cracklib1_SOURCES = tst-pam_cracklib1.c
-tst_pam_cracklib1_OBJECTS = tst-pam_cracklib1.$(OBJEXT)
-tst_pam_cracklib1_LDADD = $(LDADD)
-tst_pam_cracklib1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
- $(top_builddir)/libpam_misc/libpam_misc.la
-tst_pam_cracklib2_SOURCES = tst-pam_cracklib2.c
-tst_pam_cracklib2_OBJECTS = tst-pam_cracklib2.$(OBJEXT)
-tst_pam_cracklib2_LDADD = $(LDADD)
-tst_pam_cracklib2_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \
- $(top_builddir)/libpam_misc/libpam_misc.la
tst_pam_dispatch1_SOURCES = tst-pam_dispatch1.c
tst_pam_dispatch1_OBJECTS = tst-pam_dispatch1.$(OBJEXT)
tst_pam_dispatch1_LDADD = $(LDADD)
@@ -214,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)
@@ -263,8 +260,6 @@ am__depfiles_remade = ./$(DEPDIR)/tst-pam_access1.Po \
./$(DEPDIR)/tst-pam_access2.Po ./$(DEPDIR)/tst-pam_access3.Po \
./$(DEPDIR)/tst-pam_access4.Po ./$(DEPDIR)/tst-pam_authfail.Po \
./$(DEPDIR)/tst-pam_authsucceed.Po \
- ./$(DEPDIR)/tst-pam_cracklib1.Po \
- ./$(DEPDIR)/tst-pam_cracklib2.Po \
./$(DEPDIR)/tst-pam_dispatch1.Po \
./$(DEPDIR)/tst-pam_dispatch2.Po \
./$(DEPDIR)/tst-pam_dispatch3.Po \
@@ -272,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 \
@@ -297,20 +293,20 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
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_cracklib1.c tst-pam_cracklib2.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_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_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_cracklib1.c tst-pam_cracklib2.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_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_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;; \
@@ -356,10 +352,14 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CRYPTO_LIBS = @CRYPTO_LIBS@
+CRYPT_CFLAGS = @CRYPT_CFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+DOCBOOK_RNG = @DOCBOOK_RNG@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -369,12 +369,16 @@ ECONF_CFLAGS = @ECONF_CFLAGS@
ECONF_LIBS = @ECONF_LIBS@
EGREP = @EGREP@
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@
@@ -388,7 +392,6 @@ LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBAUDIT = @LIBAUDIT@
-LIBCRACK = @LIBCRACK@
LIBCRYPT = @LIBCRYPT@
LIBDB = @LIBDB@
LIBDL = @LIBDL@
@@ -407,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@
@@ -435,8 +440,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PIE_CFLAGS = @PIE_CFLAGS@
-PIE_LDFLAGS = @PIE_LDFLAGS@
+PDF_STYLESHEET = @PDF_STYLESHEET@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -447,11 +451,16 @@ SECUREDIR = @SECUREDIR@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+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@
@@ -496,7 +505,6 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-libc_cv_fpie = @libc_cv_fpie@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -504,9 +512,6 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
-pam_cv_ld_O1 = @pam_cv_ld_O1@
-pam_cv_ld_as_needed = @pam_cv_ld_as_needed@
-pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@
pam_xauth_path = @pam_xauth_path@
pdfdir = @pdfdir@
prefix = @prefix@
@@ -516,6 +521,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
+systemdunitdir = @systemdunitdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
@@ -531,7 +537,6 @@ CLEANFILES = *~ $(XTESTS)
EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \
tst-pam_dispatch3.pamd tst-pam_dispatch4.pamd \
tst-pam_dispatch5.pamd \
- tst-pam_cracklib1.pamd tst-pam_cracklib2.pamd \
tst-pam_unix1.pamd tst-pam_unix2.pamd tst-pam_unix3.pamd \
tst-pam_unix4.pamd \
tst-pam_unix1.sh tst-pam_unix2.sh tst-pam_unix3.sh \
@@ -544,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 \
@@ -558,12 +564,12 @@ EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \
XTESTS = tst-pam_dispatch1 tst-pam_dispatch2 tst-pam_dispatch3 \
tst-pam_dispatch4 tst-pam_dispatch5 \
- tst-pam_cracklib1 tst-pam_cracklib2 \
tst-pam_unix1 tst-pam_unix2 tst-pam_unix3 tst-pam_unix4 \
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
@@ -626,14 +632,6 @@ tst-pam_authsucceed$(EXEEXT): $(tst_pam_authsucceed_OBJECTS) $(tst_pam_authsucce
@rm -f tst-pam_authsucceed$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tst_pam_authsucceed_OBJECTS) $(tst_pam_authsucceed_LDADD) $(LIBS)
-tst-pam_cracklib1$(EXEEXT): $(tst_pam_cracklib1_OBJECTS) $(tst_pam_cracklib1_DEPENDENCIES) $(EXTRA_tst_pam_cracklib1_DEPENDENCIES)
- @rm -f tst-pam_cracklib1$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(tst_pam_cracklib1_OBJECTS) $(tst_pam_cracklib1_LDADD) $(LIBS)
-
-tst-pam_cracklib2$(EXEEXT): $(tst_pam_cracklib2_OBJECTS) $(tst_pam_cracklib2_DEPENDENCIES) $(EXTRA_tst_pam_cracklib2_DEPENDENCIES)
- @rm -f tst-pam_cracklib2$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(tst_pam_cracklib2_OBJECTS) $(tst_pam_cracklib2_LDADD) $(LIBS)
-
tst-pam_dispatch1$(EXEEXT): $(tst_pam_dispatch1_OBJECTS) $(tst_pam_dispatch1_DEPENDENCIES) $(EXTRA_tst_pam_dispatch1_DEPENDENCIES)
@rm -f tst-pam_dispatch1$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tst_pam_dispatch1_OBJECTS) $(tst_pam_dispatch1_LDADD) $(LIBS)
@@ -670,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)
@@ -706,8 +708,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_access4.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_authfail.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_authsucceed.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_cracklib1.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_cracklib2.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_dispatch1.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_dispatch2.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_dispatch3.Po@am__quote@ # am--include-marker
@@ -717,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
@@ -888,8 +889,6 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/tst-pam_access4.Po
-rm -f ./$(DEPDIR)/tst-pam_authfail.Po
-rm -f ./$(DEPDIR)/tst-pam_authsucceed.Po
- -rm -f ./$(DEPDIR)/tst-pam_cracklib1.Po
- -rm -f ./$(DEPDIR)/tst-pam_cracklib2.Po
-rm -f ./$(DEPDIR)/tst-pam_dispatch1.Po
-rm -f ./$(DEPDIR)/tst-pam_dispatch2.Po
-rm -f ./$(DEPDIR)/tst-pam_dispatch3.Po
@@ -899,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
@@ -956,8 +956,6 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/tst-pam_access4.Po
-rm -f ./$(DEPDIR)/tst-pam_authfail.Po
-rm -f ./$(DEPDIR)/tst-pam_authsucceed.Po
- -rm -f ./$(DEPDIR)/tst-pam_cracklib1.Po
- -rm -f ./$(DEPDIR)/tst-pam_cracklib2.Po
-rm -f ./$(DEPDIR)/tst-pam_dispatch1.Po
-rm -f ./$(DEPDIR)/tst-pam_dispatch2.Po
-rm -f ./$(DEPDIR)/tst-pam_dispatch3.Po
@@ -967,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_cracklib1.c b/xtests/tst-pam_cracklib1.c
deleted file mode 100644
index 1a219c83..00000000
--- a/xtests/tst-pam_cracklib1.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <security/pam_appl.h>
-
-/* A conversation function which uses an internally-stored value for
- the responses. */
-static int
-fake_conv (int num_msg, const struct pam_message **msgm UNUSED,
- struct pam_response **response, void *appdata_ptr UNUSED)
-{
- static int calls = 0;
- struct pam_response *reply;
- int count;
-
- /* Sanity test. */
- if (num_msg <= 0)
- return PAM_CONV_ERR;
-
- /* Allocate memory for the responses. */
- reply = calloc (num_msg, sizeof (struct pam_response));
- if (reply == NULL)
- return PAM_CONV_ERR;
-
- /* Each prompt elicits the same response. */
- for (count = 0; count < num_msg; ++count)
- {
- reply[count].resp_retcode = 0;
- /* first call get a password, second one NULL */
- if (calls)
- reply[count].resp = NULL;
- else
- {
- ++calls;
- reply[count].resp = strdup ("Kindergarten");
- }
- }
-
- /* Set the pointers in the response structure and return. */
- *response = reply;
- return PAM_SUCCESS;
-}
-
-static struct pam_conv conv = {
- fake_conv,
- NULL
-};
-
-
-/* Check that pam_cracklib does not seg.fault on empty passwords. */
-
-int
-main(int argc, char *argv[])
-{
- pam_handle_t *pamh=NULL;
- const char *user="root";
- int retval;
- int debug = 0;
-
- if (argc > 1 && strcmp (argv[1], "-d") == 0)
- debug = 1;
-
- retval = pam_start("tst-pam_cracklib1", user, &conv, &pamh);
- if (retval != PAM_SUCCESS)
- {
- if (debug)
- fprintf (stderr, "cracklib1: pam_start returned %d\n", retval);
- return 1;
- }
-
- /* Try one, first input is correct, second is NULL */
- retval = pam_chauthtok (pamh, 0);
- if (retval != PAM_AUTHTOK_ERR)
- {
- if (debug)
- fprintf (stderr, "cracklib1-1: pam_chauthtok returned %d\n", retval);
- return 1;
- }
-
- /* Try two, second input is NULL */
- retval = pam_chauthtok (pamh, 0);
- if (retval != PAM_AUTHTOK_ERR)
- {
- if (debug)
- fprintf (stderr, "cracklib1-2: pam_chauthtok returned %d\n", retval);
- return 1;
- }
-
-
- retval = pam_end (pamh,retval);
- if (retval != PAM_SUCCESS)
- {
- if (debug)
- fprintf (stderr, "cracklib1: pam_end returned %d\n", retval);
- return 1;
- }
- return 0;
-}
diff --git a/xtests/tst-pam_cracklib1.pamd b/xtests/tst-pam_cracklib1.pamd
deleted file mode 100644
index 41a9188d..00000000
--- a/xtests/tst-pam_cracklib1.pamd
+++ /dev/null
@@ -1,2 +0,0 @@
-#%PAM-1.0
-password required pam_cracklib.so
diff --git a/xtests/tst-pam_cracklib2.c b/xtests/tst-pam_cracklib2.c
deleted file mode 100644
index 84b4ef64..00000000
--- a/xtests/tst-pam_cracklib2.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * 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.
- */
-
-/* This test case checks
- Patch 1688777: pam_cracklib support for minimum character classes */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <security/pam_appl.h>
-
-int debug = 0;
-
-/* A conversation function which uses an internally-stored value for
- the responses. */
-static int
-fake_conv (int num_msg, const struct pam_message **msgm,
- struct pam_response **response, void *appdata_ptr UNUSED)
-{
- static int calls = 0;
- struct pam_response *reply;
- int count;
-
- /* Sanity test. */
- if (num_msg <= 0)
- return PAM_CONV_ERR;
-
- /* Allocate memory for the responses. */
- reply = calloc (num_msg, sizeof (struct pam_response));
- if (reply == NULL)
- return PAM_CONV_ERR;
-
- /* Each prompt elicits the same response. */
- for (count = 0; count < num_msg; ++count)
- {
- if (debug)
- fprintf(stderr,"Query: %s\n", (*msgm)[count].msg);
- reply[count].resp_retcode = 0;
- /* first tow calls get a correct password, second a too
- easy one. */
- if (calls > 1)
- reply[count].resp = strdup ("too easy");
- else
- {
- ++calls;
- reply[count].resp = strdup ("1a9C*8dK");
- }
- if (debug)
- fprintf(stderr,"Response: %s\n", reply[count].resp);
- }
-
- /* Set the pointers in the response structure and return. */
- *response = reply;
- return PAM_SUCCESS;
-}
-
-static struct pam_conv conv = {
- fake_conv,
- NULL
-};
-
-
-int
-main(int argc, char *argv[])
-{
- pam_handle_t *pamh=NULL;
- const char *user="root";
- int retval;
-
- if (argc > 1 && strcmp (argv[1], "-d") == 0)
- debug = 1;
-
- retval = pam_start("tst-pam_cracklib2", user, &conv, &pamh);
- if (retval != PAM_SUCCESS)
- {
- if (debug)
- fprintf (stderr, "cracklib2: pam_start returned %d\n", retval);
- return 1;
- }
-
- /* Try one, first input is correct */
- retval = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
- if (retval != PAM_SUCCESS)
- {
- if (debug)
- fprintf (stderr, "cracklib2-1: pam_chauthtok returned %d\n", retval);
- return 1;
- }
-
- /* Try two, second input is wrong */
- retval = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
- if (retval != PAM_AUTHTOK_ERR)
- {
- if (debug)
- fprintf (stderr, "cracklib2-2: pam_chauthtok returned %d\n", retval);
- return 1;
- }
-
-
- retval = pam_end (pamh,retval);
- if (retval != PAM_SUCCESS)
- {
- if (debug)
- fprintf (stderr, "cracklib2: pam_end returned %d\n", retval);
- return 1;
- }
- return 0;
-}
diff --git a/xtests/tst-pam_cracklib2.pamd b/xtests/tst-pam_cracklib2.pamd
deleted file mode 100644
index 5915aecd..00000000
--- a/xtests/tst-pam_cracklib2.pamd
+++ /dev/null
@@ -1,2 +0,0 @@
-#%PAM-1.0
-password required pam_cracklib.so minclass=4
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