From 439f4d09d2b50dff46179823476e662f037c5548 Mon Sep 17 00:00:00 2001 From: Etienne Perot Date: Fri, 31 Mar 2023 17:02:15 -0700 Subject: [PATCH] gVisor: Helper function to convert a capability string to its numerical value. Also a function to list all capabilities. PiperOrigin-RevId: 521044866 --- pkg/abi/linux/capability.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/pkg/abi/linux/capability.go b/pkg/abi/linux/capability.go index 6683d2979..9b98483d1 100644 --- a/pkg/abi/linux/capability.go +++ b/pkg/abi/linux/capability.go @@ -157,6 +157,33 @@ func (cp Capability) String() string { } } +// CapabilityFromString converts a string to a capability. +// If the capability doesn't exist, its second return value is `false`. +// The capability name is expected to include the "CAP_" prefix. +func CapabilityFromString(capability string) (Capability, bool) { + for cp := Capability(0); cp <= CAP_LAST_CAP; cp++ { + if !cp.Ok() { + continue + } + if cp.String() == capability { + return cp, true + } + } + return -1, false +} + +// AllCapabilities returns a list of all defined capabilities. +func AllCapabilities() []Capability { + allCapapabilities := make([]Capability, 0, CAP_LAST_CAP+1) + for cp := Capability(0); cp <= CAP_LAST_CAP; cp++ { + if !cp.Ok() { + continue + } + allCapapabilities = append(allCapapabilities, cp) + } + return allCapapabilities +} + // Version numbers used by the capget/capset syscalls, defined in Linux's // include/uapi/linux/capability.h. const (