]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser_json: use stdin buffer if available
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 9 Jul 2024 14:59:52 +0000 (16:59 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 10 Jul 2024 15:54:43 +0000 (17:54 +0200)
Since 5c2b2b0a2ba7 ("src: error reporting with -f and read from stdin")
stdin is stored in a buffer, update json support to use it instead of
reading from /dev/stdin.

Some systems do not provide /dev/stdin symlink to /proc/self/fd/0
according to reporter (that mentions Yocto Linux as example).

Fixes: 935f82e7dd49 ("Support 'nft -f -' to read from stdin")
Acked-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/libnftables.c
src/parser_json.c

index 586f8fdede76892bd476ff1df3f523758c08fbce..3dc4ebbd7f91affa85c9824d072ff159a83d858c 100644 (file)
@@ -807,8 +807,7 @@ int nft_run_cmd_from_filename(struct nft_ctx *nft, const char *filename)
        if (!strcmp(filename, "-"))
                filename = "/dev/stdin";
 
-       if (!strcmp(filename, "/dev/stdin") &&
-           !nft_output_json(&nft->output))
+       if (!strcmp(filename, "/dev/stdin"))
                nft->stdin_buf = stdin_to_buffer();
 
        if (!nft->stdin_buf &&
index ee4657ee8044b0ad4f74fab0466b9683fc4247a7..4912d3608b2bfea3f3cc9e0bce47d2446cf004bb 100644 (file)
@@ -4357,6 +4357,13 @@ int nft_parse_json_filename(struct nft_ctx *nft, const char *filename,
        json_error_t err;
        int ret;
 
+       if (nft->stdin_buf) {
+               json_indesc.type = INDESC_STDIN;
+               json_indesc.name = "/dev/stdin";
+
+               return nft_parse_json_buffer(nft, nft->stdin_buf, msgs, cmds);
+       }
+
        json_indesc.type = INDESC_FILE;
        json_indesc.name = filename;