summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSumit Bose <sbose@nb.localdomain>2008-12-10 13:24:40 +0100
committerSumit Bose <sbose@nb.localdomain>2008-12-10 13:24:40 +0100
commitf8925be13096eb1932dfb78a32492699a15ad631 (patch)
tree85aa9587395cf1f69a801e0df85e7e9e49529a2b
parentc63b675de813381de32f9e8b7f78a59cd35bd7dc (diff)
downloadipa_policy-f8925be13096eb1932dfb78a32492699a15ad631.tar.gz
ipa_policy-f8925be13096eb1932dfb78a32492699a15ad631.tar.xz
ipa_policy-f8925be13096eb1932dfb78a32492699a15ad631.zip
more memory fixes
-rw-r--r--selinux_booleans/selinux_booleans_example_policy.xml2
-rw-r--r--worker/output_handler.c6
-rw-r--r--worker/worker.c20
-rw-r--r--worker/xml_helper.c65
4 files changed, 52 insertions, 41 deletions
diff --git a/selinux_booleans/selinux_booleans_example_policy.xml b/selinux_booleans/selinux_booleans_example_policy.xml
index 5535780..3eaa0b7 100644
--- a/selinux_booleans/selinux_booleans_example_policy.xml
+++ b/selinux_booleans/selinux_booleans_example_policy.xml
@@ -11,7 +11,7 @@
<ipaconfig>
<selinux_boolean>
- <name>wwwebadm_manage_user_files</name>
+ <name>webadm_manage_user_files</name>
<value>true</value>
</selinux_boolean>
<selinux_boolean>
diff --git a/worker/output_handler.c b/worker/output_handler.c
index 7300f1d..f082a0f 100644
--- a/worker/output_handler.c
+++ b/worker/output_handler.c
@@ -215,13 +215,13 @@ int find_output_handler(const char *policy_file_name, const char *xslt_file_name
xmlDocPtr doc=NULL;
doc = xmlParseFile(policy_file_name);
- CHECK(doc, NULL, ("Cannot parse file %s!\n", policy_file_name), exit(1));
+ CHECK(doc, NULL, ("Cannot parse file %s!\n", policy_file_name), goto failed);
xslt_doc = xmlParseFile(xslt_file_name);
- CHECK(xslt_doc, NULL, ("Cannot parse file %s!\n", xslt_file_name), exit(1));
+ CHECK(xslt_doc, NULL, ("Cannot parse file %s!\n", xslt_file_name), goto failed);
xpath_context = xmlXPathNewContext(xslt_doc);
- CHECK(xpath_context, NULL, ("Error: unable to create new XPath context\n"), exit(1));
+ CHECK(xpath_context, NULL, ("Error: unable to create new XPath context\n"), goto failed);
if (xmlXPathRegisterNs(xpath_context, XSLT_METADATA_NAMESPACE_PREFIX, XSLT_METADATA_NAMESPACE) != 0) {
DEBUG(0,
diff --git a/worker/worker.c b/worker/worker.c
index 01a7be7..d30f7c0 100644
--- a/worker/worker.c
+++ b/worker/worker.c
@@ -42,11 +42,10 @@ int my_mallinfo () {
int main(int argc, char **argv)
{
- char *xslt_file_name;
- char *ipa_policy_type;
- char *policy_file_name;
-
- mtrace();
+ char *xslt_file_name=NULL;
+ char *ipa_policy_type=NULL;
+ char *policy_file_name=NULL;
+ int ret;
if (argc != 2) {
DEBUG(0,
@@ -56,7 +55,13 @@ int main(int argc, char **argv)
policy_file_name=strdup(argv[1]);
- validate_policy(policy_file_name, &ipa_policy_type, &xslt_file_name);
+ ret=validate_policy(policy_file_name, &ipa_policy_type, &xslt_file_name);
+ if ( ret == -1 ) {
+ DEBUG(0,("Invalid policy, aborting.\n"));
+ free(policy_file_name);
+ xmlCleanupParser();
+ exit(-1);
+ }
if ( strncmp( ipa_policy_type, "ipaaction", 9)==0) {
@@ -71,10 +76,7 @@ int main(int argc, char **argv)
free(ipa_policy_type);
free(policy_file_name);
-
xmlCleanupParser();
- printf("xmlMemUsed: %d\n",xmlMemUsed());
- muntrace();
return 0;
}
diff --git a/worker/xml_helper.c b/worker/xml_helper.c
index 8eff726..c4c80e8 100644
--- a/worker/xml_helper.c
+++ b/worker/xml_helper.c
@@ -44,68 +44,77 @@ xmlChar *default_namespace_prefix = (xmlChar *) "def";
*/
int validate_policy(const char *policy_file_name, char **ipa_policy_type, char **xslt_file_name) {
- xmlDocPtr doc;
- char *rng_file_name;
- xmlRelaxNGParserCtxtPtr rng_parser_context;
- xmlRelaxNGPtr rng_schema;
- xmlRelaxNGValidCtxtPtr rng_context;
+ xmlDocPtr doc=NULL;
+ char *rng_file_name=NULL;
+ xmlRelaxNGParserCtxtPtr rng_parser_context=NULL;
+ xmlRelaxNGPtr rng_schema=NULL;
+ xmlRelaxNGValidCtxtPtr rng_context=NULL;
xmlChar xpath_expr[XMLCHARLEN];
doc = xmlParseFile(policy_file_name);
- CHECK(doc, NULL, ("Cannot parse document %s!\n", policy_file_name), exit(1));
-
- xmlStrPrintf(xpath_expr, XMLCHARLEN, (xmlChar *) "//%s:ipa/*[2]",
- default_namespace_prefix);
- *ipa_policy_type = find_by_xpath(doc, xpath_expr, FIND_NAME);
- CHECK(*ipa_policy_type, NULL, ("Type of IPA policy not found.\n"), exit(1));
- DEBUG(3, ("Found IPA policy type: %s\n", *ipa_policy_type));
- if ( strncmp(*ipa_policy_type, "ipaconfig",9) != 0 &&
- strncmp(*ipa_policy_type, "iparole",7) != 0 &&
- strncmp(*ipa_policy_type, "ipaaction",9) != 0) {
- DEBUG(0,("unknown IPA ploicy type\n"));
- exit(1);
- }
+ CHECK(doc, NULL, ("Cannot parse document %s!\n", policy_file_name), return -1);
xmlStrPrintf(xpath_expr, XMLCHARLEN, (xmlChar *) "//%s:RNGfile",
default_namespace_prefix);
rng_file_name =
find_by_xpath(doc, xpath_expr, FIND_VALUE);
- CHECK(rng_file_name, NULL, ("Name of RELANX NG schema file not found.\n"), exit(1));
+ CHECK(rng_file_name, NULL, ("Name of RELANX NG schema file not found.\n"), goto failed);
DEBUG(3, ("Found name of RELAX NG schema file: %s\n", rng_file_name));
/* validate the document */
rng_parser_context = xmlRelaxNGNewParserCtxt(rng_file_name);
- CHECK(rng_parser_context, NULL, ("Failed to parse RNG file\n"), exit(1));
+ CHECK(rng_parser_context, NULL, ("Failed to parse RNG file\n"), goto failed);
rng_schema = xmlRelaxNGParse(rng_parser_context);
- CHECK(rng_schema, NULL, ("Failed to create RNG schema\n"), exit(1));
+ CHECK(rng_schema, NULL, ("Failed to create RNG schema\n"), goto failed);
rng_context = xmlRelaxNGNewValidCtxt(rng_schema);
- CHECK(rng_context, NULL, ("Failed to create RNG context\n"), exit(1));
+ CHECK(rng_context, NULL, ("Failed to create RNG context\n"), goto failed);
if (xmlRelaxNGValidateDoc(rng_context, doc) == 0) {
DEBUG(3, ("The document is valid.\n"));
} else {
DEBUG(0, ("Error during validation.\n"));
- exit(1);
+ goto failed;
}
- xmlRelaxNGFreeValidCtxt(rng_context);
- xmlRelaxNGFree(rng_schema);
- xmlRelaxNGFreeParserCtxt(rng_parser_context);
- free(rng_file_name);
+ xmlStrPrintf(xpath_expr, XMLCHARLEN, (xmlChar *) "//%s:ipa/*[2]",
+ default_namespace_prefix);
+ *ipa_policy_type = find_by_xpath(doc, xpath_expr, FIND_NAME);
+ CHECK(*ipa_policy_type, NULL, ("Type of IPA policy not found.\n"), goto failed);
+ DEBUG(3, ("Found IPA policy type: %s\n", *ipa_policy_type));
+ if ( strncmp(*ipa_policy_type, "ipaconfig",9) != 0 &&
+ strncmp(*ipa_policy_type, "iparole",7) != 0 &&
+ strncmp(*ipa_policy_type, "ipaaction",9) != 0) {
+ DEBUG(0,("unknown IPA ploicy type\n"));
+ exit(1);
+ }
if (strncmp(*ipa_policy_type, "ipaaction", 9)!=0) {
xmlStrPrintf(xpath_expr, XMLCHARLEN, (xmlChar *) "//%s:XSLTfile", default_namespace_prefix);
*xslt_file_name =
find_by_xpath(doc, xpath_expr, FIND_VALUE);
- CHECK(*xslt_file_name, NULL, ("Name of XSLT file not found.\n"), exit(1));
+ CHECK(*xslt_file_name, NULL, ("Name of XSLT file not found.\n"), goto failed);
DEBUG(3, ("Found name of XSLT file: %s\n", *xslt_file_name));
}
+ xmlRelaxNGFreeValidCtxt(rng_context);
+ xmlRelaxNGFree(rng_schema);
+ xmlRelaxNGFreeParserCtxt(rng_parser_context);
+ free(rng_file_name);
+
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
+failed:
+ xmlRelaxNGFreeValidCtxt(rng_context);
+ xmlRelaxNGFree(rng_schema);
+ xmlRelaxNGFreeParserCtxt(rng_parser_context);
+ free(rng_file_name);
+
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+ return -1;
}
/**