From: Jozsef Kadlecsik Date: Fri, 16 Jul 2021 12:53:26 +0000 (+0200) Subject: Add missing hunk to patch "Allow specifying protocols by number" X-Git-Tag: v7.13~2 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=79184e760edfbc81bad313386f0918ed3568df1f;p=thirdparty%2Fipset.git Add missing hunk to patch "Allow specifying protocols by number" Actually, this is the part of it which allows specifying protocols by number :-) Signed-off-by: Jozsef Kadlecsik --- diff --git a/lib/parse.c b/lib/parse.c index 32fc34c3..aabf2a8f 100644 --- a/lib/parse.c +++ b/lib/parse.c @@ -280,8 +280,10 @@ static int parse_portname(struct ipset_session *session, const char *str, uint16_t *port, const char *proto) { - char *saved, *tmp; + char *saved, *tmp, *protoname; + const struct protoent *protoent; struct servent *service; + uint8_t protonum = 0; saved = tmp = ipset_strdup(session, str); if (tmp == NULL) @@ -290,7 +292,15 @@ parse_portname(struct ipset_session *session, const char *str, if (tmp == NULL) goto error; - service = getservbyname(tmp, proto); + protoname = (char *)proto; + if (string_to_u8(session, proto, &protonum, IPSET_WARNING) == 0) { + protoent = getprotobynumber(protonum); + if (protoent == NULL) + goto error; + protoname = protoent->p_name; + } + + service = getservbyname(tmp, protoname); if (service != NULL) { *port = ntohs((uint16_t) service->s_port); free(saved);