From: phonedph1 Date: Thu, 23 Aug 2018 17:27:02 +0000 (+0000) Subject: Purge all auth/forward zone data including subtree. X-Git-Tag: dnsdist-1.3.3~138^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F6873%2Fhead;p=thirdparty%2Fpdns.git Purge all auth/forward zone data including subtree. Previously this would miss purging out removed entries/data. --- diff --git a/pdns/reczones.cc b/pdns/reczones.cc index 15bad547ef..e2625c4e30 100644 --- a/pdns/reczones.cc +++ b/pdns/reczones.cc @@ -245,13 +245,6 @@ string reloadAuthAndForwards() try { g_log<(boost::bind(pleaseWipeCache, j.d_name, false)); - } - } - string configname=::arg()["config-dir"]+"/recursor.conf"; if(::arg()["config-name"]!="") { configname=::arg()["config-dir"]+"/recursor-"+::arg()["config-name"]+".conf"; @@ -290,12 +283,23 @@ string reloadAuthAndForwards() ::arg().preParse(g_argc, g_argv, "serve-rfc1918"); std::shared_ptr newDomainMap = parseAuthAndForwards(); - - // purge again - new zones need to blank out the cache + + // purge both original and new names + std::set oldAndNewDomains; for(const auto& i : *newDomainMap) { - broadcastAccFunction(boost::bind(pleaseWipeCache, i.first, true)); - broadcastAccFunction(boost::bind(pleaseWipePacketCache, i.first, true)); - broadcastAccFunction(boost::bind(pleaseWipeAndCountNegCache, i.first, true)); + oldAndNewDomains.insert(i.first); + } + + if(original) { + for(const auto& i : *original) { + oldAndNewDomains.insert(i.first); + } + } + + for(const auto i : oldAndNewDomains) { + broadcastAccFunction(boost::bind(pleaseWipeCache, i, true)); + broadcastAccFunction(boost::bind(pleaseWipePacketCache, i, true)); + broadcastAccFunction(boost::bind(pleaseWipeAndCountNegCache, i, true)); } broadcastFunction(boost::bind(pleaseUseNewSDomainsMap, newDomainMap));