Initial commit
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
use std::os::unix::fs::PermissionsExt;
|
||||
use std::process::Command;
|
||||
|
||||
use crate::SandboxConfig;
|
||||
use crate::errors::SandboxError;
|
||||
|
||||
pub fn check(config: &SandboxConfig) -> Result<(), SandboxError> {
|
||||
check_bwrap()?;
|
||||
check_command(config)?;
|
||||
check_chdir(config)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn check_chdir(config: &SandboxConfig) -> Result<(), SandboxError> {
|
||||
if !config.chdir.is_dir() {
|
||||
return Err(SandboxError::ChdirMissing(config.chdir.clone()));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn check_bwrap() -> Result<(), SandboxError> {
|
||||
Command::new("bwrap")
|
||||
.arg("--version")
|
||||
.output()
|
||||
.map_err(|_| SandboxError::BwrapNotFound)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn check_command(config: &SandboxConfig) -> Result<(), SandboxError> {
|
||||
if !config.command.is_file() {
|
||||
return Err(SandboxError::CommandNotFound(config.command.clone()));
|
||||
}
|
||||
let metadata = std::fs::metadata(&config.command)?;
|
||||
if metadata.permissions().mode() & 0o111 == 0 {
|
||||
return Err(SandboxError::CommandNotExecutable(config.command.clone()));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user