]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
wg: FreeBSD doesn't have EAI_NODATA
authorJason A. Donenfeld <Jason@zx2c4.com>
Sat, 17 Feb 2018 18:30:05 +0000 (19:30 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Sat, 17 Feb 2018 18:30:05 +0000 (19:30 +0100)
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/config.c

index 93c39fa3bca6bb31e9e6314bd7f78d302862215e..b07aa46a532994fa9e7f3615d9f83c3829506443 100644 (file)
@@ -224,8 +224,21 @@ static inline bool parse_endpoint(struct sockaddr *endpoint, const char *value)
                if (!ret)
                        break;
                timeout = timeout * 3 / 2;
-               /* The set of return codes that are "permanent failures". All other possibilities are potentially transient. */
-               if (ret == EAI_NONAME || ret == EAI_FAIL || ret == EAI_NODATA || timeout >= 90000000) {
+               /* The set of return codes that are "permanent failures". All other possibilities are potentially transient.
+                *
+                * This is according to https://sourceware.org/glibc/wiki/NameResolver which states:
+                *      "From the perspective of the application that calls getaddrinfo() it perhaps
+                *       doesn't matter that much since EAI_FAIL, EAI_NONAME and EAI_NODATA are all
+                *       permanent failure codes and the causes are all permanent failures in the
+                *       sense that there is no point in retrying later."
+                *
+                * So this is what we do, except FreeBSD removed EAI_NODATA some time ago, so that's conditional.
+                */
+               if (ret == EAI_NONAME || ret == EAI_FAIL ||
+                       #ifdef EAI_NODATA
+                               ret == EAI_NODATA ||
+                       #endif
+                               timeout >= 90000000) {
                        free(mutable);
                        fprintf(stderr, "%s: `%s'\n", ret == EAI_SYSTEM ? strerror(errno) : gai_strerror(ret), value);
                        return false;