summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libnftables.c22
-rw-r--r--src/parser_json.c9
2 files changed, 16 insertions, 15 deletions
diff --git a/src/libnftables.c b/src/libnftables.c
index 8720fe2b..f459ecd5 100644
--- a/src/libnftables.c
+++ b/src/libnftables.c
@@ -400,11 +400,11 @@ static int nft_evaluate(struct nft_ctx *nft, struct list_head *msgs,
int nft_run_cmd_from_buffer(struct nft_ctx *nft, const char *buf)
{
+ int rc = -EINVAL, parser_rc;
struct cmd *cmd, *next;
LIST_HEAD(msgs);
LIST_HEAD(cmds);
char *nlbuf;
- int rc = -EINVAL;
nlbuf = xzalloc(strlen(buf) + 2);
sprintf(nlbuf, "%s\n", buf);
@@ -413,13 +413,18 @@ int nft_run_cmd_from_buffer(struct nft_ctx *nft, const char *buf)
rc = nft_parse_json_buffer(nft, nlbuf, &msgs, &cmds);
if (rc == -EINVAL)
rc = nft_parse_bison_buffer(nft, nlbuf, &msgs, &cmds);
- if (rc)
- goto err;
+
+ parser_rc = rc;
rc = nft_evaluate(nft, &msgs, &cmds);
if (rc < 0)
goto err;
+ if (parser_rc) {
+ rc = parser_rc;
+ goto err;
+ }
+
if (nft_netlink(nft, &cmds, &msgs, nft->nf_sock) != 0)
rc = -1;
err:
@@ -445,9 +450,9 @@ err:
int nft_run_cmd_from_filename(struct nft_ctx *nft, const char *filename)
{
struct cmd *cmd, *next;
+ int rc, parser_rc;
LIST_HEAD(msgs);
LIST_HEAD(cmds);
- int rc;
rc = cache_update(nft, CMD_INVALID, &msgs);
if (rc < 0)
@@ -461,13 +466,18 @@ int nft_run_cmd_from_filename(struct nft_ctx *nft, const char *filename)
rc = nft_parse_json_filename(nft, filename, &msgs, &cmds);
if (rc == -EINVAL)
rc = nft_parse_bison_filename(nft, filename, &msgs, &cmds);
- if (rc)
- goto err;
+
+ parser_rc = rc;
rc = nft_evaluate(nft, &msgs, &cmds);
if (rc < 0)
goto err;
+ if (parser_rc) {
+ rc = parser_rc;
+ goto err;
+ }
+
if (nft_netlink(nft, &cmds, &msgs, nft->nf_sock) != 0)
rc = -1;
err:
diff --git a/src/parser_json.c b/src/parser_json.c
index 5532ead3..081cf5da 100644
--- a/src/parser_json.c
+++ b/src/parser_json.c
@@ -3390,10 +3390,6 @@ static json_t *seqnum_to_json(const uint32_t seqnum)
static int __json_parse(struct json_ctx *ctx)
{
- struct eval_ctx ectx = {
- .nft = ctx->nft,
- .msgs = ctx->msgs,
- };
json_t *tmp, *value;
size_t index;
@@ -3435,11 +3431,6 @@ static int __json_parse(struct json_ctx *ctx)
list_add_tail(&cmd->list, &list);
- if (cmd_evaluate(&ectx, cmd) < 0) {
- cmd_free(cmd);
- json_error(ctx, "Evaluating command at index %zd failed.", index);
- return -1;
- }
list_splice_tail(&list, ctx->cmds);
if (nft_output_echo(&ctx->nft->output))