diff options
author | Ana Rey <anarey@gmail.com> | 2014-06-24 08:46:41 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-06-24 10:40:59 +0200 |
commit | 479126afb32ac77dc8f63d96d5d23b67a0d3d5bc (patch) | |
tree | ed42b663ca4953904a305608199725a24e116ac7 /src/expr/ct.c | |
parent | fe8ba5890b9eeca889298b59de75c47db7b4ae89 (diff) |
expr: ct: Do not parse unset values in json
It changes the parse functions to omit unset values.
Signed-off-by: Ana Rey <anarey@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/expr/ct.c')
-rw-r--r-- | src/expr/ct.c | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/src/expr/ct.c b/src/expr/ct.c index caabdbc..d9d36a6 100644 --- a/src/expr/ct.c +++ b/src/expr/ct.c @@ -230,44 +230,28 @@ static int nft_rule_expr_ct_json_parse(struct nft_rule_expr *e, json_t *root, uint8_t dir; int key; - if (nft_jansson_node_exist(root, "dreg")) { - if (nft_jansson_parse_reg(root, "dreg", NFT_TYPE_U32, ®, err) < 0) - return -1; - + if (nft_jansson_parse_reg(root, "dreg", NFT_TYPE_U32, ®, err) == 0) nft_rule_expr_set_u32(e, NFT_EXPR_CT_DREG, reg); - } - - if (nft_jansson_node_exist(root, "sreg")) { - if (nft_jansson_parse_reg(root, "sreg", NFT_TYPE_U32, ®, err) < 0) - return -1; + if (nft_jansson_parse_reg(root, "sreg", NFT_TYPE_U32, ®, err) == 0) nft_rule_expr_set_u32(e, NFT_EXPR_CT_SREG, reg); - } - - if (nft_jansson_node_exist(root, "key")) { - key_str = nft_jansson_parse_str(root, "key", err); - if (key_str == NULL) - return -1; + key_str = nft_jansson_parse_str(root, "key", err); + if (key_str != NULL) { key = str2ctkey(key_str); if (key < 0) - goto err; + return -1; nft_rule_expr_set_u32(e, NFT_EXPR_CT_KEY, key); - } - if (nft_jansson_node_exist(root, "dir")) { - dir_str = nft_jansson_parse_str(root, "dir", err); - if (dir_str == NULL) - return -1; - + dir_str = nft_jansson_parse_str(root, "dir", err); + if (dir_str != NULL) { if (str2ctdir(dir_str, &dir) != 0) { err->node_name = "dir"; err->error = NFT_PARSE_EBADTYPE; goto err; } - nft_rule_expr_set_u8(e, NFT_EXPR_CT_DIR, dir); } |