diff options
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/forward/forward.go | 3 | ||||
-rw-r--r-- | plugin/forward/lookup.go | 1 | ||||
-rw-r--r-- | plugin/forward/truncated.go | 29 |
3 files changed, 1 insertions, 32 deletions
diff --git a/plugin/forward/forward.go b/plugin/forward/forward.go index dfa1aaca1..66526509b 100644 --- a/plugin/forward/forward.go +++ b/plugin/forward/forward.go @@ -116,7 +116,7 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg continue } // Retry with TCP if truncated and prefer_udp configured. - if err == dns.ErrTruncated && !opts.forceTCP && f.opts.preferUDP { + if ret != nil && ret.Truncated && !opts.forceTCP && f.opts.preferUDP { opts.forceTCP = true continue } @@ -127,7 +127,6 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg child.Finish() } - ret, err = truncated(state, ret, err) upstreamErr = err if err != nil { diff --git a/plugin/forward/lookup.go b/plugin/forward/lookup.go index 855230b9a..f3eb8f34a 100644 --- a/plugin/forward/lookup.go +++ b/plugin/forward/lookup.go @@ -35,7 +35,6 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) { ret, err := proxy.Connect(context.Background(), state, f.opts) - ret, err = truncated(state, ret, err) upstreamErr = err if err != nil { diff --git a/plugin/forward/truncated.go b/plugin/forward/truncated.go deleted file mode 100644 index fb821d335..000000000 --- a/plugin/forward/truncated.go +++ /dev/null @@ -1,29 +0,0 @@ -package forward - -import ( - "github.com/coredns/coredns/request" - - "github.com/miekg/dns" -) - -// truncated looks at the error and if truncated return a nil error -// and a possible reconstructed dns message if that was nil. -func truncated(state request.Request, ret *dns.Msg, err error) (*dns.Msg, error) { - // If you query for instance ANY isc.org; you get a truncated query back which miekg/dns fails to unpack - // because the RRs are not finished. The returned message can be useful or useless. Return the original - // query with some header bits set that they should retry with TCP. - if err != dns.ErrTruncated { - return ret, err - } - - // We may or may not have something sensible... if not reassemble something to send to the client. - m := ret - if ret == nil { - m = new(dns.Msg) - m.SetReply(state.Req) - m.Truncated = true - m.Authoritative = true - m.Rcode = dns.RcodeSuccess - } - return m, nil -} |