From fbb45df0c6a8c353dc62b463afc0cfface8ed82b Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Mon, 18 Nov 2019 17:31:18 +0100 Subject: [PATCH] dnsdist: Test setting the value of AA, AD and RA when spoofing --- regression-tests.dnsdist/test_Spoofing.py | 94 +++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/regression-tests.dnsdist/test_Spoofing.py b/regression-tests.dnsdist/test_Spoofing.py index 4cedcd32bf..2ae03bf866 100644 --- a/regression-tests.dnsdist/test_Spoofing.py +++ b/regression-tests.dnsdist/test_Spoofing.py @@ -6,6 +6,10 @@ class TestSpoofingSpoof(DNSDistTest): _config_template = """ addAction(makeRule("spoofaction.spoofing.tests.powerdns.com."), SpoofAction("192.0.2.1", "2001:DB8::1")) + addAction(makeRule("spoofaction-aa.spoofing.tests.powerdns.com."), SpoofAction("192.0.2.1", "2001:DB8::1", {aa=true})) + addAction(makeRule("spoofaction-ad.spoofing.tests.powerdns.com."), SpoofAction("192.0.2.1", "2001:DB8::1", {ad=true})) + addAction(makeRule("spoofaction-ra.spoofing.tests.powerdns.com."), SpoofAction("192.0.2.1", "2001:DB8::1", {ra=true})) + addAction(makeRule("spoofaction-nora.spoofing.tests.powerdns.com."), SpoofAction("192.0.2.1", "2001:DB8::1", {ra=false})) addAction(makeRule("cnamespoofaction.spoofing.tests.powerdns.com."), SpoofCNAMEAction("cnameaction.spoofing.tests.powerdns.com.")) addAction("multispoof.spoofing.tests.powerdns.com", SpoofAction({"192.0.2.1", "192.0.2.2", "2001:DB8::1", "2001:DB8::2"})) newServer{address="127.0.0.1:%s"} @@ -169,6 +173,96 @@ class TestSpoofingSpoof(DNSDistTest): self.assertTrue(receivedResponse) self.assertEquals(expectedResponse, receivedResponse) + def testSpoofActionSetAA(self): + """ + Spoofing: Spoof via Action, setting AA=1 + """ + name = 'spoofaction-aa.spoofing.tests.powerdns.com.' + query = dns.message.make_query(name, 'AAAA', 'IN') + # dnsdist set RA = RD for spoofed responses + query.flags &= ~dns.flags.RD + expectedResponse = dns.message.make_response(query) + expectedResponse.flags |= dns.flags.AA + rrset = dns.rrset.from_text(name, + 60, + dns.rdataclass.IN, + dns.rdatatype.AAAA, + '2001:DB8::1') + expectedResponse.answer.append(rrset) + + for method in ("sendUDPQuery", "sendTCPQuery"): + sender = getattr(self, method) + (_, receivedResponse) = sender(query, response=None, useQueue=False) + self.assertTrue(receivedResponse) + self.assertEquals(expectedResponse, receivedResponse) + + def testSpoofActionSetAD(self): + """ + Spoofing: Spoof via Action, setting AD=1 + """ + name = 'spoofaction-ad.spoofing.tests.powerdns.com.' + query = dns.message.make_query(name, 'AAAA', 'IN') + # dnsdist set RA = RD for spoofed responses + query.flags &= ~dns.flags.RD + expectedResponse = dns.message.make_response(query) + expectedResponse.flags |= dns.flags.AD + rrset = dns.rrset.from_text(name, + 60, + dns.rdataclass.IN, + dns.rdatatype.AAAA, + '2001:DB8::1') + expectedResponse.answer.append(rrset) + + for method in ("sendUDPQuery", "sendTCPQuery"): + sender = getattr(self, method) + (_, receivedResponse) = sender(query, response=None, useQueue=False) + self.assertTrue(receivedResponse) + self.assertEquals(expectedResponse, receivedResponse) + + def testSpoofActionSetRA(self): + """ + Spoofing: Spoof via Action, setting RA=1 + """ + name = 'spoofaction-ra.spoofing.tests.powerdns.com.' + query = dns.message.make_query(name, 'AAAA', 'IN') + # dnsdist set RA = RD for spoofed responses + query.flags &= ~dns.flags.RD + expectedResponse = dns.message.make_response(query) + expectedResponse.flags |= dns.flags.RA + rrset = dns.rrset.from_text(name, + 60, + dns.rdataclass.IN, + dns.rdatatype.AAAA, + '2001:DB8::1') + expectedResponse.answer.append(rrset) + + for method in ("sendUDPQuery", "sendTCPQuery"): + sender = getattr(self, method) + (_, receivedResponse) = sender(query, response=None, useQueue=False) + self.assertTrue(receivedResponse) + self.assertEquals(expectedResponse, receivedResponse) + + def testSpoofActionSetNoRA(self): + """ + Spoofing: Spoof via Action, setting RA=0 + """ + name = 'spoofaction-nora.spoofing.tests.powerdns.com.' + query = dns.message.make_query(name, 'AAAA', 'IN') + expectedResponse = dns.message.make_response(query) + expectedResponse.flags &= ~dns.flags.RA + rrset = dns.rrset.from_text(name, + 60, + dns.rdataclass.IN, + dns.rdatatype.AAAA, + '2001:DB8::1') + expectedResponse.answer.append(rrset) + + for method in ("sendUDPQuery", "sendTCPQuery"): + sender = getattr(self, method) + (_, receivedResponse) = sender(query, response=None, useQueue=False) + self.assertTrue(receivedResponse) + self.assertEquals(expectedResponse, receivedResponse) + class TestSpoofingLuaSpoof(DNSDistTest): _config_template = """ -- 2.47.2