use execkit::{Policy, Session};
fn main() -> Result<(), execkit::Error> {
let mut session = Session::local()?.with_policy(Policy {
allow: vec![],
deny: vec!["rm".into(), "dd".into()],
});
let r = session.exec("echo hello; echo oops 1>&2; cd /tmp; false")?;
println!("stdout : {:?}", r.stdout);
println!("stderr : {:?}", r.stderr);
println!("exit : {}", r.exit_code);
println!("cwd : {}", r.cwd);
println!("took : {} ms", r.duration_ms);
println!("\npwd now: {}", session.exec("pwd")?.stdout);
let s = session.exec("echo token=AKIAIOSFODNN7EXAMPLE")?;
println!("redacted: {}", s.stdout);
match session.exec("rm -rf /tmp/whatever") {
Err(execkit::Error::PolicyDenied(why)) => println!("\nblocked by policy: {why}"),
other => println!("\nunexpected: {other:?}"),
}
Ok(())
}