diff options
author | Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com> | 2013-09-16 20:24:51 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-09-16 22:42:43 +0200 |
commit | 210adc4063a7557b3bc0ffd69bd992c0bec4bacc (patch) | |
tree | 784228ac8183c4f4da0f696954040e214dfa760b /src/mxml.c | |
parent | 2f5a7c560ab5e20111f6196181a603e1bd3f8791 (diff) |
src: xml: refactor XML parsing code
This patch refactors nft_*_xml_parse to provide a new intermediate function
nft_mxml_parse_* which will allow us to navigate an entire XML tree
containing a ruleset without xml2text2xml conversions.
While at it, I added a helper to build the XML tree and validate the top node
name.
Signed-off-by: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>
Diffstat (limited to 'src/mxml.c')
-rw-r--r-- | src/mxml.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -15,11 +15,30 @@ #include <limits.h> #include <linux/netfilter/nf_tables.h> +#include <libnftables/table.h> +#include <libnftables/chain.h> #include <libnftables/rule.h> #include <libnftables/expr.h> #include <libnftables/set.h> #ifdef XML_PARSING +mxml_node_t *nft_mxml_build_tree(const char *xml, const char *treename) +{ + mxml_node_t *tree; + + tree = mxmlLoadString(NULL, xml, MXML_OPAQUE_CALLBACK); + if (tree == NULL) + goto err; + + if (strcmp(tree->value.opaque, treename) == 0) + return tree; + + mxmlDelete(tree); +err: + errno = EINVAL; + return NULL; +} + struct nft_rule_expr *nft_mxml_expr_parse(mxml_node_t *node) { mxml_node_t *tree; |