From e527e901564f9cb1cb7a42ddc3e5d72236b770bc Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Fri, 7 Feb 2020 12:43:21 +0100 Subject: src: compute mnemonic port name much easier Signed-off-by: Jan Engelhardt Signed-off-by: Pablo Neira Ayuso --- src/json.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'src/json.c') diff --git a/src/json.c b/src/json.c index 1906e7db..86028959 100644 --- a/src/json.c +++ b/src/json.c @@ -1021,23 +1021,14 @@ json_t *inet_protocol_type_json(const struct expr *expr, json_t *inet_service_type_json(const struct expr *expr, struct output_ctx *octx) { - struct sockaddr_in sin = { - .sin_family = AF_INET, - .sin_port = mpz_get_be16(expr->value), - }; - char buf[NI_MAXSERV]; + uint16_t port = mpz_get_be16(expr->value); + const struct servent *s = NULL; if (!nft_output_service(octx) || - getnameinfo((struct sockaddr *)&sin, sizeof(sin), - NULL, 0, buf, sizeof(buf), 0)) - return json_integer(ntohs(sin.sin_port)); - - if (htons(atoi(buf)) == sin.sin_port || - getnameinfo((struct sockaddr *)&sin, sizeof(sin), - NULL, 0, buf, sizeof(buf), NI_DGRAM)) - return json_integer(ntohs(sin.sin_port)); + (s = getservbyport(port, NULL)) == NULL) + return json_integer(ntohs(port)); - return json_string(buf); + return json_string(s->s_name); } json_t *mark_type_json(const struct expr *expr, struct output_ctx *octx) -- cgit v1.2.3