use core::fmt;
use std::os::raw::c_int;
pub use std::os::raw::{c_uint, c_ushort};
use libc::{dev_t, gid_t, pid_t, uid_t};
pub use mach2::vm_types::user_addr_t;
pub type user_size_t = u64;
pub type attrgroup_t = u32;
pub type au_asid_t = pid_t;
#[cfg(feature = "macos_10_15_1")]
pub type acl_t = *mut _acl;
#[repr(C)]
#[cfg(feature = "macos_10_15_1")]
pub struct _acl {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct au_tid_t {
pub port: dev_t,
pub machine: u32,
}
#[repr(C)]
#[derive(Default, Copy, Clone, PartialEq, Eq, Hash)]
pub struct audit_token_t {
pub val: [c_uint; 8],
}
impl fmt::Debug for audit_token_t {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_tuple("audit_token_t").field(&format!("0x{self:08X}")).finish()
}
}
impl fmt::LowerHex for audit_token_t {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
for v in self.val {
fmt::LowerHex::fmt(&v, f)?;
}
Ok(())
}
}
impl fmt::UpperHex for audit_token_t {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
for v in self.val {
fmt::UpperHex::fmt(&v, f)?;
}
Ok(())
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct attrlist {
pub bitmapcount: c_ushort,
_reserved: u16,
pub commonattr: attrgroup_t,
pub volattr: attrgroup_t,
pub dirattr: attrgroup_t,
pub fileattr: attrgroup_t,
pub forkattr: attrgroup_t,
}
#[link(name = "bsm", kind = "dylib")]
unsafe extern "C" {
pub fn audit_token_to_au32(
atoken: audit_token_t,
auidp: *mut uid_t,
euidp: *mut uid_t,
egidp: *mut gid_t,
ruidp: *mut uid_t,
rgidp: *mut gid_t,
pidp: *mut pid_t,
asidp: *mut au_asid_t,
tidp: *mut au_tid_t,
);
pub fn audit_token_to_auid(atoken: audit_token_t) -> uid_t;
pub fn audit_token_to_euid(atoken: audit_token_t) -> uid_t;
pub fn audit_token_to_egid(atoken: audit_token_t) -> gid_t;
pub fn audit_token_to_ruid(atoken: audit_token_t) -> uid_t;
pub fn audit_token_to_rgid(atoken: audit_token_t) -> gid_t;
pub fn audit_token_to_pid(atoken: audit_token_t) -> pid_t;
pub fn audit_token_to_asid(atoken: audit_token_t) -> au_asid_t;
pub fn audit_token_to_pidversion(atoken: audit_token_t) -> c_int;
}