From 7c36d5ec688323d57ce3a0d5ffbf32c35809522b Mon Sep 17 00:00:00 2001 From: Pieter Lexis Date: Tue, 23 Aug 2016 13:40:37 +0200 Subject: [PATCH] RPZ: Use query-local-address(6) for IXFR as well --- pdns/rec-lua-conf.cc | 2 +- pdns/reczones.cc | 9 +++++++-- pdns/rpzloader.hh | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pdns/rec-lua-conf.cc b/pdns/rec-lua-conf.cc index 54548b1b9c..a140198101 100644 --- a/pdns/rec-lua-conf.cc +++ b/pdns/rec-lua-conf.cc @@ -181,7 +181,7 @@ void loadRecursorLuaConfig(const std::string& fname) auto sr=loadRPZFromServer(master, zone, lci.dfe, polName, defpol, 0, tt, maxReceivedXFRMBytes * 1024 * 1024, localAddress); if(refresh) sr->d_st.refresh=refresh; - std::thread t(RPZIXFRTracker, master, zone, polName, tt, sr, maxReceivedXFRMBytes * 1024 * 1024); + std::thread t(RPZIXFRTracker, master, zone, polName, tt, sr, maxReceivedXFRMBytes * 1024 * 1024, localAddress); t.detach(); } catch(std::exception& e) { diff --git a/pdns/reczones.cc b/pdns/reczones.cc index 3cd3c9e5b8..b63f589f60 100644 --- a/pdns/reczones.cc +++ b/pdns/reczones.cc @@ -311,7 +311,7 @@ string reloadAuthAndForwards() } -void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std::string& polName, const TSIGTriplet& tt, shared_ptr oursr, size_t maxReceivedBytes) +void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std::string& polName, const TSIGTriplet& tt, shared_ptr oursr, size_t maxReceivedBytes, const ComboAddress& localAddress) { int refresh = oursr->d_st.refresh; for(;;) { @@ -322,8 +322,13 @@ void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std:: L<(dr)->d_st.serial<, vector > > deltas; + + ComboAddress local(localAddress); + if (local == ComboAddress()) + local = getQueryLocalAddress(master.sin4.sin_family, 0); + try { - deltas = getIXFRDeltas(master, zone, dr, tt, nullptr, maxReceivedBytes); + deltas = getIXFRDeltas(master, zone, dr, tt, &local, maxReceivedBytes); } catch(std::runtime_error& e ){ L< defpol, int place); std::shared_ptr loadRPZFromServer(const ComboAddress& master, const DNSName& zone, DNSFilterEngine& target, const std::string& policyName, boost::optional defpol, int place, const TSIGTriplet& tt, size_t maxReceivedBytes, const ComboAddress& localAddress); void RPZRecordToPolicy(const DNSRecord& dr, DNSFilterEngine& target, const std::string& policyName, bool addOrRemove, boost::optional defpol, int place); -void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std::string& policyName, const TSIGTriplet &tt, shared_ptr oursr, size_t maxReceivedBytes); +void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std::string& policyName, const TSIGTriplet &tt, shared_ptr oursr, size_t maxReceivedBytes, const ComboAddress& localAddress); -- 2.47.2