diff --git a/capability/capability.go b/capability/capability.go index 1b36f5f2..0412cb5f 100644 --- a/capability/capability.go +++ b/capability/capability.go @@ -142,3 +142,18 @@ func NewFile2(path string) (Capabilities, error) { func LastCap() (Cap, error) { return lastCap() } + +// AmbientRaise raises specified ambient capabilities for the calling process. +func AmbientRaise(cap ...Cap) error { + return ambientRaise(cap...) +} + +// AmbientLower lowers specified ambient capabilities for the calling process. +func AmbientLower(cap ...Cap) error { + return ambientLower(cap...) +} + +// AmbientClearAll lowers all ambient capabilities for the calling process. +func AmbientClearAll() error { + return ambientClearAll() +} diff --git a/capability/capability_linux.go b/capability/capability_linux.go index 07321955..cefa0ac5 100644 --- a/capability/capability_linux.go +++ b/capability/capability_linux.go @@ -117,6 +117,13 @@ func newPid(pid int) (c Capabilities, retErr error) { return } +func ignoreEINVAL(err error) error { + if errors.Is(err, syscall.EINVAL) { + err = nil + } + return err +} + type capsV3 struct { hdr capHeader data [2]capData @@ -327,7 +334,7 @@ func (c *capsV3) Load() (err error) { return } -func (c *capsV3) Apply(kind CapType) (err error) { +func (c *capsV3) Apply(kind CapType) error { last, err := LastCap() if err != nil { return err @@ -336,21 +343,17 @@ func (c *capsV3) Apply(kind CapType) (err error) { var data [2]capData err = capget(&c.hdr, &data[0]) if err != nil { - return + return err } if (1<