diff options
author | Jan Engelhardt <jengelh@inai.de> | 2020-02-07 12:43:21 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2020-02-07 17:56:43 +0100 |
commit | e527e901564f9cb1cb7a42ddc3e5d72236b770bc (patch) | |
tree | 9c9887b2ce68828b66630e7a516b63b402f08387 /src/json.c | |
parent | a16920d3620d9b7130c994a26c0b86f8b357103e (diff) |
src: compute mnemonic port name much easier
Signed-off-by: Jan Engelhardt <jengelh@inai.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/json.c')
-rw-r--r-- | src/json.c | 19 |
1 files changed, 5 insertions, 14 deletions
@@ -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) |