Browse Source

caddyhttp: Fix host matching when host has a port

master
Matthew Holt 6 years ago
parent
commit
6d0350d04e
  1. 11
      modules/caddyhttp/matchers.go
  2. 5
      modules/caddyhttp/matchers_test.go

11
modules/caddyhttp/matchers.go

@ -113,11 +113,17 @@ func init() {
// Match returns true if r matches m.
func (m MatchHost) Match(r *http.Request) bool {
reqHost, _, err := net.SplitHostPort(r.Host)
if err != nil {
// OK; probably didn't have a port
reqHost = r.Host
}
outer:
for _, host := range m {
if strings.Contains(host, "*") {
patternParts := strings.Split(host, ".")
incomingParts := strings.Split(r.Host, ".")
incomingParts := strings.Split(reqHost, ".")
if len(patternParts) != len(incomingParts) {
continue
}
@ -130,10 +136,11 @@ outer:
}
}
return true
} else if strings.EqualFold(r.Host, host) {
} else if strings.EqualFold(reqHost, host) {
return true
}
}
return false
}

5
modules/caddyhttp/matchers_test.go

@ -87,6 +87,11 @@ func TestHostMatcher(t *testing.T) {
input: "sub.foo.example.net",
expect: false,
},
{
match: MatchHost{"example.com"},
input: "example.com:5555",
expect: true,
},
} {
req := &http.Request{Host: tc.input}
actual := tc.match.Match(req)

Loading…
Cancel
Save