diff options
author | 2022-02-01 16:54:06 -0500 | |
---|---|---|
committer | 2022-02-01 16:54:06 -0500 | |
commit | 911891f48513eef99ba0c80fae0c1e89f70649fe (patch) | |
tree | 36fb432a2f1de821ead00ac288097908118ed5c0 /plugin | |
parent | 49ee97994ee7677b521885eed965dac49728c77e (diff) | |
download | coredns-911891f48513eef99ba0c80fae0c1e89f70649fe.tar.gz coredns-911891f48513eef99ba0c80fae0c1e89f70649fe.tar.zst coredns-911891f48513eef99ba0c80fae0c1e89f70649fe.zip |
plugin/rewrite: Write failures with ResponseReverter (#5150)
* write failures with ResponseReverter instead of letting server write them
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* fix comment
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/rewrite/rewrite.go | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/plugin/rewrite/rewrite.go b/plugin/rewrite/rewrite.go index a1e474c29..c315fa73a 100644 --- a/plugin/rewrite/rewrite.go +++ b/plugin/rewrite/rewrite.go @@ -57,7 +57,17 @@ func (rw Rewrite) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg if !rw.RevertPolicy.DoRevert() { return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, w, r) } - return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, r) + rcode, err := plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, r) + if plugin.ClientWrite(rcode) { + return rcode, err + } + // The next plugins didn't write a response, so write one now with the ResponseReverter. + // If server.ServeDNS does this then it will create an answer mismatch. + res := new(dns.Msg).SetRcode(r, rcode) + state.SizeAndDo(res) + wr.WriteMsg(res) + // return success, so server does not write a second error response to client + return dns.RcodeSuccess, err } } } |