]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
RPZ: Use query-local-address(6) for IXFR as well 4351/head
authorPieter Lexis <pieter.lexis@powerdns.com>
Tue, 23 Aug 2016 11:40:37 +0000 (13:40 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Tue, 23 Aug 2016 11:40:37 +0000 (13:40 +0200)
pdns/rec-lua-conf.cc
pdns/reczones.cc
pdns/rpzloader.hh

index 54548b1b9c1d2a77c13d739cff00f2677c27a935..a140198101430c0e61155fcdcd99a63fa3dcc1bf 100644 (file)
@@ -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) {
index 3cd3c9e5b8250bd64c2a07894ad8ced126691123..b63f589f605a38b9265e850faa5f5bafdb4f93e1 100644 (file)
@@ -311,7 +311,7 @@ string reloadAuthAndForwards()
 }
 
 
-void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std::string& polName, const TSIGTriplet& tt, shared_ptr<SOARecordContent> oursr, size_t maxReceivedBytes)
+void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std::string& polName, const TSIGTriplet& tt, shared_ptr<SOARecordContent> 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<<Logger::Info<<"Getting IXFR deltas for "<<zone<<" from "<<master.toStringWithPort()<<", our serial: "<<getRR<SOARecordContent>(dr)->d_st.serial<<endl;
     vector<pair<vector<DNSRecord>, vector<DNSRecord> > > 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<<Logger::Warning<<e.what()<<endl;
       continue;
index 192a721a3777f22b7c33e4e84e32d7051bdfc006..fbd4fdf7e8915cc1180a3fae88fec1ae16116877 100644 (file)
@@ -6,4 +6,4 @@
 int loadRPZFromFile(const std::string& fname, DNSFilterEngine& target, const std::string& policyName, boost::optional<DNSFilterEngine::Policy> defpol, int place);
 std::shared_ptr<SOARecordContent> loadRPZFromServer(const ComboAddress& master, const DNSName& zone, DNSFilterEngine& target, const std::string& policyName, boost::optional<DNSFilterEngine::Policy> 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<DNSFilterEngine::Policy> defpol, int place);
-void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std::string& policyName, const TSIGTriplet &tt, shared_ptr<SOARecordContent> oursr, size_t maxReceivedBytes);
+void RPZIXFRTracker(const ComboAddress& master, const DNSName& zone, const std::string& policyName, const TSIGTriplet &tt, shared_ptr<SOARecordContent> oursr, size_t maxReceivedBytes, const ComboAddress& localAddress);