extra: use inet_ntop instead of inet_ntoa
authorTing-Wei Lan <lantw44@gmail.com>
Fri, 20 Jun 2014 10:26:59 +0000 (18:26 +0800)
committerr.kubiak <r.kubiak@samsung.com>
Mon, 16 Nov 2015 13:12:07 +0000 (14:12 +0100)
The result of inet_ntoa() will be overwritten by the next call to
inet_ntoa(), so using it twice in the same snprintf() call causes
wrong result.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/extra/ipv4.c

index 0fe716b..a93d113 100644 (file)
@@ -134,9 +134,13 @@ int nfq_ip_snprintf(char *buf, size_t size, const struct iphdr *iph)
        struct in_addr src = { iph->saddr };
        struct in_addr dst = { iph->daddr };
 
+       char src_str[INET_ADDRSTRLEN];
+       char dst_str[INET_ADDRSTRLEN];
+
        ret = snprintf(buf, size, "SRC=%s DST=%s LEN=%u TOS=0x%X "
                                  "PREC=0x%X TTL=%u ID=%u PROTO=%u ",
-                       inet_ntoa(src), inet_ntoa(dst),
+                       inet_ntop(AF_INET, &src, src_str, INET_ADDRSTRLEN),
+                       inet_ntop(AF_INET, &dst, dst_str, INET_ADDRSTRLEN),
                        ntohs(iph->tot_len), IPTOS_TOS(iph->tos),
                        IPTOS_PREC(iph->tos), iph->ttl, ntohs(iph->id),
                        iph->protocol);