diff --git a/CHANGES b/CHANGES index 835d33939c..61926e9390 100644 --- a/CHANGES +++ b/CHANGES @@ -33,6 +33,9 @@ 1553. [bug] The windows socket code could stop accepting connections. +1552. [bug] Accept NOTIFY requests from mapped masters if + matched-mapped is set. [RT #10049] + 1551. [port] Open "/dev/null" before calling chroot(). 1550. [port] Call tzset(), if available, before calling chroot(). diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 89db872ef2..bf6557fe5c 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: zone.c,v 1.333.2.27 2004/01/05 04:29:32 marka Exp $ */ +/* $Id: zone.c,v 1.333.2.28 2004/03/02 01:20:25 marka Exp $ */ #include @@ -4141,15 +4141,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,