summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSumit Bose <sbose@nb.localdomain>2008-11-20 22:37:14 +0100
committerSumit Bose <sbose@nb.localdomain>2008-11-20 22:37:14 +0100
commit1be6a957fa90294f982f9e8531a05c86c49028fb (patch)
treecc285beaa02b2e7e75fb2d7173bbacf96611ed9c
parent89b70bfd78bb02c8141c4db58db01c7b1af5331c (diff)
downloadipa_policy-1be6a957fa90294f982f9e8531a05c86c49028fb.tar.gz
ipa_policy-1be6a957fa90294f982f9e8531a05c86c49028fb.tar.xz
ipa_policy-1be6a957fa90294f982f9e8531a05c86c49028fb.zip
removed default_namespace from most parameter lists
-rw-r--r--worker/helpers.c6
-rw-r--r--worker/helpers.h9
-rw-r--r--worker/ipaaction.c46
-rw-r--r--worker/ipaaction.h8
-rw-r--r--worker/worker.c6
-rw-r--r--worker/xml_helper.c65
-rw-r--r--worker/xml_helper.h7
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 <selinux/selinux.h>
#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);