summaryrefslogtreecommitdiff
path: root/caddyconfig/httpcaddyfile
diff options
context:
space:
mode:
Diffstat (limited to 'caddyconfig/httpcaddyfile')
-rw-r--r--caddyconfig/httpcaddyfile/httptype.go13
1 files changed, 13 insertions, 0 deletions
diff --git a/caddyconfig/httpcaddyfile/httptype.go b/caddyconfig/httpcaddyfile/httptype.go
index 7bb7c56..7be932f 100644
--- a/caddyconfig/httpcaddyfile/httptype.go
+++ b/caddyconfig/httpcaddyfile/httptype.go
@@ -377,7 +377,11 @@ func (st *ServerType) serversFromPairings(
// but I don't expect many blocks will have THAT many keys...
var iLongestPath, jLongestPath string
var iLongestHost, jLongestHost string
+ var iWildcardHost, jWildcardHost bool
for _, addr := range p.serverBlocks[i].keys {
+ if strings.Contains(addr.Host, "*.") {
+ iWildcardHost = true
+ }
if specificity(addr.Host) > specificity(iLongestHost) {
iLongestHost = addr.Host
}
@@ -386,6 +390,9 @@ func (st *ServerType) serversFromPairings(
}
}
for _, addr := range p.serverBlocks[j].keys {
+ if strings.Contains(addr.Host, "*.") {
+ jWildcardHost = true
+ }
if specificity(addr.Host) > specificity(jLongestHost) {
jLongestHost = addr.Host
}
@@ -393,6 +400,12 @@ func (st *ServerType) serversFromPairings(
jLongestPath = addr.Path
}
}
+ if iWildcardHost != jWildcardHost {
+ // site blocks that have a key with a wildcard in the hostname
+ // must always be less specific than blocks without one; see
+ // https://github.com/caddyserver/caddy/issues/3410
+ return jWildcardHost && !iWildcardHost
+ }
if specificity(iLongestHost) == specificity(jLongestHost) {
return len(iLongestPath) > len(jLongestPath)
}