commit:     949eefbfce316c692cf4c367a533e34e163d4de6
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Wed Sep  7 04:44:38 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Sep  7 04:44:51 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=949eefbf

dev-libs/libpwquality: fix fgetpwent_r usage on musl

Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../libpwquality-1.4.4-musl-fgetpwent_r.patch      | 42 ++++++++++
 .../libpwquality-1.4.4-pam_pwquality-include.patch | 35 +++++++++
 dev-libs/libpwquality/libpwquality-1.4.4-r2.ebuild | 91 ++++++++++++++++++++++
 3 files changed, 168 insertions(+)

diff --git 
a/dev-libs/libpwquality/files/libpwquality-1.4.4-musl-fgetpwent_r.patch 
b/dev-libs/libpwquality/files/libpwquality-1.4.4-musl-fgetpwent_r.patch
new file mode 100644
index 000000000000..6cfb538103ae
--- /dev/null
+++ b/dev-libs/libpwquality/files/libpwquality-1.4.4-musl-fgetpwent_r.patch
@@ -0,0 +1,42 @@
+https://github.com/libpwquality/libpwquality/commit/9084c1b032161cdb53d5f66132a91bdc207faecf
+
+From: Noel Kuntze <noel.kuntze@thermi.consulting>
+Date: Mon, 24 May 2021 14:15:34 +0200
+Subject: [PATCH] pam_pwquality.c: Use pam_modutil_check_user_in_passwd instead
+ of fgetpwent_r (not available on musl)
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -97,6 +97,11 @@ if test "$enable_pam" != "no"; then
+       test $fail = 1 &&
+         AC_MSG_ERROR([You must install the PAM development package in order 
to compile libpwquality])
+   fi
++  AC_CHECK_FUNC(
++    [pam_modutil_check_user_in_passwd],
++    [AC_DEFINE([HAVE_PAM_CHECK_USER_IN_PASSWD], [], [have 
pam_modutil_check_user_in_passwd])],
++    []
++  )  
+ fi
+ 
+ if test "$enable_pam" = "yes"; then
+--- a/src/pam_pwquality.c
++++ b/src/pam_pwquality.c
+@@ -98,6 +98,9 @@ static int
+ check_local_user (pam_handle_t *pamh,
+                   const char *user)
+ {
++#ifdef HAVE_PAM_CHECK_USER_IN_PASSWD
++        return pam_modutil_check_user_in_passwd(pamh, user, NULL) == 
PAM_SUCCESS;
++#else
+         struct passwd pw, *pwp;
+         char buf[4096];
+         int found = 0;
+@@ -136,6 +139,7 @@ check_local_user (pam_handle_t *pamh,
+         } else {
+                 return found;
+         }
++#endif
+ }
+ 
+ PAM_EXTERN int
+

diff --git 
a/dev-libs/libpwquality/files/libpwquality-1.4.4-pam_pwquality-include.patch 
b/dev-libs/libpwquality/files/libpwquality-1.4.4-pam_pwquality-include.patch
new file mode 100644
index 000000000000..2ed638c1e34a
--- /dev/null
+++ b/dev-libs/libpwquality/files/libpwquality-1.4.4-pam_pwquality-include.patch
@@ -0,0 +1,35 @@
+https://github.com/libpwquality/libpwquality/pull/62
+
+From 27057c6cbf528108c35df934280c7dd83e8d5ce9 Mon Sep 17 00:00:00 2001
+From: Sam James <s...@gentoo.org>
+Date: Wed, 7 Sep 2022 05:42:17 +0100
+Subject: [PATCH] pam_pwquality: add include for
+ pam_modutil_check_user_in_passwd
+
+After 9084c1b032161cdb53d5f66132a91bdc207faecf, one gets:
+```
+pam_pwquality.c: In function 'check_local_user':
+pam_pwquality.c:102:16: error: implicit declaration of function 
'pam_modutil_check_user_in_passwd' [-Werror=implicit-function-declaration]
+  102 |         return pam_modutil_check_user_in_passwd(pamh, user, NULL) == 
PAM_SUCCESS;
+      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+cc1: some warnings being treated as errors
+make[2]: *** [Makefile:634: pam_pwquality.lo] Error 1
+make[2]: *** Waiting for unfinished jobs....
+```
+
+We need to include security/pam_modutil.h when appropriate.
+
+Signed-off-by: Sam James <s...@gentoo.org>
+--- a/src/pam_pwquality.c
++++ b/src/pam_pwquality.c
+@@ -34,6 +34,10 @@
+ #include <security/_pam_macros.h>
+ #include <security/pam_ext.h>
+ 
++#ifdef HAVE_PAM_CHECK_USER_IN_PASSWD
++#include <security/pam_modutil.h>
++#endif
++
+ /* argument parsing */
+ #define PAM_DEBUG_ARG       0x0001
+ 

