]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - pdns/dnsdist-lua.hh
rec: ensure correct service user on debian
[thirdparty/pdns.git] / pdns / dnsdist-lua.hh
index ee5a9ba6c3932243a5be1474753728c58d61a0f2..7ab5d963ca442e03347d0f94029586b10ca9936f 100644 (file)
 class LuaAction : public DNSAction
 {
 public:
-  typedef std::function<std::tuple<int, string>(DNSQuestion* dq)> func_t;
-  LuaAction(LuaAction::func_t func) : d_func(func)
+  typedef std::function<std::tuple<int, boost::optional<string> >(DNSQuestion* dq)> func_t;
+  LuaAction(const LuaAction::func_t& func) : d_func(func)
   {}
-
-  Action operator()(DNSQuestion* dq, string* ruleresult) const override
-  {
-    std::lock_guard<std::mutex> lock(g_luamutex);
-    auto ret = d_func(dq);
-    if(ruleresult)
-      *ruleresult=std::get<1>(ret);
-    return (Action)std::get<0>(ret);
-  }
-
+  Action operator()(DNSQuestion* dq, string* ruleresult) const override;
   string toString() const override
   {
     return "Lua script";
   }
-
 private:
   func_t d_func;
 };
@@ -49,24 +39,14 @@ private:
 class LuaResponseAction : public DNSResponseAction
 {
 public:
-  typedef std::function<std::tuple<int, string>(DNSResponse* dr)> func_t;
-  LuaResponseAction(LuaResponseAction::func_t func) : d_func(func)
+  typedef std::function<std::tuple<int, boost::optional<string> >(DNSResponse* dr)> func_t;
+  LuaResponseAction(const LuaResponseAction::func_t& func) : d_func(func)
   {}
-
-  Action operator()(DNSResponse* dr, string* ruleresult) const override
-  {
-    std::lock_guard<std::mutex> lock(g_luamutex);
-    auto ret = d_func(dr);
-    if(ruleresult)
-      *ruleresult=std::get<1>(ret);
-    return (Action)std::get<0>(ret);
-  }
-
+  Action operator()(DNSResponse* dr, string* ruleresult) const override;
   string toString() const override
   {
     return "Lua response script";
   }
-
 private:
   func_t d_func;
 };
@@ -100,7 +80,7 @@ private:
 typedef boost::variant<string, vector<pair<int, string>>, std::shared_ptr<DNSRule>, DNSName, vector<pair<int, DNSName> > > luadnsrule_t;
 std::shared_ptr<DNSRule> makeRule(const luadnsrule_t& var);
 typedef std::unordered_map<std::string, boost::variant<std::string> > luaruleparams_t;
-void parseRuleParams(boost::optional<luaruleparams_t> params, boost::uuids::uuid& uuid);
+void parseRuleParams(boost::optional<luaruleparams_t> params, boost::uuids::uuid& uuid, uint64_t& creationOrder);
 
 typedef NetmaskTree<DynBlock> nmts_t;