From 6982c06261914dffd17043870e97328bcda77642 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Sun, 1 Apr 2018 21:29:34 -0400 Subject: [PATCH] cmd/strelaypoolsrv: Handle portless X-Forwarded-For (#4856) --- cmd/strelaypoolsrv/main.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/cmd/strelaypoolsrv/main.go b/cmd/strelaypoolsrv/main.go index e23d5a81b..8e055c8df 100644 --- a/cmd/strelaypoolsrv/main.go +++ b/cmd/strelaypoolsrv/main.go @@ -319,13 +319,9 @@ func handlePostRequest(w http.ResponseWriter, r *http.Request) { } // Get the IP address of the client - rhost, _, err := net.SplitHostPort(r.RemoteAddr) - if err != nil { - if debug { - log.Println("Failed to split remote address", r.RemoteAddr) - } - http.Error(w, err.Error(), 500) - return + rhost := r.RemoteAddr + if host, _, err := net.SplitHostPort(rhost); err == nil { + rhost = host } ip := net.ParseIP(host) @@ -449,13 +445,12 @@ func evict(relay relay) func() { } func limit(addr string, cache *lru.Cache, lock sync.RWMutex, intv time.Duration, burst int) bool { - host, _, err := net.SplitHostPort(addr) - if err != nil { - return false + if host, _, err := net.SplitHostPort(addr); err == nil { + addr = host } lock.RLock() - bkt, ok := cache.Get(host) + bkt, ok := cache.Get(addr) lock.RUnlock() if ok { bkt := bkt.(*rate.Limiter) @@ -465,7 +460,7 @@ func limit(addr string, cache *lru.Cache, lock sync.RWMutex, intv time.Duration, } } else { lock.Lock() - cache.Add(host, rate.NewLimiter(rate.Every(intv), burst)) + cache.Add(addr, rate.NewLimiter(rate.Every(intv), burst)) lock.Unlock() } return false