From: Chris Hofstaedtler Date: Sat, 6 Jan 2018 00:01:19 +0000 (+0100) Subject: dnsdist: Expose tempFailureTTL to Lua X-Git-Tag: dnsdist-1.3.0~162^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=29b6a412a06998e53902a964772ab376aa22aaef;p=pdns dnsdist: Expose tempFailureTTL to Lua --- diff --git a/pdns/dnsdist-lua-bindings-dnsquestion.cc b/pdns/dnsdist-lua-bindings-dnsquestion.cc index 7f40574d3..dcd47fff2 100644 --- a/pdns/dnsdist-lua-bindings-dnsquestion.cc +++ b/pdns/dnsdist-lua-bindings-dnsquestion.cc @@ -43,6 +43,14 @@ void setupLuaBindingsDNSQuestion() g_lua.registerMember("useECS", [](const DNSQuestion& dq) -> bool { return dq.useECS; }, [](DNSQuestion& dq, bool useECS) { dq.useECS = useECS; }); g_lua.registerMember("ecsOverride", [](const DNSQuestion& dq) -> bool { return dq.ecsOverride; }, [](DNSQuestion& dq, bool ecsOverride) { dq.ecsOverride = ecsOverride; }); g_lua.registerMember("ecsPrefixLength", [](const DNSQuestion& dq) -> uint16_t { return dq.ecsPrefixLength; }, [](DNSQuestion& dq, uint16_t newPrefixLength) { dq.ecsPrefixLength = newPrefixLength; }); + g_lua.registerMember (DNSQuestion::*)>("tempFailureTTL", + [](const DNSQuestion& dq) -> boost::optional { + return dq.tempFailureTTL; + }, + [](DNSQuestion& dq, boost::optional newValue) { + dq.tempFailureTTL = newValue; + } + ); g_lua.registerFunction("getDO", [](const DNSQuestion& dq) { return getEDNSZ((const char*)dq.dh, dq.len) & EDNS_HEADER_FLAG_DO; }); diff --git a/regression-tests.dnsdist/test_Advanced.py b/regression-tests.dnsdist/test_Advanced.py index 09763e515..bab9e7291 100644 --- a/regression-tests.dnsdist/test_Advanced.py +++ b/regression-tests.dnsdist/test_Advanced.py @@ -1516,3 +1516,45 @@ class TestAdvancedGetLocalPortOnAnyBind(DNSDistTest): (_, receivedResponse) = self.sendTCPQuery(query, response=None, useQueue=False) self.assertEquals(receivedResponse, response) + +class TestAdvancedLuaTempFailureTTL(DNSDistTest): + + _config_template = """ + function testAction(dq) + if dq.tempFailureTTL ~= nil then + return DNSAction.Spoof, "initially.not.nil.but." + dq.tempFailureTTL + ".tests.powerdns.com." + end + dq.tempFailureTTL = 30 + if dq.tempFailureTTL ~= 30 then + return DNSAction.Spoof, "after.set.not.expected.value.but." + dq.tempFailureTTL + ".tests.powerdns.com." + end + dq.tempFailureTTL = nil + if dq.tempFailureTTL ~= nil then + return DNSAction.Spoof, "after.unset.not.nil.but." + dq.tempFailureTTL + ".tests.powerdns.com." + end + return DNSAction.None, "" + end + addAction(AllRule(), LuaAction(testAction)) + newServer{address="127.0.0.1:%s"} + """ + + def testTempFailureTTLBinding(self): + """ + Exercise dq.tempFailureTTL Lua binding + """ + name = 'tempfailurettlbinding.advanced.tests.powerdns.com.' + query = dns.message.make_query(name, 'A', 'IN') + response = dns.message.make_response(query) + rrset = dns.rrset.from_text(name, + 3600, + dns.rdataclass.IN, + dns.rdatatype.AAAA, + '::1') + response.answer.append(rrset) + + (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response) + self.assertTrue(receivedQuery) + self.assertTrue(receivedResponse) + receivedQuery.id = query.id + self.assertEquals(query, receivedQuery) + self.assertEquals(receivedResponse, response)