From: Mark Andrews Date: Tue, 2 Mar 2004 01:19:51 +0000 (+0000) Subject: 1552. [bug] Accept NOTIFY requests from mapped masters if X-Git-Tag: v9.4.0~82 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=f0e57c23e01731ed9e7f2dae585e6c643e590111;p=thirdparty%2Fbind9.git 1552. [bug] Accept NOTIFY requests from mapped masters if matched-mapped is set. [RT #10049] --- diff --git a/CHANGES b/CHANGES index 97120f6e8d2..27a1bb3221c 100644 --- 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(). diff --git a/lib/dns/zone.c b/lib/dns/zone.c index c071d6cfbad..410849ddf6f 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.405 2004/02/27 20:41:45 marka Exp $ */ +/* $Id: zone.c,v 1.406 2004/03/02 01:19:51 marka Exp $ */ #include @@ -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,