pub fn is_apparmor_enabled() -> bool {
std::fs::read_to_string("/sys/module/apparmor/parameters/enabled")
.map(|s| s.trim() == "Y")
.unwrap_or(false)
}
pub fn is_selinux_enabled() -> bool {
std::path::Path::new("/sys/fs/selinux/enforce").exists()
}
pub(crate) unsafe fn open_apparmor_exec_attr() -> libc::c_int {
libc::open(
c"/proc/self/attr/apparmor/exec".as_ptr(),
libc::O_WRONLY | libc::O_CLOEXEC,
)
}
pub(crate) unsafe fn open_selinux_exec_attr() -> libc::c_int {
libc::open(
c"/proc/self/attr/exec".as_ptr(),
libc::O_WRONLY | libc::O_CLOEXEC,
)
}
pub(crate) unsafe fn write_mac_attr(fd: libc::c_int, label: &str) -> std::io::Result<()> {
if fd < 0 {
return Ok(());
}
let n = libc::write(fd, label.as_ptr() as *const libc::c_void, label.len());
libc::close(fd);
if n < 0 {
return Err(std::io::Error::last_os_error());
}
Ok(())
}