]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
Combine command_match() implementations
authorPhil Sutter <phil@nwl.cc>
Mon, 24 Sep 2018 17:25:23 +0000 (19:25 +0200)
committerFlorian Westphal <fw@strlen.de>
Tue, 25 Sep 2018 14:26:26 +0000 (16:26 +0200)
This merges the basically identical implementations of command_match()
from xtables, iptables and ip6tables into one. The only required
adjustment was to make use of xt_params instead of the different
*_globals objects.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Florian Westphal <fw@strlen.de>
iptables/ip6tables.c
iptables/iptables.c
iptables/xshared.c
iptables/xshared.h
iptables/xtables.c

index f447bc7474c250e3782b6815ff3914411d927501..1137256a259ca3318a03738061402bb150bde069 100644 (file)
@@ -1261,41 +1261,6 @@ static void command_jump(struct iptables_command_state *cs)
                xtables_error(OTHER_PROBLEM, "can't alloc memory!");
 }
 
-static void command_match(struct iptables_command_state *cs)
-{
-       struct xtables_match *m;
-       size_t size;
-
-       if (cs->invert)
-               xtables_error(PARAMETER_PROBLEM,
-                          "unexpected ! flag before --match");
-
-       m = xtables_find_match(optarg, XTF_LOAD_MUST_SUCCEED, &cs->matches);
-       size = XT_ALIGN(sizeof(struct xt_entry_match)) + m->size;
-       m->m = xtables_calloc(1, size);
-       m->m->u.match_size = size;
-       if (m->real_name == NULL) {
-               strcpy(m->m->u.user.name, m->name);
-       } else {
-               strcpy(m->m->u.user.name, m->real_name);
-               if (!(m->ext_flags & XTABLES_EXT_ALIAS))
-                       fprintf(stderr, "Notice: The %s match is converted into %s match "
-                               "in rule listing and saving.\n", m->name, m->real_name);
-       }
-       m->m->u.user.revision = m->revision;
-
-       xs_init_match(m);
-       if (m == m->next)
-               return;
-       /* Merge options for non-cloned matches */
-       if (m->x6_options != NULL)
-               opts = xtables_options_xfrm(ip6tables_globals.orig_opts, opts,
-                                           m->x6_options, &m->option_offset);
-       else if (m->extra_opts != NULL)
-               opts = xtables_merge_options(ip6tables_globals.orig_opts, opts,
-                                            m->extra_opts, &m->option_offset);
-}
-
 int do_command6(int argc, char *argv[], char **table,
                struct xtc_handle **handle, bool restore)
 {
index 144550fcc92adfa0938c79791ffa5f79b06f83cd..70ba67c9a9701f9d6a97261f37982753bb25b512 100644 (file)
@@ -1254,43 +1254,6 @@ static void command_jump(struct iptables_command_state *cs)
                xtables_error(OTHER_PROBLEM, "can't alloc memory!");
 }
 
