13
11
// UnixCredentials encodes credentials into a socket control message
14
12
// for sending to another process. This can be used for
16
14
func UnixCredentials(ucred *Ucred) []byte {
17
buf := make([]byte, CmsgSpace(SizeofUcred))
18
cmsg := (*Cmsghdr)(unsafe.Pointer(&buf[0]))
19
cmsg.Level = SOL_SOCKET
20
cmsg.Type = SCM_CREDENTIALS
21
cmsg.SetLen(CmsgLen(SizeofUcred))
22
*((*Ucred)(cmsgData(cmsg))) = *ucred
15
b := make([]byte, CmsgSpace(SizeofUcred))
16
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
18
h.Type = SCM_CREDENTIALS
19
h.SetLen(CmsgLen(SizeofUcred))
20
*((*Ucred)(cmsgData(h))) = *ucred
26
24
// ParseUnixCredentials decodes a socket control message that contains
27
25
// credentials in a Ucred structure. To receive such a message, the
28
26
// SO_PASSCRED option must be enabled on the socket.
29
func ParseUnixCredentials(msg *SocketControlMessage) (*Ucred, error) {
30
if msg.Header.Level != SOL_SOCKET {
33
if msg.Header.Type != SCM_CREDENTIALS {
36
ucred := *(*Ucred)(unsafe.Pointer(&msg.Data[0]))
27
func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {
28
if m.Header.Level != SOL_SOCKET {
31
if m.Header.Type != SCM_CREDENTIALS {
34
ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))