use capsec::prelude::*;
#[capsec::main]
fn main(root: CapRoot) -> Result<(), Box<dyn std::error::Error>> {
let net_cap = root.grant::<NetConnect>();
let (runtime_cap, revoker) = RuntimeCap::new(net_cap);
println!("=== Server Initialization ===");
let cap = runtime_cap.try_cap()?;
println!("[startup] NetConnect capability active — initializing connection pool");
println!("[startup] Cap<NetConnect> obtained, pool created (simulated)");
drop(cap);
println!("\n=== Initialization Complete — Revoking ===");
revoker.revoke();
println!("[revoke] Revoker::revoke() called — no new connections allowed");
println!("\n=== Runtime Phase ===");
match runtime_cap.try_cap() {
Ok(_) => println!("[runtime] This should not happen"),
Err(e) => println!("[runtime] try_cap() returned: {e}"),
}
let clone = runtime_cap.clone();
match clone.try_cap() {
Ok(_) => println!("[clone] This should not happen"),
Err(e) => println!("[clone] Cloned cap also blocked: {e}"),
}
println!("\n=== Demo Complete ===");
println!("Server is locked down — network capabilities revoked after init.");
Ok(())
}