]> git.ipfire.org Git - thirdparty/mtr.git/commitdiff
fix(dns): ignore empty PTR hostnames
authorDarafei Praliaskouski <me@komzpa.net>
Thu, 7 May 2026 22:02:00 +0000 (02:02 +0400)
committerDarafei Praliaskouski <me@komzpa.net>
Fri, 8 May 2026 03:12:57 +0000 (07:12 +0400)
ui/dns.c
ui/report.c

index aac3e78d0d45e1f1f220b3ae9dc06951ddeea9d7..03a829ea85766ab465dd4d881ad0ea78be6ab4b1 100644 (file)
--- a/ui/dns.c
+++ b/ui/dns.c
@@ -114,6 +114,13 @@ static void set_sockaddr_ip(
     memcpy(sockaddr_addr_offset(sa), ip, sockaddr_addr_size(sa));
 }
 
+static int is_useful_hostname(
+    const char *hostname)
+{
+    return hostname[0] != '\0'
+        && !(hostname[0] == '.' && hostname[1] == '\0');
+}
+
 void dns_open(
     void)
 {
@@ -176,7 +183,7 @@ void dns_open(
 
                 rv = getnameinfo((struct sockaddr *) &sa, salen,
                                  hostname, sizeof(hostname), NULL, 0, 0);
-                if (rv == 0) {
+                if (rv == 0 && is_useful_hostname(hostname)) {
                     snprintf(result, sizeof(result),
                              "%s %s\n", strlongip(family, &host), hostname);
 
index 4b03c0d78afab2985d217b138d2fe847b0294a2c..6aede4a8a9e62754692406e1a716144099c58b43 100644 (file)
 #define MAX_FORMAT_STR 320
 
 
+static int is_useful_hostname(
+    const char *hostname)
+{
+    return hostname && hostname[0] != '\0'
+        && !(hostname[0] == '.' && hostname[1] == '\0');
+}
+
+
 void report_open(
     void)
 {
@@ -64,7 +72,7 @@ static size_t snprint_addr(
     if (addrcmp((void *) addr, (void *) &ctl->unspec_addr, ctl->af)) {
         struct hostent *host =
             ctl->dns ? addr2host((void *) addr, ctl->af) : NULL;
-        if (!host)
+        if (!host || !is_useful_hostname(host->h_name))
             return snprintf(dst, dst_len, "%s", strlongip(ctl->af, addr));
         else if (ctl->dns && ctl->show_ips)
             return snprintf(dst, dst_len, "%s (%s)", host->h_name,