From 26aac1a47f52ec8bd3b0b1b8439d93769071b9f7 Mon Sep 17 00:00:00 2001
From: "Christopher J. Morrone" <morrone2@llnl.gov>
Date: Thu, 27 Apr 2006 19:12:52 +0000
Subject: [PATCH] Add UsePAM slurm.conf flag

---
 slurm/slurm.h.in                    |  1 +
 src/common/read_config.c            | 10 ++++++++++
 src/common/slurm_protocol_pack.c    |  2 ++
 src/slurmd/common/slurmstepd_init.c |  2 ++
 src/slurmd/slurmd/slurmd.c          |  3 +++
 src/slurmd/slurmd/slurmd.h          |  1 +
 src/slurmd/slurmstepd/pam_ses.c     |  5 +++++
 src/srun/allocate.c                 |  3 +++
 8 files changed, 27 insertions(+)

diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index 10ebe4f652f..f33d8ee7d96 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -627,6 +627,7 @@ typedef struct slurm_ctl_conf {
 	char *srun_epilog;      /* srun epilog program */
 	char *node_prefix;      /* prefix of nodes in partition */
 	uint16_t tree_width;    /* number of threads per node to span */
+	uint16_t use_pam;	/* enable/disable PAM support */
 } slurm_ctl_conf_t;
 
 typedef struct submit_response_msg {
diff --git a/src/common/read_config.c b/src/common/read_config.c
index cddf3b1c9e2..955d16c8602 100644
--- a/src/common/read_config.c
+++ b/src/common/read_config.c
@@ -174,6 +174,7 @@ s_p_options_t slurm_conf_options[] = {
 	{"TaskPlugin", S_P_STRING},
 	{"TmpFS", S_P_STRING},
 	{"TreeWidth", S_P_UINT16},
+	{"UsePAM", S_P_BOOLEAN},
 	{"WaitTime", S_P_UINT16},
 
 	{"NodeName", S_P_ARRAY, parse_nodename, destroy_nodename},
@@ -1023,6 +1024,7 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	xfree (ctl_conf_ptr->srun_epilog);
 	xfree (ctl_conf_ptr->node_prefix);
 	ctl_conf_ptr->tree_width       		= (uint16_t) NO_VAL;
+	ctl_conf_ptr->use_pam			= 0;
 	
 	_free_name_hashtbl();
 	_init_name_hashtbl();
@@ -1192,6 +1194,8 @@ static void _normalize_debug_level(uint16_t *level)
 static void
 validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 {
+	bool truth;
+
 	if (s_p_get_string(&conf->backup_controller, "BackupController",
 			   hashtbl)
 	    && strcasecmp("localhost", conf->backup_controller) == 0) {
@@ -1452,5 +1456,11 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	} else {
 		conf->tree_width = DEFAULT_TREE_WIDTH;
 	}
+
+	if (s_p_get_boolean(&truth, "UsePAM", hashtbl) && truth) {
+		conf->use_pam = 1;
+	} else {
+		conf->use_pam = 0;
+	}
 }
 
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index 431a343cafc..e99769181bc 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -1941,6 +1941,7 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 	packstr(build_ptr->srun_epilog, buffer);
 	packstr(build_ptr->node_prefix, buffer);
 	pack16((uint16_t)build_ptr->tree_width, buffer);
+	pack16(build_ptr->use_pam, buffer);
 }
 
 static int
@@ -2035,6 +2036,7 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpackstr_xmalloc(&build_ptr->srun_epilog, &uint16_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->node_prefix, &uint16_tmp, buffer);
 	safe_unpack16(&build_ptr->tree_width, buffer);
+	safe_unpack16(&build_ptr->use_pam, buffer);
 
 	return SLURM_SUCCESS;
 
diff --git a/src/slurmd/common/slurmstepd_init.c b/src/slurmd/common/slurmstepd_init.c
index ec8fe2301ef..0268d05b81c 100644
--- a/src/slurmd/common/slurmstepd_init.c
+++ b/src/slurmd/common/slurmstepd_init.c
@@ -37,6 +37,7 @@ extern void pack_slurmd_conf_lite(slurmd_conf_t *conf, Buf buffer)
 	pack32(conf->debug_level, buffer);
 	pack32(conf->daemonize, buffer);
 	pack32((uint32_t)conf->slurm_user_id, buffer);
+	pack16(conf->use_pam, buffer);
 }
 
 extern int unpack_slurmd_conf_lite_no_alloc(slurmd_conf_t *conf, Buf buffer)
