From 2aab7b206d5d280d5e4e348cd1c47806e1c32854 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Fri, 5 Sep 2025 16:04:54 +0200 Subject: [PATCH] dnsdist: Add a test for synthesizing EDE without text from Lua FFI Signed-off-by: Remi Gacogne --- regression-tests.dnsdist/test_EDE.py | 44 ++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/regression-tests.dnsdist/test_EDE.py b/regression-tests.dnsdist/test_EDE.py index 675f70c6be..561ae63929 100644 --- a/regression-tests.dnsdist/test_EDE.py +++ b/regression-tests.dnsdist/test_EDE.py @@ -11,9 +11,12 @@ class TestBasics(DNSDistTest): getPool(""):setCache(pc) local ffi = require("ffi") - function ffiAction(dq) - local extraText = 'Synthesized from Lua' - ffi.C.dnsdist_ffi_dnsquestion_set_extended_dns_error(dq, 29, extraText, #extraText) + local function addEDEPlusRecord(dq, code, extraText) + local extraTextLen = 0 + if extraText ~= nil then + extraTextLen = #extraText + end + ffi.C.dnsdist_ffi_dnsquestion_set_extended_dns_error(dq, 29, extraText, extraTextLen) local str = "192.0.2.2" local buf = ffi.new("char[?]", #str + 1) ffi.copy(buf, str) @@ -21,8 +24,19 @@ class TestBasics(DNSDistTest): return DNSAction.Spoof end + function ffiAction(dq) + local extraText = 'Synthesized from Lua' + return addEDEPlusRecord(dq, 29, extraText) + end + + function ffiActionNoExtra(dq) + local extraText = nil + return addEDEPlusRecord(dq, 29, extraText) + end + addAction("self-answered.ede.tests.powerdns.com.", SpoofAction("192.0.2.1")) addAction("self-answered-ffi.ede.tests.powerdns.com.", LuaFFIAction(ffiAction)) + addAction("self-answered-ffi-no-extra.ede.tests.powerdns.com.", LuaFFIAction(ffiActionNoExtra)) addSelfAnsweredResponseAction("self-answered.ede.tests.powerdns.com.", SetExtendedDNSErrorResponseAction(42, "my self-answered extended error status")) addAction(AllRule(), SetExtendedDNSErrorAction(16, "my extended error status")) @@ -218,3 +232,27 @@ class TestBasics(DNSDistTest): sender = getattr(self, method) (_, receivedResponse) = sender(query, response=None, useQueue=False) self.checkMessageEDNS(expectedResponse, receivedResponse) + + def testExtendedErrorNoExtraTextLuaFFI(self): + """ + EDE: Self-answered via Lua FFI without any extra text + """ + name = 'self-answered-ffi-no-extra.ede.tests.powerdns.com.' + ede = extendederrors.ExtendedErrorOption(29, b'') + query = dns.message.make_query(name, 'A', 'IN', use_edns=True) + # dnsdist sets RA = RD for self-generated responses + query.flags &= ~dns.flags.RD + + expectedResponse = dns.message.make_response(query) + expectedResponse.use_edns(edns=True, payload=1232, options=[ede]) + rrset = dns.rrset.from_text(name, + 60, + dns.rdataclass.IN, + dns.rdatatype.A, + '192.0.2.2') + expectedResponse.answer.append(rrset) + + for method in ("sendUDPQuery", "sendTCPQuery"): + sender = getattr(self, method) + (_, receivedResponse) = sender(query, response=None, useQueue=False) + self.checkMessageEDNS(expectedResponse, receivedResponse) -- 2.47.3