]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
json: add stateful object comment support
authorFernando Fernandez Mancera <ffmancera@riseup.net>
Sat, 10 Sep 2022 22:11:14 +0000 (00:11 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 16 Sep 2022 07:37:31 +0000 (09:37 +0200)
When listing a stateful object with JSON support, the comment was ignored.

Output example:

{
  "counter": {
    "family": "inet",
    "name": "mycounter",
    "table": "t",
    "handle": 1,
    "comment": "my comment in counter",
    "packets": 0,
    "bytes": 0
  }
}

Link: https://bugzilla.netfilter.org/show_bug.cgi?id=1611
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/json.c
src/parser_json.c
tests/shell/testcases/json/0006obj_comment_0 [new file with mode: 0755]
tests/shell/testcases/json/dumps/0006obj_comment_0.nft [new file with mode: 0644]

index 6598863e1ec00903788cc5bf2b8bc8351031aa14..6662f8087736a182153854a21381983c2e6dedbd 100644 (file)
@@ -329,6 +329,12 @@ static json_t *obj_print_json(const struct obj *obj)
                        "table", obj->handle.table.name,
                        "handle", obj->handle.handle.id);
 
+       if (obj->comment) {
+               tmp = json_pack("{s:s}", "comment", obj->comment);
+               json_object_update(root, tmp);
+               json_decref(tmp);
+       }
+
        switch (obj->type) {
        case NFT_OBJECT_COUNTER:
                tmp = json_pack("{s:I, s:I}",
index 1ffca2d1b22c417e803ccdf4f6b3638436582e5b..76c268f85720254350ec86337c4425f7db546944 100644 (file)
@@ -3357,6 +3357,9 @@ static struct cmd *json_parse_cmd_add_object(struct json_ctx *ctx,
 
        obj = obj_alloc(int_loc);
 
+       if (!json_unpack(root, "{s:s}", "comment", &obj->comment))
+               obj->comment = xstrdup(obj->comment);
+
        switch (cmd_obj) {
        case CMD_OBJ_COUNTER:
                obj->type = NFT_OBJECT_COUNTER;
diff --git a/tests/shell/testcases/json/0006obj_comment_0 b/tests/shell/testcases/json/0006obj_comment_0
new file mode 100755 (executable)
index 0000000..76d8fe1
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+set -e
+
+$NFT flush ruleset
+
+RULESET='{"nftables": [{"metainfo": {"version": "1.0.5", "release_name": "Lester Gooch #4", "json_schema_version": 1}}, {"table": {"family": "inet", "name": "t", "handle": 9}}, {"counter": {"family": "inet", "name": "mycounter", "table": "t", "handle": 1, "comment": "my comment in counter", "packets": 0, "bytes": 0}}]}'
+
+$NFT -j -f - <<< $RULESET
diff --git a/tests/shell/testcases/json/dumps/0006obj_comment_0.nft b/tests/shell/testcases/json/dumps/0006obj_comment_0.nft
new file mode 100644 (file)
index 0000000..e52b21b
--- /dev/null
@@ -0,0 +1,6 @@
+table inet t {
+       counter mycounter {
+               comment "my comment in counter"
+               packets 0 bytes 0
+       }
+}