File pacemaker#3292-0001-Log-scheduler-improve-logs-for-invalid-id-ref-s.patch of Package pacemaker.36842

From a183dff646d40103f8a852a226abc7d32bcfd946 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Tue, 23 May 2023 11:00:27 -0500
Subject: [PATCH] Log: scheduler: improve logs for invalid id-ref's

Always treat as configuration error
---
 lib/common/xml.c                    |  9 +++++----
 lib/pacemaker/pcmk_sched_location.c |  3 +--
 lib/pengine/rules.c                 | 11 +++++++++--
 3 files changed, 15 insertions(+), 8 deletions(-)

Index: pacemaker-2.1.5+20221208.a3f44794f/lib/common/xml.c
===================================================================
--- pacemaker-2.1.5+20221208.a3f44794f.orig/lib/common/xml.c
+++ pacemaker-2.1.5+20221208.a3f44794f/lib/common/xml.c
@@ -3018,12 +3018,13 @@ expand_idref(xmlNode * input, xmlNode *
     if (ref != NULL) {
         char *xpath_string = crm_strdup_printf("//%s[@id='%s']", tag, ref);
 
-        result = get_xpath_object(xpath_string, top, LOG_ERR);
-        if (result == NULL) {
+        result = get_xpath_object(xpath_string, top, LOG_DEBUG);
+        if (result == NULL) { // Not possible with schema validation enabled
             char *nodePath = (char *)xmlGetNodePath(top);
 
-            crm_err("No match for %s found in %s: Invalid configuration",
-                    xpath_string, pcmk__s(nodePath, "unrecognizable path"));
+            pcmk__config_err("Ignoring invalid %s configuration: "
+                             XML_ATTR_IDREF " '%s' does not reference "
+                             "a valid object", result->name, ref);
             free(nodePath);
         }
         free(xpath_string);
Index: pacemaker-2.1.5+20221208.a3f44794f/lib/pacemaker/pcmk_sched_location.c
===================================================================
--- pacemaker-2.1.5+20221208.a3f44794f.orig/lib/pacemaker/pcmk_sched_location.c
+++ pacemaker-2.1.5+20221208.a3f44794f/lib/pacemaker/pcmk_sched_location.c
@@ -70,7 +70,7 @@ generate_location_rule(pe_resource_t *rs
 
     rule_xml = expand_idref(rule_xml, data_set->input);
     if (rule_xml == NULL) {
-        return NULL;
+        return NULL; // Error already logged
     }
 
     rule_id = crm_element_value(rule_xml, XML_ATTR_ID);
Index: pacemaker-2.1.5+20221208.a3f44794f/lib/pengine/rules.c
===================================================================
--- pacemaker-2.1.5+20221208.a3f44794f.orig/lib/pengine/rules.c
+++ pacemaker-2.1.5+20221208.a3f44794f/lib/pengine/rules.c
@@ -365,6 +365,10 @@ populate_hash(xmlNode * nvpair_list, GHa
         if (pcmk__str_eq((const char *)an_attr->name, XML_CIB_TAG_NVPAIR, pcmk__str_none)) {
             xmlNode *ref_nvpair = expand_idref(an_attr, top);
 
+            if (ref_nvpair == NULL) {
+                continue; // Not possible with schema validation enabled
+            }
+
             name = crm_element_value(an_attr, XML_NVPAIR_ATTR_NAME);
             if (name == NULL) {
                 name = crm_element_value(ref_nvpair, XML_NVPAIR_ATTR_NAME);
@@ -457,8 +461,7 @@ make_pairs(xmlNode *top, const xmlNode *
             xmlNode *expanded_attr_set = expand_idref(attr_set, top);
 
             if (expanded_attr_set == NULL) {
-                // Schema (if not "none") prevents this
-                continue;
+                continue; // Not possible with schema validation enabled
             }
 
             pair = calloc(1, sizeof(sorted_set_t));
@@ -645,6 +648,10 @@ pe_eval_expr(xmlNode *rule, pe_rule_eval
     const char *value = NULL;
 
     rule = expand_idref(rule, NULL);
+    if (rule == NULL) {
+        return FALSE; // Not possible with schema validation enabled
+    }
+
     value = crm_element_value(rule, XML_RULE_ATTR_BOOLEAN_OP);
     if (pcmk__str_eq(value, "or", pcmk__str_casei)) {
         do_and = FALSE;
openSUSE Build Service is sponsored by