]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - pdns/lua-record.cc
rec: ensure correct service user on debian
[thirdparty/pdns.git] / pdns / lua-record.cc
index 3d757415fedd6cf9f6508174f86782a4c48807b5..0e2b9102b813e491bca4297308dd6cebed8dfd6e 100644 (file)
@@ -465,19 +465,19 @@ static vector<pair<int, ComboAddress> > convWIplist(std::unordered_map<int, wipl
   return ret;
 }
 
-thread_local unique_ptr<AuthLua4> alua;
+static thread_local unique_ptr<AuthLua4> s_LUA;
+bool g_LuaRecordSharedState;
 
 std::vector<shared_ptr<DNSRecordContent>> luaSynth(const std::string& code, const DNSName& query, const DNSName& zone, int zoneid, const DNSPacket& dnsp, uint16_t qtype)
 {
-  if(!alua) {
-    cerr<<"initializing AuthLua4"<<endl;
-
-    alua = make_unique<AuthLua4>();
+  if(!s_LUA ||                  // we don't have a Lua state yet
+     !g_LuaRecordSharedState) { // or we want a new one even if we had one
+    s_LUA = make_unique<AuthLua4>();
   }
 
   std::vector<shared_ptr<DNSRecordContent>> ret;
 
-  LuaContext& lua = *alua->getLua();
+  LuaContext& lua = *s_LUA->getLua();
   lua.writeVariable("qname", query);
   lua.writeVariable("who", dnsp.getRemote());
   lua.writeVariable("dh", (dnsheader*)&dnsp.d);