X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fntpd.c;h=9d716adc0e0e181f3c965107c32e06670dfa97f4;hb=be99a844a40d7037a910d37a894988b807631a6e;hp=64e1bce5e03db170accdf18f1a004f94c16652d4;hpb=9b626288aff81c68fe19210a58b4a32eeefde9d3;p=collectd.git diff --git a/src/ntpd.c b/src/ntpd.c index 64e1bce5..9d716adc 100644 --- a/src/ntpd.c +++ b/src/ntpd.c @@ -19,6 +19,8 @@ * Florian octo Forster **/ +#define _BSD_SOURCE /* For NI_MAXHOST */ + #include "collectd.h" #include "common.h" #include "plugin.h" @@ -878,25 +880,33 @@ static int ntpd_read (void) if (ptr->v6_flag) { - struct sockaddr_in6 *sa_ptr; - sa_ptr = (struct sockaddr_in6 *) &sa; + struct sockaddr_in6 sa6; + + assert (sizeof (sa) >= sizeof (sa6)); - sa_ptr->sin6_family = AF_INET6; - sa_ptr->sin6_port = htons (123); - memcpy (&sa_ptr->sin6_addr, &ptr->srcadr6, + memset (&sa6, 0, sizeof (sa6)); + sa6.sin6_family = AF_INET6; + sa6.sin6_port = htons (123); + memcpy (&sa6.sin6_addr, &ptr->srcadr6, sizeof (struct in6_addr)); - sa_len = sizeof (struct sockaddr_in6); + sa_len = sizeof (sa6); + + memcpy (&sa, &sa6, sizeof (sa6)); } else { - struct sockaddr_in *sa_ptr; - sa_ptr = (struct sockaddr_in *) &sa; + struct sockaddr_in sa4; - sa_ptr->sin_family = AF_INET; - sa_ptr->sin_port = htons (123); - memcpy (&sa_ptr->sin_addr, &ptr->srcadr, + assert (sizeof (sa) >= sizeof (sa4)); + + memset (&sa4, 0, sizeof (sa4)); + sa4.sin_family = AF_INET; + sa4.sin_port = htons (123); + memcpy (&sa4.sin_addr, &ptr->srcadr, sizeof (struct in_addr)); - sa_len = sizeof (struct sockaddr_in); + sa_len = sizeof (sa4); + + memcpy (&sa, &sa4, sizeof (sa4)); } if (do_reverse_lookups == 0)