| 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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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) |