From d08f0fe85c414b66ed44eaf0a9427d564f7be457 Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Mon, 22 Jul 2013 16:14:15 -0700
Subject: [PATCH] Correct job container ownership in a couple of places

The container owner should have been SlurmdUser rather than job
owner for Prolog, Epilog and UnkillableProgram parameters
---
 src/slurmd/common/run_script.c                 | 2 +-
 src/slurmd/slurmd/req.c                        | 2 +-
 src/slurmd/slurmstepd/mgr.c                    | 2 +-
 src/slurmd/slurmstepd/req.c                    | 2 +-
 src/slurmd/slurmstepd/step_terminate_monitor.c | 7 ++-----
 src/slurmd/slurmstepd/step_terminate_monitor.h | 2 +-
 6 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/slurmd/common/run_script.c b/src/slurmd/common/run_script.c
index 5db528ebf10..08010f51f75 100644
--- a/src/slurmd/common/run_script.c
+++ b/src/slurmd/common/run_script.c
@@ -157,7 +157,7 @@ _run_one_script(const char *name, const char *path, uint32_t job_id,
 		exit(127);
 	}
 
-	if (container_g_add_pid(job_id, cpid, uid) != SLURM_SUCCESS)
+	if (container_g_add_pid(job_id, cpid, getuid()) != SLURM_SUCCESS)
 		error("container_g_add_pid(%u): %m", job_id);
 
 	if (waitpid_timeout(name, cpid, &status, max_wait) < 0)
diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c
index 2cd5ae17548..ff34b797342 100644
--- a/src/slurmd/slurmd/req.c
+++ b/src/slurmd/slurmd/req.c
@@ -4300,7 +4300,7 @@ _run_spank_job_script (const char *mode, char **env, uint32_t job_id, uid_t uid)
 		exit (127);
 	}
 
-	if (container_g_add_pid(job_id, cpid, uid) != SLURM_SUCCESS)
+	if (container_g_add_pid(job_id, cpid, getuid()) != SLURM_SUCCESS)
 		error("container_g_add_pid(%u): %m", job_id);
 	close (pfds[0]);
 
diff --git a/src/slurmd/slurmstepd/mgr.c b/src/slurmd/slurmstepd/mgr.c
index 4e43e440ca3..f0de161542d 100644
--- a/src/slurmd/slurmstepd/mgr.c
+++ b/src/slurmd/slurmstepd/mgr.c
@@ -1052,7 +1052,7 @@ fail2:
 	 * terminated before the switch window can be released by
 	 * interconnect_postfini().
 	 */
-	step_terminate_monitor_start(job->jobid, job->stepid, job->uid);
+	step_terminate_monitor_start(job->jobid, job->stepid);
 	if (job->cont_id != 0) {
 		slurm_container_signal(job->cont_id, SIGKILL);
 		slurm_container_wait(job->cont_id);
diff --git a/src/slurmd/slurmstepd/req.c b/src/slurmd/slurmstepd/req.c
index 926df60d770..4fb25d373dc 100644
--- a/src/slurmd/slurmstepd/req.c
+++ b/src/slurmd/slurmstepd/req.c
@@ -903,7 +903,7 @@ _handle_terminate(int fd, stepd_step_rec_t *job, uid_t uid)
 
 	debug("_handle_terminate for step=%u.%u uid=%d",
 	      job->jobid, job->stepid, uid);
-	step_terminate_monitor_start(job->jobid, job->stepid, job->uid);
+	step_terminate_monitor_start(job->jobid, job->stepid);
 
 	if (uid != job->uid && !_slurm_authorized_user(uid)) {
 		debug("terminate req from uid %ld for job %u.%u "
diff --git a/src/slurmd/slurmstepd/step_terminate_monitor.c b/src/slurmd/slurmstepd/step_terminate_monitor.c
index 2c5bf5f2012..2a8da719757 100644
--- a/src/slurmd/slurmstepd/step_terminate_monitor.c
+++ b/src/slurmd/slurmstepd/step_terminate_monitor.c
@@ -58,12 +58,11 @@ static uint16_t timeout;
 static char *program_name;
 static uint32_t recorded_jobid = NO_VAL;
 static uint32_t recorded_stepid = NO_VAL;
-static uid_t    recorded_uid = 0;
 
 static void *_monitor(void *);
 static int _call_external_program(void);
 
-void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid, uid_t uid)
+void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid)
 {
 	slurm_ctl_conf_t *conf;
 	pthread_attr_t attr;
@@ -92,7 +91,6 @@ void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid, uid_t uid)
 	running_flag = 1;
 	recorded_jobid = jobid;
 	recorded_stepid = stepid;
-	recorded_uid = uid;
 
 	pthread_mutex_unlock(&lock);
 
@@ -203,8 +201,7 @@ static int _call_external_program(void)
 		exit(127);
 	}
 
-	if (container_g_add_pid(recorded_jobid, cpid, recorded_uid) !=
-	    SLURM_SUCCESS)
+	if (container_g_add_pid(recorded_jobid,cpid,getuid()) != SLURM_SUCCESS)
 		error("container_g_add_pid(%u): %m", recorded_jobid);
 
 	opt = WNOHANG;
diff --git a/src/slurmd/slurmstepd/step_terminate_monitor.h b/src/slurmd/slurmstepd/step_terminate_monitor.h
index 984481e21a0..e9c016a67b1 100644
--- a/src/slurmd/slurmstepd/step_terminate_monitor.h
+++ b/src/slurmd/slurmstepd/step_terminate_monitor.h
@@ -45,7 +45,7 @@
  * If step_terminate_monitor_stop() is called before the time runs
  * out, the external program will not be called.
  */
-void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid, uid_t uid);
+void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid);
 
 /*
  * Stop the timer in the step terminate monitor pthread, and kill
-- 
GitLab