diff --git a/server/src/infra/ldap_handler.rs b/server/src/infra/ldap_handler.rs index 0a79f33..9f524ad 100644 --- a/server/src/infra/ldap_handler.rs +++ b/server/src/infra/ldap_handler.rs @@ -212,6 +212,13 @@ pub struct LdapHandler { user_info: Option, backend_handler: AccessControlledBackendHandler, ldap_info: LdapInfo, + session_uuid: uuid::Uuid, +} + +impl LdapHandler { + pub fn session_uuid(&self) -> &uuid::Uuid { + &self.session_uuid + } } impl LdapHandler { @@ -232,6 +239,7 @@ impl LdapHandler, ignored_group_attributes: Vec, + session_uuid: uuid::Uuid, ) -> Self { ldap_base_dn.make_ascii_lowercase(); Self { @@ -248,6 +256,7 @@ impl LdapHandler LdapHandler LdapHandler Vec { match LdapPasswordModifyRequest::try_from(request) { Ok(password_request) => self @@ -506,6 +517,7 @@ impl LdapHandler Vec { self.handle_modify_request(request) .await @@ -676,6 +688,7 @@ impl LdapHandler LdapResult> { let backend_handler = self .user_info @@ -761,6 +774,7 @@ impl LdapHandler LdapResult> { let req = make_search_request::( &self.ldap_info.base_dn_str, @@ -829,6 +843,13 @@ impl LdapHandler { + debug!( + "Unbind request for {}", + self.user_info + .as_ref() + .map(|u| u.user.as_str()) + .unwrap_or(""), + ); self.user_info = None; // No need to notify on unbind (per rfc4511) return None; diff --git a/server/src/infra/ldap_server.rs b/server/src/infra/ldap_server.rs index 1b2305c..d2e5eb1 100644 --- a/server/src/infra/ldap_server.rs +++ b/server/src/infra/ldap_server.rs @@ -19,8 +19,9 @@ use rustls::PrivateKey; use tokio_rustls::TlsAcceptor as RustlsTlsAcceptor; use tokio_util::codec::{FramedRead, FramedWrite}; use tracing::{debug, error, info, instrument}; +use uuid::Uuid; -#[instrument(skip_all, level = "info", name = "LDAP request")] +#[instrument(skip_all, level = "info", name = "LDAP request", fields(session_id = %session.session_uuid()))] async fn handle_ldap_message( msg: Result, resp: &mut Writer, @@ -73,7 +74,6 @@ where Ok(true) } -#[instrument(skip_all, level = "info", name = "LDAP session")] async fn handle_ldap_stream( stream: Stream, backend_handler: Backend, @@ -91,13 +91,16 @@ where let mut requests = FramedRead::new(r, LdapCodec::default()); let mut resp = FramedWrite::new(w, LdapCodec::default()); + let session_uuid = Uuid::new_v4(); let mut session = LdapHandler::new( AccessControlledBackendHandler::new(backend_handler), ldap_base_dn, ignored_user_attributes, ignored_group_attributes, + session_uuid, ); + info!("LDAP session start: {}", session_uuid); while let Some(msg) = requests.next().await { if !handle_ldap_message(msg, &mut resp, &mut session) .await @@ -106,6 +109,7 @@ where break; } } + info!("LDAP session end: {}", session_uuid); Ok(requests.into_inner().unsplit(resp.into_inner())) }