]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: Add regression tests for the EDNS Padding Lua bindings
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 8 Mar 2021 17:33:54 +0000 (18:33 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 8 Mar 2021 17:33:54 +0000 (18:33 +0100)
regression-tests.recursor-dnssec/test_EDNSPadding.py
regression-tests.recursor-dnssec/test_ExtendedErrors.py

index 07f5f091cd47d480a2af3bfb0be758ff20904dfd..ff6fb69e636866fa0bcc9924fe15743191ec8ddc 100644 (file)
@@ -136,6 +136,36 @@ edns-padding-mode=always
 edns-padding-tag=7830
 packetcache-ttl=60
     """
+    _lua_dns_script_file = """
+    function preresolve(dq)
+      if dq.qname == newDN("host1.secure.example.") then
+        -- check that EDNS Padding was enabled (default)
+        if dq.addPaddingToResponse ~= true then
+          -- and stop the process otherwise
+          return true
+        end
+        -- disable EDNS Padding
+        dq.addPaddingToResponse = false
+      end
+      return false
+    end
+
+    local ffi = require("ffi")
+
+    ffi.cdef[[
+      typedef struct pdns_ffi_param pdns_ffi_param_t;
+
+      const char* pdns_ffi_param_get_qname(pdns_ffi_param_t* ref);
+      void pdns_ffi_param_set_padding_disabled(pdns_ffi_param_t* ref, bool disabled);
+    ]]
+
+    function gettag_ffi(ref)
+      local qname = ffi.string(ffi.C.pdns_ffi_param_get_qname(ref))
+      if qname == 'host1.sub.secure.example' then
+        ffi.C.pdns_ffi_param_set_padding_disabled(ref, true)
+      end
+    end
+    """
 
     def testQueryWithPadding(self):
         name = 'secure.example.'
@@ -147,6 +177,27 @@ packetcache-ttl=60
         self.checkPadding(res)
         self.assertRRsetInAnswer(res, expected)
 
+    def testQueryWithPaddingButDisabledViaLua(self):
+        name = 'host1.secure.example.'
+        expected = dns.rrset.from_text(name, 0, dns.rdataclass.IN, 'A', '192.0.2.2')
+        po = paddingoption.PaddingOption(64)
+        query = dns.message.make_query(name, 'A', want_dnssec=True, options=[po])
+        query.flags |= dns.flags.CD
+        res = self.sendUDPQuery(query)
+        self.checkNoPadding(res)
+        self.assertRRsetInAnswer(res, expected)
+
+    def testQueryWithPaddingButDisabledViaGettagFFI(self):
+        name = 'host1.sub.secure.example.'
+        expected = dns.rrset.from_text(name, 0, dns.rdataclass.IN, 'A', '192.0.2.11')
+        po = paddingoption.PaddingOption(64)
+        query = dns.message.make_query(name, 'A', want_dnssec=True, options=[po])
+        query.flags |= dns.flags.CD
+        query.flags |= dns.flags.RD
+        res = self.sendUDPQuery(query)
+        self.checkNoPadding(res)
+        self.assertRRsetInAnswer(res, expected)
+
     def testQueryWithoutPadding(self):
         name = 'secure.example.'
         expected = dns.rrset.from_text(name, 0, dns.rdataclass.IN, 'A', '192.0.2.17')
index df88990df5136515f3d4f2406f67304c5af6efc2..f501173ab44c2cdb38f653b900154c0de409b35b 100644 (file)
@@ -60,7 +60,6 @@ log-common-errors=yes
         local extra = 'Extra text from Lua FFI!'
         ffi.C.pdns_ffi_param_set_extended_error_extra(obj, #extra, extra)
       end
-      return {}
     end
     """ % ('A'*427)