]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: Fix `dq` members alterations from Lua not being taken into account
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 6 Jan 2017 10:38:27 +0000 (11:38 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 6 Jan 2017 10:38:27 +0000 (11:38 +0100)
Apparently when using reference, LuaWrapper pass the object by copy
and not by reference, so for now we pass `dq` as a pointer, not a
reference.

pdns/lua-recursor4.cc
pdns/lua-recursor4.hh

index ba7c1063d22c2dca1401d2c2555db297486adf23..13b5a7f703f23548d2e525592574144f849dd547 100644 (file)
@@ -665,7 +665,7 @@ bool RecursorLua4::genhook(luacall_t& func, DNSQuestion& dq, int& ret)
   dq.udpCallback.clear();
 
   dq.rcode = ret;
-  bool handled=func(dq);
+  bool handled=func(&dq);
 
   if(handled) {
 loop:;
@@ -688,7 +688,7 @@ loop:;
           theL()<<Logger::Error<<"Attempted callback for Lua UDP Query/Response which could not be found"<<endl;
           return false;
         }
-        bool result=func(dq);
+        bool result=func(&dq);
         if(!result) {
           return false;
         }
index fe9236027fafd38ebec7da5ea0e545761f752105..1502b6db435919b780c13f62b7f3843d24bff25d 100644 (file)
@@ -120,7 +120,7 @@ public:
   gettag_t d_gettag; // public so you can query if we have this hooked
 
 private:
-  typedef std::function<bool(DNSQuestion&)> luacall_t;
+  typedef std::function<bool(DNSQuestion*)> luacall_t;
   luacall_t d_prerpz, d_preresolve, d_nxdomain, d_nodata, d_postresolve, d_preoutquery, d_postoutquery;
   bool genhook(luacall_t& func, DNSQuestion& dq, int& ret);
   typedef std::function<bool(ComboAddress,ComboAddress, struct dnsheader)> ipfilter_t;