libpam_sys/aliases.rs
1//! Convenience aliases for complex types in PAM.
2
3use super::{pam_conv, pam_handle, pam_message, pam_response, pam_set_data};
4use std::ffi::{c_int, c_void};
5
6/// The type of [`pam_conv::conv`].
7///
8/// The exact format of `messages` varies between Linux-PAM and other
9/// implementations. See `libpam_sys_helpers::PtrPtrVec` for details
10/// (and a workaround).
11///
12/// ```no_run
13/// use libpam_sys::aliases::ConversationCallback;
14/// use libpam_sys::pam_conv;
15/// fn convo() -> ConversationCallback {
16/// // ...
17/// # unimplemented!()
18/// }
19/// let conv = pam_conv {
20/// conv: convo(),
21/// appdata_ptr: std::ptr::null_mut(),
22/// };
23/// ```
24pub type ConversationCallback = unsafe extern "C" fn(
25 num_msg: c_int,
26 msg: *const *const pam_message,
27 resp: *mut *mut pam_response,
28 appdata: *mut c_void,
29) -> c_int;
30
31/// Alias for the callback to [`pam_set_data`].
32///
33/// ```no_run
34/// # use std::ffi::CString;
35/// use libpam_sys::aliases::CleanupCallback;
36/// use libpam_sys::pam_set_data;
37/// # use libpam_sys::pam_handle;
38/// # let handle: *mut pam_handle = std::ptr::null_mut();
39/// # let mut my_data = 100;
40/// # let data_ptr = &mut my_data as *mut i32;
41/// fn cleanup() -> CleanupCallback {
42/// // ...
43/// # unimplemented!()
44/// }
45/// let name = CString::new("name").unwrap();
46/// unsafe {
47/// pam_set_data(handle, name.as_ptr().cast_mut(), data_ptr.cast(), cleanup());
48/// }
49/// ```
50pub type CleanupCallback =
51 unsafe extern "C" fn(pamh: *mut pam_handle, data: *mut c_void, pam_end_status: c_int);