diff options
author | Phil Sutter <phil@nwl.cc> | 2019-04-05 13:21:19 +0200 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2021-11-23 15:01:23 +0100 |
commit | 1189d830ea4fd269da87761d400ebabca02e1ef3 (patch) | |
tree | b7c6e734d3dfc43727b3ce589633d80c264e01b1 | |
parent | 1eab8e83aec0e6965f11f8cad460add1caeae629 (diff) |
xshared: Merge and share parse_chain()
Have a common routine to perform chain name checks, combining all
variants' requirements.
Signed-off-by: Phil Sutter <phil@nwl.cc>
-rw-r--r-- | iptables/ip6tables.c | 26 | ||||
-rw-r--r-- | iptables/iptables.c | 25 | ||||
-rw-r--r-- | iptables/xshared.c | 24 | ||||
-rw-r--r-- | iptables/xshared.h | 1 | ||||
-rw-r--r-- | iptables/xtables.c | 9 |
5 files changed, 26 insertions, 59 deletions
diff --git a/iptables/ip6tables.c b/iptables/ip6tables.c index e967c040..ec0ae759 100644 --- a/iptables/ip6tables.c +++ b/iptables/ip6tables.c @@ -234,32 +234,6 @@ static int is_exthdr(uint16_t proto) } static void -parse_chain(const char *chainname) -{ - const char *ptr; - - if (strlen(chainname) >= XT_EXTENSION_MAXNAMELEN) - xtables_error(PARAMETER_PROBLEM, - "chain name `%s' too long (must be under %u chars)", - chainname, XT_EXTENSION_MAXNAMELEN); - - if (*chainname == '-' || *chainname == '!') - xtables_error(PARAMETER_PROBLEM, - "chain name not allowed to start " - "with `%c'\n", *chainname); - - if (xtables_find_target(chainname, XTF_TRY_LOAD)) - xtables_error(PARAMETER_PROBLEM, - "chain name may not clash " - "with target name\n"); - - for (ptr = chainname; *ptr; ptr++) - if (isspace(*ptr)) - xtables_error(PARAMETER_PROBLEM, - "Invalid chain name `%s'", chainname); -} - -static void print_header(unsigned int format, const char *chain, struct xtc_handle *handle) { struct xt_counters counters; diff --git a/iptables/iptables.c b/iptables/iptables.c index b925f089..246526a5 100644 --- a/iptables/iptables.c +++ b/iptables/iptables.c @@ -223,31 +223,6 @@ iptables_exit_error(enum xtables_exittype status, const char *msg, ...) /* Christophe Burki wants `-p 6' to imply `-m tcp'. */ -static void -parse_chain(const char *chainname) -{ - const char *ptr; - - if (strlen(chainname) >= XT_EXTENSION_MAXNAMELEN) - xtables_error(PARAMETER_PROBLEM, - "chain name `%s' too long (must be under %u chars)", - chainname, XT_EXTENSION_MAXNAMELEN); - - if (*chainname == '-' || *chainname == '!') - xtables_error(PARAMETER_PROBLEM, - "chain name not allowed to start " - "with `%c'\n", *chainname); - - if (xtables_find_target(chainname, XTF_TRY_LOAD)) - xtables_error(PARAMETER_PROBLEM, - "chain name may not clash " - "with target name\n"); - - for (ptr = chainname; *ptr; ptr++) - if (isspace(*ptr)) - xtables_error(PARAMETER_PROBLEM, - "Invalid chain name `%s'", chainname); -} static void print_header(unsigned int format, const char *chain, struct xtc_handle *handle) diff --git a/iptables/xshared.c b/iptables/xshared.c index 2d3ef679..bd545d6b 100644 --- a/iptables/xshared.c +++ b/iptables/xshared.c @@ -892,3 +892,27 @@ set_option(unsigned int *options, unsigned int option, u_int16_t *invflg, *invflg |= inverse_for_options[i]; } } + +void parse_chain(const char *chainname) +{ + const char *ptr; + + if (strlen(chainname) >= XT_EXTENSION_MAXNAMELEN) + xtables_error(PARAMETER_PROBLEM, + "chain name `%s' too long (must be under %u chars)", + chainname, XT_EXTENSION_MAXNAMELEN); + + if (*chainname == '-' || *chainname == '!') + xtables_error(PARAMETER_PROBLEM, + "chain name not allowed to start with `%c'\n", + *chainname); + + if (xtables_find_target(chainname, XTF_TRY_LOAD)) + xtables_error(PARAMETER_PROBLEM, + "chain name may not clash with target name\n"); + + for (ptr = chainname; *ptr; ptr++) + if (isspace(*ptr)) + xtables_error(PARAMETER_PROBLEM, + "Invalid chain name `%s'", chainname); +} diff --git a/iptables/xshared.h b/iptables/xshared.h index b59116ac..6d6acbca 100644 --- a/iptables/xshared.h +++ b/iptables/xshared.h @@ -235,6 +235,7 @@ char cmd2char(int option); void add_command(unsigned int *cmd, const int newcmd, const int othercmds, int invert); int parse_rulenumber(const char *rule); +void parse_chain(const char *chainname); void generic_opt_check(int command, int options); char opt2char(int option); diff --git a/iptables/xtables.c b/iptables/xtables.c index 5c69af7e..32b93d2b 100644 --- a/iptables/xtables.c +++ b/iptables/xtables.c @@ -424,14 +424,7 @@ void do_parse(struct nft_handle *h, int argc, char *argv[], break; case 'N': - if (optarg && (*optarg == '-' || *optarg == '!')) - xtables_error(PARAMETER_PROBLEM, - "chain name not allowed to start " - "with `%c'\n", *optarg); - if (xtables_find_target(optarg, XTF_TRY_LOAD)) - xtables_error(PARAMETER_PROBLEM, - "chain name may not clash " - "with target name\n"); + parse_chain(optarg); add_command(&p->command, CMD_NEW_CHAIN, CMD_NONE, invert); p->chain = optarg; |