From 79184e760edfbc81bad313386f0918ed3568df1f Mon Sep 17 00:00:00 2001 From: Jozsef Kadlecsik Date: Fri, 16 Jul 2021 14:53:26 +0200 Subject: 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 --- lib/parse.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/parse.c b/lib/parse.c index 32fc34c..aabf2a8 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); -- cgit v1.2.3