diff --git a/ipc/ipc.go b/ipc/ipc.go index 71f74b3..72555a9 100644 --- a/ipc/ipc.go +++ b/ipc/ipc.go @@ -42,6 +42,9 @@ func NewServer(address string, factory MsgFactory, log *logging.Logger, handlers } listener, err := net.ListenUnix("unix", &net.UnixAddr{address, "unix"}) + if err := setPassCred(listener); err != nil { + return nil, errors.New("Failed to set SO_PASSCRED on listening socket: " + err.Error()) + } if err != nil { md.close() return nil, err diff --git a/ipc/util.go b/ipc/util.go index f056a90..4873649 100644 --- a/ipc/util.go +++ b/ipc/util.go @@ -1,17 +1,16 @@ package ipc import ( - "net" "reflect" "syscall" ) -func setPassCred(c net.Conn) error { +func setPassCred(c interface{}) error { fd := reflectFD(c) return syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_PASSCRED, 1) } -func reflectFD(c net.Conn) int { +func reflectFD(c interface{}) int { sysfd := extractField(c, "fd", "sysfd") return int(sysfd.Int()) }