diff pam/src/macros.rs @ 34:ec70822cbdef

Overhaul
author Andy Caldwell <andrew.caldwell@metaswitch.com>
date Sun, 24 Apr 2022 03:42:11 +0100
parents 4263c1d83d5b
children
line wrap: on
line diff
--- a/pam/src/macros.rs	Thu Jul 11 19:13:19 2019 -0700
+++ b/pam/src/macros.rs	Sun Apr 24 03:42:11 2022 +0100
@@ -18,12 +18,12 @@
 /// pam_hooks!(MyPamModule);
 ///
 /// impl PamHooks for MyPamModule {
-///	   fn sm_authenticate(pamh: &PamHandle, args: Vec<&CStr>, flags: PamFlag) -> PamResultCode {
+///    fn sm_authenticate(pamh: &mut PamHandle, args: Vec<&CStr>, flags: PamFlag) -> PamResultCode {
 ///        println!("Everybody is authenticated!");
 ///        PamResultCode::PAM_SUCCESS
 ///    }
 ///
-///    fn acct_mgmt(pamh: &PamHandle, args: Vec<&CStr>, flags: PamFlag) -> PamResultCode {
+///    fn acct_mgmt(pamh: &mut PamHandle, args: Vec<&CStr>, flags: PamFlag) -> PamResultCode {
 ///        println!("Everybody is authorized!");
 ///        PamResultCode::PAM_SUCCESS
 ///    }
