a346ac1
From 0fa5f9d4184928c28689b673fb06bb8b4d88a0c2 Mon Sep 17 00:00:00 2001
a346ac1
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
a346ac1
Date: Thu, 6 Feb 2020 12:41:15 +0100
a346ac1
Subject: [PATCH] pam_usertype: remove dependency on pam_modutil_search_key
a346ac1
a346ac1
This is needed to correctly backport the patch to this version.
a346ac1
---
a346ac1
 modules/pam_usertype/pam_usertype.c | 88 ++++++++++++++++++++++++++++-
a346ac1
 1 file changed, 87 insertions(+), 1 deletion(-)
a346ac1
a346ac1
diff --git a/modules/pam_usertype/pam_usertype.c b/modules/pam_usertype/pam_usertype.c
a346ac1
index d3629c137d98545871d24ff26c06d8377068141f..741956b05809d8d6247fe2eba82ae14427cfeae4 100644
a346ac1
--- a/modules/pam_usertype/pam_usertype.c
a346ac1
+++ b/modules/pam_usertype/pam_usertype.c
a346ac1
@@ -40,6 +40,7 @@
a346ac1
 #include "config.h"
a346ac1
 
a346ac1
 #include <sys/types.h>
a346ac1
+#include <stdio.h>
a346ac1
 #include <stdlib.h>
a346ac1
 #include <string.h>
a346ac1
 #include <syslog.h>
a346ac1
@@ -72,6 +73,91 @@ struct pam_usertype_opts {
a346ac1
     int audit;
a346ac1
 };
a346ac1
 
a346ac1
+/* taken from pam_umask.c and reformatted */
a346ac1
+static char *
a346ac1
+search_key (const char *filename,
a346ac1
+            const char *key)
a346ac1
+{
a346ac1
+    FILE *fp;
a346ac1
+    char *buf = NULL;
a346ac1
+    size_t buflen = 0;
a346ac1
+    char *retval = NULL;
a346ac1
+
a346ac1
+    fp = fopen (filename, "r");
a346ac1
+    if (NULL == fp) {
a346ac1
+        return NULL;
a346ac1
+    }
a346ac1
+
a346ac1
+    while (!feof (fp)) {
a346ac1
+        char *tmp, *cp;
a346ac1
+#if defined(HAVE_GETLINE)
a346ac1
+        ssize_t n = getline (&buf, &buflen, fp);
a346ac1
+#elif defined (HAVE_GETDELIM)
a346ac1
+        ssize_t n = getdelim (&buf, &buflen, '\n', fp);
a346ac1
+#else
a346ac1
+        ssize_t n;
a346ac1
+
a346ac1
+        if (buf == NULL) {
a346ac1
+            buflen = BUF_SIZE;
a346ac1
+            buf = malloc (buflen);
a346ac1
+            if (buf == NULL) {
a346ac1
+                fclose (fp);
a346ac1
+                return NULL;
a346ac1
+            }
a346ac1
+        }
a346ac1
+
a346ac1
+        buf[0] = '\0';
a346ac1
+        if (fgets (buf, buflen - 1, fp) == NULL) {
a346ac1
+            break;
a346ac1
+        } else if (buf != NULL) {
a346ac1
+            n = strlen (buf);
a346ac1
+        } else {
a346ac1
+            n = 0;
a346ac1
+        }
a346ac1
+#endif /* HAVE_GETLINE / HAVE_GETDELIM */
a346ac1
+
a346ac1
+        cp = buf;
a346ac1
+
a346ac1
+        if (n < 1) {
a346ac1
+            break;
a346ac1
+        }
a346ac1
+
a346ac1
+        tmp = strchr (cp, '#');  /* remove comments */
a346ac1
+        if (tmp) {
a346ac1
+            *tmp = '\0';
a346ac1
+        }
a346ac1
+
a346ac1
+        while (isspace ((int)*cp)) {    /* remove spaces and tabs */
a346ac1
+            ++cp;
a346ac1
+        }
a346ac1
+
a346ac1
+        if (*cp == '\0') {        /* ignore empty lines */
a346ac1
+            continue;
a346ac1
+        }
a346ac1
+
a346ac1
+        if (cp[strlen (cp) - 1] == '\n') {
a346ac1
+            cp[strlen (cp) - 1] = '\0';
a346ac1
+        }
a346ac1
+
a346ac1
+        tmp = strsep (&cp, " \t=");
a346ac1
+        if (cp != NULL) {
a346ac1
+            while (isspace ((int)*cp) || *cp == '=') {
a346ac1
+                ++cp;
a346ac1
+            }
a346ac1
+        }
a346ac1
+
a346ac1
+        if (strcasecmp (tmp, key) == 0) {
a346ac1
+            retval = strdup (cp);
a346ac1
+            break;
a346ac1
+        }
a346ac1
+    }
a346ac1
+
a346ac1
+    fclose (fp);
a346ac1
+    free (buf);
a346ac1
+
a346ac1
+    return retval;
a346ac1
+}
a346ac1
+
a346ac1
 static int
a346ac1
 pam_usertype_parse_args(struct pam_usertype_opts *opts,
a346ac1
                         pam_handle_t *pamh,
a346ac1
@@ -170,7 +256,7 @@ pam_usertype_get_id(pam_handle_t *pamh,
a346ac1
     char *ep;
a346ac1
     uid_t uid;
a346ac1
 
a346ac1
-    value = pam_modutil_search_key(pamh, LOGIN_DEFS, key);
a346ac1
+    value = search_key(LOGIN_DEFS, key);
a346ac1
     if (value == NULL) {
a346ac1
         return default_value;
a346ac1
     }
a346ac1
-- 
a346ac1
2.24.1
a346ac1