From 64ab2317a89b3965e7d7230bb99cfc99a61f895f Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 17 Dec 2002 01:16:31 +0000 Subject: [PATCH] Update. 2002-12-16 Ulrich Drepper * sysdeps/posix/getaddrinfo.c (gaih_inet): If __nss_lookup_function fails to return a function pointer don't use it. --- ChangeLog | 5 +++++ sysdeps/posix/getaddrinfo.c | 41 ++++++++++++++++++++++------------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6109d82..455e569 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-12-16 Ulrich Drepper + + * 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 * io/ftw.c: Convert GCC extension initializer syntax to C99. diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 4af40f9..dd6e415 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; -- 2.7.4