Blame SOURCES/039-bundle-fixes.patch

60de42
From 73d3531f313e7ff77b524d27c9f0f6012e8fabdd Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 09:32:27 -0500
60de42
Subject: [PATCH 01/10] Refactor: libcrmcommon: avoid duplicate variable for
60de42
 /usr/sbin
60de42
60de42
---
60de42
 lib/common/Makefile.am | 3 +--
60de42
 lib/common/watchdog.c  | 2 +-
60de42
 2 files changed, 2 insertions(+), 3 deletions(-)
60de42
60de42
diff --git a/lib/common/Makefile.am b/lib/common/Makefile.am
60de42
index 05a0d74..7a68d1f 100644
60de42
--- a/lib/common/Makefile.am
60de42
+++ b/lib/common/Makefile.am
60de42
@@ -17,8 +17,7 @@
60de42
 #
60de42
 include $(top_srcdir)/Makefile.common
60de42
 
60de42
-AM_CPPFLAGS		+= -I$(top_builddir)/lib/gnu -I$(top_srcdir)/lib/gnu \
60de42
-			-DSBINDIR=\"$(sbindir)\"
60de42
+AM_CPPFLAGS		+= -I$(top_builddir)/lib/gnu -I$(top_srcdir)/lib/gnu
60de42
 
60de42
 ## libraries
60de42
 lib_LTLIBRARIES	= libcrmcommon.la
60de42
diff --git a/lib/common/watchdog.c b/lib/common/watchdog.c
60de42
index a171721..4c4abc1 100644
60de42
--- a/lib/common/watchdog.c
60de42
+++ b/lib/common/watchdog.c
60de42
@@ -216,7 +216,7 @@ pcmk_locate_sbd(void)
60de42
 
60de42
     /* Look for the pid file */
60de42
     pidfile = crm_strdup_printf("%s/sbd.pid", HA_STATE_DIR);
60de42
-    sbd_path = crm_strdup_printf("%s/sbd", SBINDIR);
60de42
+    sbd_path = crm_strdup_printf("%s/sbd", SBIN_DIR);
60de42
 
60de42
     /* Read the pid file */
60de42
     CRM_ASSERT(pidfile);
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From 7642b2c27d074078326b8cc90ed99f1910900a2d Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 09:49:22 -0500
60de42
Subject: [PATCH 02/10] Low: libpe_status: use new ID generation functions
60de42
60de42
Ensures values are sanitized, and fixes a memory leak
60de42
---
60de42
 lib/pengine/container.c | 41 ++++++++++++++++++++---------------------
60de42
 1 file changed, 20 insertions(+), 21 deletions(-)
60de42
60de42
diff --git a/lib/pengine/container.c b/lib/pengine/container.c
60de42
index d7d47ad..801d94a 100644
60de42
--- a/lib/pengine/container.c
60de42
+++ b/lib/pengine/container.c
60de42
@@ -88,10 +88,9 @@ create_resource(const char *name, const char *provider, const char *kind)
60de42
 static void
60de42
 create_nvp(xmlNode *parent, const char *name, const char *value) 
60de42
 {
60de42
-    char *id = crm_strdup_printf("%s-%s", ID(parent), name);
60de42
     xmlNode *xml_nvp = create_xml_node(parent, XML_CIB_TAG_NVPAIR);
60de42
 
60de42
-    crm_xml_add(xml_nvp, XML_ATTR_ID, id); free(id);
60de42
+    crm_xml_set_id(xml_nvp, "%s-%s", ID(parent), name);
60de42
     crm_xml_add(xml_nvp, XML_NVPAIR_ATTR_NAME, name);
60de42
     crm_xml_add(xml_nvp, XML_NVPAIR_ATTR_VALUE, value);
60de42
 }
60de42
@@ -99,10 +98,9 @@ create_nvp(xmlNode *parent, const char *name, const char *value)
60de42
 static void
60de42
 create_op(xmlNode *parent, const char *prefix, const char *task, const char *interval) 
60de42
 {
60de42
-    char *id = crm_strdup_printf("%s-%s-%s", prefix, task, interval);
60de42
     xmlNode *xml_op = create_xml_node(parent, "op");
60de42
 
60de42
-    crm_xml_add(xml_op, XML_ATTR_ID, id); free(id);
60de42
+    crm_xml_set_id(xml_op, "%s-%s-%s", prefix, task, interval);
60de42
     crm_xml_add(xml_op, XML_LRM_ATTR_INTERVAL, interval);
60de42
     crm_xml_add(xml_op, "name", task);
60de42
 }
60de42
@@ -113,13 +111,16 @@ create_ip_resource(
60de42
     pe_working_set_t * data_set) 
