diff options
author | Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com> | 2013-08-06 10:40:33 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-08-06 11:44:20 +0200 |
commit | b58cf8947422ba695df80fe3b012b383fff22f7a (patch) | |
tree | ed5708d68972c225492771b57397c52bfef1fc4d /src/expr | |
parent | ec75831c439ebd3475e0ba6766188d963538129a (diff) |
src: xml: use nodes instead of attributes
When working with XML, it's desirable to work with nodes better than
attributes.
Table/chain/rules had attributes in their XML representation, and
this patch transform those to nodes, ie:
Before:
<table name="filter">
<family>ip</family>
<table_flags>0</table_flags>
</table>
After:
<table>
<name>filter</name>
<family>ip</family>
<table_flags>0</table_flags>
</table>
While at it:
* There was a lot of redundant code that is now collapsed with the
new nft_mxml_family_parse() helper function.
* I've added a small fix: additional validation for the name of
the current XML object, and also replace raw strtol calls to nft_strtoi.
* Also, all XML testfiles are updated to keep passing the parsing tests and
mantain the repo in consisten state.
Signed-off-by: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/expr')
-rw-r--r-- | src/expr/nat.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/expr/nat.c b/src/expr/nat.c index 7446258..4b7ec27 100644 --- a/src/expr/nat.c +++ b/src/expr/nat.c @@ -188,7 +188,7 @@ static int nft_rule_expr_nat_xml_parse(struct nft_rule_expr *e, mxml_node_t *tre { #ifdef XML_PARSING struct nft_expr_nat *nat = nft_expr_data(e); - const char *nat_type, *family_str; + const char *nat_type; int32_t reg; int family; @@ -205,13 +205,11 @@ static int nft_rule_expr_nat_xml_parse(struct nft_rule_expr *e, mxml_node_t *tre e->flags |= (1 << NFT_EXPR_NAT_TYPE); - family_str = nft_mxml_str_parse(tree, "family", MXML_DESCEND_FIRST); - if (family_str == NULL) - return -1; - - family = nft_str2family(family_str); - if (family < 0) + family = nft_mxml_family_parse(tree, "family", MXML_DESCEND_FIRST); + if (family < 0) { + mxmlDelete(tree); return -1; + } nat->family = family; e->flags |= (1 << NFT_EXPR_NAT_FAMILY); |