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

openSUSE Build Service is sponsored by