diff options
author | Jozsef Kadlecsik <kadlec@netfilter.org> | 2021-07-16 14:53:26 +0200 |
---|---|---|
committer | Jozsef Kadlecsik <kadlec@netfilter.org> | 2021-07-16 14:53:26 +0200 |
commit | 79184e760edfbc81bad313386f0918ed3568df1f (patch) | |
tree | 8cf96a9a702bf33d38cd93f7307f201bd7ef8fd4 /lib | |
parent | a63d02aeb7d00a2546c8bfc966b415704979b043 (diff) |
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 <kadlec@netfilter.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/parse.c | 14 |
1 files 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); |