use std::path::Path;
use super::SandboxPolicy;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WindowsSandboxKind {
ProcessContainment,
}
impl std::fmt::Display for WindowsSandboxKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
WindowsSandboxKind::ProcessContainment => write!(f, "process-containment"),
}
}
}
pub fn is_available() -> bool {
false
}
pub fn select_best_kind(_policy: &SandboxPolicy, _cwd: &Path) -> WindowsSandboxKind {
WindowsSandboxKind::ProcessContainment
}
pub fn detect_denial(exit_code: i32, stderr: &str) -> bool {
if exit_code == 0 {
return false;
}
let patterns = [
"Access is denied",
"access denied",
"STATUS_ACCESS_DENIED",
"privilege",
"AppContainer",
"sandbox",
];
patterns.iter().any(|p| stderr.contains(p))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn windows_sandbox_is_not_advertised_until_helper_exists() {
assert!(!is_available());
assert_eq!(
select_best_kind(&SandboxPolicy::default(), Path::new(".")),
WindowsSandboxKind::ProcessContainment
);
}
}