⎇ 3dc85ebdcdd5fda0a1be0db5f8fbce5859266f2e
shared/auth/auth-core/examples/auth-probe.rs
Historia
Quién tocó qué
crudo
feat: mirada standalone — compositor Wayland + WM sobre Llimphi (build magro)
1//! Prueba interactiva de `brahman-auth` contra PAM. Sirve para verificar
2//! la configuración de `/etc/pam.d/<servicio>` en una máquina real.
3//!
4//! `cargo run -p brahman-auth --example auth-probe -- [usuario] [servicio]`
5//!
6//! Pide la contraseña sin eco. El servicio por defecto es `carmen`; si
7//! `/etc/pam.d/carmen` aún no está instalado, probar con `login`.
8
9use auth_core::{Authenticator, PamAuthenticator};
10
11fn main() {
12 let mut args = std::env::args().skip(1);
13 let user = args
14 .next()
15 .or_else(|| std::env::var("USER").ok())
16 .unwrap_or_else(|| "root".into());
17 let service = args.next().unwrap_or_else(|| "carmen".into());
18
19 let password = match rpassword::prompt_password(format!("Contraseña de {user}: ")) {
20 Ok(p) => p,
21 Err(e) => {
22 eprintln!("no se pudo leer la contraseña: {e}");
23 std::process::exit(2);
24 }
25 };
26
27 let auth = PamAuthenticator::new(&service);
28 println!("autenticando «{user}» contra el servicio PAM «{service}»…");
29 match auth.authenticate(&user, &password) {
30 Ok(info) => {
31 println!("✓ autenticado");
32 println!(" uid={} gid={}", info.uid, info.gid);
33 println!(" home={}", info.home.display());
34 println!(" shell={}", info.shell.display());
35 }
36 Err(e) => {
37 eprintln!("✗ {e}");
38 std::process::exit(1);
39 }
40 }
41}