#include "ednsoptions.hh"
#include "fstrm_logger.hh"
#include "remote_logger.hh"
+#include "boost/optional/optional_io.hpp"
class DropAction : public DNSAction
{
std::lock_guard<std::mutex> lock(g_luamutex);
try {
auto ret = d_func(dq);
- if(ruleresult)
- *ruleresult=std::get<1>(ret);
+ if (ruleresult) {
+ if (boost::optional<string> rule = std::get<1>(ret)) {
+ *ruleresult = *rule;
+ }
+ else {
+ // default to empty string
+ ruleresult->clear();
+ }
+ }
return (Action)std::get<0>(ret);
} catch (std::exception &e) {
warnlog("LuaAction failed inside lua, returning ServFail: %s", e.what());
std::lock_guard<std::mutex> lock(g_luamutex);
try {
auto ret = d_func(dr);
- if(ruleresult)
- *ruleresult=std::get<1>(ret);
+ if(ruleresult) {
+ if (boost::optional<string> rule = std::get<1>(ret)) {
+ *ruleresult = *rule;
+ }
+ else {
+ // default to empty string
+ ruleresult->clear();
+ }
+ }
return (Action)std::get<0>(ret);
} catch (std::exception &e) {
warnlog("LuaResponseAction failed inside lua, returning ServFail: %s", e.what());
class LuaAction : public DNSAction
{
public:
- typedef std::function<std::tuple<int, string>(DNSQuestion* dq)> func_t;
+ typedef std::function<std::tuple<int, boost::optional<string> >(DNSQuestion* dr)> func_t;
LuaAction(LuaAction::func_t func) : d_func(func)
{}
Action operator()(DNSQuestion* dq, string* ruleresult) const override;
class LuaResponseAction : public DNSResponseAction
{
public:
- typedef std::function<std::tuple<int, string>(DNSResponse* dr)> func_t;
+ typedef std::function<std::tuple<int, boost::optional<string> >(DNSResponse* dr)> func_t;
LuaResponseAction(LuaResponseAction::func_t func) : d_func(func)
{}
Action operator()(DNSResponse* dr, string* ruleresult) const override;