diff --git a/server/src/main.rs b/server/src/main.rs index 642f605..414957c 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,13 +1,14 @@ mod handler; -mod listener; -pub mod options; +mod options; mod repository; +mod server; -use crate::listener::Listener; use crate::options::OPTIONS; use crate::repository::PasswordDirectory; +use crate::server::Server; fn main() -> std::io::Result<()> { - let mut listener = Listener::new(PasswordDirectory::new(&OPTIONS.password_dir))?; - listener.run() + let repository = PasswordDirectory::new(&OPTIONS.password_dir); + let mut server = Server::new(&OPTIONS.socket_name, repository)?; + server.run() } diff --git a/server/src/options.rs b/server/src/options.rs index efd5e89..0f7baf5 100644 --- a/server/src/options.rs +++ b/server/src/options.rs @@ -1,5 +1,3 @@ -use std::path::PathBuf; - use clap::Parser; use std::sync::LazyLock; @@ -11,7 +9,7 @@ pub struct Opt { long = "socket-name", default_value = "/tmp/saslauthd.sock" )] - pub socket_name: PathBuf, + pub socket_name: String, #[arg(short = 'p', long = "password-dir", default_value = "./test_passwords")] pub password_dir: String, diff --git a/server/src/listener.rs b/server/src/server.rs similarity index 60% rename from server/src/listener.rs rename to server/src/server.rs index 3d254fe..b22ff5b 100644 --- a/server/src/listener.rs +++ b/server/src/server.rs @@ -1,30 +1,37 @@ use crate::handler::Handler; -use crate::options::OPTIONS; use crate::repository::PasswordDirectory; use std::fs::{metadata, set_permissions}; use std::io::Error; use std::os::unix::fs::PermissionsExt; use std::os::unix::net::UnixListener; +use std::path::PathBuf; use std::thread; -pub struct Listener { +pub struct Server { listener: UnixListener, handler: PasswordDirectory, + socket_name: PathBuf, } -impl Listener { - pub fn new(handler: PasswordDirectory) -> Result { - if OPTIONS.socket_name.exists() { - std::fs::remove_file(&OPTIONS.socket_name)?; +impl Server { + pub fn new(socket_name: &str, handler: PasswordDirectory) -> Result { + let socket_name = PathBuf::from(socket_name); + + if socket_name.exists() { + std::fs::remove_file(&socket_name)?; } - let listener = UnixListener::bind(&OPTIONS.socket_name)?; + let listener = UnixListener::bind(&socket_name)?; - let mut perms = metadata(&OPTIONS.socket_name)?.permissions(); + let mut perms = metadata(&socket_name)?.permissions(); perms.set_mode(0o0777); - set_permissions(&OPTIONS.socket_name, perms)?; + set_permissions(&socket_name, perms)?; - Ok(Listener { handler, listener }) + Ok(Server { + handler, + listener, + socket_name, + }) } pub fn run(&mut self) -> Result<(), Error> { @@ -46,9 +53,9 @@ impl Listener { } } -impl Drop for Listener { +impl Drop for Server { fn drop(&mut self) { - let _result = std::fs::remove_file(&OPTIONS.socket_name); + let _result = std::fs::remove_file(&self.socket_name); println!("Shutting down"); } }