vinfolog("%s query for %s|%s from %s, no policy applied", g_servFailOnNoPolicy ? "ServFailed" : "Dropped", dq.qname->toLogString(), QType(dq.qtype).getName(), dq.remote->toStringWithPort());
if (g_servFailOnNoPolicy) {
- restoreFlags(dq.getHeader(), dq.origFlags);
-
dq.getHeader()->rcode = RCode::ServFail;
dq.getHeader()->qr = true;
+ fixUpQueryTurnedResponse(dq, dq.origFlags);
+
if (!prepareOutgoingResponse(holders, cs, dq, false)) {
return ProcessQueryResult::Drop;
}
"""
Routing: No server should return ServFail
"""
+ # without EDNS
name = 'noserver.routing.tests.powerdns.com.'
query = dns.message.make_query(name, 'A', 'IN')
expectedResponse = dns.message.make_response(query)
for method in ("sendUDPQuery", "sendTCPQuery"):
sender = getattr(self, method)
(_, receivedResponse) = sender(query, response=None, useQueue=False)
- self.assertEquals(receivedResponse, expectedResponse)
+ self.checkMessageNoEDNS(expectedResponse, receivedResponse)
+
+ # now with EDNS
+ query = dns.message.make_query(name, 'A', 'IN', use_edns=True, payload=4096, want_dnssec=False)
+ expectedResponse = dns.message.make_response(query, our_payload=1232)
+ expectedResponse.set_rcode(dns.rcode.SERVFAIL)
+
+ for method in ("sendUDPQuery", "sendTCPQuery"):
+ sender = getattr(self, method)
+ (_, receivedResponse) = sender(query, response=None, useQueue=False)
+ self.checkMessageEDNSWithoutOptions(expectedResponse, receivedResponse)
+ self.assertFalse(receivedResponse.ednsflags & dns.flags.DO)
+ self.assertEquals(receivedResponse.payload, 1232)
class TestRoutingWRandom(DNSDistTest):