diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/parse.c | 12 |
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); |