|
|
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 |
|