summaryrefslogtreecommitdiffstats
path: root/src/expr
diff options
context:
space:
mode:
authorAna Rey <anarey@gmail.com>2014-06-24 08:46:41 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2014-06-24 10:40:59 +0200
commit479126afb32ac77dc8f63d96d5d23b67a0d3d5bc (patch)
treeed42b663ca4953904a305608199725a24e116ac7 /src/expr
parentfe8ba5890b9eeca889298b59de75c47db7b4ae89 (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')
-rw-r--r--src/expr/ct.c30
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, &reg, err) < 0)
- return -1;
-
+ if (nft_jansson_parse_reg(root, "dreg", NFT_TYPE_U32, &reg, 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, &reg, err) < 0)
- return -1;
+ if (nft_jansson_parse_reg(root, "sreg", NFT_TYPE_U32, &reg, 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);
}