summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/posix/getaddrinfo.c41
2 files changed, 27 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 6109d82e70..455e5690b2 100644
--- 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.
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index 4af40f92ad..dd6e4155a1 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -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;