]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
getaddrinfo: In gaih_inet, use h_errno for certain status values only
authorFlorian Weimer <fweimer@redhat.com>
Fri, 1 Sep 2017 06:57:52 +0000 (08:57 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Mon, 4 Sep 2017 09:44:21 +0000 (11:44 +0200)
h_errno is not set for NSS_STATUS_SUCCESS, so its value might not be
accurate at this point.

(cherry picked from commit a2881ef01450295782b065f2f850f340d5c12c14)

ChangeLog
sysdeps/posix/getaddrinfo.c

index 2f959d4c36e05f52d1d7e510cb9b763a8e6624fb..c58cd5ccd0a50e5d82304fb4a7b2dbcad775cb90 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-09-01  Florian Weimer  <fweimer@redhat.com>
+
+       * sysdeps/posix/getaddrinfo.c (gaih_inet): Only use h_errno if
+       status indicates it is set.
+
 2017-09-01  Florian Weimer  <fweimer@redhat.com>
 
        * sysdeps/posix/getaddrinfo.c (gaih_inet): Make reporting of NSS
index eaf8bafcf4ede5fe30be316c07a97cf5e6ca0178..9d9e7e2bf2a78cbb980defd619eca7baf616ef50 100644 (file)
@@ -949,7 +949,10 @@ gaih_inet (const char *name, const struct gaih_service *service,
          __resolv_context_enable_inet6 (res_ctx, res_enable_inet6);
          __resolv_context_put (res_ctx);
 
-         if (h_errno == NETDB_INTERNAL)
+         /* If we have a failure which sets errno, report it using
+            EAI_SYSTEM.  */
+         if ((status == NSS_STATUS_TRYAGAIN || status == NSS_STATUS_UNAVAIL)
+             && h_errno == NETDB_INTERNAL)
            {
              result = -EAI_SYSTEM;
              goto free_and_return;