]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1578. [bug] Don't use CLASS E IPv4 addresses when resolving.
authorMark Andrews <marka@isc.org>
Fri, 20 Feb 2004 00:52:46 +0000 (00:52 +0000)
committerMark Andrews <marka@isc.org>
Fri, 20 Feb 2004 00:52:46 +0000 (00:52 +0000)
                        [RT #10346]

CHANGES
lib/dns/resolver.c
lib/isc/include/isc/netaddr.h
lib/isc/include/isc/sockaddr.h
lib/isc/netaddr.c
lib/isc/sockaddr.c
lib/isc/unix/include/isc/net.h
lib/isc/win32/include/isc/net.h

diff --git a/CHANGES b/CHANGES
index 5474f9cbb0af14e20dddcc7b8ac4d72f6fbbf144..e9b68d1a1090c7b61d05ff45bb1ada75669b1f8b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -10,7 +10,8 @@
 
 1579.  [placeholder]   rt3746a
 
-1578.  [placeholder]   rt10346
+1578.  [bug]           Don't use CLASS E IPv4 addresses when resolving.
+                       [RT #10346]
 
 1577.  [placeholder]   rt10331
 
index 09e28fc65e6b7d3989c43b1b9face4e593c4160f..6184ec6cf8a2a8349ba4a29fe497d3a7e0412f48 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: resolver.c,v 1.280 2004/02/03 00:59:05 marka Exp $ */
+/* $Id: resolver.c,v 1.281 2004/02/20 00:52:45 marka Exp $ */
 
 #include <config.h>
 
@@ -2025,6 +2025,9 @@ possibly_mark(fetchctx_t *fctx, dns_adbaddrinfo_t *addr)
        } else if (isc_sockaddr_ismulticast(sa)) {
                addr->flags |= FCTX_ADDRINFO_MARK;
                msg = "ignoring multicast address: ";
+       } else if (isc_sockaddr_isexperimental(sa)) {
+               addr->flags |= FCTX_ADDRINFO_MARK;
+               msg = "ignoring experimental address: ";
        } else if (sa->type.sa.sa_family != AF_INET6) {
                return;
        } else if (IN6_IS_ADDR_V4MAPPED(&sa->type.sin6.sin6_addr)) {
index 7057f2336f7f833cd686868d3437e32bca73f10e..5557e3eef1eda886e92be9efb71d743ea9234219 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: netaddr.h,v 1.23 2002/10/28 02:16:20 marka Exp $ */
+/* $Id: netaddr.h,v 1.24 2004/02/20 00:52:46 marka Exp $ */
 
 #ifndef ISC_NETADDR_H
 #define ISC_NETADDR_H 1
@@ -119,6 +119,12 @@ isc_netaddr_ismulticast(isc_netaddr_t *na);
  * Returns ISC_TRUE if the address is a multicast address.
  */
 
+isc_boolean_t
+isc_netaddr_isexperimental(isc_netaddr_t *na);
+/*
+ * Returns ISC_TRUE if the address is a experimental (CLASS E) address.
+ */
+
 isc_boolean_t
 isc_netaddr_islinklocal(isc_netaddr_t *na);
 /*
index 8fbd06ac03f4a4555124cbea7bbde8346dad875b..470956b034c15de106015c202203c6c926792da2 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: sockaddr.h,v 1.40 2003/07/25 02:22:26 marka Exp $ */
+/* $Id: sockaddr.h,v 1.41 2004/02/20 00:52:46 marka Exp $ */
 
 #ifndef ISC_SOCKADDR_H
 #define ISC_SOCKADDR_H 1
@@ -173,6 +173,12 @@ isc_sockaddr_ismulticast(isc_sockaddr_t *sa);
  * Returns ISC_TRUE if the address is a multicast address.
  */
 
+isc_boolean_t
+isc_sockaddr_isexperimental(isc_sockaddr_t *sa);
+/*
+ * Returns ISC_TRUE if the address is a experimental (CLASS E) address.
+ */
+
 isc_boolean_t
 isc_sockaddr_islinklocal(isc_sockaddr_t *sa);
 /*
index f3c8e968356de741573f98b2306d7b3b9667f9e7..77599d7438a7851cb0b617d9f56f08902919709e 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: netaddr.c,v 1.25 2002/10/28 02:23:53 marka Exp $ */
+/* $Id: netaddr.c,v 1.26 2004/02/20 00:52:45 marka Exp $ */
 
 #include <config.h>
 
@@ -23,6 +23,7 @@
 
 #include <isc/buffer.h>
 #include <isc/msgs.h>
+#include <isc/net.h>
 #include <isc/netaddr.h>
 #include <isc/print.h>
 #include <isc/sockaddr.h>
@@ -305,6 +306,16 @@ isc_netaddr_ismulticast(isc_netaddr_t *na) {
        }
 }
 
+isc_boolean_t
+isc_netaddr_isexperimental(isc_netaddr_t *na) {
+       switch (na->family) {
+       case AF_INET:
+               return (ISC_TF(ISC_IPADDR_ISEXPERIMENTAL(na->type.in.s_addr)));
+       default:
+               return (ISC_FALSE);  /* XXXMLG ? */
+       }
+}
+
 isc_boolean_t
 isc_netaddr_islinklocal(isc_netaddr_t *na) {
        switch (na->family) {
index 9dbc718362815ffd6a78ff9c507febd1fc6fdaaa..da06ceb045b3b4b50a69ae3f40dcca39853ee9cc 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: sockaddr.c,v 1.57 2003/07/25 02:22:26 marka Exp $ */
+/* $Id: sockaddr.c,v 1.58 2004/02/20 00:52:45 marka Exp $ */
 
 #include <config.h>
 
@@ -421,6 +421,17 @@ isc_sockaddr_ismulticast(isc_sockaddr_t *sockaddr) {
        return (isc_netaddr_ismulticast(&netaddr));
 }
 
+isc_boolean_t
+isc_sockaddr_isexperimental(isc_sockaddr_t *sockaddr) {
+       isc_netaddr_t netaddr;
+
+       if (sockaddr->type.sa.sa_family == AF_INET) {
+               isc_netaddr_fromsockaddr(&netaddr, sockaddr);
+               return (isc_netaddr_isexperimental(&netaddr));
+       }
+       return (ISC_FALSE);
+}
+
 isc_boolean_t
 isc_sockaddr_issitelocal(isc_sockaddr_t *sockaddr) {
        isc_netaddr_t netaddr;
index 7d6e3f9ed36f191fe6b887c1878b690665225dc9..aea8039973a613e43a232c6f991c608bd5de563e 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: net.h,v 1.37 2003/01/16 03:59:27 marka Exp $ */
+/* $Id: net.h,v 1.38 2004/02/20 00:52:46 marka Exp $ */
 
 #ifndef ISC_NET_H
 #define ISC_NET_H 1
@@ -230,6 +230,10 @@ typedef isc_uint16_t in_port_t;
                (((isc_uint32_t)(i) & ISC__IPADDR(0xf0000000)) \
                 == ISC__IPADDR(0xe0000000))
 
+#define ISC_IPADDR_ISEXPERIMENTAL(i) \
+               (((isc_uint32_t)(i) & ISC__IPADDR(0xf0000000)) \
+                == ISC__IPADDR(0xf0000000))
+
 /***
  *** Functions.
  ***/
index ced83e5d79e20b3e199a0656aab5fd65cebee8d4..149c0de42226710814e73af44b62d89adaacdc0d 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: net.h,v 1.19 2003/01/16 03:59:28 marka Exp $ */
+/* $Id: net.h,v 1.20 2004/02/20 00:52:46 marka Exp $ */
 
 #ifndef ISC_NET_H
 #define ISC_NET_H 1
@@ -139,6 +139,10 @@ typedef isc_uint16_t in_port_t;
                (((isc_uint32_t)(i) & ISC__IPADDR(0xf0000000)) \
                 == ISC__IPADDR(0xe0000000))
 
+#define ISC_IPADDR_ISEXPERIMENTAL(i) \
+               (((isc_uint32_t)(i) & ISC__IPADDR(0xf0000000)) \
+                == ISC__IPADDR(0xf0000000))
+
 /*
  * Fix the FD_SET and FD_CLR Macros to properly cast
  */