summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancis Lavoie <lavofr@gmail.com>2022-01-18 13:27:43 -0500
committerGitHub <noreply@github.com>2022-01-18 11:27:43 -0700
commit93a7a45e7e1ca64dc0103af55ab2a0a4b9c6c84f (patch)
tree44151c2e6c376c090cd80def17ae8418f2a2fb86
parent1a7a78a1f27bdf58e9921cc636375385840a2dc5 (diff)
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.
-rw-r--r--caddyconfig/httpcaddyfile/addresses.go2
-rw-r--r--caddytest/integration/caddyfile_adapt/bind_ipv6.txt29
2 files changed, 30 insertions, 1 deletions
diff --git a/caddyconfig/httpcaddyfile/addresses.go b/caddyconfig/httpcaddyfile/addresses.go
index a4f07ae..e2e7771 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 0000000..d9d9bec
--- /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