diff options
author | 2016-04-14 19:57:39 +0100 | |
---|---|---|
committer | 2016-04-14 19:57:39 +0100 | |
commit | 885e6e824642de79e80e8b5e97ea320b6f582d6d (patch) | |
tree | d2a09baf10736f9862f58b8c2382cb5049b70744 /core/setup/file.go | |
parent | eb1f21bfff2d32858af632450a18d7f661ee0c3a (diff) | |
download | coredns-885e6e824642de79e80e8b5e97ea320b6f582d6d.tar.gz coredns-885e6e824642de79e80e8b5e97ea320b6f582d6d.tar.zst coredns-885e6e824642de79e80e8b5e97ea320b6f582d6d.zip |
Allow more than 1 address for transfer (#121)
No reason why not to allow more then one address:
`transfer to 127.0.0.1 10.240.20.1`.
Fix startup as well, as it turned out to be broken...
Diffstat (limited to 'core/setup/file.go')
-rw-r--r-- | core/setup/file.go | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/core/setup/file.go b/core/setup/file.go index edcddd30c..f957c230f 100644 --- a/core/setup/file.go +++ b/core/setup/file.go @@ -1,6 +1,8 @@ package setup import ( + "fmt" + "net" "os" "github.com/miekg/coredns/middleware" @@ -68,8 +70,8 @@ func fileParse(c *Controller) (file.Zones, error) { } // discard from, here, maybe check and show log when we do? for _, origin := range origins { - if t != "" { - z[origin].TransferTo = append(z[origin].TransferTo, t) + if t != nil { + z[origin].TransferTo = append(z[origin].TransferTo, t...) } } } @@ -78,30 +80,41 @@ func fileParse(c *Controller) (file.Zones, error) { return file.Zones{Z: z, Names: names}, nil } -// transfer to [address] -func parseTransfer(c *Controller) (to, from string, err error) { +// transfer to [address...] +func parseTransfer(c *Controller) (tos, froms []string, err error) { what := c.Val() if !c.NextArg() { - return "", "", c.ArgErr() + return nil, nil, c.ArgErr() } value := c.Val() switch what { case "transfer": if !c.NextArg() { - return "", "", c.ArgErr() + return nil, nil, c.ArgErr() } if value == "to" { - to = c.Val() - if to != "*" { - to = middleware.Addr(to).Normalize() + tos := c.RemainingArgs() + for i, _ := range tos { + if x := net.ParseIP(tos[i]); x == nil { + return nil, nil, fmt.Errorf("must specify an IP addres: `%s'", tos[i]) + } + if tos[i] != "*" { + tos[i] = middleware.Addr(tos[i]).Normalize() + } } } if value == "from" { - from = c.Val() - if from == "*" { - // print some kind of error? TODO(miek) + froms := c.RemainingArgs() + for i, _ := range froms { + if x := net.ParseIP(froms[i]); x == nil { + return nil, nil, fmt.Errorf("must specify an IP addres: `%s'", froms[i]) + } + if froms[i] != "*" { + froms[i] = middleware.Addr(froms[i]).Normalize() + } else { + return nil, nil, fmt.Errorf("can't use '*' in transfer from") + } } - from = middleware.Addr(from).Normalize() } } return |