X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Futils_dns.c;h=9b001517c80945f1d5e5e4d643c867f31a07ab54;hb=b90ad9b5b6d928a211b939dc0d51aa92cd09fdd2;hp=a412809fab051c77c718b158b623f813a2cbf49e;hpb=7e5df1a2c6611bd4ac9fb8ac4b78106f9139ae6e;p=collectd.git diff --git a/src/utils_dns.c b/src/utils_dns.c index a412809f..9b001517 100644 --- a/src/utils_dns.c +++ b/src/utils_dns.c @@ -384,7 +384,7 @@ handle_dns(const char *buf, int len, if (0 != x) return 0; if ('\0' == qh.qname[0]) - strcpy(qh.qname, "."); + strncpy (qh.qname, ".", sizeof (qh.qname)); while ((t = strchr(qh.qname, '\n'))) *t = ' '; while ((t = strchr(qh.qname, '\r'))) @@ -429,13 +429,16 @@ static int handle_ipv6 (struct ip6_hdr *ipv6, int len) { char buf[PCAP_SNAPLEN]; - int offset; + unsigned int offset; int nexthdr; struct in6_addr s_addr; struct in6_addr d_addr; uint16_t payload_len; + if (0 > len) + return (0); + offset = sizeof (struct ip6_hdr); nexthdr = ipv6->ip6_nxt; s_addr = ipv6->ip6_src; @@ -459,7 +462,7 @@ handle_ipv6 (struct ip6_hdr *ipv6, int len) uint16_t ext_hdr_len; /* Catch broken packets */ - if ((offset + sizeof (struct ip6_ext)) > len) + if ((offset + sizeof (struct ip6_ext)) > (unsigned int)len) return (0); /* Cannot handle fragments. */ @@ -479,7 +482,7 @@ handle_ipv6 (struct ip6_hdr *ipv6, int len) } /* while */ /* Catch broken and empty packets */ - if (((offset + payload_len) > len) + if (((offset + payload_len) > (unsigned int)len) || (payload_len == 0) || (payload_len > PCAP_SNAPLEN)) return (0); @@ -620,7 +623,7 @@ handle_linux_sll (const u_char *pkt, int len) } *hdr; uint16_t etype; - if (len < sizeof (struct sll_header)) + if ((0 > len) || ((unsigned int)len < sizeof (struct sll_header))) return (0); hdr = (struct sll_header *) pkt; @@ -701,7 +704,7 @@ const char *qtype_str(int t) { static char buf[32]; switch (t) { -#if (defined (__NAMESER)) && (__NAMESER >= 19991006) +#if (defined (__NAMESER)) && (__NAMESER >= 19991001) case ns_t_a: return ("A"); case ns_t_ns: return ("NS"); case ns_t_md: return ("MD"); @@ -743,7 +746,9 @@ const char *qtype_str(int t) case ns_t_dname: return ("DNAME"); case ns_t_sink: return ("SINK"); case ns_t_opt: return ("OPT"); +# if __NAMESER >= 19991006 case ns_t_tsig: return ("TSIG"); +# endif case ns_t_ixfr: return ("IXFR"); case ns_t_axfr: return ("AXFR"); case ns_t_mailb: return ("MAILB");