mirror of
https://github.com/coredns/coredns.git
synced 2025-11-13 07:22:16 -05:00
Cleanup: put middleware helper functions in pkgs (#245)
Move all (almost all) Go files in middleware into their own packages. This makes for better naming and discoverability. Lot of changes elsewhere to make this change. The middleware.State was renamed to request.Request which is better, but still does not cover all use-cases. It was also moved out middleware because it is used by `dnsserver` as well. A pkg/dnsutil packages was added for shared, handy, dns util functions. All normalize functions are now put in normalize.go
This commit is contained in:
@@ -4,8 +4,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/middleware/test"
|
||||
"github.com/miekg/coredns/request"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
@@ -16,7 +16,7 @@ func TestZoneSigningBlackLies(t *testing.T) {
|
||||
defer rm2()
|
||||
|
||||
m := testNxdomainMsg()
|
||||
state := middleware.State{Req: m}
|
||||
state := request.Request{Req: m}
|
||||
m = d.Sign(state, "miek.nl.", time.Now().UTC())
|
||||
if !section(m.Ns, 2) {
|
||||
t.Errorf("authority section should have 2 sig")
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/middleware/test"
|
||||
"github.com/miekg/coredns/request"
|
||||
)
|
||||
|
||||
func TestCacheSet(t *testing.T) {
|
||||
@@ -20,7 +20,7 @@ func TestCacheSet(t *testing.T) {
|
||||
}
|
||||
|
||||
m := testMsg()
|
||||
state := middleware.State{Req: m}
|
||||
state := request.Request{Req: m}
|
||||
k := key(m.Answer) // calculate *before* we add the sig
|
||||
d := New([]string{"miek.nl."}, []*DNSKEY{dnskey}, nil)
|
||||
m = d.Sign(state, "miek.nl.", time.Now().UTC())
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/request"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
@@ -50,7 +50,7 @@ func ParseKeyFile(pubFile, privFile string) (*DNSKEY, error) {
|
||||
}
|
||||
|
||||
// getDNSKEY returns the correct DNSKEY to the client. Signatures are added when do is true.
|
||||
func (d Dnssec) getDNSKEY(state middleware.State, zone string, do bool) *dns.Msg {
|
||||
func (d Dnssec) getDNSKEY(state request.Request, zone string, do bool) *dns.Msg {
|
||||
keys := make([]dns.RR, len(d.keys))
|
||||
for i, k := range d.keys {
|
||||
keys[i] = dns.Copy(k.K)
|
||||
|
||||
@@ -4,7 +4,9 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/singleflight"
|
||||
"github.com/miekg/coredns/middleware/pkg/response"
|
||||
"github.com/miekg/coredns/middleware/pkg/singleflight"
|
||||
"github.com/miekg/coredns/request"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
gcache "github.com/patrickmn/go-cache"
|
||||
@@ -28,20 +30,21 @@ func New(zones []string, keys []*DNSKEY, next middleware.Handler) Dnssec {
|
||||
}
|
||||
}
|
||||
|
||||
// Sign signs the message m. it takes care of negative or nodata responses. It
|
||||
// Sign signs the message in state. it takes care of negative or nodata responses. It
|
||||
// uses NSEC black lies for authenticated denial of existence. Signatures
|
||||
// creates will be cached for a short while. By default we sign for 8 days,
|
||||
// starting 3 hours ago.
|
||||
func (d Dnssec) Sign(state middleware.State, zone string, now time.Time) *dns.Msg {
|
||||
func (d Dnssec) Sign(state request.Request, zone string, now time.Time) *dns.Msg {
|
||||
req := state.Req
|
||||
mt, _ := middleware.Classify(req) // TODO(miek): need opt record here?
|
||||
if mt == middleware.Delegation {
|
||||
|
||||
mt, _ := response.Classify(req) // TODO(miek): need opt record here?
|
||||
if mt == response.Delegation {
|
||||
return req
|
||||
}
|
||||
|
||||
incep, expir := incepExpir(now)
|
||||
|
||||
if mt == middleware.NameError {
|
||||
if mt == response.NameError {
|
||||
if req.Ns[0].Header().Rrtype != dns.TypeSOA || len(req.Ns) > 1 {
|
||||
return req
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/middleware/test"
|
||||
"github.com/miekg/coredns/request"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
@@ -16,7 +16,7 @@ func TestZoneSigning(t *testing.T) {
|
||||
defer rm2()
|
||||
|
||||
m := testMsg()
|
||||
state := middleware.State{Req: m}
|
||||
state := request.Request{Req: m}
|
||||
|
||||
m = d.Sign(state, "miek.nl.", time.Now().UTC())
|
||||
if !section(m.Answer, 1) {
|
||||
@@ -44,7 +44,7 @@ func TestZoneSigningDouble(t *testing.T) {
|
||||
d.keys = append(d.keys, key1)
|
||||
|
||||
m := testMsg()
|
||||
state := middleware.State{Req: m}
|
||||
state := request.Request{Req: m}
|
||||
m = d.Sign(state, "miek.nl.", time.Now().UTC())
|
||||
if !section(m.Answer, 2) {
|
||||
t.Errorf("answer section should have 1 sig")
|
||||
@@ -68,7 +68,7 @@ func TestSigningDifferentZone(t *testing.T) {
|
||||
}
|
||||
|
||||
m := testMsgEx()
|
||||
state := middleware.State{Req: m}
|
||||
state := request.Request{Req: m}
|
||||
d := New([]string{"example.org."}, []*DNSKEY{key}, nil)
|
||||
m = d.Sign(state, "example.org.", time.Now().UTC())
|
||||
if !section(m.Answer, 1) {
|
||||
@@ -86,7 +86,7 @@ func TestSigningCname(t *testing.T) {
|
||||
defer rm2()
|
||||
|
||||
m := testMsgCname()
|
||||
state := middleware.State{Req: m}
|
||||
state := request.Request{Req: m}
|
||||
m = d.Sign(state, "miek.nl.", time.Now().UTC())
|
||||
if !section(m.Answer, 1) {
|
||||
t.Errorf("answer section should have 1 sig")
|
||||
@@ -100,7 +100,7 @@ func TestZoneSigningDelegation(t *testing.T) {
|
||||
defer rm2()
|
||||
|
||||
m := testDelegationMsg()
|
||||
state := middleware.State{Req: m}
|
||||
state := request.Request{Req: m}
|
||||
m = d.Sign(state, "miek.nl.", time.Now().UTC())
|
||||
if !section(m.Ns, 0) {
|
||||
t.Errorf("authority section should have 0 sig")
|
||||
|
||||
@@ -2,6 +2,7 @@ package dnssec
|
||||
|
||||
import (
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/request"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
@@ -10,7 +11,7 @@ import (
|
||||
|
||||
// ServeDNS implements the middleware.Handler interface.
|
||||
func (d Dnssec) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
||||
state := middleware.State{W: w, Req: r}
|
||||
state := request.Request{W: w, Req: r}
|
||||
|
||||
do := state.Do()
|
||||
qname := state.Name()
|
||||
|
||||
@@ -5,8 +5,8 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/middleware/file"
|
||||
"github.com/miekg/coredns/middleware/pkg/dnsrecorder"
|
||||
"github.com/miekg/coredns/middleware/test"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
@@ -83,14 +83,14 @@ func TestLookupZone(t *testing.T) {
|
||||
for _, tc := range dnsTestCases {
|
||||
m := tc.Msg()
|
||||
|
||||
rec := middleware.NewResponseRecorder(&test.ResponseWriter{})
|
||||
rec := dnsrecorder.New(&test.ResponseWriter{})
|
||||
_, err := dh.ServeDNS(ctx, rec, m)
|
||||
if err != nil {
|
||||
t.Errorf("expected no error, got %v\n", err)
|
||||
return
|
||||
}
|
||||
resp := rec.Msg()
|
||||
|
||||
resp := rec.Msg
|
||||
sort.Sort(test.RRSet(resp.Answer))
|
||||
sort.Sort(test.RRSet(resp.Ns))
|
||||
sort.Sort(test.RRSet(resp.Extra))
|
||||
@@ -121,14 +121,14 @@ func TestLookupDNSKEY(t *testing.T) {
|
||||
for _, tc := range dnssecTestCases {
|
||||
m := tc.Msg()
|
||||
|
||||
rec := middleware.NewResponseRecorder(&test.ResponseWriter{})
|
||||
rec := dnsrecorder.New(&test.ResponseWriter{})
|
||||
_, err := dh.ServeDNS(ctx, rec, m)
|
||||
if err != nil {
|
||||
t.Errorf("expected no error, got %v\n", err)
|
||||
return
|
||||
}
|
||||
resp := rec.Msg()
|
||||
|
||||
resp := rec.Msg
|
||||
if !resp.Authoritative {
|
||||
t.Errorf("Authoritative Answer should be true, got false")
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/request"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
@@ -20,7 +22,7 @@ func NewDnssecResponseWriter(w dns.ResponseWriter, d Dnssec) *DnssecResponseWrit
|
||||
func (d *DnssecResponseWriter) WriteMsg(res *dns.Msg) error {
|
||||
// By definition we should sign anything that comes back, we should still figure out for
|
||||
// which zone it should be.
|
||||
state := middleware.State{W: d.ResponseWriter, Req: res}
|
||||
state := request.Request{W: d.ResponseWriter, Req: res}
|
||||
|
||||
qname := state.Name()
|
||||
zone := middleware.Zones(d.d.zones).Matches(qname)
|
||||
|
||||
Reference in New Issue
Block a user