diff mbox series

[meta-oe,16/63] libpwquality: Do not use fgetpwent_r on musl

Message ID 20220904073417.3251865-16-raj.khem@gmail.com
State New
Headers show
Series [meta-oe,01/63] libutempter: Upgrade to 1.2.2-alt1 | expand

Commit Message

Khem Raj Sept. 4, 2022, 7:33 a.m. UTC
It does not exist

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 .../files/0001-fix-musl-build.patch           | 72 +++++++++++++++++++
 .../libpwquality/libpwquality_1.4.4.bb        |  1 +
 2 files changed, 73 insertions(+)
 create mode 100644 meta-oe/recipes-extended/libpwquality/files/0001-fix-musl-build.patch
diff mbox series

Patch

diff --git a/meta-oe/recipes-extended/libpwquality/files/0001-fix-musl-build.patch b/meta-oe/recipes-extended/libpwquality/files/0001-fix-musl-build.patch
new file mode 100644
index 0000000000..2cbdd6c74c
--- /dev/null
+++ b/meta-oe/recipes-extended/libpwquality/files/0001-fix-musl-build.patch
@@ -0,0 +1,72 @@ 
+Do not use fgetpwent_r
+
+fgetpwent_r does not exist on musl
+
+Source: https://git.alpinelinux.org/aports/tree/community/libpwquality/0001-fix-musl-build.patch
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/src/pam_pwquality.c
++++ b/src/pam_pwquality.c
+@@ -19,6 +19,7 @@
+ #include <stdio.h>
+ #include <pwd.h>
+ #include <errno.h>
++#include <security/pam_modutil.h>
+ #include "pwquality.h"
+ 
+ /*
+@@ -43,8 +44,6 @@ struct module_options {
+ 
+ #define CO_RETRY_TIMES  1
+ 
+-#define PATH_PASSWD "/etc/passwd"
+-
+ static int
+ _pam_parse (pam_handle_t *pamh, struct module_options *opt,
+             int argc, const char **argv)
+@@ -98,44 +97,7 @@ static int
+ check_local_user (pam_handle_t *pamh,
+                   const char *user)
+ {
+-        struct passwd pw, *pwp;
+-        char buf[4096];
+-        int found = 0;
+-        FILE *fp;
+-        int errn;
+-
+-        fp = fopen(PATH_PASSWD, "r");
+-        if (fp == NULL) {
+-                pam_syslog(pamh, LOG_ERR, "unable to open %s: %s",
+-                           PATH_PASSWD, pam_strerror(pamh, errno));
+-                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);
+-                        /* we can continue here as next call will read further */
+-                        continue;
+-                }
+-                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: %s",
+-                           pam_strerror(pamh, errn));
+-                return -1;
+-        } else {
+-                return found;
+-        }
++	return pam_modutil_check_user_in_passwd(pamh, user, NULL) == PAM_SUCCESS;
+ }
+ 
+ PAM_EXTERN int
diff --git a/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.4.bb b/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.4.bb
index f892cc650d..a6887b0868 100644
--- a/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.4.bb
+++ b/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.4.bb
@@ -8,6 +8,7 @@  SRCNAME = "libpwquality"
 SRC_URI = "https://github.com/${SRCNAME}/${SRCNAME}/releases/download/${SRCNAME}-${PV}/${SRCNAME}-${PV}.tar.bz2 \
            file://add-missing-python-include-dir-for-cross.patch \
 "
+SRC_URI:append:libc-musl = " file://0001-fix-musl-build.patch "
 
 SRC_URI[md5sum] = "1fe43f6641dbf1e1766e2a02cf68a9c3"
 SRC_URI[sha256sum] = "d43baf23dc6887fe8f8e9b75cabaabc5f4bbbaa0f9eff44278d276141752a545"