60de42
 {
60de42
     if(data->ip_range_start) {
60de42
-        char *id = crm_strdup_printf("%s-ip-%s", data->prefix, tuple->ipaddr);
60de42
-        xmlNode *xml_ip = create_resource(id, "heartbeat", "IPaddr2");
60de42
+        char *id = NULL;
60de42
+        xmlNode *xml_ip = NULL;
60de42
         xmlNode *xml_obj = NULL;
60de42
 
60de42
-        id = crm_strdup_printf("%s-attributes-%d", data->prefix, tuple->offset);
60de42
+        id = crm_strdup_printf("%s-ip-%s", data->prefix, tuple->ipaddr);
60de42
+        crm_xml_sanitize_id(id);
60de42
+        xml_ip = create_resource(id, "heartbeat", "IPaddr2");
60de42
+
60de42
         xml_obj = create_xml_node(xml_ip, XML_TAG_ATTR_SETS);
60de42
-        crm_xml_add(xml_obj, XML_ATTR_ID, id); free(id);
60de42
+        crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset);
60de42
 
60de42
         create_nvp(xml_obj, "ip", tuple->ipaddr);
60de42
         if(data->host_network) {
60de42
@@ -158,13 +159,16 @@ create_docker_resource(
60de42
         int doffset = 0, dmax = 1024;
60de42
         char *dbuffer = calloc(1, dmax+1);
60de42
 
60de42
-        char *id = crm_strdup_printf("%s-docker-%d", data->prefix, tuple->offset);
60de42
-        xmlNode *xml_docker = create_resource(id, "heartbeat", "docker");
60de42
+        char *id = NULL;
60de42
+        xmlNode *xml_docker = NULL;
60de42
         xmlNode *xml_obj = NULL;
60de42
 
60de42
-        id = crm_strdup_printf("%s-attributes-%d", data->prefix, tuple->offset);
60de42
+        id = crm_strdup_printf("%s-docker-%d", data->prefix, tuple->offset);
60de42
+        crm_xml_sanitize_id(id);
60de42
+        xml_docker = create_resource(id, "heartbeat", "docker");
60de42
+
60de42
         xml_obj = create_xml_node(xml_docker, XML_TAG_ATTR_SETS);
60de42
-        crm_xml_add(xml_obj, XML_ATTR_ID, id); free(id);
60de42
+        crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset);
60de42
 
60de42
         create_nvp(xml_obj, "image", data->image);
60de42
         create_nvp(xml_obj, "allow_pull", "true");
60de42
@@ -288,16 +292,14 @@ create_remote_resource(
60de42
         xml_obj = create_xml_node(xml_remote, "operations");
60de42
         create_op(xml_obj, ID(xml_remote), "monitor", "60s");
60de42
 
60de42
-        id = crm_strdup_printf("%s-attributes-%d", data->prefix, tuple->offset);
60de42
         xml_obj = create_xml_node(xml_remote, XML_TAG_ATTR_SETS);
60de42
-        crm_xml_add(xml_obj, XML_ATTR_ID, id); free(id);
60de42
+        crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset);
60de42
 
60de42
         create_nvp(xml_obj, "addr", tuple->ipaddr);
60de42
         create_nvp(xml_obj, "port", crm_itoa(DEFAULT_REMOTE_PORT));
60de42
 
60de42
-        id = crm_strdup_printf("%s-meta-%d", data->prefix, tuple->offset);
60de42
         xml_obj = create_xml_node(xml_remote, XML_TAG_META_SETS);
60de42
-        crm_xml_add(xml_obj, XML_ATTR_ID, id); free(id);
60de42
+        crm_xml_set_id(xml_obj, "%s-meta-%d", data->prefix, tuple->offset);
60de42
 
60de42
         create_nvp(xml_obj, XML_OP_ATTR_ALLOW_MIGRATE, "false");
60de42
 
60de42
@@ -458,13 +460,10 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set)
60de42
             xml_resource = create_xml_node(NULL, XML_CIB_TAG_INCARNATION);
60de42
         }
60de42
 
60de42
-        value = crm_strdup_printf("%s-%s", container_data->prefix, xml_resource->name);
60de42
-        crm_xml_add(xml_resource, XML_ATTR_ID, value);
60de42
-        free(value);
60de42
+        crm_xml_set_id(xml_resource, "%s-%s", container_data->prefix, xml_resource->name);
60de42
 
60de42
-        value = crm_strdup_printf("%s-%s-meta", container_data->prefix, xml_resource->name);
60de42
         xml_set = create_xml_node(xml_resource, XML_TAG_META_SETS);
60de42
-        free(value);
60de42
+        crm_xml_set_id(xml_resource, "%s-%s-meta", container_data->prefix, xml_resource->name);
60de42
 
60de42
         create_nvp(xml_set, XML_RSC_ATTR_ORDERED, "true");
60de42
 
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From 0e42b7427e71a8336b2b8d3fb3ec4d9470cad1e3 Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 09:56:58 -0500
60de42
Subject: [PATCH 03/10] Refactor: crmd,lrmd,liblrmd: pass pointer rather than
60de42
 structure
60de42
60de42
---
60de42
 crmd/lrm_state.c        | 3 ++-
60de42
 include/crm_internal.h  | 2 +-
60de42
 lib/lrmd/proxy_common.c | 4 ++--
60de42
 lrmd/remote_ctl.c       | 2 +-
60de42
 4 files changed, 6 insertions(+), 5 deletions(-)
60de42
60de42
diff --git a/crmd/lrm_state.c b/crmd/lrm_state.c
60de42
index 83532a5..9a810df 100644
60de42
--- a/crmd/lrm_state.c
60de42
+++ b/crmd/lrm_state.c
60de42
@@ -408,7 +408,8 @@ crmd_remote_proxy_new(lrmd_t *lrmd, const char *node_name, const char *session_i
60de42
         .dispatch = remote_proxy_dispatch,
60de42
         .destroy = remote_proxy_disconnected
60de42
     };
60de42
-    remote_proxy_t *proxy = remote_proxy_new(lrmd, proxy_callbacks, node_name, session_id, channel);
60de42
+    remote_proxy_t *proxy = remote_proxy_new(lrmd, &proxy_callbacks, node_name,
60de42
+                                             session_id, channel);
60de42
 
