diff options
Diffstat (limited to 'plugin/pkg/parse')
-rw-r--r-- | plugin/pkg/parse/host.go | 8 | ||||
-rw-r--r-- | plugin/pkg/parse/host_test.go | 10 | ||||
-rw-r--r-- | plugin/pkg/parse/transport.go | 3 |
3 files changed, 21 insertions, 0 deletions
diff --git a/plugin/pkg/parse/host.go b/plugin/pkg/parse/host.go index 9206a033d..c396dc853 100644 --- a/plugin/pkg/parse/host.go +++ b/plugin/pkg/parse/host.go @@ -33,6 +33,14 @@ func HostPortOrFile(s ...string) ([]string, error) { var servers []string for _, h := range s { trans, host := Transport(h) + if len(host) == 0 { + return servers, fmt.Errorf("invalid address: %q", h) + } + + if trans == transport.UNIX { + servers = append(servers, trans+"://"+host) + continue + } addr, _, err := net.SplitHostPort(host) diff --git a/plugin/pkg/parse/host_test.go b/plugin/pkg/parse/host_test.go index 611f8284f..0b5f6f1ff 100644 --- a/plugin/pkg/parse/host_test.go +++ b/plugin/pkg/parse/host_test.go @@ -58,6 +58,16 @@ func TestHostPortOrFile(t *testing.T) { "", true, }, + { + "unix:///var/run/g.sock", + "unix:///var/run/g.sock", + false, + }, + { + "unix://", + "", + true, + }, } err := os.WriteFile("resolv.conf", []byte("nameserver 127.0.0.1\n"), 0600) diff --git a/plugin/pkg/parse/transport.go b/plugin/pkg/parse/transport.go index d632120d7..0da640856 100644 --- a/plugin/pkg/parse/transport.go +++ b/plugin/pkg/parse/transport.go @@ -27,6 +27,9 @@ func Transport(s string) (trans string, addr string) { s = s[len(transport.HTTPS+"://"):] return transport.HTTPS, s + case strings.HasPrefix(s, transport.UNIX+"://"): + s = s[len(transport.UNIX+"://"):] + return transport.UNIX, s } return transport.DNS, s |