aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'plugin')
-rw-r--r--plugin/forward/forward.go3
-rw-r--r--plugin/forward/lookup.go1
-rw-r--r--plugin/forward/truncated.go29
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
-}