]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add a test for EDNS on answers self-generated from a packet
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 27 May 2025 14:43:22 +0000 (16:43 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 6 Jun 2025 14:05:19 +0000 (16:05 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
regression-tests.dnsdist/test_Spoofing.py

index 7234e941128f05b6044efb3d26c23adcd17a4348..a5dcde780e109c42c22db0dc64f101c0b3c9df3f 100644 (file)
@@ -1020,7 +1020,8 @@ class TestSpoofingLuaSpoofPacket(DNSDistTest):
     end
 
     addAction("lua-raw-packet.spoofing.tests.powerdns.com.", LuaAction(spoofpacket))
-    local rawResponse="\\000\\000\\129\\133\\000\\001\\000\\000\\000\\000\\000\\000\\019rule\\045lua\\045raw\\045packet\\008spoofing\\005tests\\008powerdns\\003com\\000\\000\\001\\000\\001"
+    -- this answer has a EDNS OPT record, with a NSID set to dnsdist-1, and we intend to receive it!
+    local rawResponse="\\000\\000\\129\\133\\000\\001\\000\\000\\000\\000\\000\\001\\019rule\\045lua\\045raw\\045packet\\008spoofing\\005tests\\008powerdns\\003com\\000\\000\\001\\000\\001\\000\\000\\041\\004\\208\\000\\000\\000\\000\\000\\013\\000\\003\\000\\009dnsdist\\045\\049"
     addAction(AndRule{QTypeRule(DNSQType.A), SuffixMatchNodeRule("rule-lua-raw-packet.spoofing.tests.powerdns.com.")}, SpoofPacketAction(rawResponse, string.len(rawResponse)))
 
     local ffi = require("ffi")
@@ -1044,7 +1045,7 @@ class TestSpoofingLuaSpoofPacket(DNSDistTest):
 
     def testLuaSpoofPacket(self):
         """
-        Spoofing via Lua FFI: Spoof raw response via Lua FFI
+        Spoofing via Lua FFI: Spoof raw response via Lua
         """
         for name in ('lua-raw-packet.spoofing.tests.powerdns.com.', 'rule-lua-raw-packet.spoofing.tests.powerdns.com.'):
 
@@ -1053,11 +1054,17 @@ class TestSpoofingLuaSpoofPacket(DNSDistTest):
             expectedResponse.flags |= dns.flags.RA
             expectedResponse.set_rcode(dns.rcode.REFUSED)
 
+            if name == 'rule-lua-raw-packet.spoofing.tests.powerdns.com.':
+                nsid_opt = dns.edns.GenericOption(dns.edns.NSID, 'dnsdist-1'.encode())
+                expectedResponse.use_edns(options=[nsid_opt])
+
             for method in ("sendUDPQuery", "sendTCPQuery"):
                 sender = getattr(self, method)
                 (_, receivedResponse) = sender(query, response=None, useQueue=False)
                 self.assertTrue(receivedResponse)
                 self.assertEqual(expectedResponse, receivedResponse)
+                if name == 'rule-lua-raw-packet.spoofing.tests.powerdns.com.':
+                    self.checkMessageEDNS(expectedResponse, receivedResponse)
 
     def testLuaFFISpoofPacket(self):
         """