diff options
Diffstat (limited to 'src/shared/nss-util.h')
-rw-r--r-- | src/shared/nss-util.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/shared/nss-util.h b/src/shared/nss-util.h index 2c897d8520..230a986040 100644 --- a/src/shared/nss-util.h +++ b/src/shared/nss-util.h @@ -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) \ |