chiark / gitweb /
nss-util: be a tiny bit more compatible with glibc's lookup behaviour regarding IPv6
authorLennart Poettering <lennart@poettering.net>
Thu, 17 Jul 2014 17:27:48 +0000 (19:27 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 17 Jul 2014 17:39:50 +0000 (19:39 +0200)
Check for RES_USE_INET6 before we prefer IPv6 over IPv4, for all our NSS
modules. (Not that the DNS resolver that is configured with this matters
to us, but hey, let's try to be compatible).

src/shared/nss-util.h

index 2c897d8520a3456bd3577f99ea34047906e8a40c..230a98604013caefb6151fd42ce97c6df9cc5887 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <nss.h>
 #include <netdb.h>
+#include <resolv.h>
 
 #define NSS_GETHOSTBYNAME_PROTOTYPES(module)            \
 enum nss_status _nss_##module##_gethostbyname4_r(       \
@@ -87,14 +88,27 @@ enum nss_status _nss_##module##_gethostbyname_r(        \
                 struct hostent *host,                   \
                 char *buffer, size_t buflen,            \
                 int *errnop, int *h_errnop) {           \
-        return _nss_##module##_gethostbyname3_r(        \
+        enum nss_status ret = NSS_STATUS_NOTFOUND;      \
+                                                        \
+        if (_res.options & RES_USE_INET6)               \
+                ret = _nss_##module##_gethostbyname3_r( \
+                        name,                           \
+                        AF_INET6,                       \
+                        host,                           \
+                        buffer, buflen,                 \
+                        errnop, h_errnop,               \
+                        NULL,                           \
+                        NULL);                          \
+        if (ret == NSS_STATUS_NOTFOUND)                 \
+                ret = _nss_##module##_gethostbyname3_r( \
                         name,                           \
-                        AF_UNSPEC,                      \
+                        AF_INET,                        \
                         host,                           \
                         buffer, buflen,                 \
                         errnop, h_errnop,               \
                         NULL,                           \
                         NULL);                          \
+       return ret;                                      \
 }
 
 #define NSS_GETHOSTBYADDR_FALLBACKS(module)             \