File pam-config-change-check-for-existence-of-modules.patch of Package pam-config.35790
From 1d22b311136711e521e0e177d84cc3351d61e7e3 Mon Sep 17 00:00:00 2001
From: Thorsten Kukuk <kukuk@suse.com>
Date: Sat, 2 May 2020 15:31:57 +0200
Subject: [PATCH] Change check for existence of modules
If we have a biarch architecture, we check that the 64bit
PAM module is there and report an error if not. For the 32bit
variant, we only issue a warning.
---
src/sanity_checks.c | 71 ++++++++++++++++++++++++++-------------------
1 file changed, 41 insertions(+), 30 deletions(-)
diff --git a/src/sanity_checks.c b/src/sanity_checks.c
index 7e31f16..7b92cca 100644
--- a/src/sanity_checks.c
+++ b/src/sanity_checks.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006, 2007, 2008, 2009, 2010, 2016 Thorsten Kukuk
+/* Copyright (C) 2006, 2007, 2008, 2009, 2010, 2016, 2020 Thorsten Kukuk
Author: Thorsten Kukuk <kukuk@thkukuk.de>
This program is free software; you can redistribute it and/or modify
@@ -27,41 +27,52 @@
#include "pam-config.h"
#include "pam-module.h"
-int
-check_for_pam_module (const char *name, int force)
+static int
+check_for_pam_module_path (const char *path, const char *name, int force)
{
- const char *pamlib[] = { "/lib/libpam.so.0", "/lib64/libpam.so.0" };
- const char *path[] = { "/lib/security", "/lib64/security" };
- unsigned int i;
- int retval = 0;
+ char module[strlen(path) + strlen (name) + 2];
- for (i = 0; i < (sizeof (path)/sizeof (char *)); i++)
+ sprintf (module, "%s/%s", path, name);
+
+ if (access (module, F_OK) != 0)
{
- /* To check if we have a dual stack (32bit and 64bit), we do not need
- only a /lib* /security directory, but /lib* /libpam.so.0 should be
- installed, too. */
- if (access (pamlib[i], F_OK) == 0 && access (path[i], F_OK) == 0)
+ if (force)
{
- char module[strlen(path[i]) + strlen (name) + 2];
-
- sprintf (module, "%s/%s", path[i], name);
-
- if (access (module, F_OK) != 0)
- {
- if (force)
- fprintf (stderr, _("WARNING: module %s is not installed.\n"),
- module);
- else
- {
- fprintf (stderr,
- _("ERROR: module %s is not installed.\n"),
- module);
- retval=1;
- }
- }
+ fprintf (stderr, _("WARNING: module %s is not installed.\n"),
+ module);
+ return 0;
+ }
+ else
+ {
+ fprintf (stderr,
+ _("ERROR: module %s is not installed.\n"),
+ module);
+ return 1;
}
}
- return retval;
+ return 0;
+}
+
+int
+check_for_pam_module (const char *name, int force)
+{
+#if defined(__LP64__)
+ int i = check_for_pam_module_path ("/lib64/security", name, force);
+
+ if (i > 0)
+ return 1;
+
+ /* Only print warning if 32bit PAM module is missing */
+ if (access("/lib/libpam.so.0", F_OK) == 0)
+ return check_for_pam_module_path ("/lib/security", name, 1);
+#else
+ int i = check_for_pam_module_path ("/lib/security", name, force);
+
+ if (i > 0)
+ return 1;
+#endif
+
+ return 0;
}
static int
--
2.45.2