[Cluster-devel] cluster/rgmanager/src/daemons resrules.c

lhh at sourceware.org lhh at sourceware.org
Fri Oct 20 20:57:19 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4
Changes by:	lhh at sourceware.org	2006-10-20 20:57:19

Modified files:
	rgmanager/src/daemons: resrules.c 

Log message:
	Correct incorrectly applied patch to fix compatibility issue

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/resrules.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9.2.3&r2=1.9.2.4

--- cluster/rgmanager/src/daemons/resrules.c	2006/10/20 20:29:39	1.9.2.3
+++ cluster/rgmanager/src/daemons/resrules.c	2006/10/20 20:57:19	1.9.2.4
@@ -19,10 +19,10 @@
 #include <libxml/parser.h>
 #include <libxml/xmlmemory.h>
 #include <libxml/xpath.h>
+#include <magma.h>
 #include <ccs.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <string.h>
 #include <resgroup.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -53,6 +53,12 @@
 				newrule->rr_type);
 			return -1;
 		}
+		if (newrule->rr_root && curr->rr_root) {
+			fprintf(stderr, "Error storing %s: root "
+				"resource type %s exists already\n",
+				newrule->rr_type, curr->rr_type);
+			return -1;
+		}
 
 	} while (!list_done(rulelist, curr));
 			
@@ -180,6 +186,30 @@
 }
 
 
+/**
+   Get and store the root attribute.
+
+   @param doc		Pre-parsed XML document pointer.
+   @param ctx		Pre-allocated XML XPath context pointer.
+   @param base		XPath prefix to search
+   @param rr		Resource rule to store new information in.
+ */
+void
+_get_root(xmlDocPtr doc, xmlXPathContextPtr ctx, char *base,
+	  resource_rule_t *rr)
+{
+	char xpath[256];
+	char *ret = NULL;
+
+	snprintf(xpath, sizeof(xpath), "%s/attributes/@root", base);
+	ret = xpath_get_one(doc, ctx, xpath);
+	if (ret) {
+		rr->rr_root = 1;
+		free(ret);
+	}
+}
+
+
 int
 expand_time(char *val)
 {
@@ -326,6 +356,8 @@
 			free(act);
 		
 	} while (1);
+
+
 }
 
 
@@ -497,7 +529,10 @@
 {
 	int x;
 
-	printf("Resource Rules for \"%s\"\n", rr->rr_type);
+	printf("Resource Rules for \"%s\"", rr->rr_type);
+	if (rr->rr_root)
+		printf(" [ROOT]");
+	printf("\n");
 
 	if (rr->rr_version)
 		printf("OCF API Version: %s\n", rr->rr_version);
@@ -928,11 +963,12 @@
 		snprintf(base, sizeof(base),
 			 "/resource-agent[%d]/special[@tag=\"rgmanager\"]",
 			 ruleid);
+		_get_root(doc, ctx, base, rr);
 		_get_maxparents(doc, ctx, base, rr);
 		rr->rr_agent = strdup(filename);
 
 		/*
-		   Second, add the children fields
+		   Second, add the allowable-children fields
 		 */
 		_get_childtypes(doc, ctx, base, rr);
 




More information about the Cluster-devel mailing list