Mercurial > crates > nonstick
comparison libpam-sys/src/ffi.rs @ 130:80c07e5ab22f
Transfer over (almost) completely to using libpam-sys.
This reimplements everything in nonstick on top of the new -sys crate.
We don't yet use libpam-sys's helpers for binary message payloads. Soon.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Tue, 01 Jul 2025 06:11:43 -0400 |
| parents | 5b2de52dd8b2 |
| children | a632a8874131 |
comparison
equal
deleted
inserted
replaced
| 129:5b2de52dd8b2 | 130:80c07e5ab22f |
|---|---|
| 76 /// let name = CString::new("name").unwrap(); | 76 /// let name = CString::new("name").unwrap(); |
| 77 /// unsafe { | 77 /// unsafe { |
| 78 /// pam_set_data(handle, name.as_ptr().cast_mut(), data_ptr.cast(), cleanup()); | 78 /// pam_set_data(handle, name.as_ptr().cast_mut(), data_ptr.cast(), cleanup()); |
| 79 /// } | 79 /// } |
| 80 /// ``` | 80 /// ``` |
| 81 pub type CleanupCallback = unsafe extern "C" fn( | 81 pub type CleanupCallback = |
| 82 pamh: *mut pam_handle, | 82 unsafe extern "C" fn(pamh: *mut pam_handle, data: *mut c_void, pam_end_status: c_int); |
| 83 data: *mut c_void, | |
| 84 pam_end_status: c_int, | |
| 85 ); | |
| 86 | 83 |
| 87 /// Used by PAM to communicate between the module and the application. | 84 /// Used by PAM to communicate between the module and the application. |
| 88 #[repr(C)] | 85 #[repr(C)] |
| 89 pub struct pam_conv { | 86 pub struct pam_conv { |
| 90 pub conv: unsafe extern "C" fn( | 87 pub conv: unsafe extern "C" fn( |
| 109 pub resp: *mut c_char, | 106 pub resp: *mut c_char, |
| 110 /// Completely unused. | 107 /// Completely unused. |
| 111 pub resp_retcode: c_int, | 108 pub resp_retcode: c_int, |
| 112 } | 109 } |
| 113 | 110 |
| 114 | |
| 115 // These are the functions specified in X/SSO. Everybody exports them. | 111 // These are the functions specified in X/SSO. Everybody exports them. |
| 116 extern "C" { | 112 extern "C" { |
| 117 /// Account validation. | 113 /// Account validation. |
| 118 pub fn pam_acct_mgmt(pamh: *mut pam_handle, flags: c_int) -> c_int; | 114 pub fn pam_acct_mgmt(pamh: *mut pam_handle, flags: c_int) -> c_int; |
| 119 | 115 |
| 137 module_data_name: *const c_char, | 133 module_data_name: *const c_char, |
| 138 data: *mut *const c_void, | 134 data: *mut *const c_void, |
| 139 ) -> c_int; | 135 ) -> c_int; |
| 140 | 136 |
| 141 /// Gets an environment variable. You own the return value. | 137 /// Gets an environment variable. You own the return value. |
| 142 pub fn pam_getenv(pamh: *mut pam_handle, name: *const c_char) -> *mut c_char; | 138 pub fn pam_getenv(pamh: *const pam_handle, name: *const c_char) -> *mut c_char; |
| 143 | 139 |
| 144 /// Gets all the environment variables. You own everything it points to. | 140 /// Gets all the environment variables. You own everything it points to. |
| 145 pub fn pam_getenvlist(pamh: *mut pam_handle) -> *mut *mut c_char; | 141 pub fn pam_getenvlist(pamh: *const pam_handle) -> *mut *mut c_char; |
| 146 | 142 |
| 147 /// Get information about the transaction. | 143 /// Get information about the transaction. |
| 148 /// | 144 /// |
| 149 /// The item is owned by PAM. | 145 /// The item is owned by PAM. |
| 150 pub fn pam_get_item( | 146 pub fn pam_get_item( |
| 151 pamh: *mut pam_handle, | 147 pamh: *const pam_handle, |
| 152 item_type: c_int, | 148 item_type: c_int, |
| 153 item: *mut *const c_void, | 149 item: *mut *const c_void, |
| 154 ) -> c_int; | 150 ) -> c_int; |
| 155 | 151 |
| 156 // Nobody implements pam_get_mapped_authtok. | 152 // Nobody implements pam_get_mapped_authtok. |
| 212 | 208 |
| 213 // We use `_private_pam_impl_hack` because ctest loses its mind | 209 // We use `_private_pam_impl_hack` because ctest loses its mind |
| 214 // when it comes across the `cfg_pam_impl` macro. | 210 // when it comes across the `cfg_pam_impl` macro. |
| 215 // This is a custom cfg variable set in our build.rs. Don't do this; just use | 211 // This is a custom cfg variable set in our build.rs. Don't do this; just use |
| 216 // cfg_pam_impl. | 212 // cfg_pam_impl. |
| 217 #[cfg(_private_pam_impl_hack = "LinuxPam")] | 213 #[cfg(any(_private_pam_impl_hack = "LinuxPam", _private_pam_impl_hack = "OpenPam"))] |
| 218 extern "C" { | 214 extern "C" { |
| 219 pub fn pam_get_authtok(pamh: *mut pam_handle, x: c_int, token: *mut *const c_char, prompt: *const c_char) -> c_int; | 215 pub fn pam_get_authtok( |
| 220 } | 216 pamh: *mut pam_handle, |
| 217 x: c_int, | |
| 218 token: *mut *const c_char, | |
| 219 prompt: *const c_char, | |
| 220 ) -> c_int; | |
| 221 } |
