From 600f38db82548a683775fd89b6e136673e924097 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Fri, 29 Oct 2010 18:57:42 +0200 Subject: libxtables: change option precedence order to be intuitive When using `-m mark --mark 2 -m connmark --mark 2`, the user currently gets an error about the (libxt_mark) --mark option being used twice. This is because libxt_connmark's option table does not override any previous options. This patch changes this behavior, since the current behavior does not allow connmark's option to be used at all, which is illogical. Cc: Florian Westphal Signed-off-by: Jan Engelhardt Signed-off-by: Patrick McHardy --- iptables.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'iptables.c') diff --git a/iptables.c b/iptables.c index 840dd3e5..4c8bd773 100644 --- a/iptables.c +++ b/iptables.c @@ -147,7 +147,6 @@ void iptables_exit_error(enum xtables_exittype status, const char *msg, ...) __a struct xtables_globals iptables_globals = { .option_offset = 0, .program_version = IPTABLES_VERSION, - .opts = original_opts, .orig_opts = original_opts, .exit_err = iptables_exit_error, }; @@ -1576,7 +1575,9 @@ int do_command(int argc, char *argv[], char **table, struct iptc_handle **handle target->t->u.user.revision = target->revision; if (target->init != NULL) target->init(target->t); - opts = xtables_merge_options(opts, + opts = xtables_merge_options( + iptables_globals.orig_opts, + opts, target->extra_opts, &target->option_offset); if (opts == NULL) @@ -1636,7 +1637,9 @@ int do_command(int argc, char *argv[], char **table, struct iptc_handle **handle m->init(m->m); if (m != m->next) { /* Merge options for non-cloned matches */ - opts = xtables_merge_options(opts, + opts = xtables_merge_options( + iptables_globals.orig_opts, + opts, m->extra_opts, &m->option_offset); if (opts == NULL) @@ -1790,7 +1793,9 @@ int do_command(int argc, char *argv[], char **table, struct iptc_handle **handle if (m->init != NULL) m->init(m->m); - opts = xtables_merge_options(opts, + opts = xtables_merge_options( + iptables_globals.orig_opts, + opts, m->extra_opts, &m->option_offset); if (opts == NULL) -- cgit v1.2.3