File pacemaker#3286-0001-Low-libcrmcommon-Check-correct-env-vars-in-pcmk__nod.patch of Package pacemaker.34782

From ff6109075c4c73f718d74fc449e8973917da0d20 Mon Sep 17 00:00:00 2001
From: Reid Wahl <nrwahl@protonmail.com>
Date: Sat, 9 Dec 2023 12:09:57 -0800
Subject: [PATCH] Low: libcrmcommon: Check correct env vars in
 pcmk__node_attr_target()

All CRM_meta environment variables begin with OCF_RESKEY_. Here we add
the prefix.

Previously, we were checking variables that never existed.

It's likely that pcmk__node_attr_target() has never worked correctly
with container-attribute-target=host. Resource agents have worked around
this by calling ocf_attribute_target() from the resource-agents repo.

Note that this fix only applies to container images built using a
version of Pacemaker that includes the fix. Resource agents should
continue using ocf_attribute_target() for a while, in case they're run
by an older container. (The resource agents inside the Pacemaker source
tree are obviously exempt.)

Ref T733

Signed-off-by: Reid Wahl <nrwahl@protonmail.com>
---
 lib/common/attrd_client.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

Index: pacemaker-2.0.5+20201202.ba59be712/lib/common/attrd_client.c
===================================================================
--- pacemaker-2.0.5+20201202.ba59be712.orig/lib/common/attrd_client.c
+++ pacemaker-2.0.5+20201202.ba59be712/lib/common/attrd_client.c
@@ -1,5 +1,5 @@
 /*
- * Copyright 2011-2020 the Pacemaker project contributors
+ * Copyright 2011-2023 the Pacemaker project contributors
  *
  * The version control history for this file may have further details.
  *
@@ -272,7 +272,8 @@ pcmk__node_attr_request_clear(crm_ipc_t
     return rc;
 }
 
-#define LRM_TARGET_ENV "OCF_RESKEY_" CRM_META "_" XML_LRM_ATTR_TARGET
+#define OCF_RESKEY_PREFIX "OCF_RESKEY_"
+#define LRM_TARGET_ENV OCF_RESKEY_PREFIX CRM_META "_" XML_LRM_ATTR_TARGET
 
 /*!
  * \internal
@@ -288,10 +289,18 @@ pcmk__node_attr_target(const char *name)
         return name;
 
     } else {
+        char buf[128] = OCF_RESKEY_PREFIX;
+        size_t offset = sizeof(OCF_RESKEY_PREFIX) - 1;
         char *target_var = crm_meta_name(XML_RSC_ATTR_TARGET);
         char *phys_var = crm_meta_name(PCMK__ENV_PHYSICAL_HOST);
-        const char *target = getenv(target_var);
-        const char *host_physical = getenv(phys_var);
+        const char *target = NULL;
+        const char *host_physical = NULL;
+
+        snprintf(buf + offset, sizeof(buf) - offset, "%s", target_var);
+        target = getenv(buf);
+
+        snprintf(buf + offset, sizeof(buf) - offset, "%s", phys_var);
+        host_physical = getenv(buf);
 
         // It is important to use the name by which the scheduler knows us
         if (host_physical && pcmk__str_eq(target, "host", pcmk__str_casei)) {
openSUSE Build Service is sponsored by