From df018ea64a1c66927d3046102ddc85816e77efb3 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 18 Jul 2016 18:45:20 -0600 Subject: [PATCH] Properly handle path-only addresses (also fix godoc typos) --- caddy.go | 4 ++-- caddyhttp/httpserver/plugin.go | 4 ++-- caddyhttp/httpserver/plugin_test.go | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/caddy.go b/caddy.go index 6517ab8f..2869ed42 100644 --- a/caddy.go +++ b/caddy.go @@ -236,7 +236,7 @@ func listenerAddrEqual(ln net.Listener, addr string) bool { } // TCPServer is a type that can listen and serve connections. -// A TCPServer must associate with exactly or one net.Listeners. +// A TCPServer must associate with exactly zero or one net.Listeners. type TCPServer interface { // Listen starts listening by creating a new listener // and returning it. It does not start accepting @@ -254,7 +254,7 @@ type TCPServer interface { } // UDPServer is a type that can listen and serve packets. -// A UDPServer must associate with exactly or one net.PacketConns. +// A UDPServer must associate with exactly zero or one net.PacketConns. type UDPServer interface { // ListenPacket starts listening by creating a new packetconn // and returning it. It does not start accepting connections. diff --git a/caddyhttp/httpserver/plugin.go b/caddyhttp/httpserver/plugin.go index 61f46de6..151e04f8 100644 --- a/caddyhttp/httpserver/plugin.go +++ b/caddyhttp/httpserver/plugin.go @@ -273,12 +273,12 @@ func (a Address) VHost() string { } // standardizeAddress parses an address string into a structured format with separate -// scheme, host, and port portions, as well as the original input string. +// scheme, host, port, and path portions, as well as the original input string. func standardizeAddress(str string) (Address, error) { input := str // Split input into components (prepend with // to assert host by default) - if !strings.Contains(str, "//") { + if !strings.Contains(str, "//") && !strings.HasPrefix(str, "/") { str = "//" + str } u, err := url.Parse(str) diff --git a/caddyhttp/httpserver/plugin_test.go b/caddyhttp/httpserver/plugin_test.go index d5a7bf7e..b079a447 100644 --- a/caddyhttp/httpserver/plugin_test.go +++ b/caddyhttp/httpserver/plugin_test.go @@ -50,6 +50,7 @@ func TestStandardizeAddress(t *testing.T) { {`https://host:443/path/foo`, "https", "host", "443", "/path/foo", false}, {`host:80/path`, "", "host", "80", "/path", false}, {`host:https/path`, "https", "host", "443", "/path", false}, + {`/path`, "", "", "", "/path", false}, } { actual, err := standardizeAddress(test.input)