@@ -54,6 +55,7 @@ extern int unpack_slurmd_conf_lite_no_alloc(slurmd_conf_t *conf, Buf buffer)
 	conf->daemonize = uint32_tmp;
 	safe_unpack32(&uint32_tmp, buffer);
 	conf->slurm_user_id = (uid_t)uint32_tmp;
+	safe_unpack16(&conf->use_pam, buffer);
 	return SLURM_SUCCESS;
 
 unpack_error:
diff --git a/src/slurmd/slurmd/slurmd.c b/src/slurmd/slurmd/slurmd.c
index 6bd27b1302e..51a6842d343 100644
--- a/src/slurmd/slurmd/slurmd.c
+++ b/src/slurmd/slurmd/slurmd.c
@@ -576,6 +576,8 @@ _read_config()
 	if (cf->slurmctld_port == 0)
 		fatal("Unable to establish controller port");
 
+	conf->use_pam = cf->use_pam;
+
 	slurm_mutex_unlock(&conf->config_mutex);
 	slurm_conf_unlock();
 }
@@ -660,6 +662,7 @@ _init_conf()
 	conf->debug_level = LOG_LEVEL_INFO;
 	conf->pidfile     = xstrdup(DEFAULT_SLURMD_PIDFILE);
 	conf->spooldir	  = xstrdup(DEFAULT_SPOOLDIR);
+	conf->use_pam	  =  0;
 
 	slurm_mutex_init(&conf->config_mutex);
 	return;
diff --git a/src/slurmd/slurmd/slurmd.h b/src/slurmd/slurmd/slurmd.h
index b61d9064e93..07b0e3892a0 100644
--- a/src/slurmd/slurmd/slurmd.h
+++ b/src/slurmd/slurmd/slurmd.h
@@ -90,6 +90,7 @@ typedef struct slurmd_config {
 	uid_t           slurm_user_id;	/* UID that slurmctld runs as      */
 	pthread_mutex_t config_mutex;	/* lock for slurmd_config access   */
 	uint16_t        job_acct_freq;
+	uint16_t	use_pam;
 } slurmd_conf_t;
 
 slurmd_conf_t * conf;
diff --git a/src/slurmd/slurmstepd/pam_ses.c b/src/slurmd/slurmstepd/pam_ses.c
index 580d180634b..a1d2c58580d 100644
--- a/src/slurmd/slurmstepd/pam_ses.c
+++ b/src/slurmd/slurmstepd/pam_ses.c
@@ -31,6 +31,8 @@
 
 #include "slurm/slurm_errno.h"
 #include "src/slurmd/slurmstepd/pam_ses.h"
+#include "src/common/log.h"
+#include "src/slurmd/slurmd/slurmd.h"
 
 #ifdef conf->use_pam
 
@@ -114,6 +116,9 @@ pam_finish ()
 	 * ending the association with PAM.
 	 */
 
+	if (!conf->use_pam)
+		return;
+
         if (pam_h != NULL) {
 		/*
 		 * Log any errors, but there's no need to return a SLURM error.
diff --git a/src/srun/allocate.c b/src/srun/allocate.c
index 6400c4406dc..273e439d03e 100644
--- a/src/srun/allocate.c
+++ b/src/srun/allocate.c
@@ -486,6 +486,9 @@ job_desc_msg_create_from_opts (char *script)
 		 */
 		xassert (opt.batch);
 
+		if (opt.overcommit)
+			putenv("SLURM_OVERCOMMIT=1");
+
 		j->environment = environ;
 		j->env_size = envcount (environ);
 		j->script = script;
-- 
GitLab