diff options
Diffstat (limited to 'middleware')
-rw-r--r-- | middleware/etcd/etcd.go | 34 | ||||
-rw-r--r-- | middleware/etcd/handler.go | 4 | ||||
-rw-r--r-- | middleware/zone.go | 15 |
3 files changed, 28 insertions, 25 deletions
diff --git a/middleware/etcd/etcd.go b/middleware/etcd/etcd.go index 20dff2506..d1e6bfadf 100644 --- a/middleware/etcd/etcd.go +++ b/middleware/etcd/etcd.go @@ -14,28 +14,14 @@ import ( "golang.org/x/net/context" ) -type ( - Etcd struct { - Next middleware.Handler - Zones []string - Proxy proxy.Proxy - client etcdc.KeysAPI - ctx context.Context - inflight *singleflight.Group - PathPrefix string - } -) - -func NewEtcd(client etcdc.KeysAPI, next middleware.Handler, zones []string) Etcd { - return Etcd{ - Next: next, - Zones: zones, - Proxy: proxy.New([]string{"8.8.8.8:53"}), - client: client, - ctx: context.Background(), - inflight: &singleflight.Group{}, - PathPrefix: "skydns", // TODO(miek): configurable - } +type Etcd struct { + Next middleware.Handler + Zones []string + Proxy proxy.Proxy + Client etcdc.KeysAPI + Ctx context.Context + Inflight *singleflight.Group + PathPrefix string } func (g Etcd) Records(name string, exact bool) ([]msg.Service, error) { @@ -57,8 +43,8 @@ func (g Etcd) Records(name string, exact bool) ([]msg.Service, error) { // Get is a wrapper for client.Get that uses SingleInflight to suppress multiple outstanding queries. func (g Etcd) Get(path string, recursive bool) (*etcdc.Response, error) { - resp, err := g.inflight.Do(path, func() (interface{}, error) { - r, e := g.client.Get(g.ctx, path, &etcdc.GetOptions{Sort: false, Recursive: recursive}) + resp, err := g.Inflight.Do(path, func() (interface{}, error) { + r, e := g.Client.Get(g.Ctx, path, &etcdc.GetOptions{Sort: false, Recursive: recursive}) if e != nil { return nil, e } diff --git a/middleware/etcd/handler.go b/middleware/etcd/handler.go index 95f60c18e..cad0519ba 100644 --- a/middleware/etcd/handler.go +++ b/middleware/etcd/handler.go @@ -2,6 +2,7 @@ package etcd import ( "github.com/miekg/coredns/middleware" + "github.com/miekg/dns" "golang.org/x/net/context" ) @@ -35,6 +36,9 @@ func (e Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i case "SRV": records, extra, err = e.SRV(zone, state) default: + // For SOA and NS we might still want this + // and use dns.<zones> as the name to put these + // also for stub // rwrite and return // Nodata response // also catch other types, so that they return NODATA diff --git a/middleware/zone.go b/middleware/zone.go index aa1171c28..13255411c 100644 --- a/middleware/zone.go +++ b/middleware/zone.go @@ -1,6 +1,10 @@ package middleware -import "strings" +import ( + "strings" + + "github.com/miekg/dns" +) type Zones []string @@ -11,6 +15,7 @@ func (z Zones) Matches(qname string) string { zone := "" // TODO(miek): use IsSubDomain here? for _, zname := range z { + println(zname, qname) if strings.HasSuffix(qname, zname) { if len(zname) > len(zone) { zone = zname @@ -19,3 +24,11 @@ func (z Zones) Matches(qname string) string { } return zone } + +// Fully qualify all zones in z +func (z Zones) FullyQualify() { + for i, _ := range z { + z[i] = dns.Fqdn(z[i]) + } + +} |