From 93a7a45e7e1ca64dc0103af55ab2a0a4b9c6c84f Mon Sep 17 00:00:00 2001 From: Francis Lavoie Date: Tue, 18 Jan 2022 13:27:43 -0500 Subject: [PATCH] httpcaddyfile: Fix incorrect handling of IPv6 bind addresses (#4532) The `net.JoinHostPort()` function has some naiive logic for handling IPv6, it just checks if the host part has a `:` and if so it wraps the host part with `[ ]` but this causes our network type prefix to get wrapped as well, which is invalid for `caddy.NetworkAddress`. Instead, we can just concatenate the host and port manually here to avoid this side-effect. --- caddyconfig/httpcaddyfile/addresses.go | 2 +- .../integration/caddyfile_adapt/bind_ipv6.txt | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 caddytest/integration/caddyfile_adapt/bind_ipv6.txt diff --git a/caddyconfig/httpcaddyfile/addresses.go b/caddyconfig/httpcaddyfile/addresses.go index a4f07ae60db..e2e77719143 100644 --- a/caddyconfig/httpcaddyfile/addresses.go +++ b/caddyconfig/httpcaddyfile/addresses.go @@ -223,7 +223,7 @@ func (st *ServerType) listenerAddrsForServerBlockKey(sblock serverBlock, key str if err == nil && addr.IsUnixNetwork() { listeners[host] = struct{}{} } else { - listeners[net.JoinHostPort(host, lnPort)] = struct{}{} + listeners[host+":"+lnPort] = struct{}{} } } diff --git a/caddytest/integration/caddyfile_adapt/bind_ipv6.txt b/caddytest/integration/caddyfile_adapt/bind_ipv6.txt new file mode 100644 index 00000000000..d9d9bec6b25 --- /dev/null +++ b/caddytest/integration/caddyfile_adapt/bind_ipv6.txt @@ -0,0 +1,29 @@ +example.com { + bind tcp6/[::] +} +---------- +{ + "apps": { + "http": { + "servers": { + "srv0": { + "listen": [ + "tcp6/[::]:443" + ], + "routes": [ + { + "match": [ + { + "host": [ + "example.com" + ] + } + ], + "terminal": true + } + ] + } + } + } + } +} \ No newline at end of file