all repos

rss-tools @ 58cc1bd492af31e6c9acf65e690474c8c1edf164

get rss feed from sources that(i need and) dont provide one

rss-tools/vendor/golang.org/x/sys/unix/sockcmsg_zos.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
we're vendoring now, 7 days ago
1
// Copyright 2024 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.
4
5
// Socket control messages
6
7
package unix
8
9
import "unsafe"
10
11
// UnixCredentials encodes credentials into a socket control message
12
// for sending to another process. This can be used for
13
// authentication.
14
func UnixCredentials(ucred *Ucred) []byte {
15
	b := make([]byte, CmsgSpace(SizeofUcred))
16
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
17
	h.Level = SOL_SOCKET
18
	h.Type = SCM_CREDENTIALS
19
	h.SetLen(CmsgLen(SizeofUcred))
20
	*(*Ucred)(h.data(0)) = *ucred
21
	return b
22
}
23
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 {
29
		return nil, EINVAL
30
	}
31
	if m.Header.Type != SCM_CREDENTIALS {
32
		return nil, EINVAL
33
	}
34
	ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))
35
	return &ucred, nil
36
}
37
38
// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO.
39
func PktInfo4(info *Inet4Pktinfo) []byte {
40
	b := make([]byte, CmsgSpace(SizeofInet4Pktinfo))
41
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
42
	h.Level = SOL_IP
43
	h.Type = IP_PKTINFO
44
	h.SetLen(CmsgLen(SizeofInet4Pktinfo))
45
	*(*Inet4Pktinfo)(h.data(0)) = *info
46
	return b
47
}
48
49
// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO.
50
func PktInfo6(info *Inet6Pktinfo) []byte {
51
	b := make([]byte, CmsgSpace(SizeofInet6Pktinfo))
52
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
53
	h.Level = SOL_IPV6
54
	h.Type = IPV6_PKTINFO
55
	h.SetLen(CmsgLen(SizeofInet6Pktinfo))
56
	*(*Inet6Pktinfo)(h.data(0)) = *info
57
	return b
58
}