summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@netfilter.org>2021-07-16 14:53:26 +0200
committerJozsef Kadlecsik <kadlec@netfilter.org>2021-07-16 14:53:26 +0200
commit79184e760edfbc81bad313386f0918ed3568df1f (patch)
tree8cf96a9a702bf33d38cd93f7307f201bd7ef8fd4 /lib
parenta63d02aeb7d00a2546c8bfc966b415704979b043 (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.c14
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);