From: Mark Andrews Date: Mon, 17 Feb 2014 23:09:07 +0000 (+1100) Subject: 3743. [bug] delegation-only flag wasn't working in forward zone X-Git-Tag: v9.10.0b1~90 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=38eabfcee7a9f206c268834ab9cb6d3408a31380;p=thirdparty%2Fbind9.git 3743. [bug] delegation-only flag wasn't working in forward zone declarations despite being documented. This is needed to support turning off forwarding and turning on delegation only at the same name. [RT #35392] --- diff --git a/CHANGES b/CHANGES index ab01d8bff33..b5de78372f1 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,8 @@ +3743. [bug] delegation-only flag wasn't working in forward zone + declarations despite being documented. This is + needed to support turning off forwarding and turning + on delegation only at the same name. [RT #35392] + 3742. [port] linux: libcap support: declare curval at start of block. [RT #35387] diff --git a/bin/named/server.c b/bin/named/server.c index 604fb58940d..ad5449c8211 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -4234,8 +4234,16 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig, (void)cfg_map_get(zoptions, "forward", &forwardtype); (void)cfg_map_get(zoptions, "forwarders", &forwarders); - result = configure_forward(config, view, origin, forwarders, - forwardtype); + CHECK(configure_forward(config, view, origin, forwarders, + forwardtype)); + + /* + * Forward zones may also set delegation only. + */ + only = NULL; + tresult = cfg_map_get(zoptions, "delegation-only", &only); + if (tresult == ISC_R_SUCCESS && cfg_obj_asboolean(only)) + CHECK(dns_view_adddelegationonly(view, origin)); goto cleanup; } diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml index 71642127e86..84ad97f747d 100644 --- a/doc/arm/Bv9ARM-book.xml +++ b/doc/arm/Bv9ARM-book.xml @@ -4316,8 +4316,8 @@ category notify { null; }; Delegation only. Logs queries that have been forced to NXDOMAIN as the result of a delegation-only zone or a - delegation-only in a hint - or stub zone declaration. + delegation-only in a + forward, hint or stub zone declaration. @@ -11050,6 +11050,7 @@ zone zone_name class forward (only|first) ; forwarders { ip_addr port ip_port dscp ip_dscp ; ... }; + delegation-only yes_or_no ; }; zone "." class { @@ -11675,9 +11676,10 @@ zone zone_name classdelegation-only - The flag only applies to hint and stub zones. If set - to yes, then the zone will also be - treated as if it is also a delegation-only type zone. + The flag only applies to forward, hint and stub + zones. If set to yes, + then the zone will also be treated as if it is + also a delegation-only type zone. See caveats in . diff --git a/lib/bind9/check.c b/lib/bind9/check.c index ae9a38ab15b..7e75c010089 100644 --- a/lib/bind9/check.c +++ b/lib/bind9/check.c @@ -1440,7 +1440,8 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, { "notify", MASTERZONE | SLAVEZONE }, { "also-notify", MASTERZONE | SLAVEZONE }, { "dialup", MASTERZONE | SLAVEZONE | STUBZONE | STREDIRECTZONE }, - { "delegation-only", HINTZONE | STUBZONE | DELEGATIONZONE }, + { "delegation-only", HINTZONE | STUBZONE | FORWARDZONE | + DELEGATIONZONE }, { "forward", MASTERZONE | SLAVEZONE | STUBZONE | STATICSTUBZONE | FORWARDZONE }, { "forwarders", MASTERZONE | SLAVEZONE | STUBZONE |