diff --git a/orte/mca/odls/base/Makefile.am b/orte/mca/odls/base/Makefile.am index 9b98af9dc5..71a6ef72a9 100644 --- a/orte/mca/odls/base/Makefile.am +++ b/orte/mca/odls/base/Makefile.am @@ -24,6 +24,7 @@ libmca_odls_la_SOURCES += \ base/odls_base_close.c \ base/odls_base_open.c \ base/odls_base_select.c \ + base/odls_base_support_fns.c \ base/data_type_support/odls_compare_fns.c \ base/data_type_support/odls_copy_fns.c \ base/data_type_support/odls_packing_fns.c \ diff --git a/orte/mca/odls/base/odls_base_support_fns.c b/orte/mca/odls/base/odls_base_support_fns.c new file mode 100644 index 0000000000..c4b9587235 --- /dev/null +++ b/orte/mca/odls/base/odls_base_support_fns.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana + * University Research and Technology + * Corporation. All rights reserved. + * Copyright (c) 2004-2005 The University of Tennessee and The University + * of Tennessee Research Foundation. All rights + * reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + + +#include "orte_config.h" +#include "orte/orte_constants.h" + +#include "opal/mca/base/mca_base_param.h" +#include "opal/util/opal_environ.h" + +#include "orte/mca/odls/base/odls_private.h" + + +int orte_odls_base_purge_environment(char ***environ) +{ + char *param; + + if(NULL == (param = mca_base_param_environ_variable("rds",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, environ); + free(param); + if(NULL == (param = mca_base_param_environ_variable("ras",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, environ); + free(param); + if(NULL == (param = mca_base_param_environ_variable("rmaps",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, environ); + free(param); + if(NULL == (param = mca_base_param_environ_variable("pls",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, environ); + free(param); + if(NULL == (param = mca_base_param_environ_variable("rmgr",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, environ); + free(param); + + return ORTE_SUCCESS; +} + diff --git a/orte/mca/odls/base/odls_private.h b/orte/mca/odls/base/odls_private.h index abbadc0c24..229d904887 100644 --- a/orte/mca/odls/base/odls_private.h +++ b/orte/mca/odls/base/odls_private.h @@ -50,6 +50,8 @@ typedef struct orte_odls_globals_t { ORTE_DECLSPEC extern orte_odls_globals_t orte_odls_globals; +int orte_odls_base_purge_environment(char ***environ); + /* * data type functions */ diff --git a/orte/mca/odls/default/odls_default_module.c b/orte/mca/odls/default/odls_default_module.c index 806b2d4099..feb3abc13b 100644 --- a/orte/mca/odls/default/odls_default_module.c +++ b/orte/mca/odls/default/odls_default_module.c @@ -532,11 +532,11 @@ static int odls_default_fork_local_proc( environ_copy = opal_argv_copy(base_environ); } /* purge any disallowed component directives */ - opal_unsetenv("rds", &environ_copy); - opal_unsetenv("ras", &environ_copy); - opal_unsetenv("rmaps", &environ_copy); - opal_unsetenv("pls", &environ_copy); - opal_unsetenv("rmgr", &environ_copy); + if (ORTE_SUCCESS != orte_odls_base_purge_environment(&environ_copy)) { + /* Tell the parent that Badness happened */ + write(p[1], &i, sizeof(int)); + exit(-1); + } /* special case handling for --prefix: this is somewhat icky, but at least some users do this. :-\ It is possible that diff --git a/orte/mca/odls/process/odls_process_module.c b/orte/mca/odls/process/odls_process_module.c index 5e928939c1..c36e3a9777 100755 --- a/orte/mca/odls/process/odls_process_module.c +++ b/orte/mca/odls/process/odls_process_module.c @@ -462,12 +462,12 @@ static int orte_odls_process_fork_local_proc( environ_copy = opal_argv_copy(base_environ); } /* purge any disallowed component directives */ - opal_unsetenv("rds", &environ_copy); - opal_unsetenv("ras", &environ_copy); - opal_unsetenv("rmaps", &environ_copy); - opal_unsetenv("pls", &environ_copy); - opal_unsetenv("rmgr", &environ_copy); - + if (ORTE_SUCCESS != orte_odls_base_purge_environment(&environ_copy)) { + /* Tell the parent that Badness happened */ + return ORTE_ERR_FATAL; + } + + /* special case handling for --prefix: this is somewhat icky, but at least some users do this. :-\ It is possible that when using --prefix, the user will also "-x PATH" and/or diff --git a/orte/tools/orted/orted.c b/orte/tools/orted/orted.c index 8633f4ce29..335154f1c7 100644 --- a/orte/tools/orted/orted.c +++ b/orte/tools/orted/orted.c @@ -196,6 +196,7 @@ int main(int argc, char *argv[]) char *jobidstring; orte_gpr_value_t *value; char *segment; + char *param; int i; /* initialize the globals */ @@ -205,11 +206,31 @@ int main(int argc, char *argv[]) * specific components. We want to be free to select the proxy components, * so we have to ensure that we aren't picking up directives intended for HNPs. */ - opal_unsetenv("rds", &environ); - opal_unsetenv("ras", &environ); - opal_unsetenv("rmaps", &environ); - opal_unsetenv("pls", &environ); - opal_unsetenv("rmgr", &environ); + if(NULL == (param = mca_base_param_environ_variable("rds",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + unsetenv(param); + free(param); + if(NULL == (param = mca_base_param_environ_variable("ras",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + unsetenv(param); + free(param); + if(NULL == (param = mca_base_param_environ_variable("rmaps",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + unsetenv(param); + free(param); + if(NULL == (param = mca_base_param_environ_variable("pls",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + unsetenv(param); + free(param); + if(NULL == (param = mca_base_param_environ_variable("rmgr",NULL,NULL))) { + return ORTE_ERR_OUT_OF_RESOURCE; + } + unsetenv(param); + free(param); /* save the environment for use when launching application processes */ orted_globals.saved_environ = opal_argv_copy(environ);