@@ -31,97 +31,111 @@
 /// ```
 #[macro_export]
 macro_rules! pam_hooks {
-	($ident:ident) => (
-		pub use self::pam_hooks_scope::*;
-		mod pam_hooks_scope {
-			use $crate::module::{PamHandle, PamHooks};
-			use $crate::constants::{PamFlag, PamResultCode};
-			use std::ffi::CStr;
-			use std::os::raw::{c_char, c_int};
+    ($ident:ident) => {
+        pub use self::pam_hooks_scope::*;
+        mod pam_hooks_scope {
+            use std::ffi::CStr;
+            use std::os::raw::{c_char, c_int};
+            use $crate::constants::{PamFlag, PamResultCode};
+            use $crate::module::{PamHandle, PamHooks};
 
-			fn extract_argv<'a>(argc: c_int, argv: *const *const c_char) -> Vec<&'a CStr> {
-				(0..argc)
-					.map(|o| unsafe {
-						CStr::from_ptr(*argv.offset(o as isize) as *const c_char)
-					})
-					.collect()
-			}
+            fn extract_argv<'a>(argc: c_int, argv: *const *const c_char) -> Vec<&'a CStr> {
+                (0..argc)
+                    .map(|o| unsafe { CStr::from_ptr(*argv.offset(o as isize) as *const c_char) })
+                    .collect()
+            }
 
-			#[no_mangle]
-			pub extern "C" fn pam_sm_acct_mgmt(
-				pamh: &PamHandle,
-				flags: PamFlag,
-				argc: c_int,
-				argv: *const *const c_char,
-			) -> PamResultCode {
-				let args = extract_argv(argc, argv);
-				super::$ident::acct_mgmt(pamh, args, flags)
-			}
+            #[no_mangle]
+            pub extern "C" fn pam_sm_acct_mgmt(
+                pamh: &mut PamHandle,
+                flags: PamFlag,
+                argc: c_int,
+                argv: *const *const c_char,
+            ) -> PamResultCode {
+                let args = extract_argv(argc, argv);
+                super::$ident::acct_mgmt(pamh, args, flags)
+            }
 
-			#[no_mangle]
-			pub extern "C" fn pam_sm_authenticate(
-				pamh: &PamHandle,
-				flags: PamFlag,
-				argc: c_int,
-				argv: *const *const c_char,
-			) -> PamResultCode {
-				let args = extract_argv(argc, argv);
-				super::$ident::sm_authenticate(pamh, args, flags)
-			}
+            #[no_mangle]
+            pub extern "C" fn pam_sm_authenticate(
+                pamh: &mut PamHandle,
+                flags: PamFlag,
+                argc: c_int,
+                argv: *const *const c_char,
+            ) -> PamResultCode {
+                let args = extract_argv(argc, argv);
+                super::$ident::sm_authenticate(pamh, args, flags)
+            }
+
+            #[no_mangle]
+            pub extern "C" fn pam_sm_chauthtok(
+                pamh: &mut PamHandle,
+                flags: PamFlag,
+                argc: c_int,
+                argv: *const *const c_char,
+            ) -> PamResultCode {
+                let args = extract_argv(argc, argv);
+                super::$ident::sm_chauthtok(pamh, args, flags)
+            }
 
-			#[no_mangle]
-			pub extern "C" fn pam_sm_chauthtok(
-				pamh: &PamHandle,
-				flags: PamFlag,
-				argc: c_int,
-				argv: *const *const c_char,
-			) -> PamResultCode {
-				let args = extract_argv(argc, argv);
-				super::$ident::sm_chauthtok(pamh, args, flags)
-			}
+            #[no_mangle]
+            pub extern "C" fn pam_sm_close_session(
+                pamh: &mut PamHandle,
+                flags: PamFlag,
+                argc: c_int,
+                argv: *const *const c_char,
+            ) -> PamResultCode {
+                let args = extract_argv(argc, argv);
+                super::$ident::sm_close_session(pamh, args, flags)
+            }
 
-			#[no_mangle]
-			pub extern "C" fn pam_sm_close_session(
-				pamh: &PamHandle,
-				flags: PamFlag,
-				argc: c_int,
-				argv: *const *const c_char,
-			) -> PamResultCode {
-				let args = extract_argv(argc, argv);
-				super::$ident::sm_close_session(pamh, args, flags)
-			}
+            #[no_mangle]
+            pub extern "C" fn pam_sm_open_session(
+                pamh: &mut PamHandle,
+                flags: PamFlag,
+                argc: c_int,
+                argv: *const *const c_char,
+            ) -> PamResultCode {
+                let args = extract_argv(argc, argv);
+                super::$ident::sm_open_session(pamh, args, flags)
+            }
 
-			#[no_mangle]
-			pub extern "C" fn pam_sm_open_session(
-				pamh: &PamHandle,
-				flags: PamFlag,
-				argc: c_int,
-				argv: *const *const c_char,
-			) -> PamResultCode {
-				let args = extract_argv(argc, argv);
-				super::$ident::sm_open_session(pamh, args, flags)
-			}
+            #[no_mangle]
+            pub extern "C" fn pam_sm_setcred(
+                pamh: &mut PamHandle,
+                flags: PamFlag,
+                argc: c_int,
+                argv: *const *const c_char,
+            ) -> PamResultCode {
+                let args = extract_argv(argc, argv);
+                super::$ident::sm_setcred(pamh, args, flags)
+            }
+        }
+    };
+}
 
-			#[no_mangle]
-			pub extern "C" fn pam_sm_setcred(
-				pamh: &PamHandle,
-				flags: PamFlag,
-				argc: c_int,
-				argv: *const *const c_char,
-			) -> PamResultCode {
-				let args = extract_argv(argc, argv);
-				super::$ident::sm_setcred(pamh, args, flags)
-			}
-		}
-	)
+#[macro_export]
+macro_rules! pam_try {
+    ($r:expr) => {
+        match $r {
+            Ok(t) => t,
+            Err(e) => return e,
+        }
+    };
+    ($r:expr, $e:expr) => {
+        match $r {
+            Ok(t) => t,
+            Err(_) => return $e,
+        }
+    };
 }
 
 #[cfg(test)]
 pub mod test {
-	use module::PamHooks;
+    use module::PamHooks;
 
-	struct Foo;
-	impl PamHooks for Foo {}
+    struct Foo;
+    impl PamHooks for Foo {}
 
-	pam_hooks!(Foo);
-}
\ No newline at end of file
+    pam_hooks!(Foo);
+}