aboutsummaryrefslogtreecommitdiff
path: root/middleware/file/closest.go
diff options
context:
space:
mode:
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
}