mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 05:57:52 +00:00
Merge branch 'ondrej/cleanup-cruft-in-dns_catz' into 'main'
Cleanup the dns_catz unit API See merge request isc-projects/bind9!8099
This commit is contained in:
commit
aed4fdd7d3
@ -2872,7 +2872,7 @@ cleanup:
|
||||
cfg_obj_destroy(cfg->add_parser, &zoneconf);
|
||||
}
|
||||
dns_catz_entry_detach(cz->origin, &cz->entry);
|
||||
dns_catz_detach_catz(&cz->origin);
|
||||
dns_catz_zone_detach(&cz->origin);
|
||||
dns_view_detach(&cz->view);
|
||||
isc_mem_putanddetach(&cz->mctx, cz, sizeof(*cz));
|
||||
}
|
||||
@ -2946,7 +2946,7 @@ cleanup:
|
||||
dns_zone_detach(&zone);
|
||||
}
|
||||
dns_catz_entry_detach(cz->origin, &cz->entry);
|
||||
dns_catz_detach_catz(&cz->origin);
|
||||
dns_catz_zone_detach(&cz->origin);
|
||||
dns_view_detach(&cz->view);
|
||||
isc_mem_putanddetach(&cz->mctx, cz, sizeof(*cz));
|
||||
}
|
||||
@ -2978,7 +2978,7 @@ catz_run(dns_catz_entry_t *entry, dns_catz_zone_t *origin, dns_view_t *view,
|
||||
isc_mem_attach(view->mctx, &cz->mctx);
|
||||
|
||||
dns_catz_entry_attach(entry, &cz->entry);
|
||||
dns_catz_attach_catz(origin, &cz->origin);
|
||||
dns_catz_zone_attach(origin, &cz->origin);
|
||||
dns_view_attach(view, &cz->view);
|
||||
|
||||
isc_async_run(named_g_mainloop, action, cz);
|
||||
@ -3004,6 +3004,25 @@ catz_modzone(dns_catz_entry_t *entry, dns_catz_zone_t *origin, dns_view_t *view,
|
||||
return (catz_run(entry, origin, view, udata, CATZ_MODZONE));
|
||||
}
|
||||
|
||||
static void
|
||||
catz_changeview(dns_catz_entry_t *entry, void *arg1, void *arg2) {
|
||||
dns_view_t *pview = arg1;
|
||||
dns_view_t *view = arg2;
|
||||
|
||||
dns_zone_t *zone = NULL;
|
||||
isc_result_t result = dns_view_findzone(
|
||||
pview, dns_catz_entry_getname(entry), DNS_ZTFIND_EXACT, &zone);
|
||||
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
|
||||
dns_zone_setview(zone, view);
|
||||
dns_view_addzone(view, zone);
|
||||
|
||||
dns_zone_detach(&zone);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
configure_catz_zone(dns_view_t *view, dns_view_t *pview,
|
||||
const cfg_obj_t *config, const cfg_listelt_t *element) {
|
||||
@ -3031,65 +3050,14 @@ configure_catz_zone(dns_view_t *view, dns_view_t *pview,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
result = dns_catz_add_zone(view->catzs, &origin, &zone);
|
||||
if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS) {
|
||||
cfg_obj_log(catz_obj, named_g_lctx, DNS_CATZ_ERROR_LEVEL,
|
||||
"catz: unable to create catalog zone '%s', "
|
||||
"error %s",
|
||||
str, isc_result_totext(result));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
result = dns_catz_zone_add(view->catzs, &origin, &zone);
|
||||
if (result == ISC_R_EXISTS) {
|
||||
isc_ht_iter_t *it = NULL;
|
||||
|
||||
RUNTIME_CHECK(pview != NULL);
|
||||
|
||||
/*
|
||||
* xxxwpk todo: reconfigure the zone!!!!
|
||||
*/
|
||||
cfg_obj_log(catz_obj, named_g_lctx, DNS_CATZ_ERROR_LEVEL,
|
||||
"catz: catalog zone '%s' will not be reconfigured",
|
||||
str);
|
||||
/*
|
||||
* We have to walk through all the member zones and attach
|
||||
* We have to walk through all the member zones and re-attach
|
||||
* them to current view
|
||||
*/
|
||||
dns_catz_get_iterator(zone, &it);
|
||||
|
||||
for (result = isc_ht_iter_first(it); result == ISC_R_SUCCESS;
|
||||
result = isc_ht_iter_next(it))
|
||||
{
|
||||
dns_name_t *name = NULL;
|
||||
dns_zone_t *dnszone = NULL;
|
||||
dns_catz_entry_t *entry = NULL;
|
||||
isc_result_t tresult;
|
||||
|
||||
isc_ht_iter_current(it, (void **)&entry);
|
||||
name = dns_catz_entry_getname(entry);
|
||||
|
||||
tresult = dns_view_findzone(pview, name,
|
||||
DNS_ZTFIND_EXACT, &dnszone);
|
||||
if (tresult != ISC_R_SUCCESS) {
|
||||
continue;
|
||||
}
|
||||
|
||||
dns_zone_setview(dnszone, view);
|
||||
dns_view_addzone(view, dnszone);
|
||||
|
||||
/*
|
||||
* The dns_view_findzone() call above increments the
|
||||
* zone's reference count, which we need to decrement
|
||||
* back. However, as dns_zone_detach() sets the
|
||||
* supplied pointer to NULL, calling it is deferred
|
||||
* until the dnszone variable is no longer used.
|
||||
*/
|
||||
dns_zone_detach(&dnszone);
|
||||
}
|
||||
|
||||
isc_ht_iter_destroy(&it);
|
||||
|
||||
result = ISC_R_SUCCESS;
|
||||
dns_catz_zone_for_each_entry2(zone, catz_changeview, pview,
|
||||
view);
|
||||
}
|
||||
|
||||
dns_catz_zone_resetdefoptions(zone);
|
||||
@ -3167,12 +3135,12 @@ configure_catz(dns_view_t *view, dns_view_t *pview, const cfg_obj_t *config,
|
||||
}
|
||||
|
||||
if (old != NULL) {
|
||||
dns_catz_attach_catzs(pview->catzs, &view->catzs);
|
||||
dns_catz_detach_catzs(&pview->catzs);
|
||||
dns_catz_zones_attach(pview->catzs, &view->catzs);
|
||||
dns_catz_zones_detach(&pview->catzs);
|
||||
dns_catz_prereconfig(view->catzs);
|
||||
} else {
|
||||
dns_catz_new_zones(view->mctx, named_g_loopmgr, &view->catzs,
|
||||
&ns_catz_zonemodmethods);
|
||||
view->catzs = dns_catz_zones_new(view->mctx, named_g_loopmgr,
|
||||
&ns_catz_zonemodmethods);
|
||||
}
|
||||
|
||||
while (zone_element != NULL) {
|
||||
@ -6725,7 +6693,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
|
||||
}
|
||||
|
||||
if (view->catzs != NULL &&
|
||||
dns_catz_get_zone(view->catzs, origin) != NULL)
|
||||
dns_catz_zone_get(view->catzs, origin) != NULL)
|
||||
{
|
||||
zone_is_catz = true;
|
||||
}
|
||||
|
@ -85,8 +85,7 @@ n=0
|
||||
n=$((n+1))
|
||||
echo_i "checking that catalog-bad1.example (with no version) has failed to load ($n)"
|
||||
ret=0
|
||||
wait_for_message ns2/named.run "catz: zone 'catalog-bad1.example' has no 'version' record" &&
|
||||
wait_for_message ns2/named.run "catz: new catalog zone 'catalog-bad1.example' is broken and will not be processed" || ret=1
|
||||
wait_for_message ns2/named.run "catz: zone 'catalog-bad1.example' has no 'version' record and will not be processed" &&
|
||||
if [ $ret -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status+ret))
|
||||
|
||||
@ -122,7 +121,7 @@ echo_i "checking that catalog-bad5.example (non-IN class) has failed to load ($n
|
||||
ret=0
|
||||
wait_for_message ns2/named.run "'catalog-zones' option is only supported for views with class IN" &&
|
||||
wait_for_message ns2/named.run "all zones loaded" || ret=1
|
||||
grep -F "catz: dns_catz_add_zone catalog-bad5.example" ns2/named.run && ret=1
|
||||
grep -F "catz: dns_catz_zone_add catalog-bad5.example" ns2/named.run && ret=1
|
||||
if [ $ret -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status+ret))
|
||||
|
||||
@ -2018,7 +2017,9 @@ status=$((status+ret))
|
||||
n=$((n+1))
|
||||
echo_i "waiting for secondary to sync up ($n)"
|
||||
ret=0
|
||||
wait_for_message ns2/named.run "catz: zone 'dom16.example' was expected to exist but can not be found, will be restored" || ret=1
|
||||
wait_for_message ns2/named.run "catz: update_from_db: new zone merged" || ret=1
|
||||
wait_for_message ns2/named.run "catz: catalog1.example: reload done: success" || ret=1
|
||||
if [ $ret -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status+ret))
|
||||
|
||||
@ -2030,6 +2031,13 @@ grep "192.0.2.1" dig.out.test$n > /dev/null || ret=1
|
||||
if [ $ret -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status+ret))
|
||||
|
||||
n=$((n+1))
|
||||
echo_i "checking that dom8.example. was not accidentally deleted during the configuration ($n)"
|
||||
ret=0
|
||||
_wait_for_message ns2/named.run "catz: zone 'dom8.example' was expected to exist but can not be found, will be restored" && ret=1
|
||||
if [ $ret -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status+ret))
|
||||
|
||||
nextpart ns2/named.run >/dev/null
|
||||
|
||||
n=$((n+1))
|
||||
|
241
lib/dns/catz.c
241
lib/dns/catz.c
@ -241,21 +241,20 @@ dns_catz_options_setdefault(isc_mem_t *mctx, const dns_catz_options_t *defaults,
|
||||
opts->in_memory = defaults->in_memory;
|
||||
}
|
||||
|
||||
static void
|
||||
catz_coo_new(isc_mem_t *mctx, const dns_name_t *domain,
|
||||
dns_catz_coo_t **ncoop) {
|
||||
dns_catz_coo_t *ncoo;
|
||||
|
||||
static dns_catz_coo_t *
|
||||
catz_coo_new(isc_mem_t *mctx, const dns_name_t *domain) {
|
||||
REQUIRE(mctx != NULL);
|
||||
REQUIRE(domain != NULL);
|
||||
REQUIRE(ncoop != NULL && *ncoop == NULL);
|
||||
|
||||
ncoo = isc_mem_get(mctx, sizeof(*ncoo));
|
||||
dns_catz_coo_t *ncoo = isc_mem_get(mctx, sizeof(*ncoo));
|
||||
*ncoo = (dns_catz_coo_t){
|
||||
.magic = DNS_CATZ_COO_MAGIC,
|
||||
};
|
||||
dns_name_init(&ncoo->name, NULL);
|
||||
dns_name_dup(domain, mctx, &ncoo->name);
|
||||
isc_refcount_init(&ncoo->references, 1);
|
||||
ncoo->magic = DNS_CATZ_COO_MAGIC;
|
||||
*ncoop = ncoo;
|
||||
|
||||
return (ncoo);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -278,15 +277,33 @@ catz_coo_detach(dns_catz_zone_t *catz, dns_catz_coo_t **coop) {
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain,
|
||||
dns_catz_entry_t **nentryp) {
|
||||
dns_catz_entry_t *nentry;
|
||||
static void
|
||||
catz_coo_add(dns_catz_zone_t *catz, dns_catz_entry_t *entry,
|
||||
const dns_name_t *domain) {
|
||||
REQUIRE(DNS_CATZ_ZONE_VALID(catz));
|
||||
REQUIRE(DNS_CATZ_ENTRY_VALID(entry));
|
||||
REQUIRE(domain != NULL);
|
||||
|
||||
/* We are write locked, so the add must succeed if not found */
|
||||
dns_catz_coo_t *coo = NULL;
|
||||
isc_result_t result = isc_ht_find(catz->coos, entry->name.ndata,
|
||||
entry->name.length, (void **)&coo);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
coo = catz_coo_new(catz->catzs->mctx, domain);
|
||||
result = isc_ht_add(catz->coos, entry->name.ndata,
|
||||
entry->name.length, coo);
|
||||
}
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
dns_catz_entry_t *
|
||||
dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain) {
|
||||
REQUIRE(mctx != NULL);
|
||||
REQUIRE(nentryp != NULL && *nentryp == NULL);
|
||||
|
||||
nentry = isc_mem_get(mctx, sizeof(*nentry));
|
||||
dns_catz_entry_t *nentry = isc_mem_get(mctx, sizeof(*nentry));
|
||||
*nentry = (dns_catz_entry_t){
|
||||
.magic = DNS_CATZ_ENTRY_MAGIC,
|
||||
};
|
||||
|
||||
dns_name_init(&nentry->name, NULL);
|
||||
if (domain != NULL) {
|
||||
@ -295,8 +312,8 @@ dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain,
|
||||
|
||||
dns_catz_options_init(&nentry->opts);
|
||||
isc_refcount_init(&nentry->references, 1);
|
||||
nentry->magic = DNS_CATZ_ENTRY_MAGIC;
|
||||
*nentryp = nentry;
|
||||
|
||||
return (nentry);
|
||||
}
|
||||
|
||||
dns_name_t *
|
||||
@ -305,19 +322,17 @@ dns_catz_entry_getname(dns_catz_entry_t *entry) {
|
||||
return (&entry->name);
|
||||
}
|
||||
|
||||
void
|
||||
dns_catz_entry_copy(dns_catz_zone_t *catz, const dns_catz_entry_t *entry,
|
||||
dns_catz_entry_t **nentryp) {
|
||||
dns_catz_entry_t *nentry = NULL;
|
||||
|
||||
dns_catz_entry_t *
|
||||
dns_catz_entry_copy(dns_catz_zone_t *catz, const dns_catz_entry_t *entry) {
|
||||
REQUIRE(DNS_CATZ_ZONE_VALID(catz));
|
||||
REQUIRE(DNS_CATZ_ENTRY_VALID(entry));
|
||||
REQUIRE(nentryp != NULL && *nentryp == NULL);
|
||||
|
||||
dns_catz_entry_new(catz->catzs->mctx, &entry->name, &nentry);
|
||||
dns_catz_entry_t *nentry = dns_catz_entry_new(catz->catzs->mctx,
|
||||
&entry->name);
|
||||
|
||||
dns_catz_options_copy(catz->catzs->mctx, &entry->opts, &nentry->opts);
|
||||
*nentryp = nentry;
|
||||
|
||||
return (nentry);
|
||||
}
|
||||
|
||||
void
|
||||
@ -767,17 +782,14 @@ dns__catz_zones_merge(dns_catz_zone_t *catz, dns_catz_zone_t *newcatz) {
|
||||
return (result);
|
||||
}
|
||||
|
||||
void
|
||||
dns_catz_new_zones(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
||||
dns_catz_zones_t **catzsp, dns_catz_zonemodmethods_t *zmm) {
|
||||
dns_catz_zones_t *catzs = NULL;
|
||||
|
||||
dns_catz_zones_t *
|
||||
dns_catz_zones_new(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
||||
dns_catz_zonemodmethods_t *zmm) {
|
||||
REQUIRE(mctx != NULL);
|
||||
REQUIRE(loopmgr != NULL);
|
||||
REQUIRE(catzsp != NULL && *catzsp == NULL);
|
||||
REQUIRE(zmm != NULL);
|
||||
|
||||
catzs = isc_mem_get(mctx, sizeof(*catzs));
|
||||
dns_catz_zones_t *catzs = isc_mem_get(mctx, sizeof(*catzs));
|
||||
*catzs = (dns_catz_zones_t){ .loopmgr = loopmgr,
|
||||
.zmm = zmm,
|
||||
.magic = DNS_CATZ_ZONES_MAGIC };
|
||||
@ -787,7 +799,7 @@ dns_catz_new_zones(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
||||
isc_ht_init(&catzs->zones, mctx, 4, ISC_HT_CASE_SENSITIVE);
|
||||
isc_mem_attach(mctx, &catzs->mctx);
|
||||
|
||||
*catzsp = catzs;
|
||||
return (catzs);
|
||||
}
|
||||
|
||||
void
|
||||
@ -800,16 +812,12 @@ dns_catz_catzs_set_view(dns_catz_zones_t *catzs, dns_view_t *view) {
|
||||
catzs->view = view;
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **catzp,
|
||||
const dns_name_t *name) {
|
||||
dns_catz_zone_t *catz;
|
||||
|
||||
dns_catz_zone_t *
|
||||
dns_catz_zone_new(dns_catz_zones_t *catzs, const dns_name_t *name) {
|
||||
REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
|
||||
REQUIRE(catzp != NULL && *catzp == NULL);
|
||||
REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
|
||||
|
||||
catz = isc_mem_get(catzs->mctx, sizeof(*catz));
|
||||
dns_catz_zone_t *catz = isc_mem_get(catzs->mctx, sizeof(*catz));
|
||||
*catz = (dns_catz_zone_t){ .active = true,
|
||||
.version = DNS_CATZ_VERSION_UNDEFINED,
|
||||
.magic = DNS_CATZ_ZONE_MAGIC };
|
||||
@ -825,9 +833,7 @@ dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **catzp,
|
||||
dns_name_init(&catz->name, NULL);
|
||||
dns_name_dup(name, catzs->mctx, &catz->name);
|
||||
|
||||
*catzp = catz;
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
return (catz);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -872,57 +878,54 @@ dns__catz_timer_stop(void *arg) {
|
||||
isc_timer_destroy(&catz->updatetimer);
|
||||
catz->loop = NULL;
|
||||
|
||||
dns_catz_detach_catz(&catz);
|
||||
dns_catz_zone_detach(&catz);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_catz_add_zone(dns_catz_zones_t *catzs, const dns_name_t *name,
|
||||
dns_catz_zone_add(dns_catz_zones_t *catzs, const dns_name_t *name,
|
||||
dns_catz_zone_t **catzp) {
|
||||
dns_catz_zone_t *catz = NULL;
|
||||
isc_result_t result, tresult;
|
||||
char zname[DNS_NAME_FORMATSIZE];
|
||||
|
||||
REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
|
||||
REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
|
||||
REQUIRE(catzp != NULL && *catzp == NULL);
|
||||
|
||||
dns_catz_zone_t *catz = NULL;
|
||||
isc_result_t result;
|
||||
char zname[DNS_NAME_FORMATSIZE];
|
||||
|
||||
dns_name_format(name, zname, DNS_NAME_FORMATSIZE);
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_MASTER,
|
||||
ISC_LOG_DEBUG(3), "catz: dns_catz_add_zone %s", zname);
|
||||
ISC_LOG_DEBUG(3), "catz: dns_catz_zone_add %s", zname);
|
||||
|
||||
LOCK(&catzs->lock);
|
||||
|
||||
result = dns_catz_new_zone(catzs, &catz, name);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
result = isc_ht_add(catzs->zones, catz->name.ndata, catz->name.length,
|
||||
catz);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
dns_catz_detach_catz(&catz);
|
||||
if (result != ISC_R_EXISTS) {
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == ISC_R_EXISTS) {
|
||||
tresult = isc_ht_find(catzs->zones, name->ndata, name->length,
|
||||
(void **)&catz);
|
||||
INSIST(tresult == ISC_R_SUCCESS && !catz->active);
|
||||
result = isc_ht_find(catzs->zones, name->ndata, name->length,
|
||||
(void **)&catz);
|
||||
switch (result) {
|
||||
case ISC_R_SUCCESS:
|
||||
INSIST(!catz->active);
|
||||
catz->active = true;
|
||||
result = ISC_R_EXISTS;
|
||||
break;
|
||||
case ISC_R_NOTFOUND:
|
||||
catz = dns_catz_zone_new(catzs, name);
|
||||
|
||||
result = isc_ht_add(catzs->zones, catz->name.ndata,
|
||||
catz->name.length, catz);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
UNLOCK(&catzs->lock);
|
||||
|
||||
*catzp = catz;
|
||||
|
||||
cleanup:
|
||||
UNLOCK(&catzs->lock);
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
dns_catz_zone_t *
|
||||
dns_catz_get_zone(dns_catz_zones_t *catzs, const dns_name_t *name) {
|
||||
dns_catz_zone_get(dns_catz_zones_t *catzs, const dns_name_t *name) {
|
||||
isc_result_t result;
|
||||
dns_catz_zone_t *found = NULL;
|
||||
|
||||
@ -941,7 +944,7 @@ dns_catz_get_zone(dns_catz_zones_t *catzs, const dns_name_t *name) {
|
||||
}
|
||||
|
||||
static void
|
||||
dns__catz_shutdown(dns_catz_zone_t *catz) {
|
||||
dns__catz_zone_shutdown(dns_catz_zone_t *catz) {
|
||||
/* lock must be locked */
|
||||
if (catz->updatetimer != NULL) {
|
||||
/* Don't wait for timer to trigger for shutdown */
|
||||
@ -949,7 +952,7 @@ dns__catz_shutdown(dns_catz_zone_t *catz) {
|
||||
|
||||
isc_async_run(catz->loop, dns__catz_timer_stop, catz);
|
||||
} else {
|
||||
dns_catz_detach_catz(&catz);
|
||||
dns_catz_zone_detach(&catz);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1038,7 +1041,7 @@ dns__catz_zones_destroy(dns_catz_zones_t *catzs) {
|
||||
}
|
||||
|
||||
void
|
||||
dns_catz_shutdown_catzs(dns_catz_zones_t *catzs) {
|
||||
dns_catz_zones_shutdown(dns_catz_zones_t *catzs) {
|
||||
REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
|
||||
|
||||
if (!atomic_compare_exchange_strong(&catzs->shuttingdown,
|
||||
@ -1057,7 +1060,7 @@ dns_catz_shutdown_catzs(dns_catz_zones_t *catzs) {
|
||||
dns_catz_zone_t *catz = NULL;
|
||||
isc_ht_iter_current(iter, (void **)&catz);
|
||||
result = isc_ht_iter_delcurrent_next(iter);
|
||||
dns__catz_shutdown(catz);
|
||||
dns__catz_zone_shutdown(catz);
|
||||
}
|
||||
INSIST(result == ISC_R_NOMORE);
|
||||
isc_ht_iter_destroy(&iter);
|
||||
@ -1156,8 +1159,6 @@ catz_process_coo(dns_catz_zone_t *catz, dns_label_t *mhash,
|
||||
dns_rdata_t rdata;
|
||||
dns_rdata_ptr_t ptr;
|
||||
dns_catz_entry_t *entry = NULL;
|
||||
dns_catz_coo_t *ncoo = NULL;
|
||||
dns_catz_coo_t *ocoo = NULL;
|
||||
|
||||
REQUIRE(DNS_CATZ_ZONE_VALID(catz));
|
||||
REQUIRE(mhash != NULL);
|
||||
@ -1211,19 +1212,7 @@ catz_process_coo(dns_catz_zone_t *catz, dns_label_t *mhash,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
result = isc_ht_find(catz->coos, entry->name.ndata, entry->name.length,
|
||||
(void **)&ocoo);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
/* The change of ownership permission was already registered. */
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
catz_coo_new(catz->catzs->mctx, &ptr.ptr, &ncoo);
|
||||
result = isc_ht_add(catz->coos, entry->name.ndata, entry->name.length,
|
||||
ncoo);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
catz_coo_detach(catz, &ncoo);
|
||||
}
|
||||
catz_coo_add(catz, entry, &ptr.ptr);
|
||||
|
||||
cleanup:
|
||||
dns_rdata_freestruct(&ptr);
|
||||
@ -1276,16 +1265,12 @@ catz_process_zones_entry(dns_catz_zone_t *catz, dns_rdataset_t *value,
|
||||
dns_name_dup(&ptr.ptr, catz->catzs->mctx, &entry->name);
|
||||
}
|
||||
} else {
|
||||
dns_catz_entry_new(catz->catzs->mctx, &ptr.ptr, &entry);
|
||||
entry = dns_catz_entry_new(catz->catzs->mctx, &ptr.ptr);
|
||||
|
||||
result = isc_ht_add(catz->entries, mhash->base, mhash->length,
|
||||
entry);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
dns_rdata_freestruct(&ptr);
|
||||
dns_catz_entry_detach(catz, &entry);
|
||||
return (result);
|
||||
}
|
||||
}
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
|
||||
dns_rdata_freestruct(&ptr);
|
||||
|
||||
@ -1673,14 +1658,11 @@ catz_process_zones_suboption(dns_catz_zone_t *catz, dns_rdataset_t *value,
|
||||
result = isc_ht_find(catz->entries, mhash->base, mhash->length,
|
||||
(void **)&entry);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
dns_catz_entry_new(catz->catzs->mctx, NULL, &entry);
|
||||
entry = dns_catz_entry_new(catz->catzs->mctx, NULL);
|
||||
result = isc_ht_add(catz->entries, mhash->base, mhash->length,
|
||||
entry);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
dns_catz_entry_detach(catz, &entry);
|
||||
return (result);
|
||||
}
|
||||
}
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
|
||||
dns_name_init(&prefix, NULL);
|
||||
dns_name_split(name, suffix_labels, &prefix, NULL);
|
||||
@ -2113,7 +2095,7 @@ dns__catz_timer_cb(void *arg) {
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_MASTER,
|
||||
ISC_LOG_INFO, "catz: %s: reload start", domain);
|
||||
|
||||
dns_catz_ref_catz(catz);
|
||||
dns_catz_zone_ref(catz);
|
||||
isc_work_enqueue(catz->loop, dns__catz_update_cb, dns__catz_done_cb,
|
||||
catz);
|
||||
|
||||
@ -2306,18 +2288,8 @@ dns__catz_update_cb(void *data) {
|
||||
"catz: updating catalog zone '%s' with serial %" PRIu32,
|
||||
bname, vers);
|
||||
|
||||
result = dns_catz_new_zone(catzs, &newcatz, &updb->origin);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
DNS_LOGMODULE_MASTER, ISC_LOG_ERROR,
|
||||
"catz: failed to create new zone - %s",
|
||||
isc_result_totext(result));
|
||||
goto exit;
|
||||
}
|
||||
|
||||
result = dns_db_createiterator(updb, DNS_DB_NONSEC3, &updbit);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
dns_catz_detach_catz(&newcatz);
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
DNS_LOGMODULE_MASTER, ISC_LOG_ERROR,
|
||||
"catz: failed to create DB iterator - %s",
|
||||
@ -2335,24 +2307,25 @@ dns__catz_update_cb(void *data) {
|
||||
result = dns_name_fromstring2(name, "version", &updb->origin, 0, NULL);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
dns_dbiterator_destroy(&updbit);
|
||||
dns_catz_detach_catz(&newcatz);
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
DNS_LOGMODULE_MASTER, ISC_LOG_ERROR,
|
||||
"catz: failed to create name from string - %s",
|
||||
isc_result_totext(result));
|
||||
goto exit;
|
||||
}
|
||||
|
||||
result = dns_dbiterator_seek(updbit, name);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
dns_dbiterator_destroy(&updbit);
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
DNS_LOGMODULE_MASTER, ISC_LOG_ERROR,
|
||||
"catz: zone '%s' has no 'version' record (%s)",
|
||||
"catz: zone '%s' has no 'version' record (%s) "
|
||||
"and will not be processed",
|
||||
bname, isc_result_totext(result));
|
||||
newcatz->broken = true;
|
||||
goto final;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
newcatz = dns_catz_zone_new(catzs, &updb->origin);
|
||||
name = dns_fixedname_initname(&fixname);
|
||||
|
||||
/*
|
||||
@ -2486,7 +2459,6 @@ dns__catz_update_cb(void *data) {
|
||||
oldcatz->version = catz_vers;
|
||||
}
|
||||
|
||||
final:
|
||||
if (newcatz->broken) {
|
||||
dns_name_format(name, cname, DNS_NAME_FORMATSIZE);
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
@ -2494,7 +2466,7 @@ final:
|
||||
"catz: new catalog zone '%s' is broken and "
|
||||
"will not be processed",
|
||||
bname);
|
||||
dns_catz_detach_catz(&newcatz);
|
||||
dns_catz_zone_detach(&newcatz);
|
||||
result = ISC_R_FAILURE;
|
||||
goto exit;
|
||||
}
|
||||
@ -2503,7 +2475,7 @@ final:
|
||||
* Finally merge new zone into old zone.
|
||||
*/
|
||||
result = dns__catz_zones_merge(oldcatz, newcatz);
|
||||
dns_catz_detach_catz(&newcatz);
|
||||
dns_catz_zone_detach(&newcatz);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
DNS_LOGMODULE_MASTER, ISC_LOG_ERROR,
|
||||
@ -2563,7 +2535,7 @@ dns__catz_done_cb(void *data) {
|
||||
ISC_LOG_INFO, "catz: %s: reload done: %s", dname,
|
||||
isc_result_totext(catz->updateresult));
|
||||
|
||||
dns_catz_unref_catz(catz);
|
||||
dns_catz_zone_unref(catz);
|
||||
}
|
||||
|
||||
void
|
||||
@ -2613,16 +2585,14 @@ dns_catz_postreconfig(dns_catz_zones_t *catzs) {
|
||||
* Merge the old zone with an empty one to remove
|
||||
* all members.
|
||||
*/
|
||||
result = dns_catz_new_zone(catzs, &newcatz,
|
||||
&catz->name);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
newcatz = dns_catz_zone_new(catzs, &catz->name);
|
||||
dns__catz_zones_merge(catz, newcatz);
|
||||
dns_catz_detach_catz(&newcatz);
|
||||
dns_catz_zone_detach(&newcatz);
|
||||
|
||||
/* Make sure that we have an empty catalog zone. */
|
||||
INSIST(isc_ht_count(catz->entries) == 0);
|
||||
result = isc_ht_iter_delcurrent_next(iter);
|
||||
dns_catz_detach_catz(&catz);
|
||||
dns_catz_zone_detach(&catz);
|
||||
} else {
|
||||
result = isc_ht_iter_next(iter);
|
||||
}
|
||||
@ -2633,8 +2603,23 @@ dns_catz_postreconfig(dns_catz_zones_t *catzs) {
|
||||
}
|
||||
|
||||
void
|
||||
dns_catz_get_iterator(dns_catz_zone_t *catz, isc_ht_iter_t **itp) {
|
||||
dns_catz_zone_for_each_entry2(dns_catz_zone_t *catz, dns_catz_entry_cb2 cb,
|
||||
void *arg1, void *arg2) {
|
||||
REQUIRE(DNS_CATZ_ZONE_VALID(catz));
|
||||
|
||||
isc_ht_iter_create(catz->entries, itp);
|
||||
isc_ht_iter_t *iter = NULL;
|
||||
isc_result_t result;
|
||||
|
||||
LOCK(&catz->catzs->lock);
|
||||
isc_ht_iter_create(catz->entries, &iter);
|
||||
for (result = isc_ht_iter_first(iter); result == ISC_R_SUCCESS;
|
||||
result = isc_ht_iter_next(iter))
|
||||
{
|
||||
dns_catz_entry_t *entry = NULL;
|
||||
|
||||
isc_ht_iter_current(iter, (void **)&entry);
|
||||
cb(entry, arg1, arg2);
|
||||
}
|
||||
isc_ht_iter_destroy(&iter);
|
||||
UNLOCK(&catz->catzs->lock);
|
||||
}
|
||||
|
@ -132,32 +132,28 @@ dns_catz_entry_getname(dns_catz_entry_t *entry);
|
||||
* \li domain name for entry.
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain,
|
||||
dns_catz_entry_t **nentryp);
|
||||
dns_catz_entry_t *
|
||||
dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain);
|
||||
/*%<
|
||||
* Allocate a new catz_entry on 'mctx', with the name 'domain'
|
||||
*
|
||||
* Requires:
|
||||
* \li 'mctx' to be a valid memory context.
|
||||
* \li 'domain' to be valid dns_name or NULL.
|
||||
* \li 'nentryp' to be non NULL, *nentryp to be NULL.
|
||||
*
|
||||
* Returns:
|
||||
* \li ISC_R_SUCCESS on success
|
||||
* \li ISC_R_NOMEMORY on allocation failure
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_entry_copy(dns_catz_zone_t *catz, const dns_catz_entry_t *entry,
|
||||
dns_catz_entry_t **nentryp);
|
||||
dns_catz_entry_t *
|
||||
dns_catz_entry_copy(dns_catz_zone_t *catz, const dns_catz_entry_t *entry);
|
||||
/*%<
|
||||
* Allocate a new catz_entry and deep copy 'entry' into 'nentryp'.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'mctx' to be a valid memory context.
|
||||
* \li 'entry' to be non NULL.
|
||||
* \li 'nentryp' to be non NULL, *nentryp to be NULL.
|
||||
*
|
||||
* Returns:
|
||||
* \li ISC_R_SUCCESS on success
|
||||
@ -208,9 +204,8 @@ dns_catz_entry_cmp(const dns_catz_entry_t *ea, const dns_catz_entry_t *eb);
|
||||
* \li 'false' if the entries differ.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **catzp,
|
||||
const dns_name_t *name);
|
||||
dns_catz_zone_t *
|
||||
dns_catz_zone_new(dns_catz_zones_t *catzs, const dns_name_t *name);
|
||||
/*%<
|
||||
* Allocate a new catz zone on catzs mctx
|
||||
*
|
||||
@ -291,9 +286,9 @@ struct dns_catz_zonemodmethods {
|
||||
void *udata;
|
||||
};
|
||||
|
||||
void
|
||||
dns_catz_new_zones(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
||||
dns_catz_zones_t **catzsp, dns_catz_zonemodmethods_t *zmm);
|
||||
dns_catz_zones_t *
|
||||
dns_catz_zones_new(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
||||
dns_catz_zonemodmethods_t *zmm);
|
||||
/*%<
|
||||
* Allocate a new catz_zones object, a collection storing all catalog zones
|
||||
* for a view.
|
||||
@ -307,7 +302,7 @@ dns_catz_new_zones(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
dns_catz_add_zone(dns_catz_zones_t *catzs, const dns_name_t *name,
|
||||
dns_catz_zone_add(dns_catz_zones_t *catzs, const dns_name_t *name,
|
||||
dns_catz_zone_t **catzp);
|
||||
/*%<
|
||||
* Allocate a new catz named 'name' and put it in 'catzs' collection.
|
||||
@ -320,7 +315,7 @@ dns_catz_add_zone(dns_catz_zones_t *catzs, const dns_name_t *name,
|
||||
*/
|
||||
|
||||
dns_catz_zone_t *
|
||||
dns_catz_get_zone(dns_catz_zones_t *catzs, const dns_name_t *name);
|
||||
dns_catz_zone_get(dns_catz_zones_t *catzs, const dns_name_t *name);
|
||||
/*%<
|
||||
* Returns a zone named 'name' from collection 'catzs'
|
||||
*
|
||||
@ -355,7 +350,7 @@ dns_catz_dbupdate_callback(dns_db_t *db, void *fn_arg);
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_dbupdate_unregister(dns_db_t *db, dns_catz_zones_t *catzs);
|
||||
dns_catz_dbupdate_register(dns_db_t *db, dns_catz_zones_t *catzs);
|
||||
/*%<
|
||||
* Register the catalog zone database update notify callback.
|
||||
*
|
||||
@ -365,7 +360,7 @@ dns_catz_dbupdate_unregister(dns_db_t *db, dns_catz_zones_t *catzs);
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_dbupdate_register(dns_db_t *db, dns_catz_zones_t *catzs);
|
||||
dns_catz_dbupdate_unregister(dns_db_t *db, dns_catz_zones_t *catzs);
|
||||
/*%<
|
||||
* Unregister the catalog zone database update notify callback.
|
||||
*
|
||||
@ -395,18 +390,7 @@ dns_catz_postreconfig(dns_catz_zones_t *catzs);
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_get_iterator(dns_catz_zone_t *catz, isc_ht_iter_t **itp);
|
||||
/*%<
|
||||
* Get the hashtable iterator on catalog zone members, point '*itp' to it.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'catzs' is a valid dns_catz_zones_t.
|
||||
* \li 'itp' is not NULL and '*itp' is NULL.
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_shutdown_catzs(dns_catz_zones_t *catzs);
|
||||
dns_catz_zones_shutdown(dns_catz_zones_t *catzs);
|
||||
/*%<
|
||||
* Shut down the catalog zones.
|
||||
*
|
||||
@ -415,41 +399,43 @@ dns_catz_shutdown_catzs(dns_catz_zones_t *catzs);
|
||||
*
|
||||
*/
|
||||
|
||||
typedef void (*dns_catz_entry_cb2)(dns_catz_entry_t *entry, void *arg1,
|
||||
void *arg2);
|
||||
|
||||
void
|
||||
dns_catz_zone_for_each_entry2(dns_catz_zone_t *catz, dns_catz_entry_cb2 cb,
|
||||
void *arg1, void *arg2);
|
||||
/*%<
|
||||
* Iterate on the catalog zone members, call 'cb' on each 'entry'.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'catz' is a valid dns_catz_zones_t.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef DNS_CATZ_TRACE
|
||||
/* Compatibility macros */
|
||||
#define dns_catz_attach_catz(catz, catzp) \
|
||||
#define dns_catz_zone_attach(catz, catzp) \
|
||||
dns_catz_zone__attach(catz, catzp, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_detach_catz(catzp) \
|
||||
#define dns_catz_zone_detach(catzp) \
|
||||
dns_catz_zone__detach(catzp, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_ref_catz(ptr) \
|
||||
#define dns_catz_zone_ref(ptr) \
|
||||
dns_catz_zone__ref(ptr, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_unref_catz(ptr) \
|
||||
#define dns_catz_zone_unref(ptr) \
|
||||
dns_catz_zone__unref(ptr, __func__, __FILE__, __LINE__)
|
||||
|
||||
#define dns_catz_attach_catzs(catzs, catzsp) \
|
||||
#define dns_catz_zones_attach(catzs, catzsp) \
|
||||
dns_catz_zones__attach(catzs, catzsp, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_detach_catzs(catzsp) \
|
||||
#define dns_catz_zones_detach(catzsp) \
|
||||
dns_catz_zones__detach(catzsp, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_ref_catzs(ptr) \
|
||||
#define dns_catz_zones_ref(ptr) \
|
||||
dns_catz_zones__ref(ptr, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_unref_catzs(ptr) \
|
||||
#define dns_catz_zones_unref(ptr) \
|
||||
dns_catz_zones__unref(ptr, __func__, __FILE__, __LINE__)
|
||||
|
||||
ISC_REFCOUNT_TRACE_DECL(dns_catz_zone);
|
||||
ISC_REFCOUNT_TRACE_DECL(dns_catz_zones);
|
||||
#else
|
||||
/* Compatibility macros */
|
||||
#define dns_catz_attach_catz(catz, catzp) dns_catz_zone_attach(catz, catzp)
|
||||
#define dns_catz_detach_catz(catzp) dns_catz_zone_detach(catzp)
|
||||
#define dns_catz_ref_catz(ptr) dns_catz_zone_ref(ptr)
|
||||
#define dns_catz_unref_catz(ptr) dns_catz_zone_unref(ptr)
|
||||
|
||||
#define dns_catz_attach_catzs(catzs, catzsp) \
|
||||
dns_catz_zones_attach(catzs, catzsp)
|
||||
#define dns_catz_detach_catzs(catzsp) dns_catz_zones_detach(catzsp)
|
||||
#define dns_catz_ref_catzs(ptr) dns_catz_zones_ref(ptr)
|
||||
#define dns_catz_unref_catzs(ptr) dns_catz_zones_unref(ptr)
|
||||
|
||||
ISC_REFCOUNT_DECL(dns_catz_zone);
|
||||
ISC_REFCOUNT_DECL(dns_catz_zones);
|
||||
#endif /* DNS_CATZ_TRACE */
|
||||
|
@ -2469,7 +2469,7 @@ dns_zone_set_parentcatz(dns_zone_t *zone, dns_catz_zone_t *catz);
|
||||
*/
|
||||
|
||||
dns_catz_zone_t *
|
||||
dns_zone_get_parentcatz(const dns_zone_t *zone);
|
||||
dns_zone_get_parentcatz(dns_zone_t *zone);
|
||||
/*%<
|
||||
* Get parent catalog zone for this zone
|
||||
*
|
||||
|
@ -286,8 +286,8 @@ destroy(dns_view_t *view) {
|
||||
dns_rpz_detach_rpzs(&view->rpzs);
|
||||
}
|
||||
if (view->catzs != NULL) {
|
||||
dns_catz_shutdown_catzs(view->catzs);
|
||||
dns_catz_detach_catzs(&view->catzs);
|
||||
dns_catz_zones_shutdown(view->catzs);
|
||||
dns_catz_zones_detach(&view->catzs);
|
||||
}
|
||||
for (dlzdb = ISC_LIST_HEAD(view->dlz_searched); dlzdb != NULL;
|
||||
dlzdb = ISC_LIST_HEAD(view->dlz_searched))
|
||||
@ -514,8 +514,8 @@ dns_view_detach(dns_view_t **viewp) {
|
||||
}
|
||||
}
|
||||
if (view->catzs != NULL) {
|
||||
dns_catz_shutdown_catzs(view->catzs);
|
||||
dns_catz_detach_catzs(&view->catzs);
|
||||
dns_catz_zones_shutdown(view->catzs);
|
||||
dns_catz_zones_detach(&view->catzs);
|
||||
}
|
||||
if (view->ntatable_priv != NULL) {
|
||||
dns_ntatable_shutdown(view->ntatable_priv);
|
||||
|
@ -1301,7 +1301,7 @@ zone_free(dns_zone_t *zone) {
|
||||
zone->rpz_num = DNS_RPZ_INVALID_NUM;
|
||||
}
|
||||
if (zone->catzs != NULL) {
|
||||
dns_catz_detach_catzs(&zone->catzs);
|
||||
dns_catz_zones_detach(&zone->catzs);
|
||||
}
|
||||
zone_freedbargs(zone);
|
||||
|
||||
@ -1961,7 +1961,7 @@ zone_catz_enable(dns_zone_t *zone, dns_catz_zones_t *catzs) {
|
||||
INSIST(zone->catzs == NULL || zone->catzs == catzs);
|
||||
dns_catz_catzs_set_view(catzs, zone->view);
|
||||
if (zone->catzs == NULL) {
|
||||
dns_catz_attach_catzs(catzs, &zone->catzs);
|
||||
dns_catz_zones_attach(catzs, &zone->catzs);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1982,7 +1982,7 @@ zone_catz_disable(dns_zone_t *zone) {
|
||||
if (zone->db != NULL) {
|
||||
dns_zone_catz_disable_db(zone, zone->db);
|
||||
}
|
||||
dns_catz_detach_catzs(&zone->catzs);
|
||||
dns_catz_zones_detach(&zone->catzs);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2016,9 +2016,16 @@ dns_zone_set_parentcatz(dns_zone_t *zone, dns_catz_zone_t *catz) {
|
||||
}
|
||||
|
||||
dns_catz_zone_t *
|
||||
dns_zone_get_parentcatz(const dns_zone_t *zone) {
|
||||
dns_zone_get_parentcatz(dns_zone_t *zone) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return (zone->parentcatz);
|
||||
|
||||
dns_catz_zone_t *parentcatz = NULL;
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
parentcatz = zone->parentcatz;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return (parentcatz);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
Loading…
x
Reference in New Issue
Block a user