diff options
-rw-r--r-- | core/dnsserver/address.go | 2 | ||||
-rw-r--r-- | core/dnsserver/address_test.go | 28 | ||||
-rw-r--r-- | core/dnsserver/config.go | 15 | ||||
-rw-r--r-- | core/dnsserver/middleware.go | 52 | ||||
-rw-r--r-- | core/dnsserver/register.go | 10 | ||||
-rw-r--r-- | core/dnsserver/server.go | 3 | ||||
-rw-r--r-- | middleware/cache/setup.go | 2 | ||||
-rw-r--r-- | middleware/chaos/setup.go | 2 | ||||
-rw-r--r-- | middleware/dnssec/setup.go | 2 | ||||
-rw-r--r-- | middleware/errors/setup.go | 2 | ||||
-rw-r--r-- | middleware/etcd/setup.go | 2 | ||||
-rw-r--r-- | middleware/file/setup.go | 2 | ||||
-rw-r--r-- | middleware/kubernetes/setup.go | 2 | ||||
-rw-r--r-- | middleware/loadbalance/setup.go | 3 | ||||
-rw-r--r-- | middleware/log/setup.go | 2 | ||||
-rw-r--r-- | middleware/metrics/setup.go | 2 | ||||
-rw-r--r-- | middleware/proxy/setup.go | 2 | ||||
-rw-r--r-- | middleware/rewrite/setup.go | 2 | ||||
-rw-r--r-- | middleware/secondary/setup.go | 2 | ||||
-rw-r--r-- | middleware/whoami/setup.go | 2 |
20 files changed, 58 insertions, 81 deletions
diff --git a/core/dnsserver/address.go b/core/dnsserver/address.go index 865d082cc..c5493d3d0 100644 --- a/core/dnsserver/address.go +++ b/core/dnsserver/address.go @@ -18,6 +18,8 @@ func (z zoneAddr) String() string { return z.Zone + ":" + z.Port } // normalizeZone parses an zone string into a structured format with separate // host, and port portions, as well as the original input string. +// +// TODO(miek): possibly move this to middleware/normalize.go func normalizeZone(str string) (zoneAddr, error) { var err error diff --git a/core/dnsserver/address_test.go b/core/dnsserver/address_test.go new file mode 100644 index 000000000..2aca80c70 --- /dev/null +++ b/core/dnsserver/address_test.go @@ -0,0 +1,28 @@ +package dnsserver + +import "testing" + +func TestNormalizeZone(t *testing.T) { + for i, test := range []struct { + input string + expected string + shouldErr bool + }{ + {".", ".:53", false}, + {".:54", ".:54", false}, + {"..", ":", true}, + {"..", ":", true}, + } { + addr, err := normalizeZone(test.input) + actual := addr.String() + if test.shouldErr && err == nil { + t.Errorf("Test %d: Expected error, but there wasn't any", i) + } + if !test.shouldErr && err != nil { + t.Errorf("Test %d: Expected no error, but there was one: %v", i, err) + } + if actual != test.expected { + t.Errorf("Test %d: Expected %s but got %s", i, test.expected, actual) + } + } +} diff --git a/core/dnsserver/config.go b/core/dnsserver/config.go index 7af483f21..cbe2fd5da 100644 --- a/core/dnsserver/config.go +++ b/core/dnsserver/config.go @@ -1,6 +1,10 @@ package dnsserver -import "github.com/mholt/caddy" +import ( + "github.com/miekg/coredns/middleware" + + "github.com/mholt/caddy" +) // Config configuration for a single server. type Config struct { @@ -13,14 +17,11 @@ type Config struct { // The port to listen on. Port string - // The directory from which to parse db files, and store keys. - Root string - // Middleware stack. - Middleware []Middleware + Middleware []middleware.Middleware // Compiled middleware stack. - middlewareChain Handler + middlewareChain middleware.Handler } // GetConfig gets the Config that corresponds to c. @@ -33,6 +34,6 @@ func GetConfig(c *caddy.Controller) *Config { // we should only get here during tests because directive // actions typically skip the server blocks where we make // the configs. - ctx.saveConfig(c.Key, &Config{Root: Root}) + ctx.saveConfig(c.Key, &Config{}) return GetConfig(c) } diff --git a/core/dnsserver/middleware.go b/core/dnsserver/middleware.go deleted file mode 100644 index 5bce304b1..000000000 --- a/core/dnsserver/middleware.go +++ /dev/null @@ -1,52 +0,0 @@ -package dnsserver - -import ( - "github.com/miekg/dns" - "golang.org/x/net/context" -) - -type ( - // Middleware is the middle layer which represents the traditional - // idea of middleware: it chains one Handler to the next by being - // passed the next Handler in the chain. - Middleware func(Handler) Handler - - // Handler is like dns.Handler except ServeDNS may return an rcode - // and/or error. - // - // If ServeDNS writes to the response body, it should return a status - // code. If the status code is not one of the following: - // * SERVFAIL (dns.RcodeServerFailure) - // * REFUSED (dns.RecodeRefused) - // * FORMERR (dns.RcodeFormatError) - // * NOTIMP (dns.RcodeNotImplemented) - // - // CoreDNS assumes *no* reply has yet been written. All other response - // codes signal other handlers above it that the response message is - // already written, and that they should not write to it also. - // - // If ServeDNS encounters an error, it should return the error value - // so it can be logged by designated error-handling middleware. - // - // If writing a response after calling another ServeDNS method, the - // returned rcode SHOULD be used when writing the response. - // - // If handling errors after calling another ServeDNS method, the - // returned error value SHOULD be logged or handled accordingly. - // - // Otherwise, return values should be propagated down the middleware - // chain by returning them unchanged. - Handler interface { - ServeDNS(context.Context, dns.ResponseWriter, *dns.Msg) (int, error) - } - - // HandlerFunc is a convenience type like dns.HandlerFunc, except - // ServeDNS returns an rcode and an error. See Handler - // documentation for more information. - HandlerFunc func(context.Context, dns.ResponseWriter, *dns.Msg) (int, error) -) - -// ServeDNS implements the Handler interface. -func (f HandlerFunc) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { - return f(ctx, w, r) -} diff --git a/core/dnsserver/register.go b/core/dnsserver/register.go index 047fb673f..25927782c 100644 --- a/core/dnsserver/register.go +++ b/core/dnsserver/register.go @@ -6,6 +6,8 @@ import ( "net" "time" + "github.com/miekg/coredns/middleware" + "github.com/mholt/caddy" "github.com/mholt/caddy/caddyfile" ) @@ -96,7 +98,7 @@ func (h *dnsContext) MakeServers() ([]caddy.Server, error) { } // AddMiddleware adds a middleware to a site's middleware stack. -func (c *Config) AddMiddleware(m Middleware) { +func (c *Config) AddMiddleware(m middleware.Middleware) { c.Middleware = append(c.Middleware, m) } @@ -126,17 +128,11 @@ func groupConfigsByListenAddr(configs []*Config) (map[string][]*Config, error) { const ( // DefaultPort is the default port. DefaultPort = "2053" - // DefaultRoot is the default root folder. - DefaultRoot = "." ) // These "soft defaults" are configurable by // command line flags, etc. var ( - // Root is the site root - // TODO(miek): double check if this is used and if we want to use it. - Root = DefaultRoot - // Port is the site port Port = DefaultPort diff --git a/core/dnsserver/server.go b/core/dnsserver/server.go index 4e02f1c21..9f2a8a024 100644 --- a/core/dnsserver/server.go +++ b/core/dnsserver/server.go @@ -8,6 +8,7 @@ import ( "sync" "time" + "github.com/miekg/coredns/middleware" "github.com/miekg/coredns/middleware/pkg/edns" "github.com/miekg/coredns/request" @@ -58,7 +59,7 @@ func NewServer(addr string, group []*Config) (*Server, error) { // set the config per zone s.zones[site.Zone] = site // compile custom middleware for everything - var stack Handler + var stack middleware.Handler for i := len(site.Middleware) - 1; i >= 0; i-- { stack = site.Middleware[i](stack) } diff --git a/middleware/cache/setup.go b/middleware/cache/setup.go index 6b003503b..05811a276 100644 --- a/middleware/cache/setup.go +++ b/middleware/cache/setup.go @@ -22,7 +22,7 @@ func setup(c *caddy.Controller) error { if err != nil { return middleware.Error("cache", err) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return NewCache(ttl, zones, next) }) diff --git a/middleware/chaos/setup.go b/middleware/chaos/setup.go index 18746f1b0..124c7d533 100644 --- a/middleware/chaos/setup.go +++ b/middleware/chaos/setup.go @@ -20,7 +20,7 @@ func setup(c *caddy.Controller) error { return middleware.Error("chaos", err) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return Chaos{Next: next, Version: version, Authors: authors} }) diff --git a/middleware/dnssec/setup.go b/middleware/dnssec/setup.go index 83ca785f4..74a70f87f 100644 --- a/middleware/dnssec/setup.go +++ b/middleware/dnssec/setup.go @@ -22,7 +22,7 @@ func setup(c *caddy.Controller) error { return middleware.Error("dnssec", err) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return New(zones, keys, next) }) diff --git a/middleware/errors/setup.go b/middleware/errors/setup.go index a5fa86921..437c6a996 100644 --- a/middleware/errors/setup.go +++ b/middleware/errors/setup.go @@ -54,7 +54,7 @@ func setup(c *caddy.Controller) error { } handler.Log = log.New(writer, "", 0) - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { handler.Next = next return handler }) diff --git a/middleware/etcd/setup.go b/middleware/etcd/setup.go index 37f817e5c..47e253a69 100644 --- a/middleware/etcd/setup.go +++ b/middleware/etcd/setup.go @@ -37,7 +37,7 @@ func setup(c *caddy.Controller) error { }) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { e.Next = next return e }) diff --git a/middleware/file/setup.go b/middleware/file/setup.go index 65496d2eb..5a2c80e6b 100644 --- a/middleware/file/setup.go +++ b/middleware/file/setup.go @@ -37,7 +37,7 @@ func setup(c *caddy.Controller) error { }) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return File{Next: next, Zones: zones} }) diff --git a/middleware/kubernetes/setup.go b/middleware/kubernetes/setup.go index d68f69921..f976ba75b 100644 --- a/middleware/kubernetes/setup.go +++ b/middleware/kubernetes/setup.go @@ -42,7 +42,7 @@ func setup(c *caddy.Controller) error { return kubernetes.APIConn.Stop() }) - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { kubernetes.Next = next return kubernetes }) diff --git a/middleware/loadbalance/setup.go b/middleware/loadbalance/setup.go index ef3f35f03..9f6e030d8 100644 --- a/middleware/loadbalance/setup.go +++ b/middleware/loadbalance/setup.go @@ -3,6 +3,7 @@ package loadbalance import ( "github.com/mholt/caddy" "github.com/miekg/coredns/core/dnsserver" + "github.com/miekg/coredns/middleware" ) func init() { @@ -17,7 +18,7 @@ func setup(c *caddy.Controller) error { // TODO(miek): block and option parsing } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return RoundRobin{Next: next} }) diff --git a/middleware/log/setup.go b/middleware/log/setup.go index a86aa17f9..e14bebfe8 100644 --- a/middleware/log/setup.go +++ b/middleware/log/setup.go @@ -56,7 +56,7 @@ func setup(c *caddy.Controller) error { return nil }) - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return Logger{Next: next, Rules: rules, ErrorFunc: dnsserver.DefaultErrorFunc} }) diff --git a/middleware/metrics/setup.go b/middleware/metrics/setup.go index 36e131bf3..eee886f00 100644 --- a/middleware/metrics/setup.go +++ b/middleware/metrics/setup.go @@ -22,7 +22,7 @@ func setup(c *caddy.Controller) error { return middleware.Error("prometheus", err) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { m.Next = next return m }) diff --git a/middleware/proxy/setup.go b/middleware/proxy/setup.go index 3757fbbe3..865eef4b1 100644 --- a/middleware/proxy/setup.go +++ b/middleware/proxy/setup.go @@ -19,7 +19,7 @@ func setup(c *caddy.Controller) error { if err != nil { return middleware.Error("proxy", err) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return Proxy{Next: next, Client: Clients(), Upstreams: upstreams} }) diff --git a/middleware/rewrite/setup.go b/middleware/rewrite/setup.go index 89c80e868..707ad962a 100644 --- a/middleware/rewrite/setup.go +++ b/middleware/rewrite/setup.go @@ -23,7 +23,7 @@ func setup(c *caddy.Controller) error { return middleware.Error("rewrite", err) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return Rewrite{Next: next, Rules: rewrites} }) diff --git a/middleware/secondary/setup.go b/middleware/secondary/setup.go index 8de9c540c..d0367094d 100644 --- a/middleware/secondary/setup.go +++ b/middleware/secondary/setup.go @@ -36,7 +36,7 @@ func setup(c *caddy.Controller) error { } } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return Secondary{file.File{Next: next, Zones: zones}} }) diff --git a/middleware/whoami/setup.go b/middleware/whoami/setup.go index ad9995085..285060bbe 100644 --- a/middleware/whoami/setup.go +++ b/middleware/whoami/setup.go @@ -20,7 +20,7 @@ func setupWhoami(c *caddy.Controller) error { return middleware.Error("whoami", c.ArgErr()) } - dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler { + dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler { return Whoami{Next: next} }) |