From 8ca70105ddd6fda10e98b6d3d8cb67523ebc81e1 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Mon, 11 Jul 2022 10:22:43 +0200 Subject: [PATCH] Add regression test for #11771 (lenght of annswer in udpQueryResponse) --- regression-tests.recursor-dnssec/test_Lua.py | 38 +++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/regression-tests.recursor-dnssec/test_Lua.py b/regression-tests.recursor-dnssec/test_Lua.py index 9e04d0a9a9..f76a3101b5 100644 --- a/regression-tests.recursor-dnssec/test_Lua.py +++ b/regression-tests.recursor-dnssec/test_Lua.py @@ -233,6 +233,10 @@ class UDPHooksResponder(DatagramProtocol): answer = dns.rrset.from_text('postresolve.luahooks.example.', 3600, dns.rdataclass.IN, 'A', '192.0.2.1') response.answer.append(answer) + elif request.question[0].name == dns.name.from_text('preresolve.luahooks.example.'): + answer = dns.rrset.from_text('preresolve.luahooks.example.', 3600, dns.rdataclass.IN, 'A', '192.0.2.2') + response.answer.append(answer) + self.transport.write(response.to_wire(), address) class LuaHooksRecursorTest(RecursorTest): @@ -256,6 +260,29 @@ quiet=no return true end + function preresolve(dq) + -- test both preresolve hooking and udpQueryResponse + if dq.qtype == pdns.A and dq.qname == newDN("preresolve.luahooks.example.") then + dq.followupFunction = "udpQueryResponse" + dq.udpCallback = "gotUdpResponse" + dq.udpQueryDest = newCA("%s.23:53") + -- synthesize query, responder should answer with regular answer + dq.udpQuery = "\\254\\255\\001\\000\\000\\001\\000\\000\\000\\000\\000\\000\\npreresolve\\008luahooks\\007example\\000\\000\\001\\000\\001" + return true + end + return false + end + + function gotUdpResponse(dq) + dq.followupFunction = "" + if string.len(dq.udpAnswer) == 61 then + dq:addAnswer(pdns.A, "192.0.2.2") + return true; + end + dq:addAnswer(pdns.A, "0.0.0.0") + return true + end + function nodata(dq) if dq.qtype == pdns.AAAA and dq.qname == newDN("nodata.luahooks.example.") then dq:addAnswer(pdns.AAAA, "2001:DB8::1") @@ -300,7 +327,7 @@ quiet=no return false end - """ % (os.environ['PREFIX'], os.environ['PREFIX']) + """ % (os.environ['PREFIX'], os.environ['PREFIX'], os.environ['PREFIX']) @classmethod def startResponders(cls): @@ -377,6 +404,15 @@ quiet=no self.assertRRsetInAnswer(res, expected) self.assertEqual(res.answer[0].ttl, 1) + def testPreResolve(self): + expected = dns.rrset.from_text('preresolve.luahooks.example.', 1, dns.rdataclass.IN, 'A', '192.0.2.2') + query = dns.message.make_query('preresolve.luahooks.example.', 'A', 'IN') + for method in ("sendUDPQuery", "sendTCPQuery"): + sender = getattr(self, method) + res = sender(query) + self.assertRcodeEqual(res, dns.rcode.NOERROR) + self.assertRRsetInAnswer(res, expected) + def testIPFilterHeader(self): query = dns.message.make_query('ipfilter.luahooks.example.', 'A', 'IN') query.flags |= dns.flags.AD -- 2.47.2