diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2020-02-18 12:59:24 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2020-02-19 17:28:52 +0100 |
commit | 3a0e07106f666df82925aa3fb2eb5937245c9819 (patch) | |
tree | 4c17d78ae8c2b05d4a033b91eca94aa33fd6dec3 /src/libnftables.c | |
parent | f8aec603aa7e9dad1316079d42c7efcc52b773fa (diff) |
src: combine extended netlink error reporting with mispelling support
Preliminary support: only for the deletion command, e.g.
# nft delete table twst
Error: No such file or directory; did you mean table ‘test’ in family ip?
delete table twst
^^^^
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/libnftables.c')
-rw-r--r-- | src/libnftables.c | 23 |
1 files changed, 2 insertions, 21 deletions
diff --git a/src/libnftables.c b/src/libnftables.c index eaa4736c..32da0a29 100644 --- a/src/libnftables.c +++ b/src/libnftables.c @@ -12,30 +12,11 @@ #include <parser.h> #include <utils.h> #include <iface.h> - +#include <cmd.h> #include <errno.h> #include <stdlib.h> #include <string.h> -static void nft_error(struct netlink_ctx *ctx, struct cmd *cmd, - struct mnl_err *err) -{ - struct location *loc = NULL; - int i; - - for (i = 0; i < cmd->num_attrs; i++) { - if (!cmd->attr[i].offset) - break; - if (cmd->attr[i].offset == err->offset) - loc = cmd->attr[i].location; - } - if (!loc) - loc = &cmd->location; - - netlink_io_error(ctx, loc, "Could not process rule: %s", - strerror(err->err)); -} - static int nft_netlink(struct nft_ctx *nft, struct list_head *cmds, struct list_head *msgs, struct mnl_socket *nf_sock) @@ -87,7 +68,7 @@ static int nft_netlink(struct nft_ctx *nft, list_for_each_entry(cmd, cmds, list) { if (err->seqnum == cmd->seqnum || err->seqnum == batch_seqnum) { - nft_error(&ctx, cmd, err); + nft_cmd_error(&ctx, cmd, err); errno = err->err; if (err->seqnum == cmd->seqnum) { mnl_err_list_free(err); |