From 121a095a22302472bc545476ea64f6b79bef9da6 Mon Sep 17 00:00:00 2001 From: Aram Sargsyan Date: Fri, 17 Feb 2023 12:41:29 +0000 Subject: [PATCH] Detach rpzs and catzs from the previous view When switching to a new view during a reconfiguration (or reverting to the old view), detach the 'rpzs' and 'catzs' from the previuos view. The 'catzs' case was earlier solved slightly differently, by detaching from the new view when reverting to the old view, but we can not solve this the same way for 'rpzs', because now in BIND 9.19 and BIND 9.18 a dns_rpz_shutdown_rpzs() call was added in view's destroy() function before detaching the 'rpzs', so we can not leave the 'rpzs' attached to the previous view and let it be shut down when we intend to continue using it with the new view. Instead, "re-fix" the issue for the 'catzs' pointer the same way as for 'rpzs' for consistency, and also because a similar shutdown call is likely to be implemented for 'catzs' in the near future. --- bin/named/server.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/named/server.c b/bin/named/server.c index 87df9669b3..44d706bdc0 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -2646,6 +2646,7 @@ configure_rpz(dns_view_t *view, dns_view_t *pview, const cfg_obj_t **maps, dns_rpz_shutdown_rpzs(view->rpzs); dns_rpz_detach_rpzs(&view->rpzs); dns_rpz_attach_rpzs(pview->rpzs, &view->rpzs); + dns_rpz_detach_rpzs(&pview->rpzs); } else if (old != NULL && pview != NULL) { ++pview->rpzs->rpz_ver; view->rpzs->rpz_ver = pview->rpzs->rpz_ver; @@ -3179,6 +3180,7 @@ configure_catz(dns_view_t *view, dns_view_t *pview, const cfg_obj_t *config, if (old != NULL) { dns_catz_catzs_detach(&view->catzs); dns_catz_catzs_attach(pview->catzs, &view->catzs); + dns_catz_catzs_detach(&pview->catzs); dns_catz_prereconfig(view->catzs); } @@ -6012,9 +6014,6 @@ cleanup: named_config_get(maps, "catalog-zones", &obj) == ISC_R_SUCCESS) { - if (pview->catzs != NULL) { - dns_catz_catzs_detach(&pview->catzs); - } /* * We are swapping the places of the `view` and * `pview` in the function's parameters list