aboutsummaryrefslogtreecommitdiff
path: root/plugin/pkg/parse/parse.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/pkg/parse/parse.go')
-rw-r--r--plugin/pkg/parse/parse.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/plugin/pkg/parse/parse.go b/plugin/pkg/parse/parse.go
new file mode 100644
index 000000000..cf4f96c09
--- /dev/null
+++ b/plugin/pkg/parse/parse.go
@@ -0,0 +1,47 @@
+package parse
+
+import (
+ "fmt"
+
+ "github.com/coredns/coredns/plugin/pkg/dnsutil"
+ "github.com/mholt/caddy"
+)
+
+// Transfer parses transfer statements: 'transfer [to|from] [address...]'.
+func Transfer(c *caddy.Controller, secondary bool) (tos, froms []string, err error) {
+ if !c.NextArg() {
+ return nil, nil, c.ArgErr()
+ }
+ value := c.Val()
+ switch value {
+ case "to":
+ tos = c.RemainingArgs()
+ for i := range tos {
+ if tos[i] != "*" {
+ normalized, err := dnsutil.ParseHostPort(tos[i], "53")
+ if err != nil {
+ return nil, nil, err
+ }
+ tos[i] = normalized
+ }
+ }
+
+ case "from":
+ if !secondary {
+ return nil, nil, fmt.Errorf("can't use `transfer from` when not being a secondary")
+ }
+ froms = c.RemainingArgs()
+ for i := range froms {
+ if froms[i] != "*" {
+ normalized, err := dnsutil.ParseHostPort(froms[i], "53")
+ if err != nil {
+ return nil, nil, err
+ }
+ froms[i] = normalized
+ } else {
+ return nil, nil, fmt.Errorf("can't use '*' in transfer from")
+ }
+ }
+ }
+ return
+}