From: Aki Tuomi Date: Sun, 11 Jun 2017 18:49:03 +0000 (+0300) Subject: lua-auth4: Add DNSPacket to Lua X-Git-Tag: dnsdist-1.3.0~186^2~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c9b3d1315efb1c949cc92310f3639b0320585029;p=pdns lua-auth4: Add DNSPacket to Lua --- diff --git a/pdns/lua-auth4.cc b/pdns/lua-auth4.cc index b42348490..0973673a7 100644 --- a/pdns/lua-auth4.cc +++ b/pdns/lua-auth4.cc @@ -35,6 +35,47 @@ void AuthLua4::postPrepareContext() { return luaResult; }); +/* DNSPacket */ + d_lw->writeFunction("newDNSPacket", [](bool isQuery) { return new DNSPacket(isQuery); }); + d_lw->writeFunction("dupDNSPacket", [](const DNSPacket &orig) { return new DNSPacket(orig); }); + d_lw->registerFunction("noparse", [](DNSPacket &p, const char *mesg, size_t len){ return p.noparse(mesg, len); }); + d_lw->registerFunction("parse", [](DNSPacket &p, const char *mesg, size_t len){ return p.parse(mesg, len); }); + d_lw->registerFunction("getString", [](DNSPacket &p) { return p.getString(); }); + d_lw->registerFunction("setRemote", [](DNSPacket &p, const ComboAddress &ca) { p.setRemote(&ca); }); + d_lw->registerFunction("getRemote", [](DNSPacket &p) { return p.getRemote(); }); + d_lw->registerFunction("getRealRemote", [](DNSPacket &p) { return p.getRealRemote(); }); + d_lw->registerFunction("getLocal", [](DNSPacket &p) { return p.getLocal(); }); + d_lw->registerFunction("getRemotePort", [](DNSPacket &p) { return p.getRemotePort(); }); + + d_lw->registerFunction("setA", [](DNSPacket &p, bool a) { return p.setA(a); }); + d_lw->registerFunction("setID", [](DNSPacket &p, unsigned int id) { return p.setID(static_cast(id)); }); + d_lw->registerFunction("setRA", [](DNSPacket &p, bool ra) { return p.setRA(ra); }); + d_lw->registerFunction("setRD", [](DNSPacket &p, bool rd) { return p.setRD(rd); }); + d_lw->registerFunction("setAnswer", [](DNSPacket &p, bool answer) { return p.setAnswer(answer); }); + d_lw->registerFunction("setOpCode", [](DNSPacket &p, unsigned int opcode) { return p.setOpcode(static_cast(opcode)); }); + d_lw->registerFunction("setRcode", [](DNSPacket &p, int rcode) { return p.setRcode(rcode); }); + d_lw->registerFunction("clearRecords",[](DNSPacket &p){p.clearRecords();}); + d_lw->registerFunction("addRecord", [](DNSPacket &p, DNSRecord &dr, bool auth) { DNSZoneRecord dzr; dzr.dr = dr; dzr.auth = auth; p.addRecord(dzr); }); + d_lw->registerFunction >&)>("addRecords", [](DNSPacket &p, const vector >& records){ for(const auto &dr: records){ DNSZoneRecord dzr; dzr.dr = std::get<1>(dr); dzr.auth = true; p.addRecord(dzr); }}); + d_lw->registerFunction("setQuestion", [](DNSPacket &p, unsigned int opcode, const DNSName &name, const string &type){ QType qtype; qtype = type; p.setQuestion(static_cast(opcode), name, static_cast(qtype.getCode())); }); + d_lw->registerFunction("isEmpty", [](DNSPacket &p){return p.isEmpty();}); + d_lw->registerFunction("replyPacket",[](DNSPacket& p){ return p.replyPacket();}); + d_lw->registerFunction("hasEDNSSubnet", [](DNSPacket &p){return p.hasEDNSSubnet();}); + d_lw->registerFunction("hasEDNS",[](DNSPacket &p){return p.hasEDNS();}); + d_lw->registerFunction("getEDNSVersion",[](DNSPacket &p){return p.getEDNSVersion();}); + d_lw->registerFunction("setEDNSRcode",[](DNSPacket &p, unsigned int extRCode){p.setEDNSRcode(static_cast(extRCode));}); + d_lw->registerFunction("getEDNSRcode",[](DNSPacket &p){return p.getEDNSRCode();}); + d_lw->registerFunction("getTSIGKeyname",[](DNSPacket &p){ return p.getTSIGKeyname();}); + d_lw->registerFunction()>("getRRS", [](DNSPacket &p){ std::unordered_map ret; unsigned int i; for(const auto &rec: p.getRRS()) { ret.insert({i++, rec.dr}); } return ret;}); + d_lw->registerMember("qdomain", [](const DNSPacket &p) -> DNSName { return p.qdomain; }, [](DNSPacket &p, const DNSName& name) { p.qdomain = name; }); + d_lw->registerMember("qdomainwild", [](const DNSPacket &p) -> DNSName { return p.qdomainwild; }, [](DNSPacket &p, const DNSName& name) { p.qdomainwild = name; }); + d_lw->registerMember("qdomainzone", [](const DNSPacket &p) -> DNSName { return p.qdomainzone; }, [](DNSPacket &p, const DNSName& name) { p.qdomainzone = name; }); + + d_lw->registerMember("d_peer_principal", [](const DNSPacket &p) -> std::string { return p.d_peer_principal; }, [](DNSPacket &p, const std::string &princ) { p.d_peer_principal = princ; }); + d_lw->registerMember("qtype", [](const DNSPacket &p) -> const std::string { return p.qtype.getName(); }, [](DNSPacket &p, const std::string &type) { p.qtype = type; }); +/* End of DNSPacket */ + + /* update policy */ d_lw->registerFunction("getQName", [](UpdatePolicyQuery& upq) { return upq.qname; }); d_lw->registerFunction("getZoneName", [](UpdatePolicyQuery& upq) { return upq.zonename; });