From cf26a0cb6a0bbaca46a01ddad6662e5e5159a32a Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Thu, 15 May 2014 12:33:11 +0530 Subject: [PATCH] Return EAI_AGAIN for AF_UNSPEC when herrno is TRY_AGAIN (BZ #16849) getaddrinfo correctly returns EAI_AGAIN for AF_INET and AF_INET6 queries. For AF_UNSPEC however, an older change (a682a1bf553b1efe4dbb03207fece5b719cec482) broke the check and due to that the returned error was EAI_NONAME. This patch fixes the check so that a non-authoritative not-found is returned as EAI_AGAIN to the user instead of EAI_NONAME. --- ChangeLog | 6 ++++++ NEWS | 4 ++-- sysdeps/posix/getaddrinfo.c | 3 +-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index fc822fe..079e1ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-05-15 Siddhesh Poyarekar + + [BZ #16849] + * sysdeps/posix/getaddrinfo.c (gaih_inet): Only check for + herrno to return EAI_AGAIN. + 2014-05-14 Roland McGrath * sysdeps/unix/sysv/linux/i386/nptl/c++-types.data: Moved ... diff --git a/NEWS b/NEWS index be88031..38d7214 100644 --- a/NEWS +++ b/NEWS @@ -16,8 +16,8 @@ Version 2.20 16670, 16674, 16677, 16680, 16683, 16689, 16695, 16701, 16706, 16707, 16712, 16713, 16714, 16731, 16739, 16740, 16743, 16754, 16758, 16759, 16760, 16770, 16786, 16789, 16791, 16799, 16800, 16815, 16823, 16824, - 16831, 16838, 16854, 16876, 16877, 16885, 16888, 16890, 16912, 16916, - 16922, 16927, 16928, 16932. + 16831, 16838, 16849, 16854, 16876, 16877, 16885, 16888, 16890, 16912, + 16916, 16922, 16927, 16928, 16932. * The minimum Linux kernel version that this version of the GNU C Library can be used with is 2.6.32. diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 6258330..8f392b9 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -867,8 +867,7 @@ gaih_inet (const char *name, const struct gaih_service *service, if (status != NSS_STATUS_TRYAGAIN || rc != ERANGE || herrno != NETDB_INTERNAL) { - if (status == NSS_STATUS_TRYAGAIN - && herrno == TRY_AGAIN) + if (herrno == TRY_AGAIN) no_data = EAI_AGAIN; else no_data = herrno == NO_DATA; -- 2.7.4