1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 // Socket control messages
11 // UnixCredentials encodes credentials into a socket control message
12 // for sending to another process. This can be used for
14 func UnixCredentials(ucred
*Ucred
) []byte {
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
24 // ParseUnixCredentials decodes a socket control message that contains
25 // credentials in a Ucred structure. To receive such a message, the
26 // SO_PASSCRED option must be enabled on the socket.
27 func ParseUnixCredentials(m
*SocketControlMessage
) (*Ucred
, error
) {
28 if m
.Header
.Level
!= SOL_SOCKET
{
31 if m
.Header
.Type
!= SCM_CREDENTIALS
{
34 if uintptr(len(m
.Data
)) < unsafe
.Sizeof(Ucred
{}) {
37 ucred
:= *(*Ucred
)(unsafe
.Pointer(&m
.Data
[0]))