aboutsummaryrefslogtreecommitdiff
path: root/middleware
diff options
context:
space:
mode:
Diffstat (limited to 'middleware')
-rw-r--r--middleware/etcd/etcd.go34
-rw-r--r--middleware/etcd/handler.go4
-rw-r--r--middleware/zone.go15
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])
+ }
+
+}