summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/parse.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/parse.c b/lib/parse.c
index 65fddd4..af2168e 100644
--- a/lib/parse.c
+++ b/lib/parse.c
@@ -440,9 +440,15 @@ ipset_parse_proto(struct ipset_session *session,
protoent = getprotobyname(strcasecmp(str, "icmpv6") == 0
? "ipv6-icmp" : str);
- if (protoent == NULL)
- return syntax_err("cannot parse '%s' "
- "as a protocol name", str);
+ if (protoent == NULL) {
+ uint8_t protonum;
+ int err;
+
+ if (!((err = string_to_u8(session, str, &protonum) == 0) &&
+ (protoent = getprotobynumber(protonum)) != NULL))
+ return syntax_err("cannot parse '%s' "
+ "as a protocol", str);
+ }
proto = protoent->p_proto;
if (!proto)
return syntax_err("Unsupported protocol '%s'", str);