diff options
author | Phil Sutter <phil@nwl.cc> | 2018-06-18 10:11:46 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2018-06-18 11:18:02 +0200 |
commit | 4677971a01dc4d92087dab139428cf4eaa189536 (patch) | |
tree | 6f287f244a935755cf004f737b2b850694820871 /src | |
parent | 5ca7ad252366865225d5c59d297e71215b68f027 (diff) |
libnftables: Simplify nft_run_cmd_from_buffer footprint
With libnftables documentation being upstream and one confirmed external
user (nftlb), time to break the API!
First of all, the command buffer passed to nft_run_cmd_from_buffer may
(and should) be const. One should consider it a bug if that function
ever changed it's content.
On the other hand, there is no point in passing the buffer's length as
separate argument: NULL bytes are not expected to occur in the input, so
it is safe to rely upon strlen(). Also, the actual parsers don't require
a buffer length passed to them, either. The only use-case for it is when
reallocating the buffer to append a final newline character, there
strlen() is perfectly sufficient.
Suggested-by: Harald Welte <laforge@gnumonks.org>
Cc: Laura Garcia Liebana <nevola@gmail.com>
Cc: Eric Leblond <eric@regit.org>
Cc: Arturo Borrero Gonzalez <arturo@netfilter.org>
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/cli.c | 2 | ||||
-rw-r--r-- | src/libnftables.c | 14 | ||||
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/parser_json.c | 2 |
5 files changed, 10 insertions, 11 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index a4ad8cb3..92ac61a6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -70,6 +70,7 @@ libparser_la_CFLAGS = ${AM_CFLAGS} \ -Wno-redundant-decls libnftables_la_LIBADD = ${LIBMNL_LIBS} ${LIBNFTNL_LIBS} libparser.la +libnftables_la_LDFLAGS = -version-info 1:0:0 if BUILD_MINIGMP noinst_LTLIBRARIES += libminigmp.la @@ -110,7 +110,7 @@ static void cli_complete(char *line) if (hist == NULL || strcmp(hist->line, line)) add_history(line); - nft_run_cmd_from_buffer(cli_nft, line, strlen(line) + 1); + nft_run_cmd_from_buffer(cli_nft, line); xfree(line); } diff --git a/src/libnftables.c b/src/libnftables.c index dda986ca..9a97a3c5 100644 --- a/src/libnftables.c +++ b/src/libnftables.c @@ -396,7 +396,7 @@ static const struct input_descriptor indesc_cmdline = { .name = "<cmdline>", }; -static int nft_parse_bison_buffer(struct nft_ctx *nft, char *buf, size_t buflen, +static int nft_parse_bison_buffer(struct nft_ctx *nft, const char *buf, struct list_head *msgs, struct list_head *cmds) { struct cmd *cmd; @@ -438,23 +438,21 @@ static int nft_parse_bison_filename(struct nft_ctx *nft, const char *filename, return 0; } -int nft_run_cmd_from_buffer(struct nft_ctx *nft, char *buf, size_t buflen) +int nft_run_cmd_from_buffer(struct nft_ctx *nft, const char *buf) { struct cmd *cmd, *next; LIST_HEAD(msgs); LIST_HEAD(cmds); - size_t nlbuflen; char *nlbuf; int rc = -EINVAL; - nlbuflen = max(buflen + 1, strlen(buf) + 2); - nlbuf = xzalloc(nlbuflen); - snprintf(nlbuf, nlbuflen, "%s\n", buf); + nlbuf = xzalloc(strlen(buf) + 2); + sprintf(nlbuf, "%s\n", buf); if (nft->output.json) - rc = nft_parse_json_buffer(nft, nlbuf, nlbuflen, &msgs, &cmds); + rc = nft_parse_json_buffer(nft, nlbuf, &msgs, &cmds); if (rc == -EINVAL) - rc = nft_parse_bison_buffer(nft, nlbuf, nlbuflen, &msgs, &cmds); + rc = nft_parse_bison_buffer(nft, nlbuf, &msgs, &cmds); if (rc) goto err; @@ -279,7 +279,7 @@ int main(int argc, char * const *argv) if (i + 1 < argc) strcat(buf, " "); } - rc = !!nft_run_cmd_from_buffer(nft, buf, len); + rc = !!nft_run_cmd_from_buffer(nft, buf); } else if (filename != NULL) { rc = !!nft_run_cmd_from_filename(nft, filename); } else if (interactive) { diff --git a/src/parser_json.c b/src/parser_json.c index 2fd0ef83..8f29aaf7 100644 --- a/src/parser_json.c +++ b/src/parser_json.c @@ -3120,7 +3120,7 @@ static int __json_parse(struct json_ctx *ctx, json_t *root) } -int nft_parse_json_buffer(struct nft_ctx *nft, char *buf, size_t buflen, +int nft_parse_json_buffer(struct nft_ctx *nft, const char *buf, struct list_head *msgs, struct list_head *cmds) { struct json_ctx ctx = { |