From abf089ad2c933b7c2be8b5856e6904fe343c5b18 Mon Sep 17 00:00:00 2001 From: TargetLocked <32962687+TargetLocked@users.noreply.github.com> Date: Thu, 15 Aug 2024 21:41:07 +0800 Subject: [PATCH] fix(http_server): properly handle remote address of abstract unix domain socket --- pkg/server/http_handler.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/pkg/server/http_handler.go b/pkg/server/http_handler.go index 5a4131423..57b9c8d55 100644 --- a/pkg/server/http_handler.go +++ b/pkg/server/http_handler.go @@ -67,13 +67,19 @@ func (h *HttpHandler) warnErr(req *http.Request, msg string, err error) { } func (h *HttpHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { - addrPort, err := netip.ParseAddrPort(req.RemoteAddr) - if err != nil { - h.logger.Error("failed to parse request remote addr", zap.String("addr", req.RemoteAddr), zap.Error(err)) - w.WriteHeader(http.StatusInternalServerError) - return + var clientAddr netip.Addr + if req.RemoteAddr == "@" { + // listening to abstract UNIX domain socket, mark as local + clientAddr = netip.MustParseAddr("127.0.0.1") + } else { + addrPort, err := netip.ParseAddrPort(req.RemoteAddr) + if err != nil { + h.logger.Error("failed to parse request remote addr", zap.String("addr", req.RemoteAddr), zap.Error(err)) + w.WriteHeader(http.StatusInternalServerError) + return + } + clientAddr = addrPort.Addr() } - clientAddr := addrPort.Addr() // read remote addr from header if header := h.srcIPHeader; len(header) != 0 {