diff --git a/plugin/cache/cache_test.go b/plugin/cache/cache_test.go index 7c65bca64..4afaf73c4 100644 --- a/plugin/cache/cache_test.go +++ b/plugin/cache/cache_test.go @@ -17,7 +17,6 @@ type cacheTestCase struct { test.Case in test.Case AuthenticatedData bool - Authoritative bool RecursionAvailable bool Truncated bool shouldCache bool @@ -25,7 +24,7 @@ type cacheTestCase struct { var cacheTestCases = []cacheTestCase{ { - RecursionAvailable: true, AuthenticatedData: true, Authoritative: true, + RecursionAvailable: true, AuthenticatedData: true, Case: test.Case{ Qname: "miek.nl.", Qtype: dns.TypeMX, Answer: []dns.RR{ @@ -43,7 +42,7 @@ var cacheTestCases = []cacheTestCase{ shouldCache: true, }, { - RecursionAvailable: true, AuthenticatedData: true, Authoritative: true, + RecursionAvailable: true, AuthenticatedData: true, Case: test.Case{ Qname: "mIEK.nL.", Qtype: dns.TypeMX, Answer: []dns.RR{ @@ -70,7 +69,7 @@ var cacheTestCases = []cacheTestCase{ shouldCache: false, }, { - RecursionAvailable: true, Authoritative: true, + RecursionAvailable: true, Case: test.Case{ Rcode: dns.RcodeNameError, Qname: "example.org.", Qtype: dns.TypeA, @@ -88,7 +87,7 @@ var cacheTestCases = []cacheTestCase{ shouldCache: true, }, { - RecursionAvailable: true, Authoritative: false, + RecursionAvailable: true, Case: test.Case{ Rcode: dns.RcodeServerFailure, Qname: "example.org.", Qtype: dns.TypeA, @@ -102,7 +101,7 @@ var cacheTestCases = []cacheTestCase{ shouldCache: true, }, { - RecursionAvailable: true, Authoritative: false, + RecursionAvailable: true, Case: test.Case{ Rcode: dns.RcodeNotImplemented, Qname: "example.org.", Qtype: dns.TypeA, @@ -116,7 +115,7 @@ var cacheTestCases = []cacheTestCase{ shouldCache: true, }, { - RecursionAvailable: true, Authoritative: true, + RecursionAvailable: true, Case: test.Case{ Qname: "miek.nl.", Qtype: dns.TypeMX, Do: true, @@ -138,7 +137,7 @@ var cacheTestCases = []cacheTestCase{ shouldCache: false, }, { - RecursionAvailable: true, Authoritative: true, + RecursionAvailable: true, Case: test.Case{ Qname: "example.org.", Qtype: dns.TypeMX, Do: true, @@ -164,7 +163,7 @@ var cacheTestCases = []cacheTestCase{ func cacheMsg(m *dns.Msg, tc cacheTestCase) *dns.Msg { m.RecursionAvailable = tc.RecursionAvailable m.AuthenticatedData = tc.AuthenticatedData - m.Authoritative = tc.Authoritative + m.Authoritative = true m.Rcode = tc.Rcode m.Truncated = tc.Truncated m.Answer = tc.in.Answer diff --git a/plugin/cache/item.go b/plugin/cache/item.go index f4858c3b1..edc7610a4 100644 --- a/plugin/cache/item.go +++ b/plugin/cache/item.go @@ -9,7 +9,6 @@ import ( type item struct { Rcode int - Authoritative bool AuthenticatedData bool RecursionAvailable bool Answer []dns.RR @@ -25,7 +24,6 @@ type item struct { func newItem(m *dns.Msg, now time.Time, d time.Duration) *item { i := new(item) i.Rcode = m.Rcode - i.Authoritative = m.Authoritative i.AuthenticatedData = m.AuthenticatedData i.RecursionAvailable = m.RecursionAvailable i.Answer = m.Answer @@ -56,7 +54,10 @@ func (i *item) toMsg(m *dns.Msg, now time.Time) *dns.Msg { m1 := new(dns.Msg) m1.SetReply(m) - m1.Authoritative = false + // Set this to true as some DNS clients disgard the *entire* packet when it's non-authoritative. + // This is probably not according to spec, but the bit itself is not super useful as this point, so + // just set it to true. + m1.Authoritative = true m1.AuthenticatedData = i.AuthenticatedData m1.RecursionAvailable = i.RecursionAvailable m1.Rcode = i.Rcode