aboutsummaryrefslogtreecommitdiff
path: root/middleware
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-09-06 22:25:05 +0100
committerGravatar GitHub <noreply@github.com> 2017-09-06 22:25:05 +0100
commitc514197d6b0af035e58ca3b3dc3b6211ebced4b1 (patch)
tree84cccad4624a29d3fd14f92ee0ff8db31c10a0df /middleware
parent9452a0a3bca1a2d1b389cf45c6d8de157c0044ec (diff)
downloadcoredns-c514197d6b0af035e58ca3b3dc3b6211ebced4b1.tar.gz
coredns-c514197d6b0af035e58ca3b3dc3b6211ebced4b1.tar.zst
coredns-c514197d6b0af035e58ca3b3dc3b6211ebced4b1.zip
mw/federation: correct parse (#1027)
Fix parse error and add testcase when a ZONE is specified. Fixes #1024
Diffstat (limited to 'middleware')
-rw-r--r--middleware/federation/setup.go18
-rw-r--r--middleware/federation/setup_test.go7
2 files changed, 19 insertions, 6 deletions
diff --git a/middleware/federation/setup.go b/middleware/federation/setup.go
index b5a9469ab..de37fce2b 100644
--- a/middleware/federation/setup.go
+++ b/middleware/federation/setup.go
@@ -49,17 +49,25 @@ func federationParse(c *caddy.Controller) (*Federation, error) {
for c.Next() {
// federation [zones..]
- origins := make([]string, len(c.ServerBlockKeys))
- copy(origins, c.ServerBlockKeys)
+ zones := c.RemainingArgs()
+ origins := []string{}
+ if len(zones) > 0 {
+ origins = make([]string, len(zones))
+ copy(origins, zones)
+ } else {
+ origins = make([]string, len(c.ServerBlockKeys))
+ copy(origins, c.ServerBlockKeys)
+ }
for c.NextBlock() {
x := c.Val()
- switch c.Val() {
+ switch x {
default:
args := c.RemainingArgs()
- if len(args) != 1 {
- return fed, fmt.Errorf("need two arguments for federation: %q", args)
+ if x := len(args); x != 1 {
+ return fed, fmt.Errorf("need two arguments for federation, got %d", x)
}
+
fed.f[x] = dns.Fqdn(args[0])
}
}
diff --git a/middleware/federation/setup_test.go b/middleware/federation/setup_test.go
index b0d09419a..e85b01772 100644
--- a/middleware/federation/setup_test.go
+++ b/middleware/federation/setup_test.go
@@ -13,6 +13,7 @@ func TestSetup(t *testing.T) {
expectedLen int
expectedNameZone []string // contains only entry for now
}{
+ // ok
{`federation {
prod prod.example.org
}`, false, 1, []string{"prod", "prod.example.org."}},
@@ -25,11 +26,15 @@ func TestSetup(t *testing.T) {
staging staging.example.org
prod prod.example.org
}`, false, 2, []string{"staging", "staging.example.org."}},
+ {`federation example.com {
+ staging staging.example.org
+ prod prod.example.org
+ }`, false, 2, []string{"staging", "staging.example.org."}},
// errors
{`federation {
}`, true, 0, []string{}},
{`federation {
- staging
+ staging
}`, true, 0, []string{}},
}
for i, test := range tests {