diff options
author | Sumit Bose <sbose@nb.localdomain> | 2008-12-10 13:24:40 +0100 |
---|---|---|
committer | Sumit Bose <sbose@nb.localdomain> | 2008-12-10 13:24:40 +0100 |
commit | f8925be13096eb1932dfb78a32492699a15ad631 (patch) | |
tree | 85aa9587395cf1f69a801e0df85e7e9e49529a2b | |
parent | c63b675de813381de32f9e8b7f78a59cd35bd7dc (diff) | |
download | ipa_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.xml | 2 | ||||
-rw-r--r-- | worker/output_handler.c | 6 | ||||
-rw-r--r-- | worker/worker.c | 20 | ||||
-rw-r--r-- | worker/xml_helper.c | 65 |
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; } /** |