Fix binary search in the whitelist

This commit is contained in:
Andrey Meshkov 2018-11-21 00:18:13 +03:00
parent 345e4dc89a
commit 25f20bd5a7
2 changed files with 8 additions and 4 deletions

View File

@ -45,8 +45,12 @@ func (p *plug) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
func (p *plug) allowRequest(ip string) (bool, error) { func (p *plug) allowRequest(ip string) (bool, error) {
if len(p.whitelist) > 0 && sort.SearchStrings(p.whitelist, ip) >= 0 { if len(p.whitelist) > 0 {
return true, nil i := sort.SearchStrings(p.whitelist, ip)
if i < len(p.whitelist) && p.whitelist[i] == ip {
return true, nil
}
} }
if _, found := tokenBuckets.Get(ip); !found { if _, found := tokenBuckets.Get(ip); !found {

View File

@ -53,7 +53,7 @@ func TestRatelimiting(t *testing.T) {
allowed, err = p.allowRequest("127.0.0.1") allowed, err = p.allowRequest("127.0.0.1")
if err != nil || allowed { if err != nil || !allowed {
t.Fatal("Second request must have been ratelimited") t.Fatal("Second request must have been ratelimited")
} }
} }
@ -61,7 +61,7 @@ func TestRatelimiting(t *testing.T) {
func TestWhitelist(t *testing.T) { func TestWhitelist(t *testing.T) {
// rate limit is 1 per sec // rate limit is 1 per sec
c := caddy.NewTestController("dns", `ratelimit 1 { whitelist 127.0.0.1 }`) c := caddy.NewTestController("dns", `ratelimit 1 { whitelist 127.0.0.2 127.0.0.125 }`)
p, err := setupPlugin(c) p, err := setupPlugin(c)
if err != nil { if err != nil {