capo 0.0.1

Linux capabilities interface
Documentation
// Copyright (C) 2020 - Will Glozer. All rights reserved.

#![allow(unused)]

use std::os::raw::c_int;

pub const LINUX_CAPABILITY_VERSION_1: u32 = 0x19980330;
pub const LINUX_CAPABILITY_VERSION_2: u32 = 0x20071026;
pub const LINUX_CAPABILITY_VERSION_3: u32 = 0x20080522;

pub const CAP_CHOWN:            u8 = 0;
pub const CAP_DAC_OVERRIDE:     u8 = 1;
pub const CAP_DAC_READ_SEARCH:  u8 = 2;
pub const CAP_FOWNER:           u8 = 3;
pub const CAP_FSETID:           u8 = 4;
pub const CAP_KILL:             u8 = 5;
pub const CAP_SETGID:           u8 = 6;
pub const CAP_SETUID:           u8 = 7;
pub const CAP_SETPCAP:          u8 = 8;
pub const CAP_LINUX_IMMUTABLE:  u8 = 9;
pub const CAP_NET_BIND_SERVICE: u8 = 10;
pub const CAP_NET_BROADCAST:    u8 = 11;
pub const CAP_NET_ADMIN:        u8 = 12;
pub const CAP_NET_RAW:          u8 = 13;
pub const CAP_IPC_LOCK:         u8 = 14;
pub const CAP_IPC_OWNER:        u8 = 15;
pub const CAP_SYS_MODULE:       u8 = 16;
pub const CAP_SYS_RAWIO:        u8 = 17;
pub const CAP_SYS_CHROOT:       u8 = 18;
pub const CAP_SYS_PTRACE:       u8 = 19;
pub const CAP_SYS_PACCT:        u8 = 20;
pub const CAP_SYS_ADMIN:        u8 = 21;
pub const CAP_SYS_BOOT:         u8 = 22;
pub const CAP_SYS_NICE:         u8 = 23;
pub const CAP_SYS_RESOURCE:     u8 = 24;
pub const CAP_SYS_TIME:         u8 = 25;
pub const CAP_SYS_TTY_CONFIG:   u8 = 26;
pub const CAP_MKNOD:            u8 = 27;
pub const CAP_LEASE:            u8 = 28;
pub const CAP_AUDIT_WRITE:      u8 = 29;
pub const CAP_AUDIT_CONTROL:    u8 = 30;
pub const CAP_SETFCAP:          u8 = 31;
pub const CAP_MAC_OVERRIDE:     u8 = 32;
pub const CAP_MAC_ADMIN:        u8 = 33;
pub const CAP_SYSLOG:           u8 = 34;
pub const CAP_WAKE_ALARM:       u8 = 35;
pub const CAP_BLOCK_SUSPEND:    u8 = 36;
pub const CAP_AUDIT_READ:       u8 = 37;
pub const CAP_LAST_CAP:         u8 = CAP_AUDIT_READ;

#[repr(C)]
#[derive(Clone, Debug, Default)]
pub struct Header {
    pub ver: u32,
    pub pid: c_int,
}

#[repr(C)]
#[derive(Clone, Debug, Default)]
pub struct Data {
    pub effective:   u32,
    pub permitted:   u32,
    pub inheritable: u32,
}

impl Header {
    pub fn v3(pid: c_int) -> Self {
        Self { ver: LINUX_CAPABILITY_VERSION_3, pid }
    }
}