Mercurial > crates > nonstick
comparison libpam-sys/src/ffi.rs @ 134:6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Instead of having to do a bunch of custom parsing and other logic
that tools often choke on, this change introduces an easy way
to depend upon custom #[cfg]s provided by the libpam-sys crate.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Thu, 03 Jul 2025 11:03:36 -0400 |
| parents | 32b2a545ca3e |
| children |
comparison
equal
deleted
inserted
replaced
| 133:32b2a545ca3e | 134:6c1e1bdb4164 |
|---|---|
| 113 /// Completely unused. | 113 /// Completely unused. |
| 114 pub resp_retcode: c_int, | 114 pub resp_retcode: c_int, |
| 115 } | 115 } |
| 116 | 116 |
| 117 /// Definition of the PAM_XAUTHDATA item. Compatible with `xcb_auth_info_t`. | 117 /// Definition of the PAM_XAUTHDATA item. Compatible with `xcb_auth_info_t`. |
| 118 #[cfg(_hack_impl = "LinuxPam")] | 118 #[cfg(pam_impl = "LinuxPam")] |
| 119 #[repr(C)] | 119 #[repr(C)] |
| 120 pub struct pam_xauth_data { | 120 pub struct pam_xauth_data { |
| 121 namelen: c_int, | 121 namelen: c_int, |
| 122 name: *mut c_char, | 122 name: *mut c_char, |
| 123 datalen: c_int, | 123 datalen: c_int, |
| 124 data: *mut c_char, | 124 data: *mut c_char, |
| 125 } | 125 } |
| 126 | 126 |
| 127 #[cfg(_hack_impl = "LinuxPam")] | 127 #[cfg(pam_impl = "LinuxPam")] |
| 128 #[derive(Copy, Clone, Debug, PartialEq, Eq, TryFromPrimitive, IntoPrimitive)] | 128 #[derive(Copy, Clone, Debug, PartialEq, Eq, TryFromPrimitive, IntoPrimitive)] |
| 129 #[repr(i32)] | 129 #[repr(i32)] |
| 130 pub enum pam_modutil_redirect_fd { | 130 pub enum pam_modutil_redirect_fd { |
| 131 PAM_MODUTIL_IGNORE_FD, | 131 PAM_MODUTIL_IGNORE_FD, |
| 132 PAM_MODUTIL_PIPE_FD, | 132 PAM_MODUTIL_PIPE_FD, |
| 133 PAM_MODUTIL_NULL_FD, | 133 PAM_MODUTIL_NULL_FD, |
| 134 } | 134 } |
| 135 | 135 |
| 136 #[cfg(_hack_impl = "LinuxPam")] | 136 #[cfg(pam_impl = "LinuxPam")] |
| 137 pub use pam_modutil_redirect_fd::*; | 137 pub use pam_modutil_redirect_fd::*; |
| 138 | 138 |
| 139 #[cfg(_hack_impl = "LinuxPam")] | 139 #[cfg(pam_impl = "LinuxPam")] |
| 140 #[derive(Debug)] | 140 #[derive(Debug)] |
| 141 #[repr(C)] | 141 #[repr(C)] |
| 142 pub struct pam_modutil_privs { | 142 pub struct pam_modutil_privs { |
| 143 grplist: *mut libc::gid_t, | 143 grplist: *mut libc::gid_t, |
| 144 number_of_groups: c_int, | 144 number_of_groups: c_int, |
| 146 old_gid: libc::gid_t, | 146 old_gid: libc::gid_t, |
| 147 old_uid: libc::uid_t, | 147 old_uid: libc::uid_t, |
| 148 is_dropped: c_int, | 148 is_dropped: c_int, |
| 149 } | 149 } |
| 150 | 150 |
| 151 #[cfg(_hack_impl = "OpenPam")] | 151 #[cfg(pam_impl = "OpenPam")] |
| 152 pub type pam_func_t = unsafe extern "C" fn( | 152 pub type pam_func_t = unsafe extern "C" fn( |
| 153 handle: *mut pam_handle, | 153 handle: *mut pam_handle, |
| 154 flags: c_int, | 154 flags: c_int, |
| 155 argc: c_int, | 155 argc: c_int, |
| 156 argv: *const *const c_char, | 156 argv: *const *const c_char, |
| 157 ) -> c_int; | 157 ) -> c_int; |
| 158 | 158 |
| 159 #[cfg(_hack_impl = "OpenPam")] | 159 #[cfg(pam_impl = "OpenPam")] |
| 160 #[derive(Debug)] | 160 #[derive(Debug)] |
| 161 #[repr(C)] | 161 #[repr(C)] |
| 162 pub struct pam_module { | 162 pub struct pam_module { |
| 163 path: *mut c_char, | 163 path: *mut c_char, |
| 164 func: [pam_func_t; 6], | 164 func: [pam_func_t; 6], |
| 165 dlh: *mut c_void, | 165 dlh: *mut c_void, |
| 166 } | 166 } |
| 167 | 167 |
| 168 #[cfg(_hack_impl = "OpenPam")] | 168 #[cfg(pam_impl = "OpenPam")] |
| 169 #[derive(Debug)] | 169 #[derive(Debug)] |
| 170 #[repr(C)] | 170 #[repr(C)] |
| 171 pub struct pam_repository { | 171 pub struct pam_repository { |
| 172 typ: *mut c_char, | 172 typ: *mut c_char, |
| 173 scope: *mut c_void, | 173 scope: *mut c_void, |
| 174 scope_len: usize, | 174 scope_len: usize, |
| 175 } | 175 } |
| 176 | 176 |
| 177 // These are the functions specified in X/SSO. Everybody exports them. | 177 // These are the functions specified in X/SSO. Everybody exports them. |
| 178 #[link(name = "pam")] | |
| 178 extern "C" { | 179 extern "C" { |
| 179 /// Account validation. | 180 /// Account validation. |
| 180 pub fn pam_acct_mgmt(pamh: *mut pam_handle, flags: c_int) -> c_int; | 181 pub fn pam_acct_mgmt(pamh: *mut pam_handle, flags: c_int) -> c_int; |
| 181 | 182 |
| 182 /// Authenticate a user. | 183 /// Authenticate a user. |
| 270 /// All implementations of PAM known to this library (Linux-PAM, OpenPAM, | 271 /// All implementations of PAM known to this library (Linux-PAM, OpenPAM, |
| 271 /// and Sun) ignore `pamh` and will accept a null pointer. | 272 /// and Sun) ignore `pamh` and will accept a null pointer. |
| 272 pub fn pam_strerror(pamh: *const pam_handle, error_number: c_int) -> *mut c_char; | 273 pub fn pam_strerror(pamh: *const pam_handle, error_number: c_int) -> *mut c_char; |
| 273 } | 274 } |
| 274 | 275 |
| 275 // We use `_hack_impl` because ctest loses its mind | 276 // We use `pam_impl` because ctest loses its mind |
| 276 // when it comes across the `cfg_pam_impl` macro. | 277 // when it comes across the `cfg_pam_impl` macro. |
| 277 // This is a custom cfg variable set in our build.rs. Don't do this; just use | 278 // This is a custom cfg variable set in our build.rs. Don't do this; just use |
| 278 // cfg_pam_impl. | 279 // cfg_pam_impl. |
| 279 #[cfg(any(_hack_impl = "LinuxPam", _hack_impl = "OpenPam"))] | 280 #[cfg(any(pam_impl = "LinuxPam", pam_impl = "OpenPam"))] |
| 280 extern "C" { | 281 extern "C" { |
| 281 /// Gets `PAM_AUTHTOK`, or asks the user if that is unset. | 282 /// Gets `PAM_AUTHTOK`, or asks the user if that is unset. |
| 282 pub fn pam_get_authtok( | 283 pub fn pam_get_authtok( |
| 283 pamh: *mut pam_handle, | 284 pamh: *mut pam_handle, |
| 284 item: c_int, | 285 item: c_int, |
| 294 ... | 295 ... |
| 295 ) -> c_int; | 296 ) -> c_int; |
| 296 | 297 |
| 297 } | 298 } |
| 298 | 299 |
| 299 #[cfg(_hack_impl = "LinuxPam")] | 300 #[cfg(pam_impl = "LinuxPam")] |
| 300 extern "C" { | 301 extern "C" { |
| 301 pub fn pam_fail_delay(pamh: *mut pam_handle, musec_delay: c_uint) -> c_int; | 302 pub fn pam_fail_delay(pamh: *mut pam_handle, musec_delay: c_uint) -> c_int; |
| 302 | 303 |
| 303 /// Start a PAM transaction based on configuration in the given directory. | 304 /// Start a PAM transaction based on configuration in the given directory. |
| 304 pub fn pam_start_confdir( | 305 pub fn pam_start_confdir( |
| 399 file_name: *const c_char, | 400 file_name: *const c_char, |
| 400 key: *const c_char, | 401 key: *const c_char, |
| 401 ) -> *mut c_char; | 402 ) -> *mut c_char; |
| 402 } | 403 } |
| 403 | 404 |
| 404 #[cfg(_hack_impl = "OpenPam")] | 405 #[cfg(pam_impl = "OpenPam")] |
| 405 extern "C" { | 406 extern "C" { |
| 406 pub fn openpam_borrow_cred(pamh: *mut pam_handle, passwd: *const libc::passwd) -> c_int; | 407 pub fn openpam_borrow_cred(pamh: *mut pam_handle, passwd: *const libc::passwd) -> c_int; |
| 407 | 408 |
| 408 pub fn openpam_subst( | 409 pub fn openpam_subst( |
| 409 pamh: *const pam_handle, | 410 pamh: *const pam_handle, |
