//! Prueba interactiva de `brahman-auth` contra PAM. Sirve para verificar //! la configuración de `/etc/pam.d/` en una máquina real. //! //! `cargo run -p brahman-auth --example auth-probe -- [usuario] [servicio]` //! //! Pide la contraseña sin eco. El servicio por defecto es `carmen`; si //! `/etc/pam.d/carmen` aún no está instalado, probar con `login`. use brahman_auth::{Authenticator, PamAuthenticator}; fn main() { let mut args = std::env::args().skip(1); let user = args .next() .or_else(|| std::env::var("USER").ok()) .unwrap_or_else(|| "root".into()); let service = args.next().unwrap_or_else(|| "carmen".into()); let password = match rpassword::prompt_password(format!("Contraseña de {user}: ")) { Ok(p) => p, Err(e) => { eprintln!("no se pudo leer la contraseña: {e}"); std::process::exit(2); } }; let auth = PamAuthenticator::new(&service); println!("autenticando «{user}» contra el servicio PAM «{service}»…"); match auth.authenticate(&user, &password) { Ok(info) => { println!("✓ autenticado"); println!(" uid={} gid={}", info.uid, info.gid); println!(" home={}", info.home.display()); println!(" shell={}", info.shell.display()); } Err(e) => { eprintln!("✗ {e}"); std::process::exit(1); } } }