From 4d9df98584e6fbcbb98dd39ce53478924cc98f0f Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Mon, 7 Jul 2025 14:08:38 -0400 Subject: [PATCH 1/2] Refactor: libpacemaker: Rename id to value in crmadmin_node*. --- lib/pacemaker/pcmk_output.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/pacemaker/pcmk_output.c b/lib/pacemaker/pcmk_output.c index 29f1bdfaf1e..c4f1c7e50a2 100644 --- a/lib/pacemaker/pcmk_output.c +++ b/lib/pacemaker/pcmk_output.c @@ -928,15 +928,15 @@ crmadmin_node(pcmk__output_t *out, va_list args) { const char *type = va_arg(args, const char *); const char *name = va_arg(args, const char *); - const char *id = va_arg(args, const char *); + const char *value = va_arg(args, const char *); bool bash_export = va_arg(args, int); if (bash_export) { return out->info(out, "export %s=%s", - pcmk__s(name, ""), pcmk__s(id, "")); + pcmk__s(name, ""), pcmk__s(value, "")); } else { return out->info(out, "%s node: %s (%s)", type ? type : "cluster", - pcmk__s(name, ""), pcmk__s(id, "")); + pcmk__s(name, ""), pcmk__s(value, "")); } } @@ -950,7 +950,7 @@ crmadmin_node_text(pcmk__output_t *out, va_list args) } else { const char *type G_GNUC_UNUSED = va_arg(args, const char *); const char *name = va_arg(args, const char *); - const char *id G_GNUC_UNUSED = va_arg(args, const char *); + const char *value G_GNUC_UNUSED = va_arg(args, const char *); bool bash_export G_GNUC_UNUSED = va_arg(args, int); pcmk__formatted_printf(out, "%s\n", pcmk__s(name, "")); @@ -965,13 +965,13 @@ crmadmin_node_xml(pcmk__output_t *out, va_list args) { const char *type = va_arg(args, const char *); const char *name = va_arg(args, const char *); - const char *id = va_arg(args, const char *); + const char *value = va_arg(args, const char *); bool bash_export G_GNUC_UNUSED = va_arg(args, int); pcmk__output_create_xml_node(out, PCMK_XE_NODE, PCMK_XA_TYPE, pcmk__s(type, "cluster"), PCMK_XA_NAME, pcmk__s(name, ""), - PCMK_XA_ID, pcmk__s(id, ""), + PCMK_XA_ID, pcmk__s(value, ""), NULL); return pcmk_rc_ok; } From 57e970ad60e0d69fcfd20f9f7b5f2444cf1c396b Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Mon, 7 Jul 2025 14:52:26 -0400 Subject: [PATCH 2/2] Low: libpacemaker: Sanitize characters in environment variable names Fixes T933 --- cts/cli/regression.crmadmin.exp | 18 +++++++++--------- lib/pacemaker/pcmk_output.c | 9 +++++++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/cts/cli/regression.crmadmin.exp b/cts/cli/regression.crmadmin.exp index d1910d0fef0..4a22b7aebbe 100644 --- a/cts/cli/regression.crmadmin.exp +++ b/cts/cli/regression.crmadmin.exp @@ -65,17 +65,17 @@ overcloud-rabbit-2 =#=#=#= End test: Minimally list all nodes (XML) - OK (0) =#=#=#= * Passed: crmadmin - Minimally list all nodes (XML) =#=#=#= Begin test: List all nodes as bash exports =#=#=#= -export overcloud-controller-0=1 -export overcloud-controller-1=2 -export overcloud-controller-2=3 -export overcloud-galera-0=4 -export overcloud-galera-1=5 -export overcloud-galera-2=6 +export overcloud_controller_0=1 +export overcloud_controller_1=2 +export overcloud_controller_2=3 +export overcloud_galera_0=4 +export overcloud_galera_1=5 +export overcloud_galera_2=6 export lxc1=lxc1 export lxc2=lxc2 -export overcloud-rabbit-0=overcloud-rabbit-0 -export overcloud-rabbit-1=overcloud-rabbit-1 -export overcloud-rabbit-2=overcloud-rabbit-2 +export overcloud_rabbit_0=overcloud-rabbit-0 +export overcloud_rabbit_1=overcloud-rabbit-1 +export overcloud_rabbit_2=overcloud-rabbit-2 =#=#=#= End test: List all nodes as bash exports - OK (0) =#=#=#= * Passed: crmadmin - List all nodes as bash exports =#=#=#= Begin test: List cluster nodes =#=#=#= diff --git a/lib/pacemaker/pcmk_output.c b/lib/pacemaker/pcmk_output.c index c4f1c7e50a2..10c9f57809f 100644 --- a/lib/pacemaker/pcmk_output.c +++ b/lib/pacemaker/pcmk_output.c @@ -932,8 +932,13 @@ crmadmin_node(pcmk__output_t *out, va_list args) bool bash_export = va_arg(args, int); if (bash_export) { - return out->info(out, "export %s=%s", - pcmk__s(name, ""), pcmk__s(value, "")); + int rc = pcmk_rc_ok; + gchar *replaced = g_strcanon(g_strdup(pcmk__s(name, "")), + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", '_'); + + rc = out->info(out, "export %s=%s", replaced, pcmk__s(value, "")); + g_free(replaced); + return rc; } else { return out->info(out, "%s node: %s (%s)", type ? type : "cluster", pcmk__s(name, ""), pcmk__s(value, ""));