[RFC,2/4] resolv: fix nsaddr_list array indexing

Message ID 1401838603-22101-3-git-send-email-aurelien@aurel32.net
State Superseded
Headers

Commit Message

Aurelien Jarno June 3, 2014, 11:36 p.m. UTC
  This commit is basically a revert of commits 6f5c3117 and 16b7dc27.
Those commits changed the indexing of nsaddr_list array when reading
resolv.conf, with the goal to simplify the mapping between the
nsaddr_list and nsaddrs, by making sure we don't have any nameserver at
the same both arrays. However the code in __libc_res_nsend hasn't been
updated, and still assume that all nsaddr_list entries are located at
the beginning of the array, without any gap. This causes some issues
when IPv6 nameservers are in use.
---
 resolv/res_init.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
  

Patch

diff --git a/resolv/res_init.c b/resolv/res_init.c
index bdec4d9..37004ab 100644
--- a/resolv/res_init.c
+++ b/resolv/res_init.c
@@ -308,9 +308,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
@@ -414,7 +414,7 @@  __res_vinit(res_state statp, int preinit) {
 		    continue;
 		}
 	    }
-	    statp->nscount = nservall;
+	    statp->nscount = nserv;
 #ifdef _LIBC
 	    if (nservall - nserv > 0) {
 		statp->_u._ext.nscount6 = nservall - nserv;