Mercurial > crates > nonstick
diff src/libpam/handle.rs @ 116:a12706e42c9d
Logging, macros, and building:
- Changes logging API to accept the `Location` of the log statement.
Fixes OpenPAM implementation.
- Stops publicly exporting doc macros.
- Uses dlopen to detect the PAM library rather than header jankery.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Sun, 29 Jun 2025 18:27:51 -0400 |
parents | 13b4d2a19674 |
children | 39760dfc9b3b |
line wrap: on
line diff
--- a/src/libpam/handle.rs Sun Jun 29 03:35:59 2025 -0400 +++ b/src/libpam/handle.rs Sun Jun 29 18:27:51 2025 -0400 @@ -6,10 +6,10 @@ use crate::libpam::environ::{LibPamEnviron, LibPamEnvironMut}; pub use crate::libpam::pam_ffi::LibPamHandle; use crate::libpam::{memory, pam_ffi}; -use crate::logging::Level; +use crate::logging::{Level, Location}; use crate::{ - Conversation, EnvironMap, Flags, PamHandleApplication, PamHandleModule, _guide, _linklist, - _stdlinks, + Conversation, EnvironMap, Flags, PamHandleApplication, PamHandleModule, guide, linklist, + stdlinks, }; use num_enum::{IntoPrimitive, TryFromPrimitive}; use std::cell::Cell; @@ -82,10 +82,10 @@ /// named <code>/etc/pam.d/<var>service_name</var></code>. /// /// # References - #[doc = _linklist!(pam_start: adg, _std)] + #[doc = linklist!(pam_start: adg, _std)] /// - #[doc = _stdlinks!(3 pam_start)] - #[doc = _guide!(adg: "adg-interface-by-app-expected.html#adg-pam_start")] + #[doc = stdlinks!(3 pam_start)] + #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_start")] pub fn build_with_service(service_name: String) -> HandleBuilder { HandleBuilder { service_name, @@ -161,10 +161,10 @@ /// This internally calls `pam_end` with the appropriate error code. /// /// # References - #[doc = _linklist!(pam_end: adg, _std)] + #[doc = linklist!(pam_end: adg, _std)] /// - #[doc = _guide!(adg: "adg-interface-by-app-expected.html#adg-pam_end")] - #[doc = _stdlinks!(3 pam_end)] + #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_end")] + #[doc = stdlinks!(3 pam_end)] fn drop(&mut self) { unsafe { pam_ffi::pam_end( @@ -190,13 +190,14 @@ } impl PamShared for LibPamHandle { - fn log(&self, level: Level, entry: &str) { + fn log(&self, level: Level, loc: Location<'_>, entry: &str) { let entry = match CString::new(entry).or_else(|_| CString::new(dbg!(entry))) { Ok(cstr) => cstr, _ => return, }; #[cfg(pam_impl = "linux-pam")] { + _ = loc; // SAFETY: We're calling this function with a known value. unsafe { pam_ffi::pam_syslog(self, level as c_int, "%s\0".as_ptr().cast(), entry.as_ptr()) @@ -204,9 +205,10 @@ } #[cfg(pam_impl = "openpam")] { + let func = CString::new(loc.function).unwrap_or(CString::default()); // SAFETY: We're calling this function with a known value. unsafe { - pam_ffi::openpam_log(self, level as c_int, "%s\0".as_ptr().cast(), entry.as_ptr()) + pam_ffi::_openpam_log(level as c_int, func.as_ptr(), "%s\0".as_ptr().cast(), entry.as_ptr()) } } } @@ -382,7 +384,7 @@ } impl PamShared for OwnedLibPamHandle<'_> { - delegate!(fn log(&self, level: Level, entry: &str) -> ()); + delegate!(fn log(&self, level: Level, location: Location<'_>, entry: &str) -> ()); delegate!(fn environ(&self) -> impl EnvironMap); delegate!(fn environ_mut(&mut self) -> impl EnvironMapMut); delegate!(fn username(&mut self, prompt: Option<&str>) -> Result<String>);