diff --git a/contribs/pam/pam_slurm.c b/contribs/pam/pam_slurm.c
index a5de3579a61e33896dbe127d93b15a16ca20c3c5..62b7615065a2ce317bbaa19266453d5f3940dee6 100644
--- a/contribs/pam/pam_slurm.c
+++ b/contribs/pam/pam_slurm.c
@@ -360,7 +360,7 @@ _send_denial_msg(pam_handle_t *pamh, struct _options *opts,
  */
 extern void libpam_slurm_init (void)
 {
-	char current_major[64];
+	char libslurmname[64];
 
 	if (slurm_h)
 		return;
@@ -368,14 +368,27 @@ extern void libpam_slurm_init (void)
 	/* First try to use the same libslurm version ("libslurm.so.24.0.0"),
 	 * Second try to match the major version number ("libslurm.so.24"),
 	 * Otherwise use "libslurm.so" */
-	snprintf(current_major, sizeof(current_major), "libslurm.so.%d",
-		 SLURM_API_CURRENT);
-	if (!(slurm_h = dlopen("libslurm.so." SLURM_VERSION_STRING,
-					      RTLD_NOW|RTLD_GLOBAL)) &&
-	    !(slurm_h = dlopen(current_major, RTLD_NOW|RTLD_GLOBAL)) &&
-	    !(slurm_h = dlopen("libslurm.so", RTLD_NOW|RTLD_GLOBAL))) {
-		_log_msg (LOG_ERR, "Unable to dlopen libslurm: %s\n",
-			  dlerror ());
+	if (snprintf(libslurmname, sizeof(libslurmname), 
+			"libslurm.so.%d.%d.%d", SLURM_API_CURRENT,
+			SLURM_API_REVISION, SLURM_API_AGE) >=
+			sizeof(libslurmname) ) {
+		_log_msg (LOG_ERR, "Unable to write libslurmname\n");
+	} else if (!(slurm_h = dlopen(libslurmname, RTLD_NOW|RTLD_GLOBAL))) {
+		_log_msg (LOG_INFO, "Unable to dlopen %s: %s\n",
+			libslurmname, dlerror ());
+	}
+
+	if (snprintf(libslurmname, sizeof(libslurmname), "libslurm.so.%d",
+			SLURM_API_CURRENT) >= sizeof(libslurmname) ) {
+		_log_msg (LOG_ERR, "Unable to write libslurmname\n");
+	} else if (!(slurm_h = dlopen(libslurmname, RTLD_NOW|RTLD_GLOBAL))) {
+		_log_msg (LOG_INFO, "Unable to dlopen %s: %s\n",
+			libslurmname, dlerror ());
+	}
+
+	if (!(slurm_h = dlopen("libslurm.so", RTLD_NOW|RTLD_GLOBAL))) {
+		_log_msg (LOG_ERR, "Unable to dlopen libslurm.so: %s\n",
+ 			  dlerror ());
 	}
 
 	return;