mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-26 21:53:48 +03:00
httpcaddyfile: Sort site blocks with wildcards last (fix #3410)
This commit is contained in:
parent
83551edf3e
commit
97e61c16a3
1 changed files with 13 additions and 0 deletions
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue