File bug-918839_pacemaker-crm_mon-fill-crm_notify_node-in-traps-with-nodes-uname.patch of Package pacemaker.9287

From acbda524fa9e242574da90ba36f3b3a547f7ba3a Mon Sep 17 00:00:00 2001
From: "Gao,Yan" <ygao@suse.com>
Date: Fri, 20 Feb 2015 17:39:38 +0100
Subject: [PATCH] Fix: crm_mon: Fill CRM_notify_node in traps with node's uname
 rather than node's id if possible

---
 tools/crm_mon.c | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/tools/crm_mon.c b/tools/crm_mon.c
index 0cd4f43641..841dd07886 100644
--- a/tools/crm_mon.c
+++ b/tools/crm_mon.c
@@ -2422,7 +2422,7 @@ send_smtp_trap(const char *node, const char *rsc, const char *task, int target_r
 }
 
 static void
-handle_rsc_op(xmlNode * xml, const char *node)
+handle_rsc_op(xmlNode * xml, const char *node_id)
 {
     int rc = -1;
     int status = -1;
@@ -2438,6 +2438,7 @@ handle_rsc_op(xmlNode * xml, const char *node)
     const char *magic = NULL;
     const char *id = NULL;
     char *update_te_uuid = NULL;
+    const char *node = NULL;
 
     xmlNode *n = xml;
     xmlNode * rsc_op = xml;
@@ -2446,7 +2447,7 @@ handle_rsc_op(xmlNode * xml, const char *node)
         xmlNode *cIter;
 
         for(cIter = xml->children; cIter; cIter = cIter->next) {
-            handle_rsc_op(cIter, node);
+            handle_rsc_op(cIter, node_id);
         }
 
         return;
@@ -2475,18 +2476,24 @@ handle_rsc_op(xmlNode * xml, const char *node)
         goto bail;
     }
 
+    node = crm_element_value(rsc_op, XML_LRM_ATTR_TARGET);
+
     while (n != NULL && safe_str_neq(XML_CIB_TAG_STATE, TYPE(n))) {
         n = n->parent;
     }
 
-    if(node == NULL) {
+    if(node == NULL && n) {
         node = crm_element_value(n, XML_ATTR_UNAME);
     }
 
-    if (node == NULL) {
+    if (node == NULL && n) {
         node = ID(n);
     }
 
+    if (node == NULL) {
+        node = node_id;
+    }
+
     if (node == NULL) {
         crm_err("No node detected for event %s (%s)", magic, id);
         goto bail;
@@ -2597,7 +2604,10 @@ static void crm_diff_update_v2(const char *event, xmlNode * msg)
             xmlNode *status = first_named_child(match, XML_CIB_TAG_STATUS);
 
             for (state = __xml_first_child(status); state != NULL; state = __xml_next(state)) {
-                node = ID(state);
+                node = crm_element_value(state, XML_ATTR_UNAME);
+                if (node == NULL) {
+                    node = ID(state);
+                }
                 handle_rsc_op(state, node);
             }
 
@@ -2605,12 +2615,18 @@ static void crm_diff_update_v2(const char *event, xmlNode * msg)
             xmlNode *state = NULL;
 
             for (state = __xml_first_child(match); state != NULL; state = __xml_next(state)) {
-                node = ID(state);
+                node = crm_element_value(state, XML_ATTR_UNAME);
+                if (node == NULL) {
+                    node = ID(state);
+                }
                 handle_rsc_op(state, node);
             }
 
         } else if(strcmp(name, XML_CIB_TAG_STATE) == 0) {
-            node = ID(match);
+            node = crm_element_value(match, XML_ATTR_UNAME);
+            if (node == NULL) {
+                node = ID(match);
+            }
             handle_rsc_op(match, node);
 
         } else if(strcmp(name, XML_CIB_TAG_LRM) == 0) {
openSUSE Build Service is sponsored by