deprecate Normalize and MustNormalize (#4648)
* deprecate normalize and mustnormalize Signed-off-by: Chris O'Haver <cohaver@infoblox.com> * add runtime warning Signed-off-by: Chris O'Haver <cohaver@infoblox.com> * elaborate runtime warning Signed-off-by: Chris O'Haver <cohaver@infoblox.com> * include caller info Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
This commit is contained in:
parent
b56f2efe54
commit
d8a0d97df2
6 changed files with 61 additions and 11 deletions
|
@ -93,7 +93,7 @@ func parseStanza(c *caddy.Controller) (*Forward, error) {
|
||||||
return f, c.ArgErr()
|
return f, c.ArgErr()
|
||||||
}
|
}
|
||||||
origFrom := f.from
|
origFrom := f.from
|
||||||
f.from = plugin.Host(f.from).Normalize()[0] // there can only be one here, won't work with non-octet reverse
|
f.from = plugin.Host(f.from).NormalizeExact()[0] // there can only be one here, won't work with non-octet reverse
|
||||||
|
|
||||||
if len(f.from) > 1 {
|
if len(f.from) > 1 {
|
||||||
log.Warningf("Unsupported CIDR notation: '%s' expands to multiple zones. Using only '%s'.", origFrom, f.from)
|
log.Warningf("Unsupported CIDR notation: '%s' expands to multiple zones. Using only '%s'.", origFrom, f.from)
|
||||||
|
@ -156,7 +156,7 @@ func parseBlock(c *caddy.Controller, f *Forward) error {
|
||||||
return c.ArgErr()
|
return c.ArgErr()
|
||||||
}
|
}
|
||||||
for i := 0; i < len(ignore); i++ {
|
for i := 0; i < len(ignore); i++ {
|
||||||
f.ignored = append(f.ignored, plugin.Host(ignore[i]).Normalize()...)
|
f.ignored = append(f.ignored, plugin.Host(ignore[i]).NormalizeExact()...)
|
||||||
}
|
}
|
||||||
case "max_fails":
|
case "max_fails":
|
||||||
if !c.NextArg() {
|
if !c.NextArg() {
|
||||||
|
|
|
@ -56,7 +56,7 @@ func parseStanza(c *caddy.Controller) (*GRPC, error) {
|
||||||
if !c.Args(&g.from) {
|
if !c.Args(&g.from) {
|
||||||
return g, c.ArgErr()
|
return g, c.ArgErr()
|
||||||
}
|
}
|
||||||
g.from = plugin.Host(g.from).Normalize()[0] // only the first is used.
|
g.from = plugin.Host(g.from).NormalizeExact()[0] // only the first is used.
|
||||||
|
|
||||||
to := c.RemainingArgs()
|
to := c.RemainingArgs()
|
||||||
if len(to) == 0 {
|
if len(to) == 0 {
|
||||||
|
@ -100,7 +100,7 @@ func parseBlock(c *caddy.Controller, g *GRPC) error {
|
||||||
return c.ArgErr()
|
return c.ArgErr()
|
||||||
}
|
}
|
||||||
for i := 0; i < len(ignore); i++ {
|
for i := 0; i < len(ignore); i++ {
|
||||||
g.ignored = append(g.ignored, plugin.Host(ignore[i]).Normalize()...)
|
g.ignored = append(g.ignored, plugin.Host(ignore[i]).NormalizeExact()...)
|
||||||
}
|
}
|
||||||
case "tls":
|
case "tls":
|
||||||
args := c.RemainingArgs()
|
args := c.RemainingArgs()
|
||||||
|
|
|
@ -70,7 +70,7 @@ func parse(c *caddy.Controller) (*Loop, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(c.ServerBlockKeys) > 0 {
|
if len(c.ServerBlockKeys) > 0 {
|
||||||
zones = plugin.Host(c.ServerBlockKeys[0]).Normalize()
|
zones = plugin.Host(c.ServerBlockKeys[0]).NormalizeExact()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return New(zones[0]), nil
|
return New(zones[0]), nil
|
||||||
|
|
|
@ -3,10 +3,12 @@ package plugin
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/coredns/coredns/plugin/pkg/cidr"
|
"github.com/coredns/coredns/plugin/pkg/cidr"
|
||||||
|
"github.com/coredns/coredns/plugin/pkg/log"
|
||||||
"github.com/coredns/coredns/plugin/pkg/parse"
|
"github.com/coredns/coredns/plugin/pkg/parse"
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
|
@ -63,8 +65,56 @@ type (
|
||||||
|
|
||||||
// Normalize will return the host portion of host, stripping
|
// Normalize will return the host portion of host, stripping
|
||||||
// of any port or transport. The host will also be fully qualified and lowercased.
|
// of any port or transport. The host will also be fully qualified and lowercased.
|
||||||
|
// An empty string is returned on failure
|
||||||
|
// Deprecated: use OriginsFromArgsOrServerBlock or NormalizeExact
|
||||||
|
func (h Host) Normalize() string {
|
||||||
|
var caller string
|
||||||
|
if _, file, line, ok := runtime.Caller(1); ok {
|
||||||
|
caller = fmt.Sprintf("(%v line %d) ", file, line)
|
||||||
|
}
|
||||||
|
log.Warning("An external plugin " + caller + "is using the deprecated function Normalize. " +
|
||||||
|
"This will be removed in a future versions of CoreDNS. The plugin should be updated to use " +
|
||||||
|
"OriginsFromArgsOrServerBlock or NormalizeExact instead.")
|
||||||
|
|
||||||
|
s := string(h)
|
||||||
|
_, s = parse.Transport(s)
|
||||||
|
|
||||||
|
// The error can be ignored here, because this function is called after the corefile has already been vetted.
|
||||||
|
hosts, _, err := SplitHostPort(s)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return Name(hosts[0]).Normalize()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MustNormalize will return the host portion of host, stripping
|
||||||
|
// of any port or transport. The host will also be fully qualified and lowercased.
|
||||||
|
// An error is returned on error
|
||||||
|
// Deprecated: use OriginsFromArgsOrServerBlock or NormalizeExact
|
||||||
|
func (h Host) MustNormalize() (string, error) {
|
||||||
|
var caller string
|
||||||
|
if _, file, line, ok := runtime.Caller(1); ok {
|
||||||
|
caller = fmt.Sprintf("(%v line %d) ", file, line)
|
||||||
|
}
|
||||||
|
log.Warning("An external plugin " + caller + "is using the deprecated function MustNormalize. " +
|
||||||
|
"This will be removed in a future versions of CoreDNS. The plugin should be updated to use " +
|
||||||
|
"OriginsFromArgsOrServerBlock or NormalizeExact instead.")
|
||||||
|
|
||||||
|
s := string(h)
|
||||||
|
_, s = parse.Transport(s)
|
||||||
|
|
||||||
|
// The error can be ignored here, because this function is called after the corefile has already been vetted.
|
||||||
|
hosts, _, err := SplitHostPort(s)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return Name(hosts[0]).Normalize(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NormalizeExact will return the host portion of host, stripping
|
||||||
|
// of any port or transport. The host will also be fully qualified and lowercased.
|
||||||
// An empty slice is returned on failure
|
// An empty slice is returned on failure
|
||||||
func (h Host) Normalize() []string {
|
func (h Host) NormalizeExact() []string {
|
||||||
// The error can be ignored here, because this function should only be called after the corefile has already been vetted.
|
// The error can be ignored here, because this function should only be called after the corefile has already been vetted.
|
||||||
s := string(h)
|
s := string(h)
|
||||||
_, s = parse.Transport(s)
|
_, s = parse.Transport(s)
|
||||||
|
@ -126,13 +176,13 @@ func OriginsFromArgsOrServerBlock(args, serverblock []string) []string {
|
||||||
s := make([]string, len(serverblock))
|
s := make([]string, len(serverblock))
|
||||||
copy(s, serverblock)
|
copy(s, serverblock)
|
||||||
for i := range s {
|
for i := range s {
|
||||||
s[i] = Host(s[i]).Normalize()[0] // expansion of these already happened in dnsserver/registrer.go
|
s[i] = Host(s[i]).NormalizeExact()[0] // expansion of these already happened in dnsserver/register.go
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
s := []string{}
|
s := []string{}
|
||||||
for i := range args {
|
for i := range args {
|
||||||
sx := Host(args[i]).Normalize()
|
sx := Host(args[i]).NormalizeExact()
|
||||||
if len(sx) == 0 {
|
if len(sx) == 0 {
|
||||||
continue // silently ignores errors.
|
continue // silently ignores errors.
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ func TestNameNormalize(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHostNormalize(t *testing.T) {
|
func TestHostNormalizeExact(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
in string
|
in string
|
||||||
out []string
|
out []string
|
||||||
|
@ -85,7 +85,7 @@ func TestHostNormalize(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range tests {
|
for i := range tests {
|
||||||
actual := Host(tests[i].in).Normalize()
|
actual := Host(tests[i].in).NormalizeExact()
|
||||||
expected := tests[i].out
|
expected := tests[i].out
|
||||||
sort.Strings(expected)
|
sort.Strings(expected)
|
||||||
for j := range expected {
|
for j := range expected {
|
||||||
|
|
|
@ -33,7 +33,7 @@ func (f F) Through(qname string) bool {
|
||||||
func (f *F) setZones(zones []string) {
|
func (f *F) setZones(zones []string) {
|
||||||
z := []string{}
|
z := []string{}
|
||||||
for i := range zones {
|
for i := range zones {
|
||||||
z = append(z, plugin.Host(zones[i]).Normalize()...)
|
z = append(z, plugin.Host(zones[i]).NormalizeExact()...)
|
||||||
}
|
}
|
||||||
f.Zones = z
|
f.Zones = z
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue