diff options
author | 2018-09-19 08:16:04 +0100 | |
---|---|---|
committer | 2018-09-19 08:16:04 +0100 | |
commit | cb932ca23103485d67e447eeddd855007015d30e (patch) | |
tree | 4d2c6bc89f4d92fb7a3c75f71a5b31b5fc397b7d /plugin/pkg/dnsutil | |
parent | c349446a23440b336f4ca21900cce4d6a031cdf5 (diff) | |
download | coredns-cb932ca23103485d67e447eeddd855007015d30e.tar.gz coredns-cb932ca23103485d67e447eeddd855007015d30e.tar.zst coredns-cb932ca23103485d67e447eeddd855007015d30e.zip |
Better naming (#2104)
* Move functions from pkg/transport to pkg/parse
Although "parse" is a fairly generic name I believe this is somewhat
better named. pkg/transport keeps a few constants that are uses
throughout for the rest is is renaming a bunch (and the fallout from
there to make things compile again).
Signed-off-by: Miek Gieben <miek@miek.nl>
* Fix tests
Signed-off-by: Miek Gieben <miek@miek.nl>
Diffstat (limited to 'plugin/pkg/dnsutil')
-rw-r--r-- | plugin/pkg/dnsutil/host.go | 98 | ||||
-rw-r--r-- | plugin/pkg/dnsutil/host_test.go | 85 |
2 files changed, 0 insertions, 183 deletions
diff --git a/plugin/pkg/dnsutil/host.go b/plugin/pkg/dnsutil/host.go deleted file mode 100644 index b03b39586..000000000 --- a/plugin/pkg/dnsutil/host.go +++ /dev/null @@ -1,98 +0,0 @@ -package dnsutil - -import ( - "fmt" - "net" - "os" - - "github.com/coredns/coredns/plugin/pkg/transport" - - "github.com/miekg/dns" -) - -// ParseHostPortOrFile parses the strings in s, each string can either be a -// address, [scheme://]address:port or a filename. The address part is checked -// and in case of filename a resolv.conf like file is (assumed) and parsed and -// the nameservers found are returned. -func ParseHostPortOrFile(s ...string) ([]string, error) { - var servers []string - for _, h := range s { - - trans, host := transport.Parse(h) - - addr, _, err := net.SplitHostPort(host) - if err != nil { - // Parse didn't work, it is not a addr:port combo - if net.ParseIP(host) == nil { - // Not an IP address. - ss, err := tryFile(host) - if err == nil { - servers = append(servers, ss...) - continue - } - return servers, fmt.Errorf("not an IP address or file: %q", host) - } - var ss string - switch trans { - case transport.DNS: - ss = net.JoinHostPort(host, "53") - case transport.TLS: - ss = transport.TLS + "://" + net.JoinHostPort(host, transport.TLSPort) - case transport.GRPC: - ss = transport.GRPC + "://" + net.JoinHostPort(host, transport.GRPCPort) - case transport.HTTPS: - ss = transport.HTTPS + "://" + net.JoinHostPort(host, transport.HTTPSPort) - } - servers = append(servers, ss) - continue - } - - if net.ParseIP(addr) == nil { - // Not an IP address. - ss, err := tryFile(host) - if err == nil { - servers = append(servers, ss...) - continue - } - return servers, fmt.Errorf("not an IP address or file: %q", host) - } - servers = append(servers, h) - } - return servers, nil -} - -// Try to open this is a file first. -func tryFile(s string) ([]string, error) { - c, err := dns.ClientConfigFromFile(s) - if err == os.ErrNotExist { - return nil, fmt.Errorf("failed to open file %q: %q", s, err) - } else if err != nil { - return nil, err - } - - servers := []string{} - for _, s := range c.Servers { - servers = append(servers, net.JoinHostPort(s, c.Port)) - } - return servers, nil -} - -// ParseHostPort will check if the host part is a valid IP address, if the -// IP address is valid, but no port is found, defaultPort is added. -func ParseHostPort(s, defaultPort string) (string, error) { - addr, port, err := net.SplitHostPort(s) - if port == "" { - port = defaultPort - } - if err != nil { - if net.ParseIP(s) == nil { - return "", fmt.Errorf("must specify an IP address: `%s'", s) - } - return net.JoinHostPort(s, port), nil - } - - if net.ParseIP(addr) == nil { - return "", fmt.Errorf("must specify an IP address: `%s'", addr) - } - return net.JoinHostPort(addr, port), nil -} diff --git a/plugin/pkg/dnsutil/host_test.go b/plugin/pkg/dnsutil/host_test.go deleted file mode 100644 index cc55f4570..000000000 --- a/plugin/pkg/dnsutil/host_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package dnsutil - -import ( - "io/ioutil" - "os" - "testing" -) - -func TestParseHostPortOrFile(t *testing.T) { - tests := []struct { - in string - expected string - shouldErr bool - }{ - { - "8.8.8.8", - "8.8.8.8:53", - false, - }, - { - "8.8.8.8:153", - "8.8.8.8:153", - false, - }, - { - "/etc/resolv.conf:53", - "", - true, - }, - { - "resolv.conf", - "127.0.0.1:53", - false, - }, - } - - err := ioutil.WriteFile("resolv.conf", []byte("nameserver 127.0.0.1\n"), 0600) - if err != nil { - t.Fatalf("Failed to write test resolv.conf") - } - defer os.Remove("resolv.conf") - - for i, tc := range tests { - got, err := ParseHostPortOrFile(tc.in) - if err == nil && tc.shouldErr { - t.Errorf("Test %d, expected error, got nil", i) - continue - } - if err != nil && tc.shouldErr { - continue - } - if got[0] != tc.expected { - t.Errorf("Test %d, expected %q, got %q", i, tc.expected, got[0]) - } - } -} - -func TestParseHostPort(t *testing.T) { - tests := []struct { - in string - expected string - shouldErr bool - }{ - {"8.8.8.8:53", "8.8.8.8:53", false}, - {"a.a.a.a:153", "", true}, - {"8.8.8.8", "8.8.8.8:53", false}, - {"8.8.8.8:", "8.8.8.8:53", false}, - {"8.8.8.8::53", "", true}, - {"resolv.conf", "", true}, - } - - for i, tc := range tests { - got, err := ParseHostPort(tc.in, "53") - if err == nil && tc.shouldErr { - t.Errorf("Test %d, expected error, got nil", i) - continue - } - if err != nil && !tc.shouldErr { - t.Errorf("Test %d, expected no error, got %q", i, err) - } - if got != tc.expected { - t.Errorf("Test %d, expected %q, got %q", i, tc.expected, got) - } - } -} |