Mercurial > crates > nonstick
comparison src/libpam/module.rs @ 144:56b559b7ecea
Big rename: separate concepts of Transaction from Handle.
- An application that uses PAM creates a Transaction.
- The Transaction has a Handle.
Currently, a module still get something called a "handle",
but that's probably going to change soon.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Sun, 06 Jul 2025 11:59:26 -0400 |
| parents | ebb71a412b58 |
| children | 1bc52025156b |
comparison
equal
deleted
inserted
replaced
| 143:ebb71a412b58 | 144:56b559b7ecea |
|---|---|
| 9 /// Here is full example of a PAM module that would authenticate | 9 /// Here is full example of a PAM module that would authenticate |
| 10 /// and authorize everybody: | 10 /// and authorize everybody: |
| 11 /// | 11 /// |
| 12 /// ```no_run | 12 /// ```no_run |
| 13 /// use nonstick::{ | 13 /// use nonstick::{ |
| 14 /// pam_hooks, ConversationAdapter, Flags, OwnedLibPamHandle, PamHandleModule, PamModule, | 14 /// pam_hooks, ConversationAdapter, Flags, LibPamTransaction, PamHandleModule, PamModule, |
| 15 /// Result as PamResult, | 15 /// Result as PamResult, |
| 16 /// }; | 16 /// }; |
| 17 /// use std::ffi::CStr; | 17 /// use std::ffi::CStr; |
| 18 /// # fn main() {} | 18 /// # fn main() {} |
| 19 /// | 19 /// |
| 40 #[macro_export] | 40 #[macro_export] |
| 41 macro_rules! pam_hooks { | 41 macro_rules! pam_hooks { |
| 42 ($ident:ident) => { | 42 ($ident:ident) => { |
| 43 mod _pam_hooks_scope { | 43 mod _pam_hooks_scope { |
| 44 use std::ffi::{c_char, c_int, c_void, CStr}; | 44 use std::ffi::{c_char, c_int, c_void, CStr}; |
| 45 use $crate::{ErrorCode, Flags, PamModule, RawPamHandle}; | 45 use $crate::{ErrorCode, Flags, LibPamHandle, PamModule}; |
| 46 | 46 |
| 47 #[no_mangle] | 47 #[no_mangle] |
| 48 extern "C" fn pam_sm_acct_mgmt( | 48 extern "C" fn pam_sm_acct_mgmt( |
| 49 pamh: *mut c_void, | 49 pamh: *mut c_void, |
| 50 flags: Flags, | 50 flags: Flags, |
| 51 argc: c_int, | 51 argc: c_int, |
| 52 argv: *const *const c_char, | 52 argv: *const *const c_char, |
| 53 ) -> c_int { | 53 ) -> c_int { |
| 54 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { | 54 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } { |
| 55 let args = extract_argv(argc, argv); | 55 let args = extract_argv(argc, argv); |
| 56 ErrorCode::result_to_c(super::$ident::account_management(handle, args, flags)) | 56 ErrorCode::result_to_c(super::$ident::account_management(handle, args, flags)) |
| 57 } else { | 57 } else { |
| 58 ErrorCode::Ignore as c_int | 58 ErrorCode::Ignore as c_int |
| 59 } | 59 } |
| 64 pamh: *mut c_void, | 64 pamh: *mut c_void, |
| 65 flags: Flags, | 65 flags: Flags, |
| 66 argc: c_int, | 66 argc: c_int, |
| 67 argv: *const *const c_char, | 67 argv: *const *const c_char, |
| 68 ) -> c_int { | 68 ) -> c_int { |
| 69 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { | 69 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } { |
| 70 let args = extract_argv(argc, argv); | 70 let args = extract_argv(argc, argv); |
| 71 ErrorCode::result_to_c(super::$ident::authenticate(handle, args, flags)) | 71 ErrorCode::result_to_c(super::$ident::authenticate(handle, args, flags)) |
| 72 } else { | 72 } else { |
| 73 ErrorCode::Ignore as c_int | 73 ErrorCode::Ignore as c_int |
| 74 } | 74 } |
| 79 pamh: *mut c_void, | 79 pamh: *mut c_void, |
| 80 flags: Flags, | 80 flags: Flags, |
| 81 argc: c_int, | 81 argc: c_int, |
| 82 argv: *const *const c_char, | 82 argv: *const *const c_char, |
| 83 ) -> c_int { | 83 ) -> c_int { |
| 84 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { | 84 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } { |
| 85 let args = extract_argv(argc, argv); | 85 let args = extract_argv(argc, argv); |
| 86 ErrorCode::result_to_c(super::$ident::change_authtok(handle, args, flags)) | 86 ErrorCode::result_to_c(super::$ident::change_authtok(handle, args, flags)) |
| 87 } else { | 87 } else { |
| 88 ErrorCode::Ignore as c_int | 88 ErrorCode::Ignore as c_int |
| 89 } | 89 } |
| 94 pamh: *mut c_void, | 94 pamh: *mut c_void, |
| 95 flags: Flags, | 95 flags: Flags, |
| 96 argc: c_int, | 96 argc: c_int, |
| 97 argv: *const *const c_char, | 97 argv: *const *const c_char, |
| 98 ) -> c_int { | 98 ) -> c_int { |
| 99 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { | 99 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } { |
| 100 let args = extract_argv(argc, argv); | 100 let args = extract_argv(argc, argv); |
| 101 ErrorCode::result_to_c(super::$ident::close_session(handle, args, flags)) | 101 ErrorCode::result_to_c(super::$ident::close_session(handle, args, flags)) |
| 102 } else { | 102 } else { |
| 103 ErrorCode::Ignore as c_int | 103 ErrorCode::Ignore as c_int |
| 104 } | 104 } |
| 110 flags: Flags, | 110 flags: Flags, |
| 111 argc: c_int, | 111 argc: c_int, |
| 112 argv: *const *const c_char, | 112 argv: *const *const c_char, |
| 113 ) -> c_int { | 113 ) -> c_int { |
| 114 let args = extract_argv(argc, argv); | 114 let args = extract_argv(argc, argv); |
| 115 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { | 115 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } { |
| 116 ErrorCode::result_to_c(super::$ident::open_session(handle, args, flags)) | 116 ErrorCode::result_to_c(super::$ident::open_session(handle, args, flags)) |
| 117 } else { | 117 } else { |
| 118 ErrorCode::Ignore as c_int | 118 ErrorCode::Ignore as c_int |
| 119 } | 119 } |
| 120 } | 120 } |
| 125 flags: Flags, | 125 flags: Flags, |
| 126 argc: c_int, | 126 argc: c_int, |
| 127 argv: *const *const c_char, | 127 argv: *const *const c_char, |
| 128 ) -> c_int { | 128 ) -> c_int { |
| 129 let args = extract_argv(argc, argv); | 129 let args = extract_argv(argc, argv); |
| 130 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { | 130 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } { |
| 131 ErrorCode::result_to_c(super::$ident::set_credentials(handle, args, flags)) | 131 ErrorCode::result_to_c(super::$ident::set_credentials(handle, args, flags)) |
| 132 } else { | 132 } else { |
| 133 ErrorCode::Ignore as c_int | 133 ErrorCode::Ignore as c_int |
| 134 } | 134 } |
| 135 } | 135 } |
