From 119e8794bcbda80ca337c1bb6164718e1490cc4f Mon Sep 17 00:00:00 2001 From: Emily Date: Sun, 25 Jun 2023 02:25:02 +0200 Subject: [PATCH] core: Skip `chmod` for abstract unix sockets (#5596) because those aren't real paths on the filesystem and thus can't be `chmod`ed --- listeners.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/listeners.go b/listeners.go index cbce68d61..a12d67f27 100644 --- a/listeners.go +++ b/listeners.go @@ -151,6 +151,7 @@ func (na NetworkAddress) listen(ctx context.Context, portOffset uint, config net var err error var address string var unixFileMode fs.FileMode + var isAbtractUnixSocket bool // split unix socket addr early so lnKey // is independent of permissions bits @@ -160,6 +161,7 @@ func (na NetworkAddress) listen(ctx context.Context, portOffset uint, config net if err != nil { return nil, err } + isAbtractUnixSocket = strings.HasPrefix(address, "@") } else { address = na.JoinHostPort(portOffset) } @@ -167,8 +169,11 @@ func (na NetworkAddress) listen(ctx context.Context, portOffset uint, config net // if this is a unix socket, see if we already have it open, // force socket permissions on it and return early if socket, err := reuseUnixSocket(na.Network, address); socket != nil || err != nil { - if err := os.Chmod(address, unixFileMode); err != nil { - return nil, fmt.Errorf("unable to set permissions (%s) on %s: %v", unixFileMode, address, err) + if !isAbtractUnixSocket { + if err := os.Chmod(address, unixFileMode); err != nil { + return nil, fmt.Errorf("unable to set permissions (%s) on %s: %v", unixFileMode, address, err) + } + } return socket, err } @@ -211,8 +216,10 @@ func (na NetworkAddress) listen(ctx context.Context, portOffset uint, config net } if IsUnixNetwork(na.Network) { - if err := os.Chmod(address, unixFileMode); err != nil { - return nil, fmt.Errorf("unable to set permissions (%s) on %s: %v", unixFileMode, address, err) + if !isAbtractUnixSocket { + if err := os.Chmod(address, unixFileMode); err != nil { + return nil, fmt.Errorf("unable to set permissions (%s) on %s: %v", unixFileMode, address, err) + } } }