summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/libnftables.adoc9
-rw-r--r--include/json.h5
-rw-r--r--include/nftables/libnftables.h2
-rw-r--r--py/nftables.py4
-rw-r--r--src/Makefile.am1
-rw-r--r--src/cli.c2
-rw-r--r--src/libnftables.c14
-rw-r--r--src/main.c2
-rw-r--r--src/parser_json.c2
9 files changed, 20 insertions, 21 deletions
diff --git a/doc/libnftables.adoc b/doc/libnftables.adoc
index c947ef37..adfc9420 100644
--- a/doc/libnftables.adoc
+++ b/doc/libnftables.adoc
@@ -53,8 +53,7 @@ const char *nft_ctx_get_error_buffer(struct nft_ctx* '\*ctx'*);
int nft_ctx_add_include_path(struct nft_ctx* '\*ctx'*, const char* '\*path'*);
void nft_ctx_clear_include_paths(struct nft_ctx* '\*ctx'*);
-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'*);
int nft_run_cmd_from_filename(struct nft_ctx* '\*nft'*,
const char* '\*filename'*);*
@@ -244,7 +243,7 @@ The *nft_ctx_clear_include_paths*() function removes all include paths, even the
=== nft_run_cmd_from_buffer() and nft_run_cmd_from_filename()
These functions perform the actual work of parsing user input into nftables commands and executing them.
-The *nft_run_cmd_from_buffer*() function passes the command(s) contained in 'buf' with size 'buflen' to the library, respecting settings and state in 'nft'.
+The *nft_run_cmd_from_buffer*() function passes the command(s) contained in 'buf' (which must be null-terminated) to the library, respecting settings and state in 'nft'.
The *nft_run_cmd_from_filename*() function passes the content of 'filename' to the library, respecting settings and state in 'nft'.
@@ -272,7 +271,7 @@ int main(void)
while (1) {
if (nft_ctx_buffer_output(nft) ||
- nft_run_cmd_from_buffer(nft, list_cmd, strlen(list_cmd))) {
+ nft_run_cmd_from_buffer(nft, list_cmd)) {
rc = 1;
break;
}
@@ -300,7 +299,7 @@ int main(void)
if (buf[0] == 'q' && buf[1] == '\0')
break;
- if (nft_run_cmd_from_buffer(nft, buf, strlen(buf))) {
+ if (nft_run_cmd_from_buffer(nft, buf)) {
rc = 1;
break;
}
diff --git a/include/json.h b/include/json.h
index 0a93bca8..b75512b8 100644
--- a/include/json.h
+++ b/include/json.h
@@ -78,7 +78,7 @@ json_t *connlimit_stmt_json(const struct stmt *stmt, struct output_ctx *octx);
int do_command_list_json(struct netlink_ctx *ctx, struct cmd *cmd);
-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);
int nft_parse_json_filename(struct nft_ctx *nft, const char *filename,
struct list_head *msgs, struct list_head *cmds);
@@ -168,11 +168,12 @@ static inline int do_command_list_json(struct netlink_ctx *ctx, struct cmd *cmd)
}
static inline int
-nft_parse_json_buffer(struct nft_ctx *nft, char *buf, size_t buflen,
+nft_parse_json_buffer(struct nft_ctx *nft, const char *buf,
struct list_head *msgs, struct list_head *cmds)
{
return -EINVAL;
}
+
static inline int
nft_parse_json_filename(struct nft_ctx *nft, const char *filename,
struct list_head *msgs, struct list_head *cmds)
diff --git a/include/nftables/libnftables.h b/include/nftables/libnftables.h
index 4bfdaf9a..13ec3927 100644
--- a/include/nftables/libnftables.h
+++ b/include/nftables/libnftables.h
@@ -71,7 +71,7 @@ const char *nft_ctx_get_error_buffer(struct nft_ctx *ctx);
int nft_ctx_add_include_path(struct nft_ctx *ctx, const char *path);
void nft_ctx_clear_include_paths(struct nft_ctx *ctx);
-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);
int nft_run_cmd_from_filename(struct nft_ctx *nft, const char *filename);
#endif /* LIB_NFTABLES_H */
diff --git a/py/nftables.py b/py/nftables.py
index 47ff14af..e6e66fb7 100644
--- a/py/nftables.py
+++ b/py/nftables.py
@@ -100,7 +100,7 @@ class Nftables:
self.nft_run_cmd_from_buffer = lib.nft_run_cmd_from_buffer
self.nft_run_cmd_from_buffer.restype = c_int
- self.nft_run_cmd_from_buffer.argtypes = [c_void_p, c_char_p, c_int]
+ self.nft_run_cmd_from_buffer.argtypes = [c_void_p, c_char_p]
self.nft_ctx_free = lib.nft_ctx_free
lib.nft_ctx_free.argtypes = [c_void_p]
@@ -267,7 +267,7 @@ class Nftables:
output -- a string containing output written to stdout
error -- a string containing output written to stderr
"""
- rc = self.nft_run_cmd_from_buffer(self.__ctx, cmdline, len(cmdline))
+ rc = self.nft_run_cmd_from_buffer(self.__ctx, cmdline)
output = self.nft_ctx_get_output_buffer(self.__ctx)
error = self.nft_ctx_get_error_buffer(self.__ctx)
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
diff --git a/src/cli.c b/src/cli.c
index 241ea010..ca3869ab 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -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;
diff --git a/src/main.c b/src/main.c
index f3615974..b2966a41 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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 = {