From 06e86bde8886aca3e1cd8cbc948cff7a103f97ab Mon Sep 17 00:00:00 2001 From: "Joe Richey joerichey@google.com" Date: Mon, 17 Apr 2017 12:45:30 -0700 Subject: vendor: adding in golang.org/x/sys/unix package This commit adds in the golang.org/x/sys/unix package. This package provides a low-level interface to unix syscalls. We will uses this package instead of the built-in "syscall" package because the syscall package is locked down (https://golang.org/pkg/syscall) and is not exposing any new kernel functionality. In fact, this is actually a patched version of the x/sys/unix package pending review (first part: https://go-review.googlesource.com/c/37943). The version included in this commit exposes all of the filesystem encryption kernel interfaces to Go code. Change-Id: Ic5f9c98b858ccb00db97502c9a60e9249aa8ba38 --- vendor/golang.org/x/sys/unix/sockcmsg_linux.go | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_linux.go (limited to 'vendor/golang.org/x/sys/unix/sockcmsg_linux.go') diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go new file mode 100644 index 0000000..d9ff473 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go @@ -0,0 +1,36 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Socket control messages + +package unix + +import "unsafe" + +// UnixCredentials encodes credentials into a socket control message +// for sending to another process. This can be used for +// authentication. +func UnixCredentials(ucred *Ucred) []byte { + b := make([]byte, CmsgSpace(SizeofUcred)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_CREDENTIALS + h.SetLen(CmsgLen(SizeofUcred)) + *((*Ucred)(cmsgData(h))) = *ucred + return b +} + +// ParseUnixCredentials decodes a socket control message that contains +// credentials in a Ucred structure. To receive such a message, the +// SO_PASSCRED option must be enabled on the socket. +func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_CREDENTIALS { + return nil, EINVAL + } + ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0])) + return &ucred, nil +} -- cgit v1.3