]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: Pass the Lua context to follow up queries (follow CNAME, dns64)
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 6 Aug 2021 07:51:49 +0000 (09:51 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 6 Aug 2021 07:51:49 +0000 (09:51 +0200)
pdns/pdns_recursor.cc
pdns/syncres.cc
pdns/syncres.hh

index 172421a34ad939a62701a39e23fec37e6dde5590..3b9ea54a85e5c38439b49a515674d46bc0451279 100644 (file)
@@ -1416,7 +1416,7 @@ static void sendNODLookup(const DNSName& dname)
       return;
     }
     vector<DNSRecord> dummy;
-    directResolve(qname, QType::A, QClass::IN, dummy, false);
+    directResolve(qname, QType::A, QClass::IN, dummy, nullptr, false);
   }
 }
 
@@ -1458,7 +1458,7 @@ int followCNAMERecords(vector<DNSRecord>& ret, const QType qtype, int rcode)
     return rcode;
   }
 
-  rcode = directResolve(target, qtype, QClass::IN, resolved);
+  rcode = directResolve(target, qtype, QClass::IN, resolved, t_pdl);
 
   for(DNSRecord& rr :  resolved) {
     ret.push_back(std::move(rr));
@@ -1472,7 +1472,7 @@ int getFakeAAAARecords(const DNSName& qname, ComboAddress prefix, vector<DNSReco
      again, possibly encountering the same CNAME(s), and we don't want to trigger the CNAME
      loop detection. */
   vector<DNSRecord> newRecords;
-  int rcode = directResolve(qname, QType::A, QClass::IN, newRecords);
+  int rcode = directResolve(qname, QType::A, QClass::IN, newRecords, t_pdl);
 
   ret.reserve(ret.size() + newRecords.size());
   for (auto& record : newRecords) {
@@ -1552,7 +1552,7 @@ int getFakePTRRecords(const DNSName& qname, vector<DNSRecord>& ret)
   rr.d_content = std::make_shared<CNAMERecordContent>(newquery);
   ret.push_back(rr);
 
-  int rcode = directResolve(DNSName(newquery), QType::PTR, QClass::IN, ret);
+  int rcode = directResolve(DNSName(newquery), QType::PTR, QClass::IN, ret, t_pdl);
 
   return rcode;
 }
index 86ee77ae5b12808e20a376f68de7af8858532ae2..2b93b59bebe26d51057625df33709dfa704ee4ea 100644 (file)
@@ -4533,18 +4533,21 @@ void SyncRes::parseEDNSSubnetAddFor(const std::string& subnetlist)
 }
 
 // used by PowerDNSLua - note that this neglects to add the packet count & statistics back to pdns_recursor.cc
-int directResolve(const DNSName& qname, const QType qtype, const QClass qclass, vector<DNSRecord>& ret)
+int directResolve(const DNSName& qname, const QType qtype, const QClass qclass, vector<DNSRecord>& ret, shared_ptr<RecursorLua4> pdl)
 {
-  return directResolve(qname, qtype, qclass, ret, SyncRes::s_qnameminimization);
+  return directResolve(qname, qtype, qclass, ret, pdl, SyncRes::s_qnameminimization);
 }
 
-int directResolve(const DNSName& qname, const QType qtype, const QClass qclass, vector<DNSRecord>& ret, bool qm)
+int directResolve(const DNSName& qname, const QType qtype, const QClass qclass, vector<DNSRecord>& ret, shared_ptr<RecursorLua4> pdl, bool qm)
 {
   struct timeval now;
   gettimeofday(&now, 0);
 
   SyncRes sr(now);
   sr.setQNameMinimization(qm);
+  if (pdl) {
+    sr.setLuaEngine(pdl);
+  }
 
   int res = -1;
   try {
index a5f9caf4c096cf64c8d727df0872fc854241ef31..f5a9fe59d16ba067cfb0cb24e3b0785e9997d06e 100644 (file)
@@ -1160,8 +1160,8 @@ typedef boost::function<void*(void)> pipefunc_t;
 void broadcastFunction(const pipefunc_t& func);
 void distributeAsyncFunction(const std::string& question, const pipefunc_t& func);
 
-int directResolve(const DNSName& qname, const QType qtype, const QClass qclass, vector<DNSRecord>& ret);
-int directResolve(const DNSName& qname, const QType qtype, const QClass qclass, vector<DNSRecord>& ret, bool qm);
+int directResolve(const DNSName& qname, const QType qtype, const QClass qclass, vector<DNSRecord>& ret, shared_ptr<RecursorLua4> pdl);
+int directResolve(const DNSName& qname, const QType qtype, const QClass qclass, vector<DNSRecord>& ret, shared_ptr<RecursorLua4> pdl, bool qm);
 int followCNAMERecords(std::vector<DNSRecord>& ret, const QType qtype, int oldret);
 int getFakeAAAARecords(const DNSName& qname, ComboAddress prefix, vector<DNSRecord>& ret);
 int getFakePTRRecords(const DNSName& qname, vector<DNSRecord>& ret);