Browse Source

http: header matcher supports fast prefix and suffix matching (#2888)

master
Matthew Holt 6 years ago
parent
commit
512b004332
No known key found for this signature in database GPG Key ID: 2A349DD577D586A5
  1. 13
      modules/caddyhttp/matchers.go

13
modules/caddyhttp/matchers.go

@ -300,8 +300,17 @@ func (m MatchHeader) Match(r *http.Request) bool {
fieldVals: fieldVals:
for _, actualFieldVal := range actualFieldVals { for _, actualFieldVal := range actualFieldVals {
for _, allowedFieldVal := range allowedFieldVals { for _, allowedFieldVal := range allowedFieldVals {
if actualFieldVal == allowedFieldVal { switch {
match = true case strings.HasPrefix(allowedFieldVal, "*") && strings.HasSuffix(allowedFieldVal, "*"):
match = strings.Contains(actualFieldVal, allowedFieldVal[1:len(allowedFieldVal)-1])
case strings.HasPrefix(allowedFieldVal, "*"):
match = strings.HasSuffix(actualFieldVal, allowedFieldVal[1:])
case strings.HasSuffix(allowedFieldVal, "*"):
match = strings.HasPrefix(actualFieldVal, allowedFieldVal[:len(allowedFieldVal)-1])
default:
match = actualFieldVal == allowedFieldVal
}
if match {
break fieldVals break fieldVals
} }
} }

Loading…
Cancel
Save