From 5d39446f865218cd7496e30e9cb82218cce76d0d Mon Sep 17 00:00:00 2001 From: Dinar Valeev Date: Wed, 31 Mar 2021 20:39:32 +0200 Subject: [PATCH] Act based on RFC and return NOERROR and nodata https://tools.ietf.org/html/rfc4074#section-3 suggests we have to return NOERROR status and NODATA (empty reply) Signed-off-by: Dinar Valeev --- charts/coredns/values.yaml | 2 +- gateway.go | 3 --- terratest/test/basic_test.go | 9 ++++++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/charts/coredns/values.yaml b/charts/coredns/values.yaml index d16a75e..89ae65a 100644 --- a/charts/coredns/values.yaml +++ b/charts/coredns/values.yaml @@ -28,7 +28,7 @@ coredns: - name: forward parameters: . /etc/resolv.conf - name: k8s_crd - parameters: . + parameters: example.org configBlock: |- resources DNSEndpoint apex dns1 diff --git a/gateway.go b/gateway.go index 3c507e0..9db5b23 100644 --- a/gateway.go +++ b/gateway.go @@ -162,9 +162,6 @@ func (gw *Gateway) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Ms switch state.QType() { case dns.TypeA: m.Answer = gw.A(state, addrs, ttl) - case dns.TypeAAAA: - m.Ns = []dns.RR{gw.soa(state)} - m.Rcode = dns.RcodeNameError default: m.Ns = []dns.RR{gw.soa(state)} } diff --git a/terratest/test/basic_test.go b/terratest/test/basic_test.go index 5a6368e..a91716f 100644 --- a/terratest/test/basic_test.go +++ b/terratest/test/basic_test.go @@ -107,9 +107,16 @@ func TestBasicExample(t *testing.T) { assert.Equal(t, uint32(123), msg.Answer[0].(*dns.A).Hdr.Ttl) }) - t.Run("Type AAAA returns Rcode 3", func(t *testing.T) { + t.Run("Type AAAA returns Rcode 0", func(t *testing.T) { msg, err := DigMsg(t, "localhost", 1053, "host1.example.org", dns.TypeAAAA) require.NoError(t, err) + assert.Equal(t, dns.RcodeSuccess, msg.Rcode) + assert.Equal(t, 0, len(msg.Answer)) + }) + t.Run("Type AAAA returns Rcode 3 for non existing host", func(t *testing.T) { + msg, err := DigMsg(t, "localhost", 1053, "nonexistent.example.org", dns.TypeAAAA) + require.NoError(t, err) assert.Equal(t, dns.RcodeNameError, msg.Rcode) + assert.Equal(t, 0, len(msg.Answer)) }) }