diff options
Diffstat (limited to 'plugin/pkg/parse/parse.go')
-rw-r--r-- | plugin/pkg/parse/parse.go | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/plugin/pkg/parse/parse.go b/plugin/pkg/parse/parse.go index 75f60c05e..232e163fd 100644 --- a/plugin/pkg/parse/parse.go +++ b/plugin/pkg/parse/parse.go @@ -9,31 +9,41 @@ import ( "github.com/caddyserver/caddy" ) -// TransferIn parses transfer statements: 'transfer from [address...]'. -func TransferIn(c *caddy.Controller) (froms []string, err error) { +// 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, c.ArgErr() + return nil, nil, c.ArgErr() } value := c.Val() switch value { - default: - return nil, c.Errf("unknown property %s", value) + case "to": + tos = c.RemainingArgs() + for i := range tos { + if tos[i] != "*" { + normalized, err := HostPort(tos[i], transport.Port) + if err != nil { + return nil, nil, err + } + tos[i] = normalized + } + } + case "from": - froms = c.RemainingArgs() - if len(froms) == 0 { - return nil, c.ArgErr() + 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 := HostPort(froms[i], transport.Port) if err != nil { - return nil, err + return nil, nil, err } froms[i] = normalized } else { - return nil, fmt.Errorf("can't use '*' in transfer from") + return nil, nil, fmt.Errorf("can't use '*' in transfer from") } } } - return froms, nil + return } |