diff --git a/src/common/env.c b/src/common/env.c index 0f7d237e379fdcaa7f6c3d5cd1046b2181297ed6..82b39611bf1ff6412663481a95759bea9be3387f 100644 --- a/src/common/env.c +++ b/src/common/env.c @@ -1603,6 +1603,29 @@ void env_array_merge(char ***dest_array, const char **src_array) xfree(value); } +/* + * Merge the environment variables in src_array beginning with "SLURM" into the + * array dest_array. Any variables already found in dest_array will be + * overwritten with the value from src_array. + */ +void env_array_merge_slurm(char ***dest_array, const char **src_array) +{ + char **ptr; + char name[256], *value; + + if (src_array == NULL) + return; + + value = xmalloc(ENV_BUFSIZE); + for (ptr = (char **)src_array; *ptr != NULL; ptr++) { + if (_env_array_entry_splitter(*ptr, name, sizeof(name), + value, ENV_BUFSIZE) && + (strncmp(name, "SLURM", 5) == 0)) + env_array_overwrite(dest_array, name, value); + } + xfree(value); +} + /* * Strip out trailing carriage returns and newlines */ diff --git a/src/common/env.h b/src/common/env.h index b20ee9d247775144bd20d158a45b0f752e9ece69..879ad18d3733a394c13896c7ed40ca71c35fc834 100644 --- a/src/common/env.h +++ b/src/common/env.h @@ -194,6 +194,13 @@ void env_unset_environment(void); */ void env_array_merge(char ***dest_array, const char **src_array); +/* + * Merge the environment variables in src_array beginning with "SLURM" into the + * array dest_array. Any variables already found in dest_array will be + * overwritten with the value from src_array. + */ +void env_array_merge_slurm(char ***dest_array, const char **src_array); + /* * Copy env_array must be freed by env_array_free */ diff --git a/src/sbatch/sbatch.c b/src/sbatch/sbatch.c index cbe7a3c069b1464af88c8f73fd387fe007c015ce..f22f7677792197cffb93c448ba7db54d83a0fdf6 100644 --- a/src/sbatch/sbatch.c +++ b/src/sbatch/sbatch.c @@ -465,6 +465,8 @@ static int _fill_job_desc_from_opts(job_desc_msg_t *desc) env_array_merge(&desc->environment, (const char **)environ); } else if (!strcasecmp(opt.export_env, "NONE")) { desc->environment = env_array_create(); + env_array_merge_slurm(&desc->environment, + (const char **)environ); opt.get_user_env_time = 0; } else { _env_merge_filter(desc);