Mercurial > crates > nonstick
diff src/libpam/module.rs @ 173:46e8ce5cd5d1
Miscellaneous doc and code cleanups.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Tue, 29 Jul 2025 16:52:32 -0400 |
parents | 6727cbe56f4a |
children | 9e4ce1631bd3 |
line wrap: on
line diff
--- a/src/libpam/module.rs Fri Jul 25 21:02:53 2025 -0400 +++ b/src/libpam/module.rs Tue Jul 29 16:52:32 2025 -0400 @@ -6,7 +6,7 @@ /// Generates the dynamic library entry points for a PAM module /// -/// Calling `pam_hooks!(SomeType)` on a type that implements +/// Calling `pam_export!(SomeType)` on a type that implements /// [`PamModule`] will generate the exported /// `extern "C"` functions that PAM uses to call into your module. /// @@ -17,14 +17,14 @@ /// /// ```no_run /// use nonstick::{ -/// pam_hooks, ConversationAdapter, AuthnFlags, LibPamTransaction, ModuleClient, PamModule, +/// pam_export, ConversationAdapter, AuthnFlags, LibPamTransaction, ModuleClient, PamModule, /// Result as PamResult, /// }; /// use std::ffi::CStr; /// # fn main() {} /// /// struct MyPamModule; -/// pam_hooks!(MyPamModule); +/// pam_export!(MyPamModule); /// /// impl<T: ModuleClient> PamModule<T> for MyPamModule { /// fn authenticate(handle: &mut T, args: Vec<&CStr>, flags: AuthnFlags) -> PamResult<()> { @@ -44,12 +44,12 @@ /// } /// ``` #[macro_export] -macro_rules! pam_hooks { +macro_rules! pam_export { ($ident:ident) => { - mod _pam_hooks_scope { + mod __pam_export_scope { use std::ffi::{c_char, c_int, c_void}; use $crate::constants::{RawFlags, ReturnCode}; - use $crate::ModuleExporter; + use $crate::libpam::module; macro_rules! export { ($func:ident) => { @@ -61,7 +61,7 @@ argv: *const *const c_char, ) -> c_int { let ret: ReturnCode = - ModuleExporter::$func::<super::$ident>(pamh, flags, argc, argv).into(); + module::$func::<super::$ident>(pamh, flags, argc, argv).into(); ret.into() } }; @@ -78,78 +78,77 @@ } #[doc(hidden)] -pub struct ModuleExporter; +pub unsafe fn pam_sm_acct_mgmt<M: PamModule<LibPamHandle>>( + pamh: *mut c_void, + flags: RawFlags, + argc: c_int, + argv: *const *const c_char, +) -> Result<()> { + let handle = wrap(pamh)?; + let args = extract_argv(argc, argv); + M::account_management(handle, args, AuthnFlags::from(flags)) +} -// All of the below are only intended to be called directly from C. -#[allow(clippy::missing_safety_doc)] -impl ModuleExporter { - pub unsafe fn pam_sm_acct_mgmt<M: PamModule<LibPamHandle>>( - pamh: *mut c_void, - flags: RawFlags, - argc: c_int, - argv: *const *const c_char, - ) -> Result<()> { - let handle = wrap(pamh)?; - let args = extract_argv(argc, argv); - M::account_management(handle, args, AuthnFlags::from(flags)) - } +#[doc(hidden)] +pub unsafe fn pam_sm_authenticate<M: PamModule<LibPamHandle>>( + pamh: *mut c_void, + flags: RawFlags, + argc: c_int, + argv: *const *const c_char, +) -> Result<()> { + let handle = wrap(pamh)?; + let args = extract_argv(argc, argv); + M::authenticate(handle, args, AuthnFlags::from(flags)) +} - pub unsafe fn pam_sm_authenticate<M: PamModule<LibPamHandle>>( - pamh: *mut c_void, - flags: RawFlags, - argc: c_int, - argv: *const *const c_char, - ) -> Result<()> { - let handle = wrap(pamh)?; - let args = extract_argv(argc, argv); - M::authenticate(handle, args, AuthnFlags::from(flags)) - } +#[doc(hidden)] +pub unsafe fn pam_sm_chauthtok<M: PamModule<LibPamHandle>>( + pamh: *mut c_void, + flags: RawFlags, + argc: c_int, + argv: *const *const c_char, +) -> Result<()> { + let handle = wrap(pamh)?; + let (action, flags) = AuthtokAction::extract(flags)?; + let args = extract_argv(argc, argv); + M::change_authtok(handle, args, action, flags) +} - pub unsafe fn pam_sm_chauthtok<M: PamModule<LibPamHandle>>( - pamh: *mut c_void, - flags: RawFlags, - argc: c_int, - argv: *const *const c_char, - ) -> Result<()> { - let handle = wrap(pamh)?; - let (action, flags) = AuthtokAction::extract(flags)?; - let args = extract_argv(argc, argv); - M::change_authtok(handle, args, action, flags) - } - - pub unsafe fn pam_sm_close_session<M: PamModule<LibPamHandle>>( - pamh: *mut c_void, - flags: RawFlags, - argc: c_int, - argv: *const *const c_char, - ) -> Result<()> { - let handle = wrap(pamh)?; - let args = extract_argv(argc, argv); - M::close_session(handle, args, BaseFlags::from(flags)) - } +#[doc(hidden)] +pub unsafe fn pam_sm_close_session<M: PamModule<LibPamHandle>>( + pamh: *mut c_void, + flags: RawFlags, + argc: c_int, + argv: *const *const c_char, +) -> Result<()> { + let handle = wrap(pamh)?; + let args = extract_argv(argc, argv); + M::close_session(handle, args, BaseFlags::from(flags)) +} - pub unsafe fn pam_sm_open_session<M: PamModule<LibPamHandle>>( - pamh: *mut c_void, - flags: RawFlags, - argc: c_int, - argv: *const *const c_char, - ) -> Result<()> { - let handle = wrap(pamh)?; - let args = extract_argv(argc, argv); - M::open_session(handle, args, BaseFlags::from(flags)) - } +#[doc(hidden)] +pub unsafe fn pam_sm_open_session<M: PamModule<LibPamHandle>>( + pamh: *mut c_void, + flags: RawFlags, + argc: c_int, + argv: *const *const c_char, +) -> Result<()> { + let handle = wrap(pamh)?; + let args = extract_argv(argc, argv); + M::open_session(handle, args, BaseFlags::from(flags)) +} - pub unsafe fn pam_sm_setcred<M: PamModule<LibPamHandle>>( - pamh: *mut c_void, - flags: RawFlags, - argc: c_int, - argv: *const *const c_char, - ) -> Result<()> { - let handle = wrap(pamh)?; - let (action, flags) = CredAction::extract(flags)?; - let args = extract_argv(argc, argv); - M::set_credentials(handle, args, action, flags) - } +#[doc(hidden)] +pub unsafe fn pam_sm_setcred<M: PamModule<LibPamHandle>>( + pamh: *mut c_void, + flags: RawFlags, + argc: c_int, + argv: *const *const c_char, +) -> Result<()> { + let handle = wrap(pamh)?; + let (action, flags) = CredAction::extract(flags)?; + let args = extract_argv(argc, argv); + M::set_credentials(handle, args, action, flags) } /// Turns `argc`/`argv` into a [Vec] of [CStr]s. @@ -182,5 +181,5 @@ struct Foo; impl<T: ModuleClient> PamModule<T> for Foo {} - pam_hooks!(Foo); + pam_export!(Foo); }