From 0919216d3ca513d6ae18ffb0ed35b6a89fd393c6 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Wed, 9 Nov 2016 21:26:49 +0000 Subject: [PATCH 1/4] middleware/{file, auto}: resolve external CNAMEs Do the same thing as in etcd and give the option of externally resolving CNAME. This is needed when CoreDNS is a proxy as well is serving zones. --- middleware/auto/README.md | 6 ++++ middleware/auto/auto.go | 2 ++ middleware/auto/setup.go | 15 +++++++++ middleware/etcd/README.md | 4 +-- middleware/etcd/setup_test.go | 2 +- middleware/file/README.md | 3 ++ middleware/file/cname_test.go | 63 ++++++++++++++++++++++++++++++++++- middleware/file/lookup.go | 19 +++++++++-- middleware/file/setup.go | 16 +++++++++ middleware/file/zone.go | 2 ++ 10 files changed, 125 insertions(+), 7 deletions(-) diff --git a/middleware/auto/README.md b/middleware/auto/README.md index 94a606708..64807b821 100644 --- a/middleware/auto/README.md +++ b/middleware/auto/README.md @@ -13,6 +13,8 @@ zonefile. New zones or changed zone are automatically picked up from disk. ~~~ auto [ZONES...] { directory DIR [REGEXP ORIGIN_TEMPLATE [TIMEOUT]] + no_reload + upstream ADDRESS... } ~~~ @@ -26,6 +28,10 @@ are used. name `db.example.com`, the extracted origin will be `example.com`. **TIMEOUT** specifies how often CoreDNS should scan the directory, the default is every 60 seconds. This value is in seconds. The minimum value is 1 second. +* `no_reload` by default CoreDNS will reload a zone from disk whenever it detects a change to the + file. This option disables that behavior. +* `upstream` defines upstream resolvers to be used resolve external names found (think CNAMEs) + pointing to external names. All directives from the *file* middleware are supported. Note that *auto* will load all zones found, even though the directive might only receive queries for a specific zone. I.e: diff --git a/middleware/auto/auto.go b/middleware/auto/auto.go index eaff7fd18..ec04a8766 100644 --- a/middleware/auto/auto.go +++ b/middleware/auto/auto.go @@ -9,6 +9,7 @@ import ( "github.com/miekg/coredns/middleware" "github.com/miekg/coredns/middleware/file" "github.com/miekg/coredns/middleware/metrics" + "github.com/miekg/coredns/middleware/proxy" "github.com/miekg/coredns/request" "github.com/miekg/dns" @@ -33,6 +34,7 @@ type ( // In the future this should be something like ZoneMeta that contains all this stuff. transferTo []string noReload bool + Proxy proxy.Proxy // Proxy for looking up names during the resolution process duration time.Duration } diff --git a/middleware/auto/setup.go b/middleware/auto/setup.go index 7681ea957..2d397a079 100644 --- a/middleware/auto/setup.go +++ b/middleware/auto/setup.go @@ -2,6 +2,7 @@ package auto import ( "log" + "net" "os" "path" "regexp" @@ -12,6 +13,7 @@ import ( "github.com/miekg/coredns/middleware" "github.com/miekg/coredns/middleware/file" "github.com/miekg/coredns/middleware/metrics" + "github.com/miekg/coredns/middleware/proxy" "github.com/mholt/caddy" ) @@ -142,6 +144,19 @@ func autoParse(c *caddy.Controller) (Auto, error) { case "no_reload": a.loader.noReload = true + case "upstream": + args := c.RemainingArgs() + if len(args) == 0 { + return a, false, c.ArgErr() + } + for i := 0; i < len(args); i++ { + h, p, e := net.SplitHostPort(args[i]) + if e != nil && p == "" { + args[i] = h + ":53" + } + } + a.loader.Proxy = proxy.New(args) + default: t, _, e := file.TransferParse(c, false) if e != nil { diff --git a/middleware/etcd/README.md b/middleware/etcd/README.md index edb47e54f..0ec8f3271 100644 --- a/middleware/etcd/README.md +++ b/middleware/etcd/README.md @@ -35,8 +35,8 @@ etcd [ZONES...] { under the *first* zone specified. * **PATH** the path inside etcd. Defaults to "/skydns". * **ENDPOINT** the etcd endpoints. Defaults to "http://localhost:2397". -* `upstream` upstream resolvers to be used resolve external names found in etcd (think CNAMEs) - pointing to external names. If you want CoreDNS to act as a proxy for clients, you'll need to add +* `upstream` defines upstream resolvers to be used resolve external names found (think CNAMEs) + pointing to external names. If you want CoreDNS also to act as a proxy for clients, you'll need to add the proxy middleware. * `tls` followed the cert, key and the CA's cert filenames. * `debug` allows for debug queries. Prefix the name with `o-o.debug.` to retrieve extra information in the diff --git a/middleware/etcd/setup_test.go b/middleware/etcd/setup_test.go index 6e1eabdcd..c1e33109c 100644 --- a/middleware/etcd/setup_test.go +++ b/middleware/etcd/setup_test.go @@ -9,7 +9,6 @@ import ( "testing" "time" - "github.com/mholt/caddy" "github.com/miekg/coredns/middleware/etcd/msg" "github.com/miekg/coredns/middleware/pkg/dnsrecorder" "github.com/miekg/coredns/middleware/pkg/singleflight" @@ -17,6 +16,7 @@ import ( "github.com/miekg/coredns/middleware/test" etcdc "github.com/coreos/etcd/client" + "github.com/mholt/caddy" "github.com/miekg/dns" "golang.org/x/net/context" ) diff --git a/middleware/file/README.md b/middleware/file/README.md index 4cc27e2de..283986945 100644 --- a/middleware/file/README.md +++ b/middleware/file/README.md @@ -27,6 +27,7 @@ TSIG key information, something like `transfer out [ADDRESS...] key [NAME[:ALG]] file DBFILE [ZONES... ] { transfer to ADDRESS... no_reload + upstream ADDRESS... } ~~~ @@ -36,6 +37,8 @@ file DBFILE [ZONES... ] { When an address is specified a notify message will be send whenever the zone is reloaded. * `no_reload` by default CoreDNS will reload a zone from disk whenever it detects a change to the file. This option disables that behavior. +* `upstream` defines upstream resolvers to be used resolve external names found (think CNAMEs) + pointing to external names. ## Examples diff --git a/middleware/file/cname_test.go b/middleware/file/cname_test.go index 800020068..2388aef33 100644 --- a/middleware/file/cname_test.go +++ b/middleware/file/cname_test.go @@ -6,6 +6,7 @@ import ( "testing" "github.com/miekg/coredns/middleware/pkg/dnsrecorder" + "github.com/miekg/coredns/middleware/proxy" "github.com/miekg/coredns/middleware/test" "github.com/miekg/dns" @@ -68,6 +69,12 @@ var cnameTestCases = []test.Case{ test.CNAME("www3.example.org. 1800 IN CNAME www2.example.org."), }, }, + { + Qname: "dangling.example.org.", Qtype: dns.TypeA, + Answer: []dns.RR{ + test.CNAME("dangling.example.org. 1800 IN CNAME foo.example.org."), + }, + }, { Qname: "www3.example.org.", Qtype: dns.TypeA, Answer: []dns.RR{ @@ -80,6 +87,59 @@ var cnameTestCases = []test.Case{ }, } +func TestLookupCNAMEExternal(t *testing.T) { + name := "example.org." + zone, err := Parse(strings.NewReader(dbExampleCNAME), name, "stdin") + if err != nil { + t.Fatalf("Expected no error when reading zone, got %q", err) + } + zone.Proxy = proxy.New([]string{"8.8.8.8:53"}) // TODO(point to local instance) + + fm := File{Next: test.ErrorHandler(), Zones: Zones{Z: map[string]*Zone{name: zone}, Names: []string{name}}} + ctx := context.TODO() + + for _, tc := range exernalTestCases { + m := tc.Msg() + + rec := dnsrecorder.New(&test.ResponseWriter{}) + _, err := fm.ServeDNS(ctx, rec, m) + if err != nil { + t.Errorf("Expected no error, got %v\n", err) + return + } + + resp := rec.Msg + sort.Sort(test.RRSet(resp.Answer)) + sort.Sort(test.RRSet(resp.Ns)) + sort.Sort(test.RRSet(resp.Extra)) + + if !test.Header(t, tc, resp) { + t.Logf("%v\n", resp) + continue + } + + if !test.Section(t, tc, test.Answer, resp.Answer) { + t.Logf("%v\n", resp) + } + if !test.Section(t, tc, test.Ns, resp.Ns) { + t.Logf("%v\n", resp) + + } + if !test.Section(t, tc, test.Extra, resp.Extra) { + t.Logf("%v\n", resp) + } + } +} + +var exernalTestCases = []test.Case{ + { + Qname: "external.example.org.", Qtype: dns.TypeA, + Answer: []dns.RR{ + test.CNAME("external.example.org. 1800 CNAME www.example.net."), + }, + }, +} + const dbExampleCNAME = ` $TTL 30M $ORIGIN example.org. @@ -95,4 +155,5 @@ www3 IN CNAME www2 www2 IN CNAME www1 www1 IN CNAME www www IN CNAME a -dangling IN CNAME foo` +dangling IN CNAME foo +external IN CNAME www.example.net.` diff --git a/middleware/file/lookup.go b/middleware/file/lookup.go index c47f1f5fa..50c99afb0 100644 --- a/middleware/file/lookup.go +++ b/middleware/file/lookup.go @@ -2,6 +2,7 @@ package file import ( "github.com/miekg/coredns/middleware/file/tree" + "github.com/miekg/coredns/request" "github.com/miekg/dns" ) @@ -118,7 +119,7 @@ func (z *Zone) Lookup(qname string, qtype uint16, do bool) ([]dns.RR, []dns.RR, // Found entire name. if found && shot { - // DNAME... + // DNAME...? if rrs := elem.Types(dns.TypeCNAME); len(rrs) > 0 && qtype != dns.TypeCNAME { return z.searchCNAME(elem, rrs, qtype, do) } @@ -260,8 +261,16 @@ func (z *Zone) searchCNAME(elem *tree.Elem, rrs []dns.RR, qtype uint16, do bool) } } - elem, _ = z.Tree.Search(rrs[0].(*dns.CNAME).Target) + targetName := rrs[0].(*dns.CNAME).Target + elem, _ = z.Tree.Search(targetName) + println(targetName) if elem == nil { + if !dns.IsSubDomain(z.origin, targetName) { + println(targetName, "is not a child of", z.origin) + } + st := request.Request{} + z.Proxy.Lookup(st, targetName, qtype) + return rrs, nil, nil, Success } @@ -279,8 +288,12 @@ Redo: rrs = append(rrs, sigs...) } } - elem, _ = z.Tree.Search(cname[0].(*dns.CNAME).Target) + targetName := cname[0].(*dns.CNAME).Target + elem, _ = z.Tree.Search(targetName) if elem == nil { + if !dns.IsSubDomain(z.origin, targetName) { + println(targetName, "is not a child of", z.origin) + } return rrs, nil, nil, Success } diff --git a/middleware/file/setup.go b/middleware/file/setup.go index b0946ed4b..d1349399f 100644 --- a/middleware/file/setup.go +++ b/middleware/file/setup.go @@ -8,6 +8,7 @@ import ( "github.com/miekg/coredns/core/dnsserver" "github.com/miekg/coredns/middleware" + "github.com/miekg/coredns/middleware/proxy" "github.com/mholt/caddy" ) @@ -90,6 +91,7 @@ func fileParse(c *caddy.Controller) (Zones, error) { } noReload := false + prxy := proxy.Proxy{} for c.NextBlock() { t, _, e := TransferParse(c, false) if e != nil { @@ -98,6 +100,19 @@ func fileParse(c *caddy.Controller) (Zones, error) { switch c.Val() { case "no_reload": noReload = true + + case "upstream": + args := c.RemainingArgs() + if len(args) == 0 { + return Zones{}, c.ArgErr() + } + for i := 0; i < len(args); i++ { + h, p, e := net.SplitHostPort(args[i]) + if e != nil && p == "" { + args[i] = h + ":53" + } + } + prxy = proxy.New(args) } for _, origin := range origins { @@ -105,6 +120,7 @@ func fileParse(c *caddy.Controller) (Zones, error) { z[origin].TransferTo = append(z[origin].TransferTo, t...) } z[origin].NoReload = noReload + z[origin].Proxy = prxy } } } diff --git a/middleware/file/zone.go b/middleware/file/zone.go index 21571287d..0c0df1a1f 100644 --- a/middleware/file/zone.go +++ b/middleware/file/zone.go @@ -9,6 +9,7 @@ import ( "sync" "github.com/miekg/coredns/middleware/file/tree" + "github.com/miekg/coredns/middleware/proxy" "github.com/miekg/coredns/request" "github.com/fsnotify/fsnotify" @@ -31,6 +32,7 @@ type Zone struct { NoReload bool reloadMu sync.RWMutex ReloadShutdown chan bool + Proxy proxy.Proxy // Proxy for looking up names during the resolution process } // Apex contains the apex records of a zone: SOA, NS and their potential signatures. From d383f279a0dd96efa2dd5c43242a383ad6d30b2e Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Thu, 10 Nov 2016 07:48:47 +0000 Subject: [PATCH 2/4] Implement external lookups for CNAMEs --- middleware/auto/auto.go | 2 +- middleware/auto/setup.go | 2 +- middleware/auto/walk.go | 1 + middleware/file/cname_test.go | 2 +- middleware/file/file.go | 2 +- middleware/file/lookup.go | 35 ++++++++++++++++++++++++---------- middleware/file/reload_test.go | 11 +++++++++-- 7 files changed, 39 insertions(+), 16 deletions(-) diff --git a/middleware/auto/auto.go b/middleware/auto/auto.go index ec04a8766..fabf492e1 100644 --- a/middleware/auto/auto.go +++ b/middleware/auto/auto.go @@ -34,7 +34,7 @@ type ( // In the future this should be something like ZoneMeta that contains all this stuff. transferTo []string noReload bool - Proxy proxy.Proxy // Proxy for looking up names during the resolution process + proxy proxy.Proxy // Proxy for looking up names during the resolution process duration time.Duration } diff --git a/middleware/auto/setup.go b/middleware/auto/setup.go index 2d397a079..ddb5670f0 100644 --- a/middleware/auto/setup.go +++ b/middleware/auto/setup.go @@ -155,7 +155,7 @@ func autoParse(c *caddy.Controller) (Auto, error) { args[i] = h + ":53" } } - a.loader.Proxy = proxy.New(args) + a.loader.proxy = proxy.New(args) default: t, _, e := file.TransferParse(c, false) diff --git a/middleware/auto/walk.go b/middleware/auto/walk.go index 3f7ebb19f..25e2af44f 100644 --- a/middleware/auto/walk.go +++ b/middleware/auto/walk.go @@ -51,6 +51,7 @@ func (a Auto) Walk() error { } zo.NoReload = a.loader.noReload + zo.Proxy = a.loader.proxy zo.TransferTo = a.loader.transferTo a.Zones.Add(zo, origin) diff --git a/middleware/file/cname_test.go b/middleware/file/cname_test.go index 2388aef33..bb678f7ff 100644 --- a/middleware/file/cname_test.go +++ b/middleware/file/cname_test.go @@ -93,7 +93,7 @@ func TestLookupCNAMEExternal(t *testing.T) { if err != nil { t.Fatalf("Expected no error when reading zone, got %q", err) } - zone.Proxy = proxy.New([]string{"8.8.8.8:53"}) // TODO(point to local instance) + zone.Proxy = proxy.New([]string{"8.8.8.8:53"}) // TODO(miek): point to local instance fm := File{Next: test.ErrorHandler(), Zones: Zones{Z: map[string]*Zone{name: zone}, Names: []string{name}}} ctx := context.TODO() diff --git a/middleware/file/file.go b/middleware/file/file.go index 3f16a956e..6a171740f 100644 --- a/middleware/file/file.go +++ b/middleware/file/file.go @@ -84,7 +84,7 @@ func (f File) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i return xfr.ServeDNS(ctx, w, r) } - answer, ns, extra, result := z.Lookup(qname, state.QType(), state.Do()) + answer, ns, extra, result := z.Lookup(state, qname) m := new(dns.Msg) m.SetReply(r) diff --git a/middleware/file/lookup.go b/middleware/file/lookup.go index 50c99afb0..4afd6262e 100644 --- a/middleware/file/lookup.go +++ b/middleware/file/lookup.go @@ -25,7 +25,11 @@ const ( // Lookup looks up qname and qtype in the zone. When do is true DNSSEC records are included. // Three sets of records are returned, one for the answer, one for authority and one for the additional section. -func (z *Zone) Lookup(qname string, qtype uint16, do bool) ([]dns.RR, []dns.RR, []dns.RR, Result) { +func (z *Zone) Lookup(state request.Request, qname string) ([]dns.RR, []dns.RR, []dns.RR, Result) { + + qtype := state.QType() + do := state.Do() + if !z.NoReload { z.reloadMu.RLock() } @@ -121,7 +125,7 @@ func (z *Zone) Lookup(qname string, qtype uint16, do bool) ([]dns.RR, []dns.RR, // DNAME...? if rrs := elem.Types(dns.TypeCNAME); len(rrs) > 0 && qtype != dns.TypeCNAME { - return z.searchCNAME(elem, rrs, qtype, do) + return z.searchCNAME(state, elem, rrs) } rrs := elem.Types(qtype, qname) @@ -153,7 +157,7 @@ func (z *Zone) Lookup(qname string, qtype uint16, do bool) ([]dns.RR, []dns.RR, auth := []dns.RR{} if rrs := wildElem.Types(dns.TypeCNAME, qname); len(rrs) > 0 { - return z.searchCNAME(wildElem, rrs, qtype, do) + return z.searchCNAME(state, wildElem, rrs) } rrs := wildElem.Types(qtype, qname) @@ -252,7 +256,11 @@ func (z *Zone) ns(do bool) []dns.RR { return z.Apex.NS } -func (z *Zone) searchCNAME(elem *tree.Elem, rrs []dns.RR, qtype uint16, do bool) ([]dns.RR, []dns.RR, []dns.RR, Result) { +func (z *Zone) searchCNAME(state request.Request, elem *tree.Elem, rrs []dns.RR) ([]dns.RR, []dns.RR, []dns.RR, Result) { + + qtype := state.QType() + do := state.Do() + if do { sigs := elem.Types(dns.TypeRRSIG) sigs = signatureForSubType(sigs, dns.TypeCNAME) @@ -263,14 +271,10 @@ func (z *Zone) searchCNAME(elem *tree.Elem, rrs []dns.RR, qtype uint16, do bool) targetName := rrs[0].(*dns.CNAME).Target elem, _ = z.Tree.Search(targetName) - println(targetName) if elem == nil { if !dns.IsSubDomain(z.origin, targetName) { - println(targetName, "is not a child of", z.origin) + rrs = append(rrs, z.externalLookup(state, targetName, qtype)...) } - st := request.Request{} - z.Proxy.Lookup(st, targetName, qtype) - return rrs, nil, nil, Success } @@ -292,7 +296,9 @@ Redo: elem, _ = z.Tree.Search(targetName) if elem == nil { if !dns.IsSubDomain(z.origin, targetName) { - println(targetName, "is not a child of", z.origin) + if !dns.IsSubDomain(z.origin, targetName) { + rrs = append(rrs, z.externalLookup(state, targetName, qtype)...) + } } return rrs, nil, nil, Success } @@ -331,6 +337,15 @@ func cnameForType(targets []dns.RR, origQtype uint16) []dns.RR { return ret } +func (z *Zone) externalLookup(state request.Request, target string, qtype uint16) []dns.RR { + m, e := z.Proxy.Lookup(state, target, qtype) + if e != nil || m == nil { + // TODO(miek): debugMsg for this as well? Log? + return nil + } + return m.Answer +} + // signatureForSubType range through the signature and return the correct ones for the subtype. func signatureForSubType(rrs []dns.RR, subtype uint16) []dns.RR { sigs := []dns.RR{} diff --git a/middleware/file/reload_test.go b/middleware/file/reload_test.go index c46dc3e20..caa81b536 100644 --- a/middleware/file/reload_test.go +++ b/middleware/file/reload_test.go @@ -8,6 +8,7 @@ import ( "time" "github.com/miekg/coredns/middleware/test" + "github.com/miekg/coredns/request" "github.com/miekg/dns" ) @@ -31,11 +32,17 @@ func TestZoneReload(t *testing.T) { z.Reload() - if _, _, _, res := z.Lookup("miek.nl.", dns.TypeSOA, false); res != Success { + r := new(dns.Msg) + r.SetQuestion("miek.nl", dns.TypeSOA) + state := request.Request{W: &test.ResponseWriter{}, Req: r} + if _, _, _, res := z.Lookup(state, "miek.nl."); res != Success { t.Fatalf("failed to lookup, got %d", res) } - if _, _, _, res := z.Lookup("miek.nl.", dns.TypeNS, false); res != Success { + r = new(dns.Msg) + r.SetQuestion("miek.nl", dns.TypeNS) + state = request.Request{W: &test.ResponseWriter{}, Req: r} + if _, _, _, res := z.Lookup(state, "miek.nl."); res != Success { t.Fatalf("failed to lookup, got %d", res) } From 9328a8e7a4452bd9a4f4b351be2c7aa25562e6b2 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Thu, 10 Nov 2016 12:58:40 +0000 Subject: [PATCH 3/4] Compile fixes and make it work --- middleware/auto/auto.go | 2 +- middleware/auto/setup.go | 2 +- middleware/auto/setup_test.go | 1 + middleware/file/cname_test.go | 2 ++ middleware/file/lookup.go | 4 +++- middleware/proxy/lookup.go | 1 + 6 files changed, 9 insertions(+), 3 deletions(-) diff --git a/middleware/auto/auto.go b/middleware/auto/auto.go index fabf492e1..115e86dea 100644 --- a/middleware/auto/auto.go +++ b/middleware/auto/auto.go @@ -75,7 +75,7 @@ func (a Auto) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i return xfr.ServeDNS(ctx, w, r) } - answer, ns, extra, result := z.Lookup(qname, state.QType(), state.Do()) + answer, ns, extra, result := z.Lookup(state, qname) m := new(dns.Msg) m.SetReply(r) diff --git a/middleware/auto/setup.go b/middleware/auto/setup.go index ddb5670f0..bf72f4549 100644 --- a/middleware/auto/setup.go +++ b/middleware/auto/setup.go @@ -147,7 +147,7 @@ func autoParse(c *caddy.Controller) (Auto, error) { case "upstream": args := c.RemainingArgs() if len(args) == 0 { - return a, false, c.ArgErr() + return a, c.ArgErr() } for i := 0; i < len(args); i++ { h, p, e := net.SplitHostPort(args[i]) diff --git a/middleware/auto/setup_test.go b/middleware/auto/setup_test.go index f0368ff6e..3d65a4a86 100644 --- a/middleware/auto/setup_test.go +++ b/middleware/auto/setup_test.go @@ -39,6 +39,7 @@ func TestAutoParse(t *testing.T) { directory /tmp (.*) bliep transfer to 127.0.0.1 transfer to 127.0.0.2 + upstream 8.8.8.8 }`, false, "/tmp", "bliep", `(.*)`, []string{"127.0.0.1:53", "127.0.0.2:53"}, }, diff --git a/middleware/file/cname_test.go b/middleware/file/cname_test.go index bb678f7ff..2eb7e073f 100644 --- a/middleware/file/cname_test.go +++ b/middleware/file/cname_test.go @@ -136,6 +136,8 @@ var exernalTestCases = []test.Case{ Qname: "external.example.org.", Qtype: dns.TypeA, Answer: []dns.RR{ test.CNAME("external.example.org. 1800 CNAME www.example.net."), + // magic 303 TTL that says: don't check TTL. + test.A("www.example.net. 303 IN A 93.184.216.34"), }, }, } diff --git a/middleware/file/lookup.go b/middleware/file/lookup.go index 4afd6262e..fc1ffaacc 100644 --- a/middleware/file/lookup.go +++ b/middleware/file/lookup.go @@ -339,10 +339,12 @@ func cnameForType(targets []dns.RR, origQtype uint16) []dns.RR { func (z *Zone) externalLookup(state request.Request, target string, qtype uint16) []dns.RR { m, e := z.Proxy.Lookup(state, target, qtype) - if e != nil || m == nil { + if e != nil { + println(e.Error()) // TODO(miek): debugMsg for this as well? Log? return nil } + println(m.String()) return m.Answer } diff --git a/middleware/proxy/lookup.go b/middleware/proxy/lookup.go index 340b4e31b..d0f06986b 100644 --- a/middleware/proxy/lookup.go +++ b/middleware/proxy/lookup.go @@ -75,6 +75,7 @@ func (p Proxy) lookup(state request.Request, r *dns.Msg) (*dns.Msg, error) { // hosts until timeout (or until we get a nil host). for time.Now().Sub(start) < tryDuration { host := upstream.Select() + println(host.Name) if host == nil { return nil, errUnreachable } From 8dd47dd9327428fdd845c0935b6168af5101edd1 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Thu, 10 Nov 2016 14:09:49 +0000 Subject: [PATCH 4/4] Remove some printlns --- middleware/file/lookup.go | 2 -- middleware/proxy/lookup.go | 1 - 2 files changed, 3 deletions(-) diff --git a/middleware/file/lookup.go b/middleware/file/lookup.go index fc1ffaacc..c3dc8ad1c 100644 --- a/middleware/file/lookup.go +++ b/middleware/file/lookup.go @@ -340,11 +340,9 @@ func cnameForType(targets []dns.RR, origQtype uint16) []dns.RR { func (z *Zone) externalLookup(state request.Request, target string, qtype uint16) []dns.RR { m, e := z.Proxy.Lookup(state, target, qtype) if e != nil { - println(e.Error()) // TODO(miek): debugMsg for this as well? Log? return nil } - println(m.String()) return m.Answer } diff --git a/middleware/proxy/lookup.go b/middleware/proxy/lookup.go index d0f06986b..340b4e31b 100644 --- a/middleware/proxy/lookup.go +++ b/middleware/proxy/lookup.go @@ -75,7 +75,6 @@ func (p Proxy) lookup(state request.Request, r *dns.Msg) (*dns.Msg, error) { // hosts until timeout (or until we get a nil host). for time.Now().Sub(start) < tryDuration { host := upstream.Select() - println(host.Name) if host == nil { return nil, errUnreachable }