You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.3 KiB
56 lines
2.3 KiB
Related upstream commit (this bug has been fixed upstream in a |
|
different way): |
|
|
|
commit 2212c1420c92a33b0e0bd9a34938c9814a56c0f7 |
|
Author: Andreas Schwab <schwab@suse.de> |
|
Date: Thu Feb 19 15:52:08 2015 +0100 |
|
|
|
Simplify handling of nameserver configuration in resolver |
|
|
|
Remove use of ext.nsmap member of struct __res_state and always use |
|
an identity mapping betwen the nsaddr_list array and the ext.nsaddrs |
|
array. The fact that a nameserver has an IPv6 address is signalled by |
|
setting nsaddr_list[].sin_family to zero. |
|
|
|
diff -rup glibc-2.17-c758a686/resolv/res_init.c glibc-2.17-c758a686/resolv/res_init.c |
|
--- glibc-2.17-c758a686/resolv/res_init.c 2012-07-26 15:10:45.655638776 -0600 |
|
+++ glibc-2.17-c758a686/resolv/res_init.c 2012-07-26 15:11:27.731423002 -0600 |
|
@@ -314,9 +314,9 @@ __res_vinit(res_state statp, int preinit |
|
cp++; |
|
if ((*cp != '\0') && (*cp != '\n') |
|
&& __inet_aton(cp, &a)) { |
|
- statp->nsaddr_list[nservall].sin_addr = a; |
|
- statp->nsaddr_list[nservall].sin_family = AF_INET; |
|
- statp->nsaddr_list[nservall].sin_port = |
|
+ statp->nsaddr_list[nserv].sin_addr = a; |
|
+ statp->nsaddr_list[nserv].sin_family = AF_INET; |
|
+ statp->nsaddr_list[nserv].sin_port = |
|
htons(NAMESERVER_PORT); |
|
nserv++; |
|
#ifdef _LIBC |
|
diff -rup glibc-2.17-c758a686/resolv/res_send.c glibc-2.17-c758a686/resolv/res_send.c |
|
--- glibc-2.17-c758a686/resolv/res_send.c 2010-05-04 05:27:23.000000000 -0600 |
|
+++ glibc-2.17-c758a686/resolv/res_send.c 2012-07-26 15:34:58.398261659 -0600 |
|
@@ -421,10 +421,10 @@ __libc_res_nsend(res_state statp, const |
|
EXT(statp).nsmap[n] = MAXNS; |
|
} |
|
} |
|
- n = statp->nscount; |
|
- if (statp->nscount > EXT(statp).nscount) |
|
+ n = statp->nscount - EXT(statp).nscount6; |
|
+ if (n > EXT(statp).nscount) |
|
for (n = EXT(statp).nscount, ns = 0; |
|
- n < statp->nscount; n++) { |
|
+ n < statp->nscount - EXT(statp).nscount6; n++) { |
|
while (ns < MAXNS |
|
&& EXT(statp).nsmap[ns] != MAXNS) |
|
ns++; |
|
@@ -441,7 +441,7 @@ __libc_res_nsend(res_state statp, const |
|
malloc(sizeof (struct sockaddr_in6)); |
|
if (EXT(statp).nsaddrs[n] != NULL) { |
|
memset (mempcpy(EXT(statp).nsaddrs[n], |
|
- &statp->nsaddr_list[n], |
|
+ &statp->nsaddr_list[ns], |
|
sizeof (struct sockaddr_in)), |
|
'\0', |
|
sizeof (struct sockaddr_in6)
|
|
|