[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r6156 - in glibc-package/trunk/debian: . patches patches/any



Author: aurel32
Date: 2014-06-16 13:25:36 +0000 (Mon, 16 Jun 2014)
New Revision: 6156

Added:
   glibc-package/trunk/debian/patches/any/submitted-resolv-ipv6-nameservers.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
debian/patches/any/submitted-resolv-ipv6-nameservers.diff: new patch to
fix resolving issues when using IPv6 nameservers in resolv.conf.  Closes:
#627531, #644406, #709867.

Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2014-06-16 13:24:55 UTC (rev 6155)
+++ glibc-package/trunk/debian/changelog	2014-06-16 13:25:36 UTC (rev 6156)
@@ -32,6 +32,9 @@
   * debian/testsuite-checking/expected-results-mips*-linux-gnu-*: re-add
     tst-mqueue5.out (removed in the latest cleanup) as it still occasionally
     fails.
+  * debian/patches/any/submitted-resolv-ipv6-nameservers.diff: new patch to
+    fix resolving issues when using IPv6 nameservers in resolv.conf.  Closes:
+    #627531, #644406, #709867.
 
  -- Aurelien Jarno <aurel32@debian.org>  Wed, 04 Jun 2014 21:51:13 +0200
 

Added: glibc-package/trunk/debian/patches/any/submitted-resolv-ipv6-nameservers.diff
===================================================================
--- glibc-package/trunk/debian/patches/any/submitted-resolv-ipv6-nameservers.diff	                        (rev 0)
+++ glibc-package/trunk/debian/patches/any/submitted-resolv-ipv6-nameservers.diff	2014-06-16 13:25:36 UTC (rev 6156)
@@ -0,0 +1,96 @@
+2014-06-13  Aurelien Jarno  <aurelien@aurel32.net>
+
+        [BZ #17053]
+	* resolv/res_init.c (__res_vinit): Improve comments
+	about nserv and nservall.
+	* resolv/res_init.c (__res_vinit): Fill in IPv4 name server
+	information using the nserv index. Only count IPv4 name servers
+	in statp->nscount.
+	* resolv/res_init.c (__res_vinit): Check for both IPv4 and IPv6
+	name servers before adding a localhost name server entry.
+	* resolv/res_send.c (__libc_res_nsend): Check for both IPv4 and
+	IPv6 name servers before ignoring the request.
+	(send_dg): Check for both IPv4 and IPv6 name servers to compute
+	time for the total operation.
+	* resolv/res_init.c (__res_iclose): Only clear nsinit if the
+	addresses have been freed.
+
+diff --git a/resolv/res_init.c b/resolv/res_init.c
+index ea133f8..42e16b6 100644
+--- a/resolv/res_init.c
++++ b/resolv/res_init.c
+@@ -153,9 +153,9 @@ __res_vinit(res_state statp, int preinit) {
+ 	char *cp, **pp;
+ 	int n;
+ 	char buf[BUFSIZ];
+-	int nserv = 0;    /* number of nameserver records read from file */
++	int nserv = 0;    /* number of IPv4 nameservers read from file */
+ #ifdef _LIBC
+-	int nservall = 0; /* number of NS records read, nserv IPv4 only */
++	int nservall = 0; /* number of (IPv4 + IPV6) nameservers read from file */
+ #endif
+ 	int haveenv = 0;
+ 	int havesearch = 0;
+@@ -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;
+@@ -427,7 +427,7 @@ __res_vinit(res_state statp, int preinit) {
+ #endif
+ 	    (void) fclose(fp);
+ 	}
+-	if (__builtin_expect(statp->nscount == 0, 0)) {
++	if (__builtin_expect(nservall == 0, 0)) {
+ 	    statp->nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
+ 	    statp->nsaddr.sin_family = AF_INET;
+ 	    statp->nsaddr.sin_port = htons(NAMESERVER_PORT);
+@@ -621,7 +621,8 @@ __res_iclose(res_state statp, bool free_addr) {
+ 				statp->_u._ext.nsaddrs[ns] = NULL;
+ 			}
+ 		}
+-	statp->_u._ext.nsinit = 0;
++	if (free_addr)
++		statp->_u._ext.nsinit = 0;
+ }
+ libc_hidden_def (__res_iclose)
+ 
+diff --git a/resolv/res_send.c b/resolv/res_send.c
+index af42b8a..82242bd 100644
+--- a/resolv/res_send.c
++++ b/resolv/res_send.c
+@@ -347,7 +347,7 @@ __libc_res_nsend(res_state statp, const u_char *buf, int buflen,
+ {
+   int gotsomewhere, terrno, try, v_circuit, resplen, ns, n;
+ 
+-	if (statp->nscount == 0) {
++	if ((statp->nscount + EXT(statp).nscount6) == 0) {
+ 		__set_errno (ESRCH);
+ 		return (-1);
+ 	}
+@@ -1013,7 +1013,7 @@ send_dg(res_state statp,
+ 	 */
+ 	int seconds = (statp->retrans << ns);
+ 	if (ns > 0)
+-		seconds /= statp->nscount;
++		seconds /= (statp->nscount + EXT(statp).nscount6);
+ 	if (seconds <= 0)
+ 		seconds = 1;
+ 	bool single_request_reopen = (statp->options & RES_SNGLKUPREOP) != 0;

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series	2014-06-16 13:24:55 UTC (rev 6155)
+++ glibc-package/trunk/debian/patches/series	2014-06-16 13:25:36 UTC (rev 6156)
@@ -245,3 +245,4 @@
 any/cvs-strtod.diff
 any/cvs-resolv-reuse-fd.diff
 any/submitted-argp-attribute.diff
+any/submitted-resolv-ipv6-nameservers.diff


Reply to: