llldap/src/main.rs

54 lines
1.4 KiB
Rust
Raw Normal View History

2026-09-01 15:27:28 +02:00
// #![deny(warnings)]
mod cli;
2026-09-01 19:06:33 +02:00
mod db;
2026-09-01 15:27:28 +02:00
mod error;
mod ldap;
2026-09-01 15:27:28 +02:00
mod listener;
mod stream;
use cli::CliArgs;
2026-09-01 19:06:33 +02:00
use db::{Database, DatabaseInterface, MemoryDatabase, User};
2026-09-01 15:27:28 +02:00
use error::GlobalError;
use ldap::ldap_handler;
2026-09-01 15:27:28 +02:00
use listener::ListenerPath;
2026-09-01 19:06:33 +02:00
async fn create_dummy_users<D: DatabaseInterface>(db: &mut Database<D>) {
for domain in &["a", "b", "c"] {
db.create_user(User {
username: domain.to_string(),
domain: format!("{domain}.localhost"),
password: "adminadmin".to_string(),
mail: format!("{domain}@{domain}.localhost"),
})
.await
.unwrap();
}
}
2026-09-01 15:27:28 +02:00
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), GlobalError> {
let cli: CliArgs = argh::from_env();
tracing_subscriber::fmt::init();
// let subscriber = tracing_subscriber::FmtSubscriber::new();
// .with_file(true)
// .with_line_number(true)
// .finish()
// .init();
// tracing::subscriber::set_global_default(subscriber)?;
let listener = ListenerPath::new(&cli.listen)?.listener().await?;
2026-09-01 19:06:33 +02:00
let mut db = MemoryDatabase::new();
create_dummy_users(&mut db).await;
2026-09-01 15:27:28 +02:00
// If the connection is None, it's because the client aborted early
// so there's nothing to do about it.
while let Some(stream) = listener.accept_ldap().await? {
2026-09-01 19:06:33 +02:00
let db = db.clone();
tokio::spawn(ldap_handler(stream, db));
2026-09-01 15:27:28 +02:00
}
Ok(())
}