]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3908. [bug] rndc now differentiates between a zone in multiple
authorMark Andrews <marka@isc.org>
Sat, 2 Aug 2014 04:43:26 +0000 (14:43 +1000)
committerMark Andrews <marka@isc.org>
Sat, 2 Aug 2014 04:43:57 +0000 (14:43 +1000)
                        views and a zone that doesn't exist at all. [RT #36691]

(cherry picked from commit c38341ec435fb78de6d12c1001201f9ac7487b68)

CHANGES
bin/named/server.c
bin/tests/system/zonechecks/ns1/named.conf
bin/tests/system/zonechecks/setup.sh
bin/tests/system/zonechecks/tests.sh
lib/dns/include/dns/view.h
lib/dns/view.c
lib/isc/include/isc/result.h
lib/isc/result.c

diff --git a/CHANGES b/CHANGES
index 8112bca9f63a2fb876f5b867207825024040a616..8402c053bd2ff2537f9126e99ee5282079006d37 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3908.  [bug]           rndc now differentiates between a zone in multiple
+                       views and a zone that doesn't exist at all. [RT #36691]
+
 3907.  [cleanup]       Alphabetise rndc help. [RT#36683]
 
 3906.  [protocol]      Update URI record format to comply with
index 789ca8a1ca8d5c3ae6e3fc40866999407a0abac2..d37a3ce42ed3322e26c3f669879054fbcd0fc14e 100644 (file)
@@ -7127,6 +7127,10 @@ zone_from_args(ns_server_t *server, char *args, const char *zonetxt,
                        snprintf(problem, sizeof(problem),
                                 "no matching zone '%s' in any view",
                                 zonetxt);
+               else if (result == ISC_R_MULTIPLE)
+                       snprintf(problem, sizeof(problem),
+                                "zone '%s' was found in multiple views",
+                                zonetxt);
        } else {
                result = dns_viewlist_find(&server->viewlist, viewtxt,
                                           rdclass, &view);
index 6caed2ff79fcf62518c3b6ebf2c9c99bbbe87d5b..a0393ce8bdd8f4a9a23405f903bde457421ad5a4 100644 (file)
@@ -14,8 +14,6 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: named.conf,v 1.3 2012/01/31 23:47:32 tbox Exp $ */
-
 // NS1
 
 controls { /* empty */ };
@@ -43,15 +41,33 @@ controls {
        inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; };
 };
 
-zone "master.example" {
-       type master;
-       file "master.db";
-       allow-update { any; };
-       allow-transfer { any; };
-       auto-dnssec maintain;
+view unused {
+       match-clients { none; };
+
+       zone "duplicate.example" {
+               type master;
+               file "duplicate.db";
+       };
 };
 
-zone "reload.example" {
-       type master;
-       file "reload.db";
+view primary {
+       match-clients { any; };
+
+       zone "master.example" {
+               type master;
+               file "master.db";
+               allow-update { any; };
+               allow-transfer { any; };
+               auto-dnssec maintain;
+       };
+
+       zone "reload.example" {
+               type master;
+               file "reload.db";
+       };
+
+       zone "duplicate.example" {
+               type master;
+               file "duplicate.db";
+       };
 };
index 3ee7aca47418bc715d12fa4b81dd01715f1c0dd3..0a6c0f6ac2c4755f69e3b71952c166c08aaf48fa 100644 (file)
@@ -22,6 +22,7 @@ $SHELL clean.sh
 test -r $RANDFILE || $GENRANDOM 400 $RANDFILE
 
 $SHELL ../genzone.sh 1 > ns1/master.db
+$SHELL ../genzone.sh 1 > ns1/duplicate.db
 cd ns1
 touch master.db.signed
 echo '$INCLUDE "master.db.signed"' >> master.db
index 62f293ae0583daf650384bad209feea44c24dd38..579db1485999533f5fcda12ba9101a1d75778cbc 100644 (file)
@@ -14,8 +14,6 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: tests.sh,v 1.10 2012/02/02 03:26:55 marka Exp $
-
 SYSTEMTESTTOP=..
 . $SYSTEMTESTTOP/conf.sh
 
@@ -237,5 +235,16 @@ checkfor "files: reload.db$" rndc.out.removeinclude
 if [ $ret != 0 ]; then echo "I:failed"; fi
 status=`expr $status + $ret`
 
+echo "I: checking 'rdnc zonestatus' with duplicated zone name"
+ret=0 
+$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 zonestatus duplicate.example > rndc.out.duplicate 2>&1
+checkfor "zone 'duplicate.example' was found in multiple views" rndc.out.duplicate
+$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 zonestatus duplicate.example in primary > rndc.out.duplicate 2>&1
+checkfor "name: duplicate.example" rndc.out.duplicate
+$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 zonestatus nosuchzone.example > rndc.out.duplicate 2>&1
+checkfor "no matching zone 'nosuchzone.example' in any view" rndc.out.duplicate
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
 echo "I:exit status: $status"
 exit $status
index 9beadbf64bbeeae177e60c40070ba8306b1ba7b0..4ecd9ff51d376739c3a26a89a63be2d5e2aebcd9 100644 (file)
@@ -740,6 +740,7 @@ dns_viewlist_findzone(dns_viewlist_t *list, dns_name_t *name, isc_boolean_t allc
  * Returns:
  *\li  #ISC_R_SUCCESS          A matching zone was found.
  *\li  #ISC_R_NOTFOUND         No matching zone was found.
+ *\li  #ISC_R_MULTIPLE         Multiple zones with the same name were found.
  */
 
 isc_result_t
index c93a080747d9e85e27a54f1e7da175232a949e9c..c5eff7879d50812bdf8c87421e28c76308d1362f 100644 (file)
@@ -1435,7 +1435,7 @@ dns_viewlist_findzone(dns_viewlist_t *list, dns_name_t *name,
                if (zone2 != NULL) {
                        dns_zone_detach(&zone1);
                        dns_zone_detach(&zone2);
-                       return (ISC_R_NOTFOUND);
+                       return (ISC_R_MULTIPLE);
                }
        }
 
index dcd457b3d1b0cb648b63c98b6917e53ec7f90fcc..3a768fd08091aa5676d9da1aa4b3a5d46710fd6d 100644 (file)
 #define ISC_R_BADADDRESSFORM           59      /*%< invalid address format */
 #define ISC_R_BADBASE32                        60      /*%< bad base32 encoding */
 #define ISC_R_UNSET                    61      /*%< unset */
+#define ISC_R_MULTIPLE                 62      /*%< multiple */
 
 /*% Not a result code: the number of results. */
-#define ISC_R_NRESULTS                         62
+#define ISC_R_NRESULTS                         63
 
 ISC_LANG_BEGINDECLS
 
index a9405fddf0557bb56fb4d07597bc9497978e2705..e4f0ced99b4ca177d3ab5b7232b458effda94288 100644 (file)
@@ -103,6 +103,7 @@ static const char *text[ISC_R_NRESULTS] = {
        "invalid address format",               /*%< 59 */
        "bad base32 encoding",                  /*%< 60 */
        "unset",                                /*%< 61 */
+       "multiple",                             /*%< 62 */
 };
 
 #define ISC_RESULT_RESULTSET                   2