60de42
     if (safe_str_eq(channel, CRM_SYSTEM_CRMD)) {
60de42
         proxy->is_local = TRUE;
60de42
diff --git a/include/crm_internal.h b/include/crm_internal.h
60de42
index 206ec5f..d2f2f07 100644
60de42
--- a/include/crm_internal.h
60de42
+++ b/include/crm_internal.h
60de42
@@ -380,7 +380,7 @@ typedef struct remote_proxy_s {
60de42
 } remote_proxy_t;
60de42
 
60de42
 remote_proxy_t *remote_proxy_new(
60de42
-    lrmd_t *lrmd, struct ipc_client_callbacks proxy_callbacks,
60de42
+    lrmd_t *lrmd, struct ipc_client_callbacks *proxy_callbacks,
60de42
     const char *node_name, const char *session_id, const char *channel);
60de42
 
60de42
 int  remote_proxy_check(lrmd_t *lrmd, GHashTable *hash);
60de42
diff --git a/lib/lrmd/proxy_common.c b/lib/lrmd/proxy_common.c
60de42
index 2e9d963..e0f3d87 100644
60de42
--- a/lib/lrmd/proxy_common.c
60de42
+++ b/lib/lrmd/proxy_common.c
60de42
@@ -172,7 +172,7 @@ remote_proxy_disconnected(gpointer userdata)
60de42
 }
60de42
 
60de42
 remote_proxy_t *
60de42
-remote_proxy_new(lrmd_t *lrmd, struct ipc_client_callbacks proxy_callbacks,
60de42
+remote_proxy_new(lrmd_t *lrmd, struct ipc_client_callbacks *proxy_callbacks,
60de42
                  const char *node_name, const char *session_id, const char *channel)
60de42
 {
60de42
     remote_proxy_t *proxy = NULL;
60de42
@@ -188,7 +188,7 @@ remote_proxy_new(lrmd_t *lrmd, struct ipc_client_callbacks proxy_callbacks,
60de42
     proxy->node_name = strdup(node_name);
60de42
     proxy->session_id = strdup(session_id);
60de42
 
60de42
-    proxy->source = mainloop_add_ipc_client(channel, G_PRIORITY_LOW, 0, proxy, &proxy_callbacks);
60de42
+    proxy->source = mainloop_add_ipc_client(channel, G_PRIORITY_LOW, 0, proxy, proxy_callbacks);
60de42
     proxy->ipc = mainloop_get_ipc_client(proxy->source);
60de42
     proxy->lrm = lrmd;
60de42
 
60de42
diff --git a/lrmd/remote_ctl.c b/lrmd/remote_ctl.c
60de42
index f3fc24f..4afa337 100644
60de42
--- a/lrmd/remote_ctl.c
60de42
+++ b/lrmd/remote_ctl.c
60de42
@@ -259,7 +259,7 @@ ctl_remote_proxy_cb(lrmd_t *lrmd, void *userdata, xmlNode *msg)
60de42
             .destroy = remote_proxy_disconnected
60de42
         };
60de42
 
60de42
-        remote_proxy_new(lrmd, proxy_callbacks, options.node_name, session, channel);
60de42
+        remote_proxy_new(lrmd, &proxy_callbacks, options.node_name, session, channel);
60de42
 
60de42
     } else {
60de42
         remote_proxy_cb(lrmd, options.node_name, msg);
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From 6e0782767bd8b057a363e6bb32327d6881699aae Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 10:50:30 -0500
60de42
Subject: [PATCH 04/10] Low: crmd,liblrmd: handle crmd-local proxy requests
60de42
 properly
60de42
60de42
---
60de42
 crmd/lrm_state.c        | 14 ++++++++------
60de42
 lib/lrmd/proxy_common.c | 28 ++++++++++++++++++++--------
60de42
 2 files changed, 28 insertions(+), 14 deletions(-)
60de42
60de42
diff --git a/crmd/lrm_state.c b/crmd/lrm_state.c
60de42
index 9a810df..86cedd8 100644
60de42
--- a/crmd/lrm_state.c
60de42
+++ b/crmd/lrm_state.c
60de42
@@ -410,10 +410,6 @@ crmd_remote_proxy_new(lrmd_t *lrmd, const char *node_name, const char *session_i
60de42
     };
60de42
     remote_proxy_t *proxy = remote_proxy_new(lrmd, &proxy_callbacks, node_name,
60de42
                                              session_id, channel);
60de42
-
60de42
-    if (safe_str_eq(channel, CRM_SYSTEM_CRMD)) {
60de42
-        proxy->is_local = TRUE;
60de42
-    }
60de42
     return proxy;
60de42
 }
60de42
 
60de42
@@ -526,7 +522,7 @@ crmd_remote_proxy_cb(lrmd_t *lrmd, void *userdata, xmlNode *msg)
60de42
         }
60de42
         return;
60de42
 
