#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum LinuxCapability {
Chown,
DacOverride,
DacReadSearch,
FOwner,
FSetId,
Kill,
SetGid,
SetUid,
SetPCap,
NetBindService,
NetRaw,
NetAdmin,
SysChroot,
SysPtrace,
SysAdmin,
SysBoot,
SysNice,
SysResource,
SysTime,
MkNod,
AuditWrite,
AuditControl,
SetFCap,
}
impl LinuxCapability {
pub fn name(self) -> &'static str {
match self {
Self::Chown => "CHOWN",
Self::DacOverride => "DAC_OVERRIDE",
Self::DacReadSearch => "DAC_READ_SEARCH",
Self::FOwner => "FOWNER",
Self::FSetId => "FSETID",
Self::Kill => "KILL",
Self::SetGid => "SETGID",
Self::SetUid => "SETUID",
Self::SetPCap => "SETPCAP",
Self::NetBindService => "NET_BIND_SERVICE",
Self::NetRaw => "NET_RAW",
Self::NetAdmin => "NET_ADMIN",
Self::SysChroot => "SYS_CHROOT",
Self::SysPtrace => "SYS_PTRACE",
Self::SysAdmin => "SYS_ADMIN",
Self::SysBoot => "SYS_BOOT",
Self::SysNice => "SYS_NICE",
Self::SysResource => "SYS_RESOURCE",
Self::SysTime => "SYS_TIME",
Self::MkNod => "MKNOD",
Self::AuditWrite => "AUDIT_WRITE",
Self::AuditControl => "AUDIT_CONTROL",
Self::SetFCap => "SETFCAP",
}
}
#[cfg_attr(not(target_os = "linux"), allow(dead_code))]
pub(crate) fn to_cap_value(self) -> u32 {
match self {
Self::Chown => 0, Self::DacOverride => 1, Self::DacReadSearch => 2, Self::FOwner => 3, Self::FSetId => 4, Self::Kill => 5, Self::SetGid => 6, Self::SetUid => 7, Self::SetPCap => 8, Self::NetBindService => 10, Self::NetAdmin => 12, Self::NetRaw => 13, Self::SysChroot => 18, Self::SysPtrace => 19, Self::SysAdmin => 21, Self::SysBoot => 22, Self::SysNice => 23, Self::SysResource => 24, Self::SysTime => 25, Self::MkNod => 27, Self::AuditWrite => 29, Self::AuditControl => 30, Self::SetFCap => 31, }
}
}