Skip to content
Snippets Groups Projects
Commit 003aa8f7 authored by Moe Jette's avatar Moe Jette
Browse files
parent 3ea0da92
No related branches found
No related tags found
No related merge requests found
...@@ -33,6 +33,7 @@ documents those changes that are of interest to users and admins. ...@@ -33,6 +33,7 @@ documents those changes that are of interest to users and admins.
* Changes in SLURM 0.6.7 * Changes in SLURM 0.6.7
======================== ========================
-- Make proctrack/linuxproc thread safe, could cause slurmd seg fault. -- Make proctrack/linuxproc thread safe, could cause slurmd seg fault.
-- Propagate umask from srun to spawned tasks.
* Changes in SLURM 0.6.6 * Changes in SLURM 0.6.6
======================== ========================
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#endif #endif
#include <sys/resource.h> #include <sys/resource.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
...@@ -50,6 +52,7 @@ ...@@ -50,6 +52,7 @@
static int _get_env_val(char **env, const char *name, unsigned long *valp, static int _get_env_val(char **env, const char *name, unsigned long *valp,
bool *u_req_propagate); bool *u_req_propagate);
static int _set_limit(char **env, slurm_rlimits_info_t *rli); static int _set_limit(char **env, slurm_rlimits_info_t *rli);
static int _set_umask(char **env);
/* /*
* Set user resource limits using the values of the environment variables * Set user resource limits using the values of the environment variables
...@@ -67,6 +70,7 @@ int set_user_limits(slurmd_job_t *job) ...@@ -67,6 +70,7 @@ int set_user_limits(slurmd_job_t *job)
for (rli = get_slurm_rlimits_info(); rli->name; rli++) for (rli = get_slurm_rlimits_info(); rli->name; rli++)
_set_limit( job->env, rli ); _set_limit( job->env, rli );
_set_umask(job->env);
return SLURM_SUCCESS; return SLURM_SUCCESS;
} }
...@@ -82,6 +86,22 @@ static char * rlim_to_string (unsigned long rlim, char *buf, size_t n) ...@@ -82,6 +86,22 @@ static char * rlim_to_string (unsigned long rlim, char *buf, size_t n)
return (buf); return (buf);
} }
/* Set umask using value of env var SLURM_UMASK */
static int
_set_umask(char **env)
{
mode_t mask;
char *val;
if (!(val = getenvp(env, "SLURM_UMASK"))) {
error("Couldn't find SLURM_UMASK in environment");
return SLURM_ERROR;
}
mask = atoi(val);
umask(mask);
}
/* /*
* Set rlimit using value of env vars such as SLURM_RLIMIT_CORE if * Set rlimit using value of env vars such as SLURM_RLIMIT_CORE if
* the slurm config file has PropagateResourceLimits=YES or the user * the slurm config file has PropagateResourceLimits=YES or the user
......
...@@ -103,6 +103,7 @@ static int _is_file_text (char *, char**); ...@@ -103,6 +103,7 @@ static int _is_file_text (char *, char**);
static int _run_batch_job (void); static int _run_batch_job (void);
static int _run_job_script(srun_job_t *job, env_t *env); static int _run_job_script(srun_job_t *job, env_t *env);
static int _set_rlimit_env(void); static int _set_rlimit_env(void);
static int _set_umask_env(void);
static char *_task_count_string(srun_job_t *job); static char *_task_count_string(srun_job_t *job);
static void _switch_standalone(srun_job_t *job); static void _switch_standalone(srun_job_t *job);
static int _become_user (void); static int _become_user (void);
...@@ -148,8 +149,10 @@ int srun(int ac, char **av) ...@@ -148,8 +149,10 @@ int srun(int ac, char **av)
log_alter(logopt, 0, NULL); log_alter(logopt, 0, NULL);
} }
if (!opt.allocate) if (!opt.allocate) {
(void) _set_rlimit_env(); (void) _set_rlimit_env();
(void) _set_umask_env();
}
/* Set up slurmctld message handler */ /* Set up slurmctld message handler */
slurmctld_msg_init(); slurmctld_msg_init();
...@@ -702,6 +705,21 @@ _build_script (char *fname, int file_type) ...@@ -702,6 +705,21 @@ _build_script (char *fname, int file_type)
return buffer; return buffer;
} }
/* Set SLURM_UMASK environment variable with current state */
static int _set_umask_env(void)
{
mode_t mask = (int)umask(0);
umask(mask);
if (setenvf(NULL, "SLURM_UMASK", "%d", (int)mask) < 0) {
error ("unable to set SLURM_UMASK in environment");
return SLURM_FAILURE;
}
debug ("propagating UMASK=0%d%d%d",
((mask>>6)&07), ((mask>>3)&07), mask&07);
return SLURM_SUCCESS;
}
/* Set SLURM_RLIMIT_* environment variables with current resource /* Set SLURM_RLIMIT_* environment variables with current resource
* limit values, reset RLIMIT_NOFILE to maximum possible value */ * limit values, reset RLIMIT_NOFILE to maximum possible value */
static int _set_rlimit_env(void) static int _set_rlimit_env(void)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment