From: Pieter Lexis Date: Tue, 23 Aug 2016 11:40:37 +0000 (+0200) Subject: RPZ: Use query-local-address(6) for IXFR as well X-Git-Tag: rec-4.0.2~9^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c36d5ec688323d57ce3a0d5ffbf32c35809522b;p=thirdparty%2Fpdns.git RPZ: Use query-local-address(6) for IXFR as well --- 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);