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);
 }