Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 17 Dec 2002 01:16:31 +0000 (01:16 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 17 Dec 2002 01:16:31 +0000 (01:16 +0000)
2002-12-16  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/posix/getaddrinfo.c (gaih_inet): If __nss_lookup_function
fails to return a function pointer don't use it.

ChangeLog
sysdeps/posix/getaddrinfo.c

index 6109d82..455e569 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2002-12-16  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/posix/getaddrinfo.c (gaih_inet): If __nss_lookup_function
+       fails to return a function pointer don't use it.
+
 2002-12-16  Art Haas  <ahaas@airmail.net>
 
        * io/ftw.c: Convert GCC extension initializer syntax to C99.
index 4af40f9..dd6e415 100644 (file)
@@ -570,25 +570,28 @@ gaih_inet (const char *name, const struct gaih_service *service,
                {
                  fct = __nss_lookup_function (nip, "gethostbyname2_r");
 
-                 gethosts2 (AF_INET6, struct in6_addr);
-                 no_inet6_data = no_data;
-                 inet6_status = status;
-                 gethosts2 (AF_INET, struct in_addr);
-
-                 /* If we found one address for AF_INET or AF_INET6,
-                    don't continue the search.  */
-                 if (inet6_status == NSS_STATUS_SUCCESS ||
-                     status == NSS_STATUS_SUCCESS)
-                   break;
-
-                 /* We can have different states for AF_INET
-                    and AF_INET6. Try to find a usefull one for
-                    both.  */
-                 if (inet6_status == NSS_STATUS_TRYAGAIN)
-                   status = NSS_STATUS_TRYAGAIN;
-                 else if (status == NSS_STATUS_UNAVAIL &&
-                          inet6_status != NSS_STATUS_UNAVAIL)
-                   status = inet6_status;
+                 if (fct != NULL)
+                   {
+                     gethosts2 (AF_INET6, struct in6_addr);
+                     no_inet6_data = no_data;
+                     inet6_status = status;
+                     gethosts2 (AF_INET, struct in_addr);
+
+                     /* If we found one address for AF_INET or AF_INET6,
+                        don't continue the search.  */
+                     if (inet6_status == NSS_STATUS_SUCCESS ||
+                         status == NSS_STATUS_SUCCESS)
+                       break;
+
+                     /* We can have different states for AF_INET
+                        and AF_INET6. Try to find a usefull one for
+                        both.  */
+                     if (inet6_status == NSS_STATUS_TRYAGAIN)
+                       status = NSS_STATUS_TRYAGAIN;
+                     else if (status == NSS_STATUS_UNAVAIL &&
+                              inet6_status != NSS_STATUS_UNAVAIL)
+                       status = inet6_status;
+                   }
 
                  if (nss_next_action (nip, status) == NSS_ACTION_RETURN)
                    break;