diff --git a/CHANGES b/CHANGES index cf2d9e4e47..7dd5d4288f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5116. [bug] Named/named-checkconf triggered a assertion when + a mirror zone's name is bad. [GL #778] + 5115. [bug] Allow unsupported algorithms in zone when not used for signing with dnssec-signzone. [GL #783] diff --git a/bin/tests/system/checkconf/bad-mirror-zonename.conf b/bin/tests/system/checkconf/bad-mirror-zonename.conf new file mode 100644 index 0000000000..3c4663ec69 --- /dev/null +++ b/bin/tests/system/checkconf/bad-mirror-zonename.conf @@ -0,0 +1,4 @@ +zone "\0example" { + type mirror; + file "example.db"; +}; diff --git a/lib/bind9/check.c b/lib/bind9/check.c index 2261143229..8b14d3a3cd 100644 --- a/lib/bind9/check.c +++ b/lib/bind9/check.c @@ -1958,7 +1958,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, unsigned int i; dns_rdataclass_t zclass; dns_fixedname_t fixedname; - dns_name_t *zname = NULL; + dns_name_t *zname = NULL; /* NULL if parsing of zone name fails. */ isc_buffer_t b; bool root = false; bool rfc1918 = false; @@ -1977,10 +1977,10 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, }; static optionstable dialups[] = { - { "notify", CFG_ZONE_MASTER | CFG_ZONE_SLAVE }, - { "notify-passive", CFG_ZONE_SLAVE }, - { "passive", CFG_ZONE_SLAVE | CFG_ZONE_STUB }, - { "refresh", CFG_ZONE_SLAVE | CFG_ZONE_STUB }, + { "notify", CFG_ZONE_MASTER | CFG_ZONE_SLAVE }, + { "notify-passive", CFG_ZONE_SLAVE }, + { "passive", CFG_ZONE_SLAVE | CFG_ZONE_STUB }, + { "refresh", CFG_ZONE_SLAVE | CFG_ZONE_STUB }, }; znamestr = cfg_obj_asstring(cfg_tuple_get(zconfig, "name")); @@ -2273,7 +2273,8 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, * server list is used in the absence of one explicitly specified. */ if (ztype == CFG_ZONE_SLAVE || ztype == CFG_ZONE_STUB || - (ztype == CFG_ZONE_MIRROR && !dns_name_equal(zname, dns_rootname))) + (ztype == CFG_ZONE_MIRROR && zname != NULL && + !dns_name_equal(zname, dns_rootname))) { obj = NULL; if (cfg_map_get(zoptions, "masters", &obj) != ISC_R_SUCCESS) { @@ -2567,7 +2568,6 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, } } - /* * Check that max-zone-ttl isn't used with masterfile-format map */