tawasuyu

tawasuyu/mirada

Sovereign tiling Wayland compositor + window manager in Rust, on Llimphi.

Rust 50Markdown 30TOML 211282 Sutichaykuna

⎇ 3dc85ebdcdd5fda0a1be0db5f8fbce5859266f2e shared/auth/auth-core/examples/auth-probe.rs Rust · 41 siq'ikuna · 1.4 KB Ñawpa willay Pi imata llamkarqan ch'uya

feat: mirada standalone — compositor Wayland + WM sobre Llimphi (build magro) 3dc85ebdc · Sergio ·

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}