diff --git a/dev-libs/libpwquality/libpwquality-1.4.4-r2.ebuild 
b/dev-libs/libpwquality/libpwquality-1.4.4-r2.ebuild
new file mode 100644
index 000000000000..460d78a4c2b0
--- /dev/null
+++ b/dev-libs/libpwquality/libpwquality-1.4.4-r2.ebuild
@@ -0,0 +1,91 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{8..10} )
+inherit autotools pam python-r1 usr-ldscript
+
+DESCRIPTION="Library for password quality checking and generating random 
passwords"
+HOMEPAGE="https://github.com/libpwquality/libpwquality";
+SRC_URI="https://github.com/${PN}/${PN}/releases/download/${P}/${P}.tar.bz2";
+
+LICENSE="|| ( BSD GPL-2 )"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 
~riscv ~s390 ~sparc ~x86"
+IUSE="pam python static-libs"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+BDEPEND="
+       >=sys-devel/gettext-0.18.2
+       virtual/pkgconfig
+"
+RDEPEND="
+       >=sys-libs/cracklib-2.8:=[static-libs(+)?]
+       pam? ( sys-libs/pam )
+       python? ( ${PYTHON_DEPS} )
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+       "${FILESDIR}"/${P}-musl-fgetpwent_r.patch
+       "${FILESDIR}"/${PN}-1.4.4-pam_pwquality-include.patch
+)
+
+src_prepare() {
+       default
+       # ensure pkgconfig files go in /usr
+       sed -e "s:\(pkgconfigdir *=\).*:\1 
${EPREFIX}/usr/$(get_libdir)/pkgconfig:" \
+               -i src/Makefile.{am,in} || die "sed failed"
+
+       # Needed for musl patch, drop on next release
+       eautoreconf
+
+       if use python ; then
+               # bug #830397
+               export SETUPTOOLS_USE_DISTUTILS=stdlib
+               python_copy_sources
+       fi
+}
+
+src_configure() {
+       # Install library in /lib for pam
+       configuring() {
+               local sitedir
+               econf \
+                       --libdir="${EPREFIX}/$(get_libdir)" \
+                       $(use_enable pam) \
+                       --with-securedir="${EPREFIX}/$(getpam_mod_dir)" \
+                       $(use_enable python python-bindings) \
+                       $(usex python "--with-pythonsitedir=$(use python && 
python_get_sitedir)" "") \
+                       $(use_enable static-libs static)
+       }
+       if_use_python_python_foreach_impl configuring
+}
+
+src_compile() {
+       if_use_python_python_foreach_impl default
+}
+
+src_test() {
+       if_use_python_python_foreach_impl default
+}
+
+src_install() {
+       if_use_python_python_foreach_impl default
+       if use static-libs; then
+               # Do not install static libs in /lib
+               mkdir -p "${ED}/usr/$(get_libdir)"
+               mv "${ED}/$(get_libdir)/libpwquality.a" 
"${ED}/usr/$(get_libdir)/" || die
+               gen_usr_ldscript libpwquality.so
+       fi
+       find "${ED}" -name '*.la' -delete || die
+}
+
+if_use_python_python_foreach_impl() {
+       if use python; then
+               python_foreach_impl run_in_build_dir "$@"
+       else
+               "$@"
+       fi
+}

Reply via email to