]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1552. [bug] Accept NOTIFY requests from mapped masters if
authorMark Andrews <marka@isc.org>
Tue, 2 Mar 2004 01:19:51 +0000 (01:19 +0000)
committerMark Andrews <marka@isc.org>
Tue, 2 Mar 2004 01:19:51 +0000 (01:19 +0000)
                        matched-mapped is set. [RT #10049]

CHANGES
lib/dns/zone.c

diff --git a/CHANGES b/CHANGES
index 97120f6e8d2476a3de453efad416dd892a1fb551..27a1bb3221ca33a411d045922a864fc9d3fb7f67 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -93,7 +93,8 @@
 1553.  [bug]           The windows socket code could stop accepting
                        connections. [RT#10115]
 
-1552.  [placeholder]   rt10049
+1552.  [bug]           Accept NOTIFY requests from mapped masters if
+                       matched-mapped is set. [RT #10049]
 
 1551.  [port]          Open "/dev/null" before calling chroot().
 
index c071d6cfbad8808aecd22ba321a091f7d5849e08..410849ddf6fd30c2478495d2cae27356d27db6c0 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: zone.c,v 1.405 2004/02/27 20:41:45 marka Exp $ */
+/* $Id: zone.c,v 1.406 2004/03/02 01:19:51 marka Exp $ */
 
 #include <config.h>
 
@@ -4601,15 +4601,25 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
                return (ISC_R_SUCCESS);
        }
 
-       for (i = 0; i < zone->masterscnt; i++)
+       isc_netaddr_fromsockaddr(&netaddr, from);
+       for (i = 0; i < zone->masterscnt; i++) {
                if (isc_sockaddr_eqaddr(from, &zone->masters[i]))
                        break;
+               if (zone->view->aclenv.match_mapped &&
+                   IN6_IS_ADDR_V4MAPPED(&from->type.sin6.sin6_addr) &&
+                   isc_sockaddr_pf(&zone->masters[i]) == AF_INET) {
+                       isc_netaddr_t na1, na2;
+                       isc_netaddr_fromv4mapped(&na1, &netaddr);
+                       isc_netaddr_fromsockaddr(&na2, &zone->masters[i]);
+                       if (isc_netaddr_equal(&na1, &na2))
+                               break;
+               }
+       }
 
        /*
         * Accept notify requests from non masters if they are on
         * 'zone->notify_acl'.
         */
-       isc_netaddr_fromsockaddr(&netaddr, from);
        if (i >= zone->masterscnt && zone->notify_acl != NULL &&
            dns_acl_match(&netaddr, NULL, zone->notify_acl,
                          &zone->view->aclenv,