-static void command_match(struct iptables_command_state *cs)
-{
-       struct xtables_match *m;
-       size_t size;
-
-       if (cs->invert)
-               xtables_error(PARAMETER_PROBLEM,
-                          "unexpected ! flag before --match");
-
-       m = xtables_find_match(optarg, XTF_LOAD_MUST_SUCCEED, &cs->matches);
-       size = XT_ALIGN(sizeof(struct xt_entry_match)) + m->size;
-       m->m = xtables_calloc(1, size);
-       m->m->u.match_size = size;
-       if (m->real_name == NULL) {
-               strcpy(m->m->u.user.name, m->name);
-       } else {
-               strcpy(m->m->u.user.name, m->real_name);
-               if (!(m->ext_flags & XTABLES_EXT_ALIAS))
-                       fprintf(stderr, "Notice: the %s match is converted into %s match "
-                               "in rule listing and saving.\n", m->name, m->real_name);
-       }
-       m->m->u.user.revision = m->revision;
-
-       xs_init_match(m);
-       if (m == m->next)
-               return;
-       /* Merge options for non-cloned matches */
-       if (m->x6_options != NULL)
-               opts = xtables_options_xfrm(iptables_globals.orig_opts, opts,
-                                           m->x6_options, &m->option_offset);
-       else if (m->extra_opts != NULL)
-               opts = xtables_merge_options(iptables_globals.orig_opts, opts,
-                                            m->extra_opts, &m->option_offset);
-       if (opts == NULL)
-               xtables_error(OTHER_PROBLEM, "can't alloc memory!");
-}
-
 int do_command4(int argc, char *argv[], char **table,
                struct xtc_handle **handle, bool restore)
 {
index a10e425c383a23423baf0747411afc3b7af9682e..860373cb2db84eaa8dc5db6dee6ca3445e8d17d9 100644 (file)
@@ -593,3 +593,41 @@ void print_ifaces(const char *iniface, const char *outiface, uint8_t invflags,
 
        printf(FMT("%-6s ", "out %s "), iface);
 }
+
+void command_match(struct iptables_command_state *cs)
+{
+       struct option *opts = xt_params->opts;
+       struct xtables_match *m;
+       size_t size;
+
+       if (cs->invert)
+               xtables_error(PARAMETER_PROBLEM,
+                          "unexpected ! flag before --match");
+
+       m = xtables_find_match(optarg, XTF_LOAD_MUST_SUCCEED, &cs->matches);
+       size = XT_ALIGN(sizeof(struct xt_entry_match)) + m->size;
+       m->m = xtables_calloc(1, size);
+       m->m->u.match_size = size;
+       if (m->real_name == NULL) {
+               strcpy(m->m->u.user.name, m->name);
+       } else {
+               strcpy(m->m->u.user.name, m->real_name);
+               if (!(m->ext_flags & XTABLES_EXT_ALIAS))
+                       fprintf(stderr, "Notice: the %s match is converted into %s match "
+                               "in rule listing and saving.\n", m->name, m->real_name);
+       }
+       m->m->u.user.revision = m->revision;
+       xs_init_match(m);
+       if (m == m->next)
+               return;
+       /* Merge options for non-cloned matches */
+       if (m->x6_options != NULL)
+               opts = xtables_options_xfrm(xt_params->orig_opts, opts,
+                                           m->x6_options, &m->option_offset);
+       else if (m->extra_opts != NULL)
+               opts = xtables_merge_options(xt_params->orig_opts, opts,
+                                            m->extra_opts, &m->option_offset);
+       if (opts == NULL)
+               xtables_error(OTHER_PROBLEM, "can't alloc memory!");
+       xt_params->opts = opts;
+}
index ee0183c8f8e25bd2bc96e25b4b2abdbe6d8b725a..9039a24ba75e60e7817ff836c8fe1ff7adeccd0e 100644 (file)
@@ -174,4 +174,6 @@ void print_ipv6_addresses(const struct ip6t_entry *fw6, unsigned int format);
 void print_ifaces(const char *iniface, const char *outiface, uint8_t invflags,
                  unsigned int format);
 
+void command_match(struct iptables_command_state *cs);
+
 #endif /* IPTABLES_XSHARED_H */
index d6afada94c6e78908ac0c4a9a243ef6b6baaa175..423be37f51fbc1422bb24ac74fac8570c48e0a66 100644 (file)
@@ -644,42 +644,6 @@ static void command_jump(struct iptables_command_state *cs)
                xtables_error(OTHER_PROBLEM, "can't alloc memory!");
 }
 
-static void command_match(struct iptables_command_state *cs)
-{
-       struct xtables_match *m;
-       size_t size;
-
-       if (cs->invert)
-               xtables_error(PARAMETER_PROBLEM,
-                          "unexpected ! flag before --match");
-
-       m = xtables_find_match(optarg, XTF_LOAD_MUST_SUCCEED, &cs->matches);
-       size = XT_ALIGN(sizeof(struct xt_entry_match)) + m->size;
-       m->m = xtables_calloc(1, size);
-       m->m->u.match_size = size;
-       if (m->real_name == NULL) {
-               strcpy(m->m->u.user.name, m->name);
-       } else {
-               strcpy(m->m->u.user.name, m->real_name);
-               if (!(m->ext_flags & XTABLES_EXT_ALIAS))
-                       fprintf(stderr, "Notice: the %s match is converted into %s match "
-                               "in rule listing and saving.\n", m->name, m->real_name);
-       }
-       m->m->u.user.revision = m->revision;
-       xs_init_match(m);
-       if (m == m->next)
-               return;
-       /* Merge options for non-cloned matches */
-       if (m->x6_options != NULL)
-               opts = xtables_options_xfrm(xtables_globals.orig_opts, opts,
-                                           m->x6_options, &m->option_offset);
-       else if (m->extra_opts != NULL)
-               opts = xtables_merge_options(xtables_globals.orig_opts, opts,
-                                            m->extra_opts, &m->option_offset);
-       if (opts == NULL)
-               xtables_error(OTHER_PROBLEM, "can't alloc memory!");
-}
-
 void do_parse(struct nft_handle *h, int argc, char *argv[],
              struct nft_xt_cmd_parse *p, struct iptables_command_state *cs,
              struct xtables_args *args)