From 2f855ee283ed4504af7597b833d9d3de9bed7104 Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sat, 14 Jan 2017 02:18:19 +0530 Subject: [PATCH] DnsServer: MergeResponseAnswers changes done to allow authority records only when there are 0 answers. --- DnsServerCore/DnsServer.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/DnsServerCore/DnsServer.cs b/DnsServerCore/DnsServer.cs index a346b2f3..d2a1f317 100644 --- a/DnsServerCore/DnsServer.cs +++ b/DnsServerCore/DnsServer.cs @@ -413,25 +413,25 @@ namespace DnsServerCore case 1: DnsDatagram responseReceived = responses[0]; - return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, request.Header.OPCODE, false, false, true, true, false, false, responseReceived.Header.RCODE, request.Header.QDCOUNT, responseReceived.Header.ANCOUNT, responseReceived.Header.NSCOUNT, responseReceived.Header.ARCOUNT), request.Question, responseReceived.Answer, responseReceived.Authority, responseReceived.Additional); + + if (responseReceived.Answer.Length == 0) + return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, request.Header.OPCODE, false, false, true, true, false, false, responseReceived.Header.RCODE, request.Header.QDCOUNT, responseReceived.Header.ANCOUNT, responseReceived.Header.NSCOUNT, 0), request.Question, responseReceived.Answer, responseReceived.Authority, null); + else + return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, request.Header.OPCODE, false, false, true, true, false, false, responseReceived.Header.RCODE, request.Header.QDCOUNT, responseReceived.Header.ANCOUNT, 0, 0), request.Question, responseReceived.Answer, null, null); default: List responseAnswer = new List(); List responseAuthority = new List(); - List responseAdditional = new List(); foreach (DnsDatagram response in responses) { responseAnswer.AddRange(response.Answer); - if (response.Authority != null) + if ((response.Answer.Length == 0) && (response.Authority != null)) responseAuthority.AddRange(response.Authority); - - if (response.Additional != null) - responseAuthority.AddRange(response.Additional); } - return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, request.Header.OPCODE, false, false, true, true, false, false, responses[0].Header.RCODE, request.Header.QDCOUNT, Convert.ToUInt16(responseAnswer.Count), Convert.ToUInt16(responseAuthority.Count), Convert.ToUInt16(responseAdditional.Count)), request.Question, responseAnswer.ToArray(), responseAuthority.ToArray(), responseAdditional.ToArray()); + return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, request.Header.OPCODE, false, false, true, true, false, false, responses[0].Header.RCODE, request.Header.QDCOUNT, Convert.ToUInt16(responseAnswer.Count), Convert.ToUInt16(responseAuthority.Count), 0), request.Question, responseAnswer.ToArray(), responseAuthority.ToArray(), null); } }