@@ -811,4 +811,5 @@ struct nft_family_ops nft_family_ops_arp = {
.delete_entry = nft_arp_delete_entry,
.check_entry = nft_arp_check_entry,
.replace_entry = nft_arp_replace_entry,
+ .chain_maxnamelen = ARPT_FUNCTION_MAXNAMELEN,
};
@@ -577,4 +577,5 @@ struct nft_family_ops nft_family_ops_ipv4 = {
.delete_entry = nft_ipv4_delete_entry,
.check_entry = nft_ipv4_check_entry,
.replace_entry = nft_ipv4_replace_entry,
+ .chain_maxnamelen = XT_EXTENSION_MAXNAMELEN,
};
@@ -530,4 +530,5 @@ struct nft_family_ops nft_family_ops_ipv6 = {
.delete_entry = nft_ipv6_delete_entry,
.check_entry = nft_ipv6_check_entry,
.replace_entry = nft_ipv6_replace_entry,
+ .chain_maxnamelen = XT_EXTENSION_MAXNAMELEN,
};
@@ -129,6 +129,7 @@ struct nft_family_ops {
struct iptables_command_state *cs,
struct xtables_args *args, bool verbose,
int rulenum);
+ size_t chain_maxnamelen;
};
void add_meta(struct nftnl_rule *r, uint32_t key);
@@ -788,10 +788,10 @@ void do_parse(struct nft_handle *h, int argc, char *argv[],
generic_opt_check(p->command, cs->options);
- if (p->chain != NULL && strlen(p->chain) >= XT_EXTENSION_MAXNAMELEN)
+ if (p->chain != NULL && strlen(p->chain) >= h->ops->chain_maxnamelen)
xtables_error(PARAMETER_PROBLEM,
- "chain name `%s' too long (must be under %u chars)",
- p->chain, XT_EXTENSION_MAXNAMELEN);
+ "chain name `%s' too long (must be under %zu chars)",
+ p->chain, h->ops->chain_maxnamelen);
if (p->command == CMD_APPEND ||
p->command == CMD_DELETE ||
arptables accepts chain names of at max 30chars while ip(6)tables only accepts up to 29chars. To retain the old behaviour, store the value in nft_family_ops. Signed-off-by: Phil Sutter <phil@nwl.cc> --- iptables/nft-arp.c | 1 + iptables/nft-ipv4.c | 1 + iptables/nft-ipv6.c | 1 + iptables/nft-shared.h | 1 + iptables/xtables.c | 6 +++--- 5 files changed, 7 insertions(+), 3 deletions(-)