60de42
-    } else if (safe_str_eq(op, LRMD_IPC_OP_REQUEST) && proxy->is_local) {
60de42
+    } else if (safe_str_eq(op, LRMD_IPC_OP_REQUEST) && proxy && proxy->is_local) {
60de42
         /* this is for the crmd, which we are, so don't try
60de42
          * and connect/send to ourselves over ipc. instead
60de42
          * do it directly.
60de42
@@ -534,9 +530,15 @@ crmd_remote_proxy_cb(lrmd_t *lrmd, void *userdata, xmlNode *msg)
60de42
         int flags = 0;
60de42
         xmlNode *request = get_message_xml(msg, F_LRMD_IPC_MSG);
60de42
 
60de42
+        CRM_CHECK(request != NULL, return);
60de42
+#if ENABLE_ACL
60de42
+        CRM_CHECK(lrm_state->node_name, return);
60de42
+        crm_xml_add(request, XML_ACL_TAG_ROLE, "pacemaker-remote");
60de42
+        crm_acl_get_set_user(request, F_LRMD_IPC_USER, lrm_state->node_name);
60de42
+#endif
60de42
         crmd_proxy_dispatch(session, request);
60de42
-        crm_element_value_int(msg, F_LRMD_IPC_MSG_FLAGS, &flags);
60de42
 
60de42
+        crm_element_value_int(msg, F_LRMD_IPC_MSG_FLAGS, &flags);
60de42
         if (flags & crm_ipc_client_response) {
60de42
             int msg_id = 0;
60de42
             xmlNode *op_reply = create_xml_node(NULL, "ack");
60de42
diff --git a/lib/lrmd/proxy_common.c b/lib/lrmd/proxy_common.c
60de42
index e0f3d87..81796d4 100644
60de42
--- a/lib/lrmd/proxy_common.c
60de42
+++ b/lib/lrmd/proxy_common.c
60de42
@@ -187,15 +187,21 @@ remote_proxy_new(lrmd_t *lrmd, struct ipc_client_callbacks *proxy_callbacks,
60de42
 
60de42
     proxy->node_name = strdup(node_name);
60de42
     proxy->session_id = strdup(session_id);
60de42
-
60de42
-    proxy->source = mainloop_add_ipc_client(channel, G_PRIORITY_LOW, 0, proxy, proxy_callbacks);
60de42
-    proxy->ipc = mainloop_get_ipc_client(proxy->source);
60de42
     proxy->lrm = lrmd;
60de42
 
60de42
-    if (proxy->source == NULL) {
60de42
-        remote_proxy_free(proxy);
60de42
-        remote_proxy_notify_destroy(lrmd, session_id);
60de42
-        return NULL;
60de42
+    if (safe_str_eq(crm_system_name, CRM_SYSTEM_CRMD)
60de42
+        && safe_str_eq(channel, CRM_SYSTEM_CRMD)) {
60de42
+        /* The crmd doesn't need to connect to itself */
60de42
+        proxy->is_local = TRUE;
60de42
+
60de42
+    } else {
60de42
+        proxy->source = mainloop_add_ipc_client(channel, G_PRIORITY_LOW, 0, proxy, proxy_callbacks);
60de42
+        proxy->ipc = mainloop_get_ipc_client(proxy->source);
60de42
+        if (proxy->source == NULL) {
60de42
+            remote_proxy_free(proxy);
60de42
+            remote_proxy_notify_destroy(lrmd, session_id);
60de42
+            return NULL;
60de42
+        }
60de42
     }
60de42
 
60de42
     crm_trace("new remote proxy client established to %s on %s, session id %s",
60de42
@@ -237,7 +243,13 @@ remote_proxy_cb(lrmd_t *lrmd, const char *node_name, xmlNode *msg)
60de42
             /* proxy connection no longer exists */
60de42
             remote_proxy_notify_destroy(lrmd, session);
60de42
             return;
60de42
-        } else if ((proxy->is_local == FALSE) && (crm_ipc_connected(proxy->ipc) == FALSE)) {
60de42
+        }
60de42
+
60de42
+        /* crmd requests MUST be handled by the crmd, not us */
60de42
+        CRM_CHECK(proxy->is_local == FALSE,
60de42
+                  remote_proxy_end_session(proxy); return);
60de42
+
60de42
+        if (crm_ipc_connected(proxy->ipc) == FALSE) {
60de42
             remote_proxy_end_session(proxy);
60de42
             return;
60de42
         }
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From c76c85f7ca5d5fe2127473f13516694882fda603 Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 10:51:22 -0500
60de42
Subject: [PATCH 05/10] Refactor: libcrmcommon: remove dead code
60de42
60de42
---
60de42
 include/crm_internal.h | 8 --------
60de42
 1 file changed, 8 deletions(-)
