diff --git a/DnsServerCore/Dns/DnsServer.cs b/DnsServerCore/Dns/DnsServer.cs index e6572d6e..e8fd27af 100644 --- a/DnsServerCore/Dns/DnsServer.cs +++ b/DnsServerCore/Dns/DnsServer.cs @@ -1093,9 +1093,9 @@ namespace DnsServerCore.Dns break; //break since no recursion allowed/desired } } - else if ((lastResponse.Answer.Count > 0) && ((questionType == DnsResourceRecordType.A) || (questionType == DnsResourceRecordType.AAAA)) && (lastRR.Type == DnsResourceRecordType.ANAME)) + else if ((lastResponse.Answer.Count > 0) && (lastResponse.Answer[0].Type == DnsResourceRecordType.ANAME)) { - lastResponse = ProcessANAME(request, response, isRecursionAllowed); + lastResponse = ProcessANAME(request, lastResponse, isRecursionAllowed); } else if ((lastResponse.Answer.Count == 0) && (lastResponse.Authority.Count > 0)) { @@ -1142,7 +1142,7 @@ namespace DnsServerCore.Dns return new DnsDatagram(request.Identifier, true, DnsOpcode.StandardQuery, lastResponse.AuthoritativeAnswer, false, request.RecursionDesired, isRecursionAllowed, false, false, rcode, request.Question, responseAnswer, authority, additional) { Tag = response.Tag }; } - else if (((questionType == DnsResourceRecordType.A) || (questionType == DnsResourceRecordType.AAAA)) && (lastRR.Type == DnsResourceRecordType.ANAME)) + else if (lastRR.Type == DnsResourceRecordType.ANAME) { return ProcessANAME(request, response, isRecursionAllowed); } @@ -1196,9 +1196,9 @@ namespace DnsServerCore.Dns foreach (DnsResourceRecord answer in lastResponse.Answer) { if (anameRR.TtlValue < answer.TtlValue) - responseAnswer.Add(new DnsResourceRecord(answer.Name, answer.Type, answer.Class, anameRR.TtlValue, answer.RDATA)); + responseAnswer.Add(new DnsResourceRecord(anameRR.Name, answer.Type, answer.Class, anameRR.TtlValue, answer.RDATA)); else - responseAnswer.Add(answer); + responseAnswer.Add(new DnsResourceRecord(anameRR.Name, answer.Type, answer.Class, answer.TtlValue, answer.RDATA)); } break; //found final answer @@ -1485,7 +1485,7 @@ namespace DnsServerCore.Dns //wait timed out //query cache zone to return stale answer (if available) as per draft-ietf-dnsop-serve-stale-04 DnsDatagram cacheResponse = QueryCache(request, true); - if (cacheResponse != null) + if ((cacheResponse != null) && (cacheResponse.RCODE == DnsResponseCode.NoError)) return cacheResponse; //wait till full timeout before responding as ServerFailure @@ -1598,7 +1598,7 @@ namespace DnsServerCore.Dns DnsDatagram cacheResponse = QueryCache(request, true); if ((cacheResponse == null) || ((cacheResponse.Answer.Count == 0) && (cacheResponse.Authority.Count == 0))) { - //no stale record found or found empty record; cache new empty record to avoid frequent retries by the resolver + //no stale record or empty record found; cache new empty record to avoid frequent retries by the resolver DnsResponseCode rcode; if (cacheResponse == null) diff --git a/DnsServerCore/Dns/ResourceRecords/DnsResourceRecordExtension.cs b/DnsServerCore/Dns/ResourceRecords/DnsResourceRecordExtension.cs index 99670924..0d96e8fa 100644 --- a/DnsServerCore/Dns/ResourceRecords/DnsResourceRecordExtension.cs +++ b/DnsServerCore/Dns/ResourceRecords/DnsResourceRecordExtension.cs @@ -158,7 +158,7 @@ namespace DnsServerCore.Dns.ResourceRecords if (rrInfo == null) return false; - else return rrInfo.Disabled; + return rrInfo.Disabled; } public static void Disable(this DnsResourceRecord record) diff --git a/DnsServerCore/WebService.cs b/DnsServerCore/WebService.cs index 8d935b56..3e32db01 100644 --- a/DnsServerCore/WebService.cs +++ b/DnsServerCore/WebService.cs @@ -2436,36 +2436,36 @@ namespace DnsServerCore { foreach (KeyValuePair> groupedRecords in groupedByTypeRecords.Value) { - foreach (DnsResourceRecord resourceRecord in groupedRecords.Value) + foreach (DnsResourceRecord record in groupedRecords.Value) { jsonWriter.WriteStartObject(); if (authoritativeZoneRecords) { jsonWriter.WritePropertyName("disabled"); - jsonWriter.WriteValue(resourceRecord.IsDisabled()); + jsonWriter.WriteValue(record.IsDisabled()); } jsonWriter.WritePropertyName("name"); - jsonWriter.WriteValue(resourceRecord.Name); + jsonWriter.WriteValue(record.Name); jsonWriter.WritePropertyName("type"); - jsonWriter.WriteValue(resourceRecord.Type.ToString()); + jsonWriter.WriteValue(record.Type.ToString()); jsonWriter.WritePropertyName("ttl"); if (authoritativeZoneRecords) - jsonWriter.WriteValue(resourceRecord.TtlValue); + jsonWriter.WriteValue(record.TtlValue); else - jsonWriter.WriteValue(resourceRecord.TTL); + jsonWriter.WriteValue(record.TTL); jsonWriter.WritePropertyName("rData"); jsonWriter.WriteStartObject(); - switch (resourceRecord.Type) + switch (record.Type) { case DnsResourceRecordType.A: { - DnsARecord rdata = (resourceRecord.RDATA as DnsARecord); + DnsARecord rdata = (record.RDATA as DnsARecord); if (rdata != null) { jsonWriter.WritePropertyName("value"); @@ -2476,7 +2476,7 @@ namespace DnsServerCore case DnsResourceRecordType.AAAA: { - DnsAAAARecord rdata = (resourceRecord.RDATA as DnsAAAARecord); + DnsAAAARecord rdata = (record.RDATA as DnsAAAARecord); if (rdata != null) { jsonWriter.WritePropertyName("value"); @@ -2487,7 +2487,7 @@ namespace DnsServerCore case DnsResourceRecordType.SOA: { - DnsSOARecord rdata = resourceRecord.RDATA as DnsSOARecord; + DnsSOARecord rdata = record.RDATA as DnsSOARecord; if (rdata != null) { jsonWriter.WritePropertyName("masterNameServer"); @@ -2512,7 +2512,7 @@ namespace DnsServerCore jsonWriter.WriteValue(rdata.Minimum); } - IReadOnlyList glueRecords = resourceRecord.GetGlueRecords(); + IReadOnlyList glueRecords = record.GetGlueRecords(); if (glueRecords.Count > 0) { string glue = null; @@ -2533,7 +2533,7 @@ namespace DnsServerCore case DnsResourceRecordType.PTR: { - DnsPTRRecord rdata = resourceRecord.RDATA as DnsPTRRecord; + DnsPTRRecord rdata = record.RDATA as DnsPTRRecord; if (rdata != null) { jsonWriter.WritePropertyName("value"); @@ -2544,7 +2544,7 @@ namespace DnsServerCore case DnsResourceRecordType.MX: { - DnsMXRecord rdata = resourceRecord.RDATA as DnsMXRecord; + DnsMXRecord rdata = record.RDATA as DnsMXRecord; if (rdata != null) { jsonWriter.WritePropertyName("preference"); @@ -2558,7 +2558,7 @@ namespace DnsServerCore case DnsResourceRecordType.TXT: { - DnsTXTRecord rdata = resourceRecord.RDATA as DnsTXTRecord; + DnsTXTRecord rdata = record.RDATA as DnsTXTRecord; if (rdata != null) { jsonWriter.WritePropertyName("value"); @@ -2569,14 +2569,14 @@ namespace DnsServerCore case DnsResourceRecordType.NS: { - DnsNSRecord rdata = resourceRecord.RDATA as DnsNSRecord; + DnsNSRecord rdata = record.RDATA as DnsNSRecord; if (rdata != null) { jsonWriter.WritePropertyName("value"); jsonWriter.WriteValue(rdata.NameServer); } - IReadOnlyList glueRecords = resourceRecord.GetGlueRecords(); + IReadOnlyList glueRecords = record.GetGlueRecords(); if (glueRecords.Count > 0) { string glue = null; @@ -2597,7 +2597,7 @@ namespace DnsServerCore case DnsResourceRecordType.CNAME: { - DnsCNAMERecord rdata = resourceRecord.RDATA as DnsCNAMERecord; + DnsCNAMERecord rdata = record.RDATA as DnsCNAMERecord; if (rdata != null) { jsonWriter.WritePropertyName("value"); @@ -2608,7 +2608,7 @@ namespace DnsServerCore case DnsResourceRecordType.SRV: { - DnsSRVRecord rdata = resourceRecord.RDATA as DnsSRVRecord; + DnsSRVRecord rdata = record.RDATA as DnsSRVRecord; if (rdata != null) { jsonWriter.WritePropertyName("priority"); @@ -2628,7 +2628,7 @@ namespace DnsServerCore case DnsResourceRecordType.CAA: { - DnsCAARecord rdata = resourceRecord.RDATA as DnsCAARecord; + DnsCAARecord rdata = record.RDATA as DnsCAARecord; if (rdata != null) { jsonWriter.WritePropertyName("flags"); @@ -2645,7 +2645,7 @@ namespace DnsServerCore case DnsResourceRecordType.ANAME: { - DnsANAMERecord rdata = resourceRecord.RDATA as DnsANAMERecord; + DnsANAMERecord rdata = record.RDATA as DnsANAMERecord; if (rdata != null) { jsonWriter.WritePropertyName("value"); @@ -2656,7 +2656,7 @@ namespace DnsServerCore case DnsResourceRecordType.FWD: { - DnsForwarderRecord rdata = resourceRecord.RDATA as DnsForwarderRecord; + DnsForwarderRecord rdata = record.RDATA as DnsForwarderRecord; if (rdata != null) { jsonWriter.WritePropertyName("protocol"); @@ -2674,7 +2674,7 @@ namespace DnsServerCore using (MemoryStream mS = new MemoryStream()) { - resourceRecord.RDATA.WriteTo(mS, new List()); + record.RDATA.WriteTo(mS, new List()); jsonWriter.WriteValue(Convert.ToBase64String(mS.ToArray())); }