aboutsummaryrefslogtreecommitdiff
path: root/plugin/pkg/dnsutil/zone.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/pkg/dnsutil/zone.go')
-rw-r--r--plugin/pkg/dnsutil/zone.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/plugin/pkg/dnsutil/zone.go b/plugin/pkg/dnsutil/zone.go
new file mode 100644
index 000000000..579fef1ba
--- /dev/null
+++ b/plugin/pkg/dnsutil/zone.go
@@ -0,0 +1,20 @@
+package dnsutil
+
+import (
+ "errors"
+
+ "github.com/miekg/dns"
+)
+
+// TrimZone removes the zone component from q. It returns the trimmed
+// name or an error is zone is longer then qname. The trimmed name will be returned
+// without a trailing dot.
+func TrimZone(q string, z string) (string, error) {
+ zl := dns.CountLabel(z)
+ i, ok := dns.PrevLabel(q, zl)
+ if ok || i-1 < 0 {
+ return "", errors.New("trimzone: overshot qname: " + q + "for zone " + z)
+ }
+ // This includes the '.', remove on return
+ return q[:i-1], nil
+}