#![cfg(feature = "landlock")]
use std::path::{Path, PathBuf};
pub use landlock::RulesetError as LandlockError;
pub use landlock::{ABI, Access, AccessFs, BitFlags, Compatible, CompatLevel, PathBeneath, PathFd, Ruleset, RulesetAttr, RulesetCreatedAttr};
#[derive(Clone, Debug)]
pub struct LandlockRule {
pub path: PathBuf,
pub access_rules: BitFlags<AccessFs>,
}
impl LandlockRule {
pub fn new<P: AsRef<Path>>(path: P, access_rules: BitFlags<AccessFs>) -> LandlockRule {
let path = path.as_ref().into();
LandlockRule {
path,
access_rules
}
}
}
#[derive(Debug)]
pub(crate) struct LabeledLandlockRule(pub &'static str, pub LandlockRule);
pub mod access {
use super::*;
use landlock::AccessFs as Fs;
#[must_use]
pub fn read_path() -> BitFlags<Fs> {
Fs::ReadFile.into()
}
#[must_use]
pub fn write_file() -> BitFlags<AccessFs> {
Fs::WriteFile.into()
}
#[must_use]
pub fn list_dir() -> BitFlags<AccessFs> {
Fs::ReadDir.into()
}
#[must_use]
pub fn create_file() -> BitFlags<AccessFs> {
Fs::MakeReg.into()
}
#[must_use]
pub fn create_dir() -> BitFlags<AccessFs> {
Fs::MakeDir.into()
}
#[must_use]
pub fn delete_file() -> BitFlags<AccessFs> {
Fs::RemoveFile.into()
}
#[must_use]
pub fn delete_dir() -> BitFlags<AccessFs> {
Fs::RemoveDir.into()
}
#[must_use]
pub fn execute() -> BitFlags<AccessFs> {
Fs::Execute.into()
}
}