From 1be6a957fa90294f982f9e8531a05c86c49028fb Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Thu, 20 Nov 2008 22:37:14 +0100 Subject: removed default_namespace from most parameter lists --- worker/helpers.c | 6 +++++ worker/helpers.h | 9 ++++++++ worker/ipaaction.c | 46 +++++++++++++------------------------ worker/ipaaction.h | 8 +++---- worker/worker.c | 6 ++--- worker/xml_helper.c | 65 ++++++++++++++++++++++++++++------------------------- worker/xml_helper.h | 7 +++--- 7 files changed, 75 insertions(+), 72 deletions(-) diff --git a/worker/helpers.c b/worker/helpers.c index e4b503d..5359422 100644 --- a/worker/helpers.c +++ b/worker/helpers.c @@ -14,6 +14,12 @@ #include #include "util.h" +#include "helpers.h" + +int get_file_info(struct file_info *f_info, char *xpath_base) { + + return 0; +} /** * \brief Open a temporary file in a safe way diff --git a/worker/helpers.h b/worker/helpers.h index 3e761c0..259182a 100644 --- a/worker/helpers.h +++ b/worker/helpers.h @@ -1,3 +1,12 @@ + +struct file_info { + char *name; + char *permission; + char *user; + char *group; + char *selinux_context_string; +}; + int open_temporary_file(char *name, const char *permission, const char *user, const char *group, const char *selinux_context_string); int exec_command(const char *command, const char *user, const char *group, char *arguments, char *extra_args); diff --git a/worker/ipaaction.c b/worker/ipaaction.c index 7bf7422..de01d94 100644 --- a/worker/ipaaction.c +++ b/worker/ipaaction.c @@ -39,9 +39,9 @@ #define XPATH_IPAACTION_RUN_USER (xmlChar *) "//def:ipa/def:ipaaction/def:run/def:user" #define XPATH_IPAACTION_RUN_GROUP (xmlChar *) "//def:ipa/def:ipaaction/def:run/def:group" -char *find_value(const xmlDocPtr doc, const xmlChar *xpath_expr, const char *default_value, const xmlChar *prefix, const xmlChar *namespace) { +char *find_value(const xmlDocPtr doc, const xmlChar *xpath_expr, const char *default_value) { char *val; - val = find_by_xpath(doc, xpath_expr, FIND_VALUE, prefix, namespace); + val = find_by_xpath(doc, xpath_expr, FIND_VALUE); if (val==NULL) { DEBUG(3, ("No value found with XPath %s.\n", xpath_expr)); if (default_value!=NULL) { @@ -60,17 +60,14 @@ int check_ipaaction_condition(const xmlDocPtr doc, const xmlChar *default_namesp char *group; char *arguments; - condition = find_value(doc, XPATH_IPAACTION_CONDITION_COMMAND, NULL, - default_namespace_prefix, default_namespace); + condition = find_value(doc, XPATH_IPAACTION_CONDITION_COMMAND, NULL); CHECK(condition, NULL, ("No condition found for current ipaaction.\n"), return 0); DEBUG(3, ("Found condition for current ipaaction: |%s|\n", condition)); - user = find_value(doc, XPATH_IPAACTION_CONDITION_USER, "nobody", - default_namespace_prefix, default_namespace); + user = find_value(doc, XPATH_IPAACTION_CONDITION_USER, "nobody"); DEBUG(3, ("Found user for condition: %s\n", user)); - group = find_value(doc, XPATH_IPAACTION_CONDITION_GROUP, "nobody", - default_namespace_prefix, default_namespace); + group = find_value(doc, XPATH_IPAACTION_CONDITION_GROUP, "nobody"); DEBUG(3, ("Found group for condition: %s\n", group)); arguments=strchr(condition,' '); @@ -106,11 +103,9 @@ int ipaaction_file(const xmlDocPtr doc, const xmlChar *default_namespace) { int ret; struct stat stat_buffer; - url = find_value(doc, XPATH_IPAACTION_FILE_URL, NULL, - default_namespace_prefix, default_namespace); + url = find_value(doc, XPATH_IPAACTION_FILE_URL, NULL); DEBUG(3, ("Found the following ipaaction file url: |%s|\n", url)); - data = find_value(doc, XPATH_IPAACTION_FILE_DATA, NULL, - default_namespace_prefix, default_namespace); + data = find_value(doc, XPATH_IPAACTION_FILE_DATA, NULL); DEBUG(3, ("Found the following ipaaction file data: |%s|\n", data)); if (url==NULL && data==NULL) { DEBUG(0,("Found no url or data element for ipaaction file. This should never happen.\n")); @@ -121,31 +116,25 @@ int ipaaction_file(const xmlDocPtr doc, const xmlChar *default_namespace) { return -1; } - path = find_value(doc, XPATH_IPAACTION_FILE_PATH, NULL, - default_namespace_prefix, default_namespace); + path = find_value(doc, XPATH_IPAACTION_FILE_PATH, NULL); CHECK(path, NULL, ("Path for ipaaction file not found.\n"), return -1); DEBUG(3, ("Found path for ipaaction file: %s\n", path)); ret=stat(path, &stat_buffer); CHECK(ret, 0, ("Destination file %s alread exists.\n", path), return -1); - owner = find_value(doc, XPATH_IPAACTION_FILE_OWNER, "root", - default_namespace_prefix, default_namespace); + owner = find_value(doc, XPATH_IPAACTION_FILE_OWNER, "root"); DEBUG(3, ("Found owner for ipaaction file: %s\n", owner)); - group = find_value(doc, XPATH_IPAACTION_FILE_GROUP, "root", - default_namespace_prefix, default_namespace); + group = find_value(doc, XPATH_IPAACTION_FILE_GROUP, "root"); DEBUG(3, ("Found group for ipaaction file: %s\n", group)); - access = find_value(doc, XPATH_IPAACTION_FILE_ACCESS, "0400", - default_namespace_prefix, default_namespace); + access = find_value(doc, XPATH_IPAACTION_FILE_ACCESS, "0400"); DEBUG(3, ("Found access permissions for ipaaction file: %s\n", access)); - selinux_context = find_value(doc, XPATH_IPAACTION_FILE_SELINUX_CONTEXT, NULL, - default_namespace_prefix, default_namespace); + selinux_context = find_value(doc, XPATH_IPAACTION_FILE_SELINUX_CONTEXT, NULL); DEBUG(3, ("Found SELinux file context for ipaaction file: %s\n", selinux_context)); - cleanup = find_value(doc, XPATH_IPAACTION_FILE_CLEANUP, "no", - default_namespace_prefix, default_namespace); + cleanup = find_value(doc, XPATH_IPAACTION_FILE_CLEANUP, "no"); DEBUG(3, ("Found cleanup information for ipaaction file: %s\n", cleanup)); @@ -186,19 +175,16 @@ int ipaaction_run(const xmlDocPtr doc, const xmlChar *default_namespace) { char *group; char *arguments; - command = find_value(doc, XPATH_IPAACTION_RUN_COMMAND, NULL, - default_namespace_prefix, default_namespace); + command = find_value(doc, XPATH_IPAACTION_RUN_COMMAND, NULL); CHECK(command, NULL, ("No command in ipaaction run section found, this should neven happen.\n"), return -1); DEBUG(3, ("Found command for current ipaaction: |%s|\n", command)); - user = find_value(doc, XPATH_IPAACTION_RUN_USER, "nobody", - default_namespace_prefix, default_namespace); + user = find_value(doc, XPATH_IPAACTION_RUN_USER, "nobody"); DEBUG(3, ("Found user for ipaaction run command: %s\n", user)); - group = find_value(doc, XPATH_IPAACTION_RUN_GROUP, "nobody", - default_namespace_prefix, default_namespace); + group = find_value(doc, XPATH_IPAACTION_RUN_GROUP, "nobody"); DEBUG(3, ("Found group for ipaaction run command: %s\n", group)); arguments=strchr(command,' '); diff --git a/worker/ipaaction.h b/worker/ipaaction.h index 25664d8..2d70495 100644 --- a/worker/ipaaction.h +++ b/worker/ipaaction.h @@ -1,4 +1,4 @@ -int check_ipaaction_condition(const xmlDocPtr doc, const xmlChar *default_namespace); -int ipaaction_file(const xmlDocPtr doc, const xmlChar *default_namespace); -int ipaaction_run(const xmlDocPtr doc, const xmlChar *default_namespace); -int handle_ipaaction(const char *policy_file_name, const xmlChar *default_namespace); +int check_ipaaction_condition(const xmlDocPtr doc); +int ipaaction_file(const xmlDocPtr doc); +int ipaaction_run(const xmlDocPtr doc); +int handle_ipaaction(const char *policy_file_name); diff --git a/worker/worker.c b/worker/worker.c index 85430bd..cb8e813 100644 --- a/worker/worker.c +++ b/worker/worker.c @@ -33,7 +33,6 @@ int main(int argc, char **argv) { - xmlChar *default_namespace; char *xslt_file_name; char *ipa_policy_type; char *policy_file_name; @@ -46,10 +45,10 @@ int main(int argc, char **argv) policy_file_name=strdup(argv[1]); - validate_policy(policy_file_name, &default_namespace, &ipa_policy_type, &xslt_file_name); + validate_policy(policy_file_name, &ipa_policy_type, &xslt_file_name); if ( strncmp( ipa_policy_type, "ipaaction", 9)==0) { - handle_ipaaction(policy_file_name, default_namespace); + handle_ipaaction(policy_file_name); } else { find_output_handler(policy_file_name, xslt_file_name); @@ -58,7 +57,6 @@ int main(int argc, char **argv) } free(ipa_policy_type); - free(default_namespace); free(policy_file_name); return 0; diff --git a/worker/xml_helper.c b/worker/xml_helper.c index 6d91e13..35932e8 100644 --- a/worker/xml_helper.c +++ b/worker/xml_helper.c @@ -33,8 +33,6 @@ xmlChar *default_namespace_prefix = (xmlChar *) "def"; * together with other information and validate the file accordingly. * * \param policy_file_name name of the XML policy file - * \param default_namespace will contain the default namespace of the XML - * policy file if the function returns successfully * \param ipa_policy_type will contain the IPA policy type, i.e. action, * config or role, if the function returns successfully * \param xslt_file_name will contain the name of the XSLT file if the IPA @@ -45,36 +43,19 @@ xmlChar *default_namespace_prefix = (xmlChar *) "def"; * */ -int validate_policy(const char *policy_file_name, xmlChar **default_namespace, char **ipa_policy_type, char **xslt_file_name) { +int validate_policy(const char *policy_file_name, char **ipa_policy_type, char **xslt_file_name) { xmlDocPtr doc; - xmlNodePtr root_node; char *rng_file_name; xmlRelaxNGValidCtxtPtr rng_context; xmlChar xpath_expr[XMLCHARLEN]; - doc = xmlParseFile(policy_file_name); CHECK(doc, NULL, ("Cannot parse document %s!\n", policy_file_name), exit(1)); - /* find the default namespace */ - root_node = xmlDocGetRootElement(doc); - CHECK(root_node, NULL, - ("Cannot find root node of document %s!\n", policy_file_name), exit(1)); - if (xmlStrncasecmp(root_node->name, (xmlChar *) "IPA", XMLCHARLEN) != 0) { - DEBUG(0, - ("Name of root node of document %s has to be 'ipa'!\n", policy_file_name)); - exit(1); - } - CHECK(root_node->ns->href, NULL, - ("Root node of document %s must define a namespace!\n", policy_file_name), exit(1)); - *default_namespace = xmlStrndup(root_node->ns->href, XMLCHARLEN); - CHECK(*default_namespace, NULL, ("Cannot copy namespace!\n"), exit(1)); - DEBUG(3, ("Default namespace of %s is %s\n", policy_file_name, *default_namespace)); - xmlStrPrintf(xpath_expr, XMLCHARLEN, (xmlChar *) "//%s:ipa/*[2]", default_namespace_prefix); - *ipa_policy_type = find_by_xpath(doc, xpath_expr, FIND_NAME, default_namespace_prefix, *default_namespace); + *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 && @@ -87,8 +68,7 @@ int validate_policy(const char *policy_file_name, xmlChar **default_namespace, c xmlStrPrintf(xpath_expr, XMLCHARLEN, (xmlChar *) "//%s:RNGfile", default_namespace_prefix); rng_file_name = - find_by_xpath(doc, xpath_expr, FIND_VALUE, default_namespace_prefix, - *default_namespace); + find_by_xpath(doc, xpath_expr, FIND_VALUE); CHECK(rng_file_name, NULL, ("Name of RELANX NG schema file not found.\n"), exit(1)); DEBUG(3, ("Found name of RELAX NG schema file: %s\n", rng_file_name)); @@ -113,7 +93,7 @@ int validate_policy(const char *policy_file_name, xmlChar **default_namespace, c 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, default_namespace_prefix, *default_namespace); + find_by_xpath(doc, xpath_expr, FIND_VALUE); CHECK(*xslt_file_name, NULL, ("Name of XSLT file not found.\n"), exit(1)); DEBUG(3, ("Found name of XSLT file: %s\n", *xslt_file_name)); } @@ -145,6 +125,28 @@ int print_all_attributes(const xmlNode *node) { return 0; } + +xmlChar *get_default_namespace(xmlDocPtr doc) { + xmlNodePtr root_node; + xmlChar *default_namespace; + + root_node = xmlDocGetRootElement(doc); + CHECK(root_node, NULL, + ("Cannot find root node of the current document!\n"), return NULL); + if (xmlStrncasecmp(root_node->name, (xmlChar *) "IPA", XMLCHARLEN) != 0) { + DEBUG(0, + ("Name of root node of the current document has to be 'ipa'!\n")); + exit(1); + } + CHECK(root_node->ns->href, NULL, + ("Root node of the current document must define a namespace!\n"), return NULL); + default_namespace = xmlStrndup(root_node->ns->href, XMLCHARLEN); + CHECK(default_namespace, NULL, ("Cannot copy namespace!\n"), return NULL); + DEBUG(3, ("Default namespace is %s\n", default_namespace)); + + return default_namespace; +} + /** * \brief find a single name or value defined by a XPath expression * @@ -156,29 +158,30 @@ int print_all_attributes(const xmlNode *node) { * \param xpath_expr a XPath expression describing the node to search for * \param type use FIND_NAME to return the name and FIND_VALUE to return the * value of the node - * \param prefix prefix of the namespace of the node to search for - * \param namespare namespace URI of the node to search for * * \return pointer to the found string or NULL in case of an error * */ -char *find_by_xpath(const xmlDocPtr doc, const xmlChar * xpath_expr, const int type, const xmlChar * prefix, - const xmlChar * namespace) +char *find_by_xpath(const xmlDocPtr doc, const xmlChar * xpath_expr, const int type) { xmlXPathContextPtr xpath_context; xmlXPathObjectPtr xpath_obj; char *result = NULL; + xmlChar *namespace; + + namespace = get_default_namespace(doc); + CHECK(namespace, NULL, ("No default namespace found.\n"), return NULL); /* Create xpath evaluation context */ xpath_context = xmlXPathNewContext(doc); CHECK_NULL_FATAL(xpath_context, ("Error: unable to create new XPath context\n")); /* Register a namespace */ - if (xmlXPathRegisterNs(xpath_context, prefix, namespace) != 0) { + if (xmlXPathRegisterNs(xpath_context, default_namespace_prefix, namespace) != 0) { DEBUG(0, ("Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", - prefix , namespace)); + default_namespace_prefix , namespace)); xmlXPathFreeContext(xpath_context); return NULL; } @@ -218,7 +221,7 @@ char *find_by_xpath(const xmlDocPtr doc, const xmlChar * xpath_expr, const int t } } - + xmlFree(namespace); xmlXPathFreeObject(xpath_obj); xmlXPathFreeContext(xpath_context); return result; diff --git a/worker/xml_helper.h b/worker/xml_helper.h index a2b7705..0d6155b 100644 --- a/worker/xml_helper.h +++ b/worker/xml_helper.h @@ -16,9 +16,10 @@ enum { extern xmlChar *default_namespace_prefix; -int validate_policy(const char *policy_file_name, xmlChar **default_namespace, char **ipa_policy_type, char **xslt_file_name); +xmlChar *get_default_namespace(xmlDocPtr doc); + +int validate_policy(const char *policy_file_name, char **ipa_policy_type, char **xslt_file_name); int print_all_attributes(const xmlNode *node); -char *find_by_xpath(const xmlDocPtr doc, const xmlChar * xpath_expr, - const int type, const xmlChar * prefix, const xmlChar * namespace); +char *find_by_xpath(const xmlDocPtr doc, const xmlChar * xpath_expr, const int type); -- cgit