aboutsummaryrefslogtreecommitdiff
path: root/middleware/file/closest.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-03-30 20:13:48 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2016-03-30 20:13:48 +0100
commit8feef98188d7823b9c7fc99469cb2f588b61757d (patch)
treed0267685138de6d4eb7295d48bc81f962b35af5b /middleware/file/closest.go
parentbf6d90600be7eac782e076b7c5f334e83ba9dea0 (diff)
downloadcoredns-8feef98188d7823b9c7fc99469cb2f588b61757d.tar.gz
coredns-8feef98188d7823b9c7fc99469cb2f588b61757d.tar.zst
coredns-8feef98188d7823b9c7fc99469cb2f588b61757d.zip
Fix closest encloser
Diffstat (limited to 'middleware/file/closest.go')
-rw-r--r--middleware/file/closest.go22
1 files changed, 14 insertions, 8 deletions
diff --git a/middleware/file/closest.go b/middleware/file/closest.go
index daee27314..8f9d9a8ba 100644
--- a/middleware/file/closest.go
+++ b/middleware/file/closest.go
@@ -4,13 +4,19 @@ import "github.com/miekg/dns"
// ClosestEncloser returns the closest encloser for rr.
func (z *Zone) ClosestEncloser(rr dns.RR) string {
- elem := z.Tree.Prev(rr)
- if elem == nil {
- // SOA?
- return ""
- }
- for _, r := range elem.All() {
- return r.Header().Name
+ // tree/tree.go does not store a parent *Node pointer, so we can't
+ // just follow up the tree. TODO(miek): fix.
+
+ offset, end := dns.NextLabel(rr.Header().Name, 0)
+ for !end {
+ elem := z.Tree.Get(rr)
+ if elem != nil {
+ return elem.Name()
+ }
+ rr.Header().Name = rr.Header().Name[offset:]
+
+ offset, end = dns.NextLabel(rr.Header().Name, offset)
}
- return ""
+
+ return z.SOA.Header().Name
}