[Openvpn-devel,v4] Mention address if not unspecific on DNS failure

Message ID 20250325195750.7899-1-gert@greenie.muc.de
State Accepted
Headers show
Series [Openvpn-devel,v4] Mention address if not unspecific on DNS failure | expand

Commit Message

Gert Doering March 25, 2025, 7:57 p.m. UTC
From: Arne Schwabe <arne@rfc2549.org>

With the recent changes breaking configs that included lport 0, it became
apparent that having  the address family in the error message when
resolving fails, would have made diagnosis in this case and probably others
much easier.

Change-Id: I1c8fcd5bb6e1fa0020d52879eefbafdb2630e7b5
Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
---

This change was reviewed on Gerrit and approved by at least one
developer. I request to merge it to master.

Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/909
This mail reflects revision 4 of this Change.

Acked-by according to Gerrit (reflected above):
Gert Doering <gert@greenie.muc.de>

Comments

Gert Doering March 25, 2025, 9:22 p.m. UTC | #1
Stared at it, and tested, and it's indeed quite useful (v3 had a stray
"%s" which is fixed in v4).

Without the patch, trying with "--local <v6 address>" + "--remote <v4only>"

    RESOLVE: Cannot resolve host address: v4only.v6.de:51194 (No address associated with hostname)

with the patch:

    RESOLVE: Cannot resolve host address: v4only.v6.de:51194[AF_INET6] (No address associated with hostname)

so when trying to diagnose user reports, this immediately points to
"mmmh, something is forcing v6 here, why?".

With no --local and no --proto udp4, nothing is forced, and thus:

    RESOLVE: Cannot resolve host address: nix.v6.de:51194 (Name or service not known)


Your patch has been applied to the master branch.

commit d16781531898b4c5a76cfe6cba02fccce9afb8ad
Author: Arne Schwabe
Date:   Tue Mar 25 20:57:43 2025 +0100

     Mention address if not unspecific on DNS failure

     Signed-off-by: Arne Schwabe <arne@rfc2549.org>
     Acked-by: Gert Doering <gert@greenie.muc.de>
     Message-Id: <20250325195750.7899-1-gert@greenie.muc.de>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg31237.html
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering

Patch

diff --git a/src/openvpn/socket.c b/src/openvpn/socket.c
index 6b32e30..09de1b0 100644
--- a/src/openvpn/socket.c
+++ b/src/openvpn/socket.c
@@ -445,6 +445,22 @@ 
     throw_signal_soft(SIGHUP, "Preresolving failed");
 }
 
+/**
+ * Small helper function for openvpn_getaddrinfo to print the address
+ * family when resolving fails
+ */
+static const char *
+getaddrinfo_addr_family_name(int af)
+{
+    switch (af)
+    {
+        case AF_INET:  return "[AF_INET]";
+
+        case AF_INET6: return "[AF_INET6]";
+    }
+    return "";
+}
+
 /*
  * Translate IPv4/IPv6 addr or hostname into struct addrinfo
  * If resolve error, try again for resolve_retry_seconds seconds.
@@ -545,11 +561,11 @@ 
             print_hostname = "undefined";
         }
 
-        fmt = "RESOLVE: Cannot resolve host address: %s:%s (%s)";
+        fmt = "RESOLVE: Cannot resolve host address: %s:%s%s (%s)";
         if ((flags & GETADDR_MENTION_RESOLVE_RETRY)
             && !resolve_retry_seconds)
         {
-            fmt = "RESOLVE: Cannot resolve host address: %s:%s (%s) "
+            fmt = "RESOLVE: Cannot resolve host address: %s:%s%s (%s)"
                   "(I would have retried this name query if you had "
                   "specified the --resolv-retry option.)";
         }
@@ -639,6 +655,7 @@ 
                 fmt,
                 print_hostname,
                 print_servname,
+                getaddrinfo_addr_family_name(ai_family),
                 gai_strerror(status));
 
             if (--resolve_retries <= 0)