aboutsummaryrefslogtreecommitdiff
path: root/middleware/file/tree
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-03-28 12:08:05 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2016-03-28 18:23:17 +0100
commite56d206542c901a48b28c4501fe5805e9e9e1a10 (patch)
tree77a644f6fe28f3de8eaf6f7c766cea73b438b487 /middleware/file/tree
parent6324bb1fa7c0516ef3bebfb822a0cdc767764ad2 (diff)
downloadcoredns-e56d206542c901a48b28c4501fe5805e9e9e1a10.tar.gz
coredns-e56d206542c901a48b28c4501fe5805e9e9e1a10.tar.zst
coredns-e56d206542c901a48b28c4501fe5805e9e9e1a10.zip
Support outgoing zone transfers
These can be enabled by adding "transfer out" to the Corefile. Without it no AXFR is allowed. For now only AXFR and no IXFR. No TSIG and no ACLs.
Diffstat (limited to 'middleware/file/tree')
-rw-r--r--middleware/file/tree/all.go21
-rw-r--r--middleware/file/tree/tree.go2
2 files changed, 23 insertions, 0 deletions
diff --git a/middleware/file/tree/all.go b/middleware/file/tree/all.go
new file mode 100644
index 000000000..f621e3465
--- /dev/null
+++ b/middleware/file/tree/all.go
@@ -0,0 +1,21 @@
+package tree
+
+// All traverses tree and returns all elements
+func (t *Tree) All() []*Elem {
+ if t.Root == nil {
+ return nil
+ }
+ found := t.Root.all(nil)
+ return found
+}
+
+func (n *Node) all(found []*Elem) []*Elem {
+ if n.Left != nil {
+ found = n.Left.all(found)
+ }
+ found = append(found, n.Elem)
+ if n.Right != nil {
+ found = n.Right.all(found)
+ }
+ return found
+}
diff --git a/middleware/file/tree/tree.go b/middleware/file/tree/tree.go
index db57c2092..234060eba 100644
--- a/middleware/file/tree/tree.go
+++ b/middleware/file/tree/tree.go
@@ -528,6 +528,8 @@ func (n *Node) floor(rr dns.RR) *Node {
return n
}
+// TODO(successor, predecessor)
+
// Ceil returns the smallest value equal to or greater than the query q according to q.Compare().
func (t *Tree) Ceil(rr dns.RR) *Elem {
if t.Root == nil {