From af7fb68cfb1fc1f4fb77e74260c13bd2aed4541c Mon Sep 17 00:00:00 2001 From: Ralph Castain Date: Thu, 29 Dec 2011 23:25:25 +0000 Subject: [PATCH] If we forward envars in rsh, then we have to be very careful about both duplicate entries and disallowed characters on the cmd line. To aid with detecting duplicates, make all cmd line options be given in their mca variant. Check anything we might add for semi-colons and protect those values with quotes. This commit was SVN r25685. --- orte/mca/plm/base/plm_base_launch_support.c | 33 +++++++++++++++------ orte/mca/plm/rsh/plm_rsh_module.c | 12 +++++++- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/orte/mca/plm/base/plm_base_launch_support.c b/orte/mca/plm/base/plm_base_launch_support.c index 924eb4805f..40f8826523 100644 --- a/orte/mca/plm/base/plm_base_launch_support.c +++ b/orte/mca/plm/base/plm_base_launch_support.c @@ -754,6 +754,9 @@ int orte_plm_base_setup_orted_cmd(int *argc, char ***argv) } +/* pass all options as MCA params so anything we pickup + * from the environment can be checked for duplicates + */ int orte_plm_base_orted_append_basic_args(int *argc, char ***argv, char *ess, int *proc_vpid_index, @@ -771,22 +774,29 @@ int orte_plm_base_orted_append_basic_args(int *argc, char ***argv, /* check for debug flags */ if (orte_debug_flag) { - opal_argv_append(argc, argv, "--debug"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_debug"); + opal_argv_append(argc, argv, "1"); } if (orte_debug_daemons_flag) { - opal_argv_append(argc, argv, "--debug-daemons"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_debug_daemons"); } if (orte_debug_daemons_file_flag) { - opal_argv_append(argc, argv, "--debug-daemons-file"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_debug_daemons_file"); } if (orted_spin_flag) { - opal_argv_append(argc, argv, "--spin"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_daemon_spin"); } #if OPAL_HAVE_HWLOC if (opal_hwloc_report_bindings) { + opal_argv_append(argc, argv, "-mca"); opal_argv_append(argc, argv, "--report-bindings"); } if (orte_hetero_nodes) { + opal_argv_append(argc, argv, "-mca"); opal_argv_append(argc, argv, "--hetero-nodes"); } #endif @@ -845,14 +855,16 @@ int orte_plm_base_orted_append_basic_args(int *argc, char ***argv, rml_uri = orte_rml.get_contact_info(); } else { asprintf(¶m, "\"%s\"", orte_rml.get_contact_info() ); - opal_argv_append(argc, argv, "--parent-uri"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_parent_uri"); opal_argv_append(argc, argv, param); free(param); rml_uri = orte_process_info.my_hnp_uri; } asprintf(¶m, "\"%s\"", rml_uri); - opal_argv_append(argc, argv, "--hnp-uri"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_hnp_uri"); opal_argv_append(argc, argv, param); free(param); @@ -863,7 +875,8 @@ int orte_plm_base_orted_append_basic_args(int *argc, char ***argv, ORTE_ERROR_LOG(rc); return rc; } - opal_argv_append(argc, argv, "--nodes"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_node_regex"); opal_argv_append(argc, argv, param); free(param); } @@ -904,13 +917,15 @@ int orte_plm_base_orted_append_basic_args(int *argc, char ***argv, /* if output-filename was specified, pass that along */ if (NULL != orte_output_filename) { - opal_argv_append(argc, argv, "--output-filename"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_output_filename"); opal_argv_append(argc, argv, orte_output_filename); } /* if --xterm was specified, pass that along */ if (NULL != orte_xterm) { - opal_argv_append(argc, argv, "--xterm"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_xterm"); opal_argv_append(argc, argv, orte_xterm); } diff --git a/orte/mca/plm/rsh/plm_rsh_module.c b/orte/mca/plm/rsh/plm_rsh_module.c index c2be326471..7c2d7131b1 100644 --- a/orte/mca/plm/rsh/plm_rsh_module.c +++ b/orte/mca/plm/rsh/plm_rsh_module.c @@ -558,7 +558,17 @@ static int setup_launch(int *argcptr, char ***argvptr, /* add it */ opal_argv_append(&argc, &argv, "-mca"); opal_argv_append(&argc, &argv, param); - opal_argv_append(&argc, &argv, value); + /* if the value has a special character in it, + * then protect it with quotes + */ + if (NULL != strchr(value, ';')) { + char *p2; + asprintf(&p2, "\"%s\"", value); + opal_argv_append(&argc, &argv, p2); + free(p2); + } else { + opal_argv_append(&argc, &argv, value); + } } free(param); }