]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
Pass precise size of struct sockaddr, whichever type of struct sockaddr, to getnamein...
authorsparked435 <9814958+sparked435@users.noreply.github.com>
Fri, 30 Dec 2022 17:19:16 +0000 (12:19 -0500)
committerMatthias Runge <mrunge@matthias-runge.de>
Tue, 25 Apr 2023 15:04:53 +0000 (17:04 +0200)
src/network.c

index 8a6c74d38b7316c195d32cde1f13c60e09137598..39e534a2a42526c6563638f1336a95717e78cb54 100644 (file)
@@ -443,8 +443,17 @@ static int network_dispatch_values(value_list_t *vl, /* {{{ */
 
   if (address != NULL) {
     char host[48];
-    status = getnameinfo((struct sockaddr *)address,
-                         sizeof(struct sockaddr_storage), host, sizeof(host),
+    size_t len = sizeof(struct sockaddr_storage);
+
+#ifdef __NetBSD__
+    if (address->ss_family == AF_INET) {
+      len = sizeof(struct sockaddr_in);
+    } else if (address->ss_family == AF_INET6) {
+      len = sizeof(struct sockaddr_in6);
+    }
+#endif
+
+    status = getnameinfo((struct sockaddr *)address, len, host, sizeof(host),
                          NULL, 0, NI_NUMERICHOST | NI_NUMERICSERV);
     if (status != 0) {
       ERROR("network plugin: getnameinfo failed: %s", gai_strerror(status));