From: bert hubert Date: Wed, 20 Jan 2016 14:50:42 +0000 (+0100) Subject: implement Lua gettag() which optionally tells you which part of the packet cache... X-Git-Tag: dnsdist-1.0.0-alpha2~48^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81c0afd8814e8d12749bc654a512a0aa947d424f;p=thirdparty%2Fpdns.git implement Lua gettag() which optionally tells you which part of the packet cache to look at --- diff --git a/pdns/lua-recursor4.cc b/pdns/lua-recursor4.cc index b701cf4ba2..745b57b218 100644 --- a/pdns/lua-recursor4.cc +++ b/pdns/lua-recursor4.cc @@ -44,6 +44,11 @@ bool RecursorLua4::ipfilter(const ComboAddress& remote, const ComboAddress& loca return false; } +int RecursorLua4::gettag(const ComboAddress& remote, const ComboAddress& local, const DNSName& qname, uint16_t qtype) +{ + return 0; +} + #else #undef L @@ -321,7 +326,7 @@ RecursorLua4::RecursorLua4(const std::string& fname) d_preoutquery = d_lw->readVariable>("preoutquery").get_value_or(0); d_ipfilter = d_lw->readVariable>("ipfilter").get_value_or(0); - + d_gettag = d_lw->readVariable>("gettag").get_value_or(0); } bool RecursorLua4::preresolve(const ComboAddress& remote,const ComboAddress& local, const DNSName& query, const QType& qtype, vector& res, int& ret, bool* variable) @@ -356,6 +361,13 @@ bool RecursorLua4::ipfilter(const ComboAddress& remote, const ComboAddress& loca return false; // don't block } +int RecursorLua4::gettag(const ComboAddress& remote, const ComboAddress& local, const DNSName& qname, uint16_t qtype) +{ + if(d_gettag) + return d_gettag(remote, local, qname, qtype); + return 0; +} + bool RecursorLua4::genhook(luacall_t& func, const ComboAddress& remote,const ComboAddress& local, const DNSName& query, const QType& qtype, vector& res, int& ret, bool* variable) { if(!func) diff --git a/pdns/lua-recursor4.hh b/pdns/lua-recursor4.hh index ee8b56c632..c62768cd2d 100644 --- a/pdns/lua-recursor4.hh +++ b/pdns/lua-recursor4.hh @@ -19,6 +19,11 @@ public: bool preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, vector& res, int& ret); bool ipfilter(const ComboAddress& remote, const ComboAddress& local, const struct dnsheader&); + int gettag(const ComboAddress& remote, const ComboAddress& local, const DNSName& query, uint16_t qtype); + + typedef std::function gettag_t; + gettag_t d_gettag; // public so you can query if we have this hooked + private: struct DNSQuestion {