diff --git a/src/slurmd/job.h b/src/slurmd/job.h index 2cfedcb9f60f2d53df9bfe2fc8bb04473e35fe65..2d79f3b7ab24bd52a6b8ce19fcb3b89bee3b4354 100644 --- a/src/slurmd/job.h +++ b/src/slurmd/job.h @@ -113,6 +113,7 @@ typedef struct slurmd_job { qsw_jobinfo_t qsw_job; /* Elan-specific job information */ #endif uid_t uid; /* user id for job */ + gid_t gid; /* group ID for job */ bool batch; /* true if this is a batch job */ bool run_prolog; /* true if need to run prolog */ diff --git a/src/slurmd/smgr.c b/src/slurmd/smgr.c index 63280fda7c41b4dda12a27d5d410008e67c3bc8d..802652d4b08864026a9ced0ee8e8912da7e276c9 100644 --- a/src/slurmd/smgr.c +++ b/src/slurmd/smgr.c @@ -149,7 +149,7 @@ _session_mgr(slurmd_job_t *job) if (_become_user(job) < 0) exit(2); - + if (setsid() < (pid_t) 0) { error("setsid: %m"); exit(3); @@ -212,7 +212,7 @@ _cleanup_file_descriptors(slurmd_job_t *j) static int _become_user(slurmd_job_t *job) { - if (setgid(job->pwd->pw_gid) < 0) { + if (setgid(job->gid) < 0) { error("setgid: %m"); return -1; } @@ -249,7 +249,6 @@ _exec_all_tasks(slurmd_job_t *job) if (xsignal_block(smgr_sigarray) < 0) return error ("Unable to block signals"); - for (i = 0; i < job->ntasks; i++) { pid_t pid = fork();