bastion 0.53.2
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
//go:build linux || darwin
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net"
|
||||
)
|
||||
|
||||
// servicePeerUID is the uid the kernel stamped on the OTHER end of a unix
|
||||
// socket connection at connect() time (SO_PEERCRED / LOCAL_PEERCRED via
|
||||
// contextPeerUID). It is who is actually listening, whatever the path said.
|
||||
func servicePeerUID(c net.Conn) (uint32, error) {
|
||||
uc, ok := c.(*net.UnixConn)
|
||||
if !ok {
|
||||
return 0, errors.New("not a unix socket connection")
|
||||
}
|
||||
raw, err := uc.SyscallConn()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
var uid uint32
|
||||
var cerr error
|
||||
if err := raw.Control(func(fd uintptr) { uid, cerr = contextPeerUID(fd) }); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return uid, cerr
|
||||
}
|
||||
Reference in New Issue
Block a user