knot_zonedb_insert(db_new, zone);
}
+ /* Remove deleted cataloged zones from conf before catalog removals are commited. */
+ catalog_it_t *cat_it = catalog_it_begin(&server->catalog_upd);
+ while (!catalog_it_finished(cat_it)) {
+ catalog_upd_val_t *upd = catalog_it_val(cat_it);
+ if (upd->type == CAT_UPD_REM) {
+ zone_t *zone = knot_zonedb_find(db_old, upd->member);
+ if (zone != NULL) {
+ zone_purge(conf, zone);
+ }
+ }
+ catalog_it_next(cat_it);
+ }
+ catalog_it_free(cat_it);
+
int ret = catalog_update_commit(&server->catalog_upd, &server->catalog);
if (ret != KNOT_EOK) {
log_error("catalog, failed to apply changes (%s)", knot_strerror(ret));
knot_zonedb_iter_free(it);
catalog_only:
- ; /* Remove deleted cataloged zones from conf. */
- catalog_it_t *cat_it = catalog_it_begin(&server->catalog_upd);
- while (!catalog_it_finished(cat_it)) {
- catalog_upd_val_t *upd = catalog_it_val(cat_it);
- if (upd->type == CAT_UPD_REM) {
- zone_t *zone = knot_zonedb_find(db_old, upd->member);
- if (zone != NULL) {
- zone_purge(conf, zone);
- }
- }
- catalog_it_next(cat_it);
- }
- catalog_it_free(cat_it);
/* Clear catalog changes. No need to use mutex as this is done from main
* thread while all zone events are paused. */
import dnstest.params
import glob
+import os
import shutil
from subprocess import DEVNULL, PIPE, Popen
import subprocess
if lines != expect_keys:
set_err("CHECK # of KEYS (%d != %d)" % (lines, expect_keys))
+def member_zonefile(server, zone):
+ return server.dir + "/catalog/" + zone + "zone"
+
t = Test()
master = t.server("knot")
else:
slave.add_module(zone[1], ModOnlineSign(algorithm="ECDSAP256SHA256", single_type_signing=False))
+os.mkdir(master.dir + "/catalog")
for zf in glob.glob(t.data_dir + "/*.zone"):
- shutil.copy(zf, master.dir + "/master")
+ shutil.copy(zf, master.dir + "/catalog")
t.start()
resp.check(rcode="REFUSED")
# Updating a cataloged zone
-subprocess.run(["sed", "-i", "s/10001/10002/;$s/$/\\nxyz A 1.2.3.4/", master.dir + "/master/cataloged1.zone"])
+subprocess.run(["sed", "-i", "s/10001/10002/;$s/$/\\nxyz A 1.2.3.4/", member_zonefile(master, "cataloged1.")])
master.ctl("zone-reload cataloged1.")
t.sleep(4)
resp = slave.dig("xyz.cataloged1.", "A", dnssec=True)
up.add("bar2.zones.catalog1.", 0, "PTR", "cataloged2.")
up.send("NOERROR")
t.sleep(4)
-shutil.copy(t.data_dir + "/cataloged2.zone", master.dir + "/master") # because the purge deletes even zonefile
+if os.path.exists(member_zonefile(master, "cataloged2.")):
+ set_err("removed member zone file not purged")
+shutil.copy(t.data_dir + "/cataloged2.zone", member_zonefile(master, "cataloged2.")) # because the purge deletes even zonefile
master.ctl("zone-reload cataloged2.")
t.sleep(6)
resp2 = slave.dig("cataloged2.", "DNSKEY")
resp = slave.dig("cataloged1.", "DNSKEY")
resp.check(rcode="REFUSED")
check_keys(slave, "cataloged1", 0)
+if os.path.exists(member_zonefile(master, "cataloged1.")):
+ set_err("removed member zone file 2 not purged")
# Check restoring catalog from backup
master.ctl("zone-restore +journal +backupdir %s/backup %s" % (master.dir, zone[1].name))
import dnstest.params
import glob
+import os
import shutil
from subprocess import DEVNULL, PIPE, Popen
import subprocess
master.cat_interpret(zone)
+os.mkdir(master.dir + "/catalog")
for zf in glob.glob(t.data_dir + "/*.zone"):
- shutil.copy(zf, master.dir + "/master")
+ shutil.copy(zf, master.dir + "/catalog")
t.start()
up.send("NOERROR")
t.sleep(4)
# check that DNSSEC no longer works
-with open(master.dir + "/master/cataloged1.zone", "a") as c1zf:
+with open(master.dir + "/catalog/cataloged1.zone", "a") as c1zf:
c1zf.write("added A 1.2.3.4")
master.ctl("zone-reload cataloged1.")
t.sleep(4)
t.link(catz, knot)
knot.cat_interpret(catz)
+os.mkdir(knot.dir + "/catalog")
+
t.start()
knot.zone_wait(catz, udp=False, tsig=True)
zone_add = "member%d." % i
name_hash = hashlib.md5(zone_add.encode()).hexdigest()
- shutil.copyfile(t.data_dir + "generic.zone" , knot.dir + "/master/" + zone_add + "zone")
+ shutil.copyfile(t.data_dir + "generic.zone" , knot.dir + "/catalog/" + zone_add + "zone")
up = knot.update(catz)
up.add(name_hash + ".zones", 0, "PTR", zone_add)
break
if have_catalog is not None:
s.id_item("id", "catalog-default")
- s.item_str("file", self.dir + "/master/%s.zone")
+ s.item_str("file", self.dir + "/catalog/%s.zone")
s.item_str("zonefile-load", "difference")
s.item_str("journal-content", z.journal_content)
self.config_xfr(z, s)
s.id_item("id", "catalog-signed")
- s.item_str("file", self.dir + "/master/%s.zone")
+ s.item_str("file", self.dir + "/catalog/%s.zone")
s.item_str("journal-content", z.journal_content)
s.item_str("dnssec-signing", "on")
self.config_xfr(z, s)
s.id_item("id", "catalog-unsigned")
- s.item_str("file", self.dir + "/master/%s.zone")
+ s.item_str("file", self.dir + "/catalog/%s.zone")
s.item_str("journal-content", z.journal_content)
self.config_xfr(z, s)