60de42
60de42
diff --git a/include/crm_internal.h b/include/crm_internal.h
60de42
index d2f2f07..cf0f32d 100644
60de42
--- a/include/crm_internal.h
60de42
+++ b/include/crm_internal.h
60de42
@@ -162,10 +162,6 @@ crm_clear_bit(const char *function, int line, const char *target, long long word
60de42
 {
60de42
     long long rc = (word & ~bit);
60de42
 
60de42
-    /* if(bit == 0x00002) { */
60de42
-    /*     crm_err("Bit 0x%.8llx for %s cleared by %s:%d", bit, target, function, line); */
60de42
-    /* } */
60de42
-
60de42
     if (rc == word) {
60de42
         /* Unchanged */
60de42
     } else if (target) {
60de42
@@ -182,10 +178,6 @@ crm_set_bit(const char *function, int line, const char *target, long long word,
60de42
 {
60de42
     long long rc = (word | bit);
60de42
 
60de42
-    /* if(bit == 0x00002) { */
60de42
-    /*     crm_err("Bit 0x%.8llx for %s set by %s:%d", bit, target, function, line); */
60de42
-    /* } */
60de42
-
60de42
     if (rc == word) {
60de42
         /* Unchanged */
60de42
     } else if (target) {
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From 23cd184c09f2bdb19b9b5d34b8a091cd52d9d142 Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 10:58:09 -0500
60de42
Subject: [PATCH 06/10] Low: libpe_status: allow more than 254 containers in a
60de42
 bundle
60de42
60de42
---
60de42
 lib/pengine/container.c | 22 +++++++++++++++-------
60de42
 1 file changed, 15 insertions(+), 7 deletions(-)
60de42
60de42
diff --git a/lib/pengine/container.c b/lib/pengine/container.c
60de42
index 801d94a..1c70f02 100644
60de42
--- a/lib/pengine/container.c
60de42
+++ b/lib/pengine/container.c
60de42
@@ -32,20 +32,28 @@ void tuple_free(container_grouping_t *tuple);
60de42
 static char *
60de42
 next_ip(const char *last_ip)
60de42
 {
60de42
-    int oct1 = 0;
60de42
-    int oct2 = 0;
60de42
-    int oct3 = 0;
60de42
-    int oct4 = 0;
60de42
+    unsigned int oct1 = 0;
60de42
+    unsigned int oct2 = 0;
60de42
+    unsigned int oct3 = 0;
60de42
+    unsigned int oct4 = 0;
60de42
+    int rc = sscanf(last_ip, "%u.%u.%u.%u", &oct1, &oct2, &oct3, &oct4);
60de42
 
60de42
-    int rc = sscanf(last_ip, "%d.%d.%d.%d", &oct1, &oct2, &oct3, &oct4);
60de42
     if (rc != 4) {
60de42
+        /*@ TODO check for IPv6 */
60de42
         return NULL;
60de42
 
60de42
-    } else if(oct4 > 255) {
60de42
+    } else if (oct3 > 253) {
60de42
         return NULL;
60de42
+
60de42
+    } else if (oct4 > 253) {
60de42
+        ++oct3;
60de42
+        oct4 = 1;
60de42
+
60de42
+    } else {
60de42
+        ++oct4;
60de42
     }
60de42
 
60de42
-    return crm_strdup_printf("%d.%d.%d.%d", oct1, oct2, oct3, oct4+1);
60de42
+    return crm_strdup_printf("%u.%u.%u.%u", oct1, oct2, oct3, oct4);
60de42
 }
60de42
 
60de42
 static int
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From 4751d74fbfb1be557fb2d4fca9db2c4a2b896950 Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 11:10:54 -0500
60de42
Subject: [PATCH 07/10] Low: libpe_status: avoid memory leaks in bundle
60de42
 handling
60de42
60de42
---
60de42
 lib/pengine/container.c | 16 +++++++++++-----
60de42
 1 file changed, 11 insertions(+), 5 deletions(-)
60de42
60de42
diff --git a/lib/pengine/container.c b/lib/pengine/container.c
60de42
index 1c70f02..816e96a 100644
60de42
--- a/lib/pengine/container.c
60de42
+++ b/lib/pengine/container.c
60de42
@@ -88,7 +88,7 @@ create_resource(const char *name, const char *provider, const char *kind)
60de42
     crm_xml_add(rsc, XML_ATTR_ID, name);
60de42
     crm_xml_add(rsc, XML_AGENT_ATTR_CLASS, "ocf");
60de42
     crm_xml_add(rsc, XML_AGENT_ATTR_PROVIDER, provider);
60de42
-    crm_xml_add(rsc, "type", kind);
60de42
+    crm_xml_add(rsc, XML_ATTR_TYPE, kind);
60de42
 
60de42
     return rsc;
60de42
 }
60de42
@@ -126,6 +126,7 @@ create_ip_resource(
60de42
         id = crm_strdup_printf("%s-ip-%s", data->prefix, tuple->ipaddr);
60de42
         crm_xml_sanitize_id(id);
60de42
         xml_ip = create_resource(id, "heartbeat", "IPaddr2");
60de42
+        free(id);
60de42
 
60de42
         xml_obj = create_xml_node(xml_ip, XML_TAG_ATTR_SETS);
60de42
         crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset);
60de42
@@ -174,6 +175,7 @@ create_docker_resource(
60de42
         id = crm_strdup_printf("%s-docker-%d", data->prefix, tuple->offset);
60de42
         crm_xml_sanitize_id(id);
60de42
         xml_docker = create_resource(id, "heartbeat", "docker");
60de42
+        free(id);
60de42
 
60de42
         xml_obj = create_xml_node(xml_docker, XML_TAG_ATTR_SETS);
60de42
         crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset);
60de42
@@ -203,6 +205,7 @@ create_docker_resource(
60de42
                 }
60de42
                 doffset += snprintf(dbuffer+doffset, dmax-doffset, "%s", source);
60de42
                 offset += snprintf(buffer+offset, max-offset, " -v %s:%s", source, mount->target);
60de42
+                free(source);
60de42
 
60de42
             } else {
60de42
                 offset += snprintf(buffer+offset, max-offset, " -v %s:%s", mount->source, mount->target);
60de42
@@ -287,16 +290,19 @@ create_remote_resource(
60de42
         xmlNode *xml_obj = NULL;
60de42
         xmlNode *xml_remote = NULL;
60de42
         char *nodeid = crm_strdup_printf("%s-%d", data->prefix, tuple->offset);
60de42
-        char *id = strdup(nodeid);
60de42
+        char *id = NULL;
60de42
 
60de42
-        if(remote_id_conflict(id, data_set)) {
60de42
+        if (remote_id_conflict(nodeid, data_set)) {
60de42
             // The biggest hammer we have
60de42
             id = crm_strdup_printf("pcmk-internal-%s-remote-%d", tuple->child->id, tuple->offset);
60de42
+            CRM_ASSERT(remote_id_conflict(id, data_set) == FALSE);
60de42
+        } else {
60de42
+            id = strdup(nodeid);
60de42
         }
60de42
 
60de42
-        CRM_ASSERT(remote_id_conflict(id, data_set) == FALSE);
60de42
-
60de42
         xml_remote = create_resource(id, "pacemaker", "remote");
60de42
+        free(id);
60de42
+
60de42
         xml_obj = create_xml_node(xml_remote, "operations");
60de42
         create_op(xml_obj, ID(xml_remote), "monitor", "60s");
60de42
 
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From ef2cd27bf68b9950cb67872b72c878c995fac479 Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 11:14:41 -0500
60de42
Subject: [PATCH 08/10] Refactor: libpe_status: rename newly exposed function
60de42
 with pe_ prefix
60de42
60de42
---
60de42
 fencing/main.c                 |  1 -
60de42
 include/crm/pengine/internal.h |  3 ++-
60de42
 lib/pengine/container.c        |  3 ++-
60de42
 lib/pengine/unpack.c           | 19 ++++++++++++-------
60de42
 4 files changed, 16 insertions(+), 10 deletions(-)
60de42
60de42
diff --git a/fencing/main.c b/fencing/main.c
60de42
index 437c31f..1c61d8b 100644
60de42
--- a/fencing/main.c
60de42
+++ b/fencing/main.c
60de42
@@ -710,7 +710,6 @@ update_done:
60de42
 }
60de42
 
60de42
 extern xmlNode *do_calculations(pe_working_set_t * data_set, xmlNode * xml_input, crm_time_t * now);
60de42
-extern node_t *create_node(const char *id, const char *uname, const char *type, const char *score, pe_working_set_t * data_set);
60de42
 
60de42
 /*!
60de42
  * \internal
60de42
diff --git a/include/crm/pengine/internal.h b/include/crm/pengine/internal.h
60de42
index adafefd..0da02cc 100644
60de42
--- a/include/crm/pengine/internal.h
60de42
+++ b/include/crm/pengine/internal.h
60de42
@@ -286,7 +286,8 @@ void print_rscs_brief(GListPtr rsc_list, const char * pre_text, long options,
60de42
                       void * print_data, gboolean print_all);
60de42
 void pe_fence_node(pe_working_set_t * data_set, node_t * node, const char *reason);
60de42
 
60de42
-node_t *create_node(const char *id, const char *uname, const char *type, const char *score, pe_working_set_t * data_set);
60de42
+node_t *pe_create_node(const char *id, const char *uname, const char *type,
60de42
+                       const char *score, pe_working_set_t * data_set);
60de42
 bool remote_id_conflict(const char *remote_name, pe_working_set_t *data);
60de42
 void common_print(resource_t * rsc, const char *pre_text, const char *name, node_t *node, long options, void *print_data);
60de42
 resource_t *find_container_child(const char *stem, resource_t * rsc, node_t *node);
60de42
diff --git a/lib/pengine/container.c b/lib/pengine/container.c
60de42
index 816e96a..4dc7594 100644
60de42
--- a/lib/pengine/container.c
60de42
+++ b/lib/pengine/container.c
60de42
@@ -326,7 +326,8 @@ create_remote_resource(
60de42
         // tuple->docker->fillers = g_list_append(tuple->docker->fillers, child);
60de42
 
60de42
         // -INFINITY prevents anyone else from running here
60de42
-        node = create_node(strdup(nodeid), nodeid, "remote", "-INFINITY", data_set);
60de42
+        node = pe_create_node(strdup(nodeid), nodeid, "remote", "-INFINITY",
60de42
+                              data_set);
60de42
         tuple->node = node_copy(node);
60de42
         tuple->node->weight = 500;
60de42
         nodeid = NULL;
60de42
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
60de42
index 2f03493..ef51cd5 100644
60de42
--- a/lib/pengine/unpack.c
60de42
+++ b/lib/pengine/unpack.c
60de42
@@ -303,7 +303,8 @@ destroy_digest_cache(gpointer ptr)
60de42
 }
60de42
 
60de42
 node_t *
60de42
-create_node(const char *id, const char *uname, const char *type, const char *score, pe_working_set_t * data_set)
60de42
+pe_create_node(const char *id, const char *uname, const char *type,
60de42
+               const char *score, pe_working_set_t * data_set)
60de42
 {
60de42
     node_t *new_node = NULL;
60de42
 
60de42
@@ -571,7 +572,7 @@ unpack_nodes(xmlNode * xml_nodes, pe_working_set_t * data_set)
60de42
                 crm_config_err("Must specify id tag in <node>");
60de42
                 continue;
60de42
             }
60de42
-            new_node = create_node(id, uname, type, score, data_set);
60de42
+            new_node = pe_create_node(id, uname, type, score, data_set);
60de42
 
60de42
             if (new_node == NULL) {
60de42
                 return FALSE;
60de42
@@ -595,7 +596,8 @@ unpack_nodes(xmlNode * xml_nodes, pe_working_set_t * data_set)
60de42
 
60de42
     if (data_set->localhost && pe_find_node(data_set->nodes, data_set->localhost) == NULL) {
60de42
         crm_info("Creating a fake local node");
60de42
-        create_node(data_set->localhost, data_set->localhost, NULL, 0, data_set);
60de42
+        pe_create_node(data_set->localhost, data_set->localhost, NULL, 0,
60de42
+                       data_set);
60de42
     }
60de42
 
60de42
     return TRUE;
60de42
@@ -649,7 +651,8 @@ unpack_remote_nodes(xmlNode * xml_resources, pe_working_set_t * data_set)
60de42
              * an expanded node that has already been added to the node list. */
60de42
             if (new_node_id && pe_find_node(data_set->nodes, new_node_id) == NULL) {
60de42
                 crm_trace("Found baremetal remote node %s in container resource %s", new_node_id, ID(xml_obj));
60de42
-                create_node(new_node_id, new_node_id, "remote", NULL, data_set);
60de42
+                pe_create_node(new_node_id, new_node_id, "remote", NULL,
60de42
+                               data_set);
60de42
             }
60de42
             continue;
60de42
         }
60de42
@@ -668,7 +671,8 @@ unpack_remote_nodes(xmlNode * xml_resources, pe_working_set_t * data_set)
60de42
 
60de42
             if (new_node_id && pe_find_node(data_set->nodes, new_node_id) == NULL) {
60de42
                 crm_trace("Found guest remote node %s in container resource %s", new_node_id, ID(xml_obj));
60de42
-                create_node(new_node_id, new_node_id, "remote", NULL, data_set);
60de42
+                pe_create_node(new_node_id, new_node_id, "remote", NULL,
60de42
+                               data_set);
60de42
             }
60de42
             continue;
60de42
 
60de42
@@ -681,7 +685,8 @@ unpack_remote_nodes(xmlNode * xml_resources, pe_working_set_t * data_set)
60de42
 
60de42
                 if (new_node_id && pe_find_node(data_set->nodes, new_node_id) == NULL) {
60de42
                     crm_trace("Found guest remote node %s in container resource %s which is in group %s", new_node_id, ID(xml_obj2), ID(xml_obj));
60de42
-                    create_node(new_node_id, new_node_id, "remote", NULL, data_set);
60de42
+                    pe_create_node(new_node_id, new_node_id, "remote", NULL,
60de42
+                                   data_set);
60de42
                 }
60de42
             }
60de42
         }
60de42
@@ -1661,7 +1666,7 @@ create_fake_resource(const char *rsc_id, xmlNode * rsc_entry, pe_working_set_t *
60de42
         rsc->is_remote_node = TRUE;
60de42
         node = pe_find_node(data_set->nodes, rsc_id);
60de42
         if (node == NULL) {
60de42
-	        node = create_node(rsc_id, rsc_id, "remote", NULL, data_set);
60de42
+	        node = pe_create_node(rsc_id, rsc_id, "remote", NULL, data_set);
60de42
         }
60de42
         link_rsc2remotenode(data_set, rsc);
60de42
 
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From b12bb91ab10166fa20f7ebcc7e48972688c3e8f8 Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 11:20:49 -0500
60de42
Subject: [PATCH 09/10] Low: xml: rename bucket to bundle here, too
60de42
60de42
---
60de42
 xml/resources-2.8.rng | 6 +++---
60de42
 1 file changed, 3 insertions(+), 3 deletions(-)
60de42
60de42
diff --git a/xml/resources-2.8.rng b/xml/resources-2.8.rng
60de42
index f41f84d..2e69aba 100644
60de42
--- a/xml/resources-2.8.rng
60de42
+++ b/xml/resources-2.8.rng
60de42
@@ -14,7 +14,7 @@
60de42
           <ref name="element-group"/>
60de42
           <ref name="element-clone"/>
60de42
           <ref name="element-master"/>
60de42
-          <ref name="element-bucket"/>
60de42
+          <ref name="element-bundle"/>
60de42
         </choice>
60de42
       </zeroOrMore>
60de42
     </element>
60de42
@@ -66,8 +66,8 @@
60de42
   </define>
60de42
 
60de42
 
60de42
-  <define name="element-bucket">
60de42
-    <element name="bucket">
60de42
+  <define name="element-bundle">
60de42
+    <element name="bundle">
60de42
 	<attribute name="id"><data type="ID"/></attribute>
60de42
 	<optional>
60de42
           <attribute name="description"><text/></attribute>
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From 5e00b0b0d9df6cc8288f6368ffb1bce1ee24468a Mon Sep 17 00:00:00 2001
60de42
From: Ken Gaillot <kgaillot@redhat.com>
60de42
Date: Tue, 21 Mar 2017 13:57:10 -0500
60de42
Subject: [PATCH 10/10] Low: tools: update validity regression tests for 2.8
60de42
 schema
60de42
60de42
---
60de42
 tools/regression.validity.exp | 22 ++++++++++++++++++----
60de42
 1 file changed, 18 insertions(+), 4 deletions(-)
60de42
60de42
diff --git a/tools/regression.validity.exp b/tools/regression.validity.exp
60de42
index 1278a09..8fcfcb2 100644
60de42
--- a/tools/regression.validity.exp
60de42
+++ b/tools/regression.validity.exp
60de42
@@ -62,7 +62,11 @@ element rsc_order: Relax-NG validity error : Element constraints has extra conte
60de42
 element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order
60de42
 element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order
60de42
 (   schemas.c:NNN   )   trace: update_validation:	pacemaker-2.7 validation failed
60de42
-Your current configuration pacemaker-1.2 could not validate with any schema in range [pacemaker-1.2, pacemaker-2.7], cannot upgrade to pacemaker-2.0.
60de42
+(   schemas.c:NNN   )   debug: update_validation:	Testing 'pacemaker-2.8' validation (14 of X)
60de42
+element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order
60de42
+element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order
60de42
+(   schemas.c:NNN   )   trace: update_validation:	pacemaker-2.8 validation failed
60de42
+Your current configuration pacemaker-1.2 could not validate with any schema in range [pacemaker-1.2, pacemaker-2.8], cannot upgrade to pacemaker-2.0.
60de42
 =#=#=#= End test: Run crm_simulate with invalid CIB (enum violation) - Required key not available (126) =#=#=#=
60de42
 * Passed: crm_simulate   - Run crm_simulate with invalid CIB (enum violation)
60de42
 =#=#=#= Begin test: Try to make resulting CIB invalid (unrecognized validate-with) =#=#=#=
60de42
@@ -136,7 +140,10 @@ element cib: Relax-NG validity error : Invalid attribute validate-with for eleme
60de42
 (   schemas.c:NNN   )   debug: update_validation:	Testing 'pacemaker-2.7' validation (13 of X)
60de42
 element cib: Relax-NG validity error : Invalid attribute validate-with for element cib
60de42
 (   schemas.c:NNN   )   trace: update_validation:	pacemaker-2.7 validation failed
60de42
-Your current configuration pacemaker-9999.0 could not validate with any schema in range [unknown, pacemaker-2.7], cannot upgrade to pacemaker-2.0.
60de42
+(   schemas.c:NNN   )   debug: update_validation:	Testing 'pacemaker-2.8' validation (14 of X)
60de42
+element cib: Relax-NG validity error : Invalid attribute validate-with for element cib
60de42
+(   schemas.c:NNN   )   trace: update_validation:	pacemaker-2.8 validation failed
60de42
+Your current configuration pacemaker-9999.0 could not validate with any schema in range [unknown, pacemaker-2.8], cannot upgrade to pacemaker-2.0.
60de42
 =#=#=#= End test: Run crm_simulate with invalid CIB (unrecognized validate-with) - Required key not available (126) =#=#=#=
60de42
 * Passed: crm_simulate   - Run crm_simulate with invalid CIB (unrecognized validate-with)
60de42
 =#=#=#= Begin test: Try to make resulting CIB invalid, but possibly recoverable (valid with X.Y+1) =#=#=#=
60de42
@@ -187,8 +194,11 @@ element tags: Relax-NG validity error : Element configuration has extra content:
60de42
 (   schemas.c:NNN   )   debug: update_validation:	pacemaker-2.6-style configuration is also valid for pacemaker-2.7
60de42
 (   schemas.c:NNN   )   debug: update_validation:	Testing 'pacemaker-2.7' validation (13 of X)
60de42
 (   schemas.c:NNN   )   debug: update_validation:	Configuration valid for schema: pacemaker-2.7
60de42
-(   schemas.c:NNN   )   trace: update_validation:	Stopping at pacemaker-2.7
60de42
-(   schemas.c:NNN   )    info: update_validation:	Transformed the configuration from pacemaker-1.2 to pacemaker-2.7
60de42
+(   schemas.c:NNN   )   debug: update_validation:	pacemaker-2.7-style configuration is also valid for pacemaker-2.8
60de42
+(   schemas.c:NNN   )   debug: update_validation:	Testing 'pacemaker-2.8' validation (14 of X)
60de42
+(   schemas.c:NNN   )   debug: update_validation:	Configuration valid for schema: pacemaker-2.8
60de42
+(   schemas.c:NNN   )   trace: update_validation:	Stopping at pacemaker-2.8
60de42
+(   schemas.c:NNN   )    info: update_validation:	Transformed the configuration from pacemaker-1.2 to pacemaker-2.8
60de42
 error: unpack_resources:	Resource start-up disabled since no STONITH resources have been defined
60de42
 error: unpack_resources:	Either configure some or disable STONITH with the stonith-enabled option
60de42
 error: unpack_resources:	NOTE: Clusters with shared data need STONITH to ensure data integrity
60de42
@@ -314,6 +324,8 @@ element rsc_order: Relax-NG validity error : Invalid attribute first-action for
60de42
 element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order
60de42
 element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order
60de42
 element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order
60de42
+element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order
60de42
+element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order
60de42
 =#=#=#= Current cib after: Make resulting CIB invalid, and without validate-with attribute =#=#=#=
60de42
 <cib epoch="31" num_updates="0" admin_epoch="0" validate-with="none">
60de42
   <configuration>
60de42
@@ -371,6 +383,8 @@ bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Invalid attribute f
60de42
 bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order
60de42
 bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order
60de42
 bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order
60de42
+bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order
60de42
+bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order
60de42
 error: unpack_resources:	Resource start-up disabled since no STONITH resources have been defined
60de42
 error: unpack_resources:	Either configure some or disable STONITH with the stonith-enabled option
60de42
 error: unpack_resources:	NOTE: Clusters with shared data need STONITH to ensure data integrity
60de42
-- 
60de42
1.8.3.1
60de42