Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pam-config for openSUSE:Factory checked in at 2025-08-27 21:33:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pam-config (Old) and /work/SRC/openSUSE:Factory/.pam-config.new.30751 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pam-config" Wed Aug 27 21:33:39 2025 rev:108 rq:1301536 version:2.13+git.20250827 Changes: -------- --- /work/SRC/openSUSE:Factory/pam-config/pam-config.changes 2025-07-17 17:17:56.405692649 +0200 +++ /work/SRC/openSUSE:Factory/.pam-config.new.30751/pam-config.changes 2025-08-27 21:34:04.709175541 +0200 @@ -1,0 +2,14 @@ +Wed Aug 27 10:11:24 UTC 2025 - Thorsten Kukuk <[email protected]> + +- Update to version 2.13+git.20250827: + * Add CI + * Update autoconf configs + * Add support for pam_unix_ng + +------------------------------------------------------------------- +Thu Aug 21 13:55:57 UTC 2025 - Thorsten Kukuk <[email protected]> + +- Update to version 2.13+git.20250819: + * pam_unix: fix {use|try}_first_pass and use_authtok + +------------------------------------------------------------------- Old: ---- pam-config-2.13+git.20250715.tar.xz New: ---- pam-config-2.13+git.20250827.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pam-config.spec ++++++ --- /var/tmp/diff_new_pack.w6JNdf/_old 2025-08-27 21:34:05.257198454 +0200 +++ /var/tmp/diff_new_pack.w6JNdf/_new 2025-08-27 21:34:05.261198622 +0200 @@ -17,7 +17,7 @@ Name: pam-config -Version: 2.13+git.20250715 +Version: 2.13+git.20250827 Release: 0 Summary: Utility to modify common PAM configuration files License: GPL-2.0-only ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.w6JNdf/_old 2025-08-27 21:34:05.309200629 +0200 +++ /var/tmp/diff_new_pack.w6JNdf/_new 2025-08-27 21:34:05.309200629 +0200 @@ -2,7 +2,7 @@ <service name="tar_scm"> <param name="url">https://github.com/SUSE/pam-config.git</param> -<param name="changesrevision">f5caa1e70f5af87d7f84e19f7c13ffde1e2cf288</param></service> +<param name="changesrevision">b84075e76870a80f2d52d4b11d4ea3dfb512f522</param></service> </servicedata> (No newline at EOF) ++++++ pam-config-2.13+git.20250715.tar.xz -> pam-config-2.13+git.20250827.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/.github/workflows/ci-opensuse.yml new/pam-config-2.13+git.20250827/.github/workflows/ci-opensuse.yml --- old/pam-config-2.13+git.20250715/.github/workflows/ci-opensuse.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/pam-config-2.13+git.20250827/.github/workflows/ci-opensuse.yml 2025-08-27 12:09:28.000000000 +0200 @@ -0,0 +1,24 @@ +name: openSUSE build & test + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + container: registry.opensuse.org/opensuse/tumbleweed:latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install devel packages + run: | + zypper ref + zypper --non-interactive in --no-recommends autoconf automake diffutils docbook-xsl-stylesheets gcc gettext-tools make valgrind + + - name: Setup configure + run: | + ./autogen.sh + ./configure + + - name: Compile code + run: make diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/autogen.sh new/pam-config-2.13+git.20250827/autogen.sh --- old/pam-config-2.13+git.20250715/autogen.sh 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/autogen.sh 2025-08-27 12:09:28.000000000 +0200 @@ -3,8 +3,7 @@ rm -fv ltmain.sh config.sub config.guess config.h.in config.rpath autopoint --force rm -fv po/Makevars.template po/ChangeLog m4/ChangeLog -mkdir -p m4 -aclocal -I m4 +aclocal autoheader automake --add-missing --copy --force -autoreconf +autoreconf --install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/configure.ac new/pam-config-2.13+git.20250827/configure.ac --- old/pam-config-2.13+git.20250715/configure.ac 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/configure.ac 2025-08-27 12:09:28.000000000 +0200 @@ -1,9 +1,9 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([pam-config],[2.13]) +AC_INIT([pam-config],[2.14]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([src/pam-config.c]) -AM_CONFIG_HEADER(config.h) AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_HEADERS([config.h]) AC_PREFIX_DEFAULT(/usr) AC_SUBST(PACKAGE) AC_SUBST(VERSION) @@ -25,7 +25,6 @@ dnl Checks for programs. AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC -AC_SEARCH_LIBS([strerror],[cposix]) AC_PROG_INSTALL AC_PROG_MAKE_SET AC_PROG_RANLIB @@ -55,9 +54,9 @@ dnl internationalization macros -AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.2]) -AM_GNU_GETTEXT_VERSION([0.20.2]) AM_GNU_GETTEXT([external]) +AM_GNU_GETTEXT_REQUIRE_VERSION([0.20.2]) + AC_CHECK_FUNCS(dngettext) AH_VERBATIM([__ZZENABLE_NLS], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/po/Makefile.in.in new/pam-config-2.13+git.20250827/po/Makefile.in.in --- old/pam-config-2.13+git.20250715/po/Makefile.in.in 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/po/Makefile.in.in 2025-08-27 12:09:28.000000000 +0200 @@ -1,14 +1,26 @@ # Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-2000 Ulrich Drepper <[email protected]> -# Copyright (C) 2000-2023 Free Software Foundation, Inc. +# Copyright (C) 2000-2025 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # -# Origin: gettext-0.22 -GETTEXT_MACRO_VERSION = 0.20 +# Origin: gettext-0.26 +GETTEXT_MACRO_VERSION = 0.24 + +# This Makefile makes use of the variable assignment operator != standardized +# by POSIX:2024 +# <https://pubs.opengroup.org/onlinepubs/9799919799/utilities/make.html>. +# It thus requires a 'make' implementation that supports this operator !=. +# As of 2024, these are: GNU make >= 4.0, FreeBSD make, NetBSD make, +# OpenBSD make. This means that building on specific platforms requires +# use of GNU make: +# - On macOS, use /opt/homebrew/bin/gmake. +# - On Solaris 11 OpenIndiana, use /usr/bin/gmake = /usr/gnu/bin/make. +# - On Solaris 11.4, install GNU make yourself. +# - On AIX, use /opt/freeware/bin/make. PACKAGE = @PACKAGE@ VERSION = @VERSION@ @@ -64,19 +76,60 @@ MSGCONV = msgconv MSGFILTER = msgfilter -POFILES = @POFILES@ -GMOFILES = @GMOFILES@ -UPDATEPOFILES = @UPDATEPOFILES@ -DUMMYPOFILES = @DUMMYPOFILES@ -DISTFILES.common = Makefile.in.in remove-potcdate.sin \ -$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) -DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ -$(POFILES) $(GMOFILES) \ -$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) - -POTFILES = \ - -CATALOGS = @CATALOGS@ +# The list of files which contain translatable strings. +POTFILES != sed -e '/^\#/d' < $(srcdir)/POTFILES.in +# This is computed as $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) +POTFILES_DEPS != for file in $(POTFILES); do echo $(top_srcdir)/$$file; done + +# The set of available translations. +ALL_LINGUAS != if test -f $(srcdir)/LINGUAS; then \ + sed -e '/^\#/d' < $(srcdir)/LINGUAS; \ + else \ + echo $(LINGUAS); \ + fi +# This is computed as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) +POFILES != for lang in $(ALL_LINGUAS); do echo $(srcdir)/$$lang.po; done +# This is computed as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) +GMOFILES != for lang in $(ALL_LINGUAS); do echo $(srcdir)/$$lang.gmo; done +# This is computed as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) +UPDATEPOFILES != for lang in $(ALL_LINGUAS); do echo $$lang.po-update; done +# This is computed as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) +DUMMYPOFILES != for lang in $(ALL_LINGUAS); do echo $$lang.nop; done + +DISTFILES.common = \ + Makefile.in.in remove-potcdate.sed \ + $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) \ + $(DISTFILES.common.extra3) $(DISTFILES.common.extra4) \ + $(DISTFILES.common.extra5) $(DISTFILES.common.extra6) +DISTFILES = \ + $(DISTFILES.common) \ + Makevars POTFILES.in \ + $(POFILES) $(GMOFILES) \ + $(DISTFILES.extra1) $(DISTFILES.extra2) \ + $(DISTFILES.extra3) $(DISTFILES.extra4) \ + $(DISTFILES.extra5) $(DISTFILES.extra6) + +# The set of desired translations, as specified by the installer or distributor. +DESIRED_LINGUAS = @DESIRED_LINGUAS@ +# The set of translations to install. This is computed based on $(ALL_LINGUAS) +# and $(DESIRED_LINGUAS). It is a subset of $(ALL_LINGUAS). +# We use the presentlang catalog if desiredlang is +# a. equal to presentlang, or +# b. a variant of presentlang (because in this case, presentlang can be used +# as a fallback for messages which are not translated in the desiredlang +# catalog). +INST_LINGUAS != for presentlang in $(ALL_LINGUAS); do \ + useit=false; \ + for desiredlang in $(DESIRED_LINGUAS); do \ + case "$$desiredlang" in \ + "$$presentlang" | "$$presentlang"_* | "$$presentlang".* | "$$presentlang"@*) \ + useit=true ;; \ + esac; \ + done; \ + if $$useit; then echo $$presentlang; fi; \ + done +# This is computed as $(foreach lang, $(INST_LINGUAS), $(lang).gmo) +CATALOGS != for lang in $(INST_LINGUAS); do echo $$lang.gmo; done POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) @@ -88,13 +141,14 @@ DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) -# Makevars gets inserted here. (Don't remove this line!) +# Include the customization of this po/ directory. +include $(srcdir)/Makevars all: all-@USE_NLS@ .SUFFIXES: -.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update +.SUFFIXES: .po .gmo .nop .po-create .po-update # The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs. # The GNU Coding Standards say in @@ -113,6 +167,7 @@ $(GMOFILES): $(srcdir)/$(DOMAIN).pot .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \ cd $(srcdir) && \ @@ -122,10 +177,6 @@ mv t-$${lang}.gmo $${lang}.gmo && \ rm -f $${lang}.1po -.sin.sed: - sed -e '/^#/d' $< > t-$@ - mv t-$@ $@ - all-yes: $(srcdir)/stamp-po all-no: @@ -161,16 +212,12 @@ mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \ } -# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', -# otherwise packages like GCC can not be built if only parts of the source -# have been downloaded. - # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. -$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed +$(DOMAIN).pot-update: $(POTFILES_DEPS) $(srcdir)/POTFILES.in package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ @@ -222,8 +269,8 @@ || exit 1; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ - sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ - sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + sed -f $(srcdir)/remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f $(srcdir)/remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ @@ -247,6 +294,7 @@ @test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ @@ -396,7 +444,6 @@ install-dvi install-ps install-pdf install-html: mostlyclean: - rm -f remove-potcdate.sed rm -f $(srcdir)/stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o @@ -404,7 +451,7 @@ clean: mostlyclean distclean: clean - rm -f Makefile Makefile.in POTFILES + rm -f Makefile Makefile.in maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @@ -499,11 +546,24 @@ update-gmo: Makefile $(GMOFILES) @: +# Include all the Rules-* extensions. Documented in +# <https://www.gnu.org/software/gettext/manual/html_node/po_002fRules_002d_002a.html> +RULES_FILES != cd $(srcdir) \ + && for file in Rules-*; do \ + if test -f "$$file"; then \ + case "$$file" in \ + *.orig | *.bak | *~) ;; \ + *) echo $(srcdir)/"$$file" ;; \ + esac; \ + fi; \ + done +include $(RULES_FILES) + # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. -Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/[email protected] po-directories @@ -512,3 +572,9 @@ # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: + +# This Makefile contains rules which don't work with parallel make, +# namely dist2. +# See <https://lists.gnu.org/archive/html/bug-gettext/2022-06/msg00022.html>. +# So, turn off parallel execution in this Makefile. +.NOTPARALLEL: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/po/Rules-quot new/pam-config-2.13+git.20250827/po/Rules-quot --- old/pam-config-2.13+git.20250715/po/Rules-quot 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/po/Rules-quot 2025-08-27 12:09:28.000000000 +0200 @@ -1,11 +1,14 @@ # Special Makefile rules for English message catalogs with quotation marks. # -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# This file, Rules-quot, and its auxiliary files (listed under -# DISTFILES.common.extra1) are free software; the Free Software Foundation -# gives unlimited permission to use, copy, distribute, and modify them. +# Copyright (C) 2001-2024 Free Software Foundation, Inc. +# This file 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 file is offered as-is, without any warranty. +# +# Written by Bruno Haible <[email protected]>, 2001. -DISTFILES.common.extra1 = quot.sed boldquot.sed [email protected] [email protected] insert-header.sin Rules-quot +DISTFILES.common.extra1 = quot.sed boldquot.sed [email protected] [email protected] insert-header.sed Rules-quot .SUFFIXES: .insert-header .po-update-en @@ -26,7 +29,8 @@ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ - | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ + | $(SED) -f $$tmpdir/$$lang.insert-header | $(SED) -e '/^%%/d' \ + | $(MSGCONV) -t UTF-8 | \ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ @@ -51,11 +55,11 @@ rm -f $$tmpdir/$$lang.new.po; \ fi [email protected]: insert-header.sin - sed -e '/^#/d' -e 's/HEADER/[email protected]/g' $(srcdir)/insert-header.sin > [email protected] [email protected]: insert-header.sed + sed -e 's/HEADER/[email protected]/g' $(srcdir)/insert-header.sed > [email protected] [email protected]: insert-header.sin - sed -e '/^#/d' -e 's/HEADER/[email protected]/g' $(srcdir)/insert-header.sin > [email protected] [email protected]: insert-header.sed + sed -e 's/HEADER/[email protected]/g' $(srcdir)/insert-header.sed > [email protected] mostlyclean: mostlyclean-quot mostlyclean-quot: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/po/boldquot.sed new/pam-config-2.13+git.20250827/po/boldquot.sed --- old/pam-config-2.13+git.20250715/po/boldquot.sed 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/po/boldquot.sed 2025-08-27 12:09:28.000000000 +0200 @@ -1,3 +1,14 @@ +# Sed script that converts quotations, by replacing ASCII quotation marks +# with Unicode quotation marks and highlighting the quotations in bold face. +# +# Copyright (C) 2001 Free Software Foundation, Inc. +# This file 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 file is offered as-is, without any warranty. +# +# Written by Bruno Haible <[email protected]>, 2001. +# s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/po/[email protected] new/pam-config-2.13+git.20250827/po/[email protected] --- old/pam-config-2.13+git.20250715/po/[email protected] 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/po/[email protected] 2025-08-27 12:09:28.000000000 +0200 @@ -1,3 +1,13 @@ +%% A header that gets inserted into message catalogs named [email protected]. +%% +%% Copyright (C) 2001 Free Software Foundation, Inc. +%% This file 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 file is offered as-is, without any warranty. +%% +%% Written by Bruno Haible <[email protected]>, 2001. +%% # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/po/[email protected] new/pam-config-2.13+git.20250827/po/[email protected] --- old/pam-config-2.13+git.20250715/po/[email protected] 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/po/[email protected] 2025-08-27 12:09:28.000000000 +0200 @@ -1,3 +1,13 @@ +%% A header that gets inserted into message catalogs named [email protected]. +%% +%% Copyright (C) 2001 Free Software Foundation, Inc. +%% This file 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 file is offered as-is, without any warranty. +%% +%% Written by Bruno Haible <[email protected]>, 2001. +%% # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/po/quot.sed new/pam-config-2.13+git.20250827/po/quot.sed --- old/pam-config-2.13+git.20250715/po/quot.sed 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/po/quot.sed 2025-08-27 12:09:28.000000000 +0200 @@ -1,3 +1,14 @@ +# Sed script that converts quotations, by replacing ASCII quotation marks +# with Unicode quotation marks. +# +# Copyright (C) 2001 Free Software Foundation, Inc. +# This file 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 file is offered as-is, without any warranty. +# +# Written by Bruno Haible <[email protected]>, 2001. +# s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/src/Makefile.am new/pam-config-2.13+git.20250827/src/Makefile.am --- old/pam-config-2.13+git.20250715/src/Makefile.am 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/src/Makefile.am 2025-08-27 12:09:28.000000000 +0200 @@ -36,7 +36,7 @@ mod_pam_kwallet5.c mod_pam_keyinit.c mod_pam_mktemp.c \ mod_pam_pwquality.c mod_pam_u2f.c mod_pam_faildelay.c \ mod_pam_lastlog2.c mod_pam_fscrypt.c mod_pam_wtmpdb.c \ - mod_pam_himmelblau.c mod_pam_kanidm.c + mod_pam_himmelblau.c mod_pam_kanidm.c mod_pam_unix_ng.c noinst_HEADERS = pam-config.h pam-module.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/src/mod_pam_unix.c new/pam-config-2.13+git.20250827/src/mod_pam_unix.c --- old/pam-config-2.13+git.20250715/src/mod_pam_unix.c 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/src/mod_pam_unix.c 2025-08-27 12:09:28.000000000 +0200 @@ -30,7 +30,7 @@ { option_set_t *opt_set = this->get_opt_set (this, op); int with_krb5, with_ldap, with_lum, with_winbind, with_pwcheck, - with_cracklib, with_mount, with_sss; + with_cracklib, with_pwquality, with_mount, with_sss; if (debug) debug_write_call (this, op); @@ -38,14 +38,15 @@ if (!opt_set->is_enabled (opt_set, "is_enabled")) return 0; - with_krb5 = is_module_enabled (common_module_list, "pam_krb5.so" , op); - with_ldap = is_module_enabled (common_module_list, "pam_ldap.so" , op); - with_lum = is_module_enabled (common_module_list, "pam_lum.so" , op); - with_winbind = is_module_enabled (common_module_list, "pam_winbind.so" , op); - with_sss = is_module_enabled (common_module_list, "pam_sss.so" , op); - with_pwcheck = is_module_enabled (common_module_list, "pam_pwcheck.so" , op); - with_cracklib = is_module_enabled (common_module_list, "pam_cracklib.so", op); - with_mount = is_module_enabled (common_module_list, "pam_mount.so" , op); + with_krb5 = is_module_enabled (common_module_list, "pam_krb5.so", op); + with_ldap = is_module_enabled (common_module_list, "pam_ldap.so", op); + with_lum = is_module_enabled (common_module_list, "pam_lum.so", op); + with_winbind = is_module_enabled (common_module_list, "pam_winbind.so", op); + with_sss = is_module_enabled (common_module_list, "pam_sss.so", op); + with_pwcheck = is_module_enabled (common_module_list, "pam_pwcheck.so", op); + with_cracklib = is_module_enabled (common_module_list, "pam_cracklib.so", op); + with_pwquality = is_module_enabled (common_module_list, "pam_pwquality.so", op); + with_mount = is_module_enabled (common_module_list, "pam_mount.so", op); switch (op) { @@ -60,6 +61,10 @@ * one. * */ opt_set->enable (opt_set, "use_first_pass", TRUE); + + if (!opt_set->is_enabled (opt_set, "use_first_pass") && + !opt_set->is_enabled (opt_set, "try_first_pass")) + opt_set->enable (opt_set, "try_first_pass", TRUE); break; case ACCOUNT: if (with_krb5 || with_ldap || with_lum || with_winbind || with_sss) @@ -80,7 +85,7 @@ fprintf (fp, "password\tsufficient\tpam_unix.so\t"); else fprintf (fp, "password\trequired\tpam_unix.so\t"); - if (with_pwcheck || with_cracklib) + if (with_pwcheck || with_cracklib || with_pwquality) fprintf (fp, "use_authtok "); break; case SESSION: @@ -88,10 +93,6 @@ break; } - if (!opt_set->is_enabled (opt_set, "use_first_pass") && - !opt_set->is_enabled (opt_set, "try_first_pass")) - opt_set->enable (opt_set, "try_first_pass", TRUE); - WRITE_CONFIG_OPTIONS return 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/src/mod_pam_unix_ng.c new/pam-config-2.13+git.20250827/src/mod_pam_unix_ng.c --- old/pam-config-2.13+git.20250715/src/mod_pam_unix_ng.c 1970-01-01 01:00:00.000000000 +0100 +++ new/pam-config-2.13+git.20250827/src/mod_pam_unix_ng.c 2025-08-27 12:09:28.000000000 +0200 @@ -0,0 +1,94 @@ +/* Copyright (C) 2007, 2008 Sven Schober + Author: Sven Schober <[email protected]> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <string.h> +#include <ctype.h> + +#include "pam-config.h" +#include "pam-module.h" + +static int +write_config_unix_ng (pam_module_t *this, enum write_type op, FILE *fp) +{ + option_set_t *opt_set = this->get_opt_set (this, op); + int with_pwquality; + + if (debug) + debug_write_call (this, op); + + if (!opt_set->is_enabled (opt_set, "is_enabled")) + return 0; + + with_pwquality = is_module_enabled (common_module_list, "pam_pwquality.so" , op); + + switch (op) + { + case AUTH: + fprintf (fp, "auth\trequired\tpam_unix_ng.so\t"); + if (!opt_set->is_enabled (opt_set, "use_first_pass") && + !opt_set->is_enabled (opt_set, "try_first_pass")) + opt_set->enable (opt_set, "try_first_pass", TRUE); + break; + case ACCOUNT: + fprintf (fp, "account\trequired\tpam_unix_ng.so\t"); + break; + case PASSWORD: + fprintf (fp, "password\trequired\tpam_unix_ng.so\t"); + if (with_pwquality) + fprintf (fp, "use_authtok "); + break; + case SESSION: + fprintf (fp, "session\trequired\tpam_unix_ng.so\t"); + break; + } + + WRITE_CONFIG_OPTIONS + + return 0; +} + +GETOPT_START_ALL +GETOPT_END_ALL + +PRINT_ARGS("unix_ng"); +PRINT_XMLHELP("unix_ng"); + +/* ---- construct module object ---- */ +DECLARE_BOOL_OPTS_6( is_enabled, nullok, debug, quiet, use_first_pass, try_first_pass ); +DECLARE_STRING_OPTS_1( authtok_type ); +DECLARE_OPT_SETS; + +module_helptext_t unix_ng_help[] = {{"", NULL, "Use pam_unix_ng.so as standard UNIX PAM module."}, + {"debug", NULL, "Add <option>debug</option> option to all pam_unix_ng.so invocations."}, + {"nullok", NULL, "Add <option>nullok</option> option to all pam_unix_ng.so invocations."}, + {"quiet", NULL, "Add <option>quiet</option> option to pam_unix_ng.so."}, + {NULL, NULL, NULL}}; + + +/* at last construct the complete module object */ +pam_module_t mod_pam_unix_ng = { "pam_unix_ng.so", opt_sets, unix_ng_help, + &def_parse_config, + &def_print_module, + &write_config_unix_ng, + &get_opt_set, + &getopt, + &print_args, + &print_xmlhelp}; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/src/pam-config.8.xml new/pam-config-2.13+git.20250827/src/pam-config.8.xml --- old/pam-config-2.13+git.20250715/src/pam-config.8.xml 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/src/pam-config.8.xml 2025-08-27 12:09:28.000000000 +0200 @@ -1778,6 +1778,62 @@ </listitem> </varlistentry> <varlistentry> + <term><option>--unix_ng</option></term> + <listitem> + <para> + Use pam_unix_ng.so as standard UNIX PAM module. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>--unix_ng-nullok</option></term> + <listitem> + <para> + Add <option>nullok</option> option to all pam_unix_ng.so invocations. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>--unix_ng-debug</option></term> + <listitem> + <para> + Add <option>debug</option> option to all pam_unix_ng.so invocations. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>--unix_ng-quiet</option></term> + <listitem> + <para> + Add <option>quiet</option> option to pam_unix_ng.so. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>--unix_ng-use_first_pass</option></term> + <listitem> + <para> + Add <option>use_first_pass</option> option to all pam_unix_ng.so invocations. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>--unix_ng-try_first_pass</option></term> + <listitem> + <para> + Add <option>try_first_pass</option> option to all pam_unix_ng.so invocations. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>--unix_ng-authtok_type=</option><replaceable>value</replaceable></term> + <listitem> + <para> + Add <option>authtok_type=</option><replaceable>value</replaceable> option to pam_unix_ng.so. + </para> + </listitem> + </varlistentry> + <varlistentry> <term><option>--winbind</option></term> <listitem> <para> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/src/sanity_checks.c new/pam-config-2.13+git.20250827/src/sanity_checks.c --- old/pam-config-2.13+git.20250715/src/sanity_checks.c 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/src/sanity_checks.c 2025-08-27 12:09:28.000000000 +0200 @@ -19,6 +19,7 @@ #include <config.h> #endif +#include <assert.h> #include <stdio.h> #include <string.h> #include <unistd.h> @@ -85,47 +86,82 @@ check_for_unix_conflict (pam_module_t **module_list, write_type_t op, int verify) { - int with_unix, with_unix2; + int with_unix, with_unix2, with_unix_ng; int retval = 0; with_unix = is_module_enabled (module_list, "pam_unix.so", op ); with_unix2 = is_module_enabled (module_list, "pam_unix2.so", op ); + with_unix_ng = is_module_enabled (module_list, + "pam_unix_ng.so", op ); - if (with_unix && with_unix2 ) + + /* exactly one should be enabled */ + if ((with_unix + with_unix2 + with_unix_ng) == 1) + return retval; + + if (verify) + { + /* no one enabled, enable pam_unix */ + if ((with_unix + with_unix2 + with_unix_ng) == 0) + fprintf (stderr, + _("WARNING: no unix module is enabled!\n")); + else + fprintf (stderr, + _("WARNING: pam_unix.so, pam_unix2.so and/or pam_unix_ng.so are enabled!\n")); + retval = 1; + } + else { - if (verify) + pam_module_t *mod_unix_ng = lookup (module_list, "pam_unix_ng.so"); + pam_module_t *mod_unix = lookup (module_list, "pam_unix.so"); + pam_module_t *mod_unix2 = lookup (module_list, "pam_unix2.so"); + + assert(mod_unix_ng); + assert(mod_unix); + assert(mod_unix2); + + if ((with_unix + with_unix2 + with_unix_ng) == 0) { + option_set_t *opt_set_unix = mod_unix->get_opt_set (mod_unix, op); + fprintf (stderr, - _("WARNING: pam_unix.so and pam_unix2.so enabled!\n")); - retval = 1; + _("INFO: no unix module is enabled for service %s,\nINFO: enabling pam_unix.so.\n"), + type2string(op)); + + opt_set_unix->enable (opt_set_unix, "is_enabled", TRUE); + } + else if (with_unix_ng) + { + option_set_t *opt_set_unix = mod_unix->get_opt_set (mod_unix, op); + option_set_t *opt_set_unix2 = mod_unix2->get_opt_set (mod_unix2, op); + + fprintf (stderr, + _("INFO: pam_unix.so, pam_unix2 and/or pam_unix_ng.so are enabled in service %s,\nINFO: only pam_unix_ng.so will be enabled.\n"), + type2string (op)); + + opt_set_unix->enable (opt_set_unix, "is_enabled", FALSE); + opt_set_unix2->enable (opt_set_unix2, "is_enabled", FALSE); + } + else if (with_unix) + { + option_set_t *opt_set = mod_unix2->get_opt_set (mod_unix2, op); + + fprintf (stderr, + _("INFO: pam_unix.so and pam_unix2 are enabled in service %s,\nINFO: only pam_unix.so will be enabled.\n"), + type2string (op)); + + opt_set->enable (opt_set, "is_enabled", FALSE); } else { - fprintf (stderr, _("INFO: pam_unix.so and pam_unix2.so enabled in service %s,\nINFO: only pam_unix2.so will be enabled.\n"), type2string (op)); - pam_module_t *mod_unix = lookup (module_list, "pam_unix.so"); - if (mod_unix) - { - option_set_t *opt_set = mod_unix->get_opt_set (mod_unix, op); - if (opt_set) - { - opt_set->enable (opt_set, "is_enabled", FALSE); - } - else - { - fprintf(stderr, _("ERROR: Failed to disable pam_unix.so.\n")); - retval = 1; - } - } - else - { - fprintf(stderr, _("ERROR: Failed to disable pam_unix.so.\n")); - retval = 1; - } + fprintf(stderr, _("ERROR: something did go wrong with counting unix modules...\n")); + retval = 1; } - } - return retval; + } + +return retval; } int diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pam-config-2.13+git.20250715/src/supported-modules.h new/pam-config-2.13+git.20250827/src/supported-modules.h --- old/pam-config-2.13+git.20250715/src/supported-modules.h 2025-07-15 08:43:27.000000000 +0200 +++ new/pam-config-2.13+git.20250827/src/supported-modules.h 2025-08-27 12:09:28.000000000 +0200 @@ -41,6 +41,7 @@ extern pam_module_t mod_pam_umask; extern pam_module_t mod_pam_unix2; extern pam_module_t mod_pam_unix; +extern pam_module_t mod_pam_unix_ng; extern pam_module_t mod_pam_winbind; extern pam_module_t mod_pam_wtmpdb; @@ -98,6 +99,7 @@ &mod_pam_umask, &mod_pam_unix, &mod_pam_unix2, + &mod_pam_unix_ng, &mod_pam_winbind, &mod_pam_wtmpdb, NULL @@ -109,6 +111,7 @@ &mod_pam_himmelblau, &mod_pam_unix2, &mod_pam_unix, + &mod_pam_unix_ng, &mod_pam_krb5, &mod_pam_localuser, &mod_pam_sss, @@ -137,6 +140,7 @@ &mod_pam_fscrypt, &mod_pam_unix2, &mod_pam_unix, + &mod_pam_unix_ng, &mod_pam_krb5, &mod_pam_sss, &mod_pam_ldap, @@ -162,6 +166,7 @@ &mod_pam_systemd_home, &mod_pam_unix2, &mod_pam_unix, + &mod_pam_unix_ng, &mod_pam_fscrypt, &mod_pam_make, &mod_pam_exec, @@ -183,6 +188,7 @@ &mod_pam_systemd, &mod_pam_unix2, &mod_pam_unix, + &mod_pam_unix_ng, &mod_pam_apparmor, &mod_pam_krb5, &mod_pam_sss, @@ -212,6 +218,7 @@ &mod_pam_limits, &mod_pam_unix2, &mod_pam_unix, + &mod_pam_unix_ng, &mod_pam_apparmor, &mod_pam_krb5, &mod_pam_sss,
