mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
4849. [bug] Duplicate zones could appear in the .nzf file if
addzone failed. [RT #46435]
(cherry picked from commit 2d7f89b9c7)
This commit is contained in:
parent
67b7334b62
commit
22a32060c1
5 changed files with 39 additions and 2 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,3 +1,6 @@
|
|||
4849. [bug] Duplicate zones could appear in the .nzf file if
|
||||
addzone failed. [RT #46435]
|
||||
|
||||
4847. [bug] dnssec-dnskey-kskonly was not being honoured for
|
||||
CDS and CDNSKEY. [RT #46755]
|
||||
|
||||
|
|
|
|||
|
|
@ -12607,6 +12607,7 @@ do_addzone(named_server_t *server, ns_cfgctx_t *cfg, dns_view_t *view,
|
|||
dns_zone_t *zone = NULL;
|
||||
#ifndef HAVE_LMDB
|
||||
FILE *fp = NULL;
|
||||
isc_boolean_t cleanup_config = ISC_FALSE;
|
||||
#else /* HAVE_LMDB */
|
||||
MDB_txn *txn = NULL;
|
||||
MDB_dbi dbi;
|
||||
|
|
@ -12699,14 +12700,15 @@ do_addzone(named_server_t *server, ns_cfgctx_t *cfg, dns_view_t *view,
|
|||
* we've created. If there was a previous one, merge the new
|
||||
* zone into it.
|
||||
*/
|
||||
if (cfg->nzf_config == NULL)
|
||||
if (cfg->nzf_config == NULL) {
|
||||
cfg_obj_attach(zoneconf, &cfg->nzf_config);
|
||||
else {
|
||||
} else {
|
||||
cfg_obj_t *z;
|
||||
DE_CONST(zoneobj, z);
|
||||
CHECK(cfg_parser_mapadd(cfg->add_parser,
|
||||
cfg->nzf_config, z, "zone"));
|
||||
}
|
||||
cleanup_config = ISC_TRUE;
|
||||
#endif /* HAVE_LMDB */
|
||||
|
||||
/*
|
||||
|
|
@ -12752,6 +12754,12 @@ do_addzone(named_server_t *server, ns_cfgctx_t *cfg, dns_view_t *view,
|
|||
#ifndef HAVE_LMDB
|
||||
if (fp != NULL)
|
||||
(void)isc_stdio_close(fp);
|
||||
if (result != ISC_R_SUCCESS && cleanup_config) {
|
||||
tresult = delete_zoneconf(view, cfg->add_parser,
|
||||
cfg->nzf_config, name,
|
||||
NULL);
|
||||
RUNTIME_CHECK(tresult == ISC_R_SUCCESS);
|
||||
}
|
||||
#else /* HAVE_LMDB */
|
||||
if (txn != NULL)
|
||||
(void) nzd_close(&txn, ISC_FALSE);
|
||||
|
|
|
|||
3
bin/tests/system/addzone/ns3/e.db
Normal file
3
bin/tests/system/addzone/ns3/e.db
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
@ SOA ns3 hostmaster 0 0 0 0 0
|
||||
@ NS ns3
|
||||
ns3 A 10.53.0.3
|
||||
|
|
@ -672,5 +672,19 @@ n=`expr $n + 1`
|
|||
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
if ! $FEATURETEST --with-lmdb
|
||||
then
|
||||
echo "I:check that addzone is fully reversed on failure (--with-lmdb=no) ($n)"
|
||||
ret=0
|
||||
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 addzone "test1.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 "test2.baz" '{ type master; file "dne.db"; };' > /dev/null 2>&1 && ret=1
|
||||
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 addzone "test3.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1
|
||||
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 delzone "test3.baz" > /dev/null 2>&1 || ret=1
|
||||
grep test2.baz ns3/_default.nzf > /dev/null && ret=1
|
||||
n=`expr $n + 1`
|
||||
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
fi
|
||||
|
||||
echo "I:exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ usage() {
|
|||
fprintf(stderr, " --rpz-nsdname\n");
|
||||
fprintf(stderr, " --rpz-nsip\n");
|
||||
fprintf(stderr, " --with-idn\n");
|
||||
fprintf(stderr, " --with-lmdb\n");
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -156,6 +157,14 @@ main(int argc, char **argv) {
|
|||
#endif
|
||||
}
|
||||
|
||||
if (strcmp(argv[1], "--with-lmdb") == 0) {
|
||||
#ifdef HAVE_LMDB
|
||||
return (0);
|
||||
#else
|
||||
return (1);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (strcmp(argv[1], "--ipv6only=no") == 0) {
|
||||
#ifdef WIN32
|
||||
return (0);
|
||||
|
|
|
|||
Loading…
Reference in a new issue