summaryrefslogtreecommitdiffstats
path: root/iptables/xtables-save.c
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2020-02-21 14:55:52 +0100
committerPhil Sutter <phil@nwl.cc>2020-02-24 12:04:30 +0100
commitd0446ab11182f6ca2adc486a124895f09a220c6e (patch)
tree4ef308fcb3c979fb672db1182c39ac838223dae8 /iptables/xtables-save.c
parent0f40a8bc49d3f7b815336199931a82f919f37c4e (diff)
xtables: Review nft_init()
Move common code into nft_init(), such as: * initial zeroing nft_handle fields * family ops lookup and assignment to 'ops' field * setting of 'family' field This requires minor adjustments in xtables_restore_main() so extra field initialization doesn't happen before nft_init() call. As a side-effect, this fixes segfaulting xtables-monitor binary when printing rules for trace event as in that code-path 'ops' field wasn't initialized. Signed-off-by: Phil Sutter <phil@nwl.cc>
Diffstat (limited to 'iptables/xtables-save.c')
-rw-r--r--iptables/xtables-save.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/iptables/xtables-save.c b/iptables/xtables-save.c
index 1b6c363b..28f74902 100644
--- a/iptables/xtables-save.c
+++ b/iptables/xtables-save.c
@@ -137,10 +137,8 @@ xtables_save_main(int family, int argc, char *argv[],
struct do_output_data d = {
.format = FMT_NOCOUNTS,
};
+ struct nft_handle h;
bool dump = false;
- struct nft_handle h = {
- .family = family,
- };
FILE *file = NULL;
int ret, c;
@@ -233,16 +231,13 @@ xtables_save_main(int family, int argc, char *argv[],
return 1;
}
- if (nft_init(&h, tables) < 0) {
+ if (nft_init(&h, family, tables) < 0) {
fprintf(stderr, "%s/%s Failed to initialize nft: %s\n",
xtables_globals.program_name,
xtables_globals.program_version,
strerror(errno));
exit(EXIT_FAILURE);
}
- h.ops = nft_family_ops_lookup(h.family);
- if (!h.ops)
- xtables_error(PARAMETER_PROBLEM, "Unknown family");
ret = do_output(&h, tablename, &d);
nft_fini(&h);