aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-05-29 23:49:49 -0400
committerUlrich Drepper <drepper@gmail.com>2011-05-29 23:49:49 -0400
commit7ae22829afb2b4ca531d1c00437d428f55d59341 (patch)
treeea2a495f13c93dd2ce2b45a319f8118974a0a30f
parent553149f603fa2897052af45c676020558d7138a6 (diff)
downloadglibc-7ae22829afb2b4ca531d1c00437d428f55d59341.zip
glibc-7ae22829afb2b4ca531d1c00437d428f55d59341.tar.gz
glibc-7ae22829afb2b4ca531d1c00437d428f55d59341.tar.bz2
Restore _res correctly
getaddrinfo works around the resolver functionality to avoid automatic IPv6 lookups. The restoring didn't allow for the resolver to set additional bits in _res.
-rw-r--r--ChangeLog5
-rw-r--r--NEWS14
-rw-r--r--sysdeps/posix/getaddrinfo.c4
3 files changed, 14 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 6f12343..70dbc40 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-05-29 Ulrich Drepper <drepper@gmail.com>
+ [BZ #12350]
+ * sysdeps/posix/getaddrinfo.c (gethosts): Restore only RES_USE_IENT6
+ bit from old_res_options.
+ (gaih_inet): Likewise.
+
[BZ #11099]
* shadow/sgetspent_r.c (LINE_PARSER): Interpret nymeric field values
as signed.
diff --git a/NEWS b/NEWS
index 75f7a0d..05f603f 100644
--- a/NEWS
+++ b/NEWS
@@ -12,13 +12,13 @@ Version 2.14
386, 6420, 7101, 9730, 9732, 9809, 10138, 10149, 10157, 11099, 11257,
11258, 11487, 11532, 11558, 11578, 11634, 11653, 11668, 11697, 11724,
11781, 11799, 11820, 11837, 11857, 11869, 11892, 11895, 11901, 11945,
- 11947, 11952, 11987, 12052, 12083, 12158, 12178, 12200, 12346, 12393,
- 12420, 12432, 12445, 12449, 12453, 12454, 12460, 12469, 12489, 12509,
- 12510, 12511, 12518, 12527, 12541, 12545, 12551, 12582, 12583, 12587,
- 12597, 12601, 12611, 12625, 12626, 12631, 12650, 12653, 12655, 12660,
- 12671, 12681, 12685, 12711, 12713, 12714, 12717, 12723, 12724, 12734,
- 12738, 12746, 12766, 12775, 12777, 12782, 12788, 12792, 12795, 12811,
- 12813, 12814
+ 11947, 11952, 11987, 12052, 12083, 12158, 12178, 12200, 12346, 12350,
+ 12393, 12420, 12432, 12445, 12449, 12453, 12454, 12460, 12469, 12489,
+ 12509, 12510, 12511, 12518, 12527, 12541, 12545, 12551, 12582, 12583,
+ 12587, 12597, 12601, 12611, 12625, 12626, 12631, 12650, 12653, 12655,
+ 12660, 12671, 12681, 12685, 12711, 12713, 12714, 12717, 12723, 12724,
+ 12734, 12738, 12746, 12766, 12775, 12777, 12782, 12788, 12792, 12795,
+ 12811, 12813, 12814
* The RPC implementation in libc is obsoleted. Old programs keep working
but new programs cannot be linked with the routines in libc anymore.
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index 5ddda88..1e017b2 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -207,7 +207,7 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp,
if (herrno == NETDB_INTERNAL) \
{ \
__set_h_errno (herrno); \
- _res.options = old_res_options; \
+ _res.options |= old_res_options & RES_USE_INET6; \
return -EAI_SYSTEM; \
} \
if (herrno == TRY_AGAIN) \
@@ -1015,7 +1015,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
nip = nip->next;
}
- _res.options = old_res_options;
+ _res.options |= old_res_options & RES_USE_INET6;
if (no_data != 0 && no_inet6_data != 0)
{