From c0a2210466dec0cc81ebf2ffbe21693b57b9c29c Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 27 Dec 2017 16:24:33 +1100 Subject: [PATCH] 4850. [bug] Named failed to restart with multiple added zones in lmdb database. [RT #46889] (cherry picked from commit 9bec7facfbb839836d67190c92613524fa5ad405) --- CHANGES | 3 +++ bin/named/server.c | 3 ++- bin/tests/system/addzone/tests.sh | 12 ++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 93d0876938..2c7a43f29c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4850. [bug] Named failed to restart with multiple added zones in + lmdb database. [RT #46889] + 4849. [bug] Duplicate zones could appear in the .nzf file if addzone failed. [RT #46435] diff --git a/bin/named/server.c b/bin/named/server.c index 0f086c2bb6..5864254091 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -6967,7 +6967,7 @@ for_all_newzone_cfgs(newzone_cfg_cb_t callback, cfg_obj_t *config, cfg_obj_t *vconfig, isc_mem_t *mctx, dns_view_t *view, cfg_aclconfctx_t *actx, MDB_txn *txn, MDB_dbi dbi) { - const cfg_obj_t *zconfig, *zlist = NULL; + const cfg_obj_t *zconfig, *zlist; isc_result_t result = ISC_R_SUCCESS; cfg_obj_t *zconfigobj = NULL; isc_buffer_t *text = NULL; @@ -6995,6 +6995,7 @@ for_all_newzone_cfgs(newzone_cfg_cb_t callback, cfg_obj_t *config, /* * Extract zone configuration from configuration object. */ + zlist = NULL; result = cfg_map_get(zconfigobj, "zone", &zlist); if (result != ISC_R_SUCCESS) { break; diff --git a/bin/tests/system/addzone/tests.sh b/bin/tests/system/addzone/tests.sh index bd3bc75a96..007cae9e1c 100755 --- a/bin/tests/system/addzone/tests.sh +++ b/bin/tests/system/addzone/tests.sh @@ -518,5 +518,17 @@ then status=`expr $status + $ret` fi +echo "I:check that named restarts with multiple added zones ($n)" +ret=0 +$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 addzone "test4.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1 +$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 addzone "test5.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1 +$PERL $SYSTEMTESTTOP/stop.pl . ns3 +$PERL $SYSTEMTESTTOP/start.pl --noclean --restart . ns3 || ret=1 +$DIG -p 5300 @10.53.0.3 version.bind txt ch > dig.out.test$n || ret=1 +grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + echo "I:exit status: $status" [ $status -eq 0 ] || exit 1