```
nmg = newNMG()
nmg:addMask("127.0.0.0/8")
-nmg:addMask({"213.244.168.0/24", "130.161.0.0/16"})
+nmg:addMasks({"213.244.168.0/24", "130.161.0.0/16"})
+nmg:addMasks(dofile("bad.ips")) -- contains return {"ip1","ip2"..}
if nmg:match(dq.remote) then
print("Intercepting query from ", dq.remote)
nmg.addMask(mask);
});
+ d_lw->registerFunction<void(NetmaskGroup::*)(const vector<pair<unsigned int, std::string>>&)>("addMasks", [](NetmaskGroup&nmg, const vector<pair<unsigned int, std::string>>& masks)
+ {
+ for(const auto& mask: masks)
+ nmg.addMask(mask.second);
+ });
+
+
d_lw->registerFunction("match", (bool (NetmaskGroup::*)(const ComboAddress&) const)&NetmaskGroup::match);
d_lw->registerFunction<string(DNSName::*)()>("toString", [](const DNSName&dn ) { return dn.toString(); });
d_lw->registerFunction<string(DNSName::*)()>("toStringNoDot", [](const DNSName&dn ) { return dn.toStringNoDot(); });
d_lw->registerFunction<string(DNSRecord::*)()>("getContent", [](const DNSRecord& dr) { return dr.d_content->getZoneRepresentation(); });
+ d_lw->registerFunction<boost::optional<ComboAddress>(DNSRecord::*)()>("getCA", [](const DNSRecord& dr) {
+ boost::optional<ComboAddress> ret;
+
+ if(auto rec = std::dynamic_pointer_cast<ARecordContent>(dr.d_content))
+ ret=rec->getCA(53);
+ else if(auto rec = std::dynamic_pointer_cast<AAAARecordContent>(dr.d_content))
+ ret=rec->getCA(53);
+ return ret;
+ });
d_lw->registerFunction<void(DNSRecord::*)(const std::string&)>("changeContent", [](DNSRecord& dr, const std::string& newContent) { dr.d_content = shared_ptr<DNSRecordContent>(DNSRecordContent::mastermake(dr.d_type, 1, newContent)); });