Mercurial > crates > nonstick
diff libpam-sys/src/ffi.rs @ 133:32b2a545ca3e
Add functions and constants from openpam.h.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Wed, 02 Jul 2025 03:33:09 -0400 |
parents | a632a8874131 |
children | 6c1e1bdb4164 |
line wrap: on
line diff
--- a/libpam-sys/src/ffi.rs Wed Jul 02 02:34:29 2025 -0400 +++ b/libpam-sys/src/ffi.rs Wed Jul 02 03:33:09 2025 -0400 @@ -66,7 +66,7 @@ appdata: *mut AppData, ) -> c_int; -/// Alias for the callback to [`pam_set_data`](crate::pam_set_data). +/// Alias for the callback to [`pam_set_data`](pam_set_data). /// /// ```no_run /// # use std::ffi::CString; @@ -148,6 +148,32 @@ is_dropped: c_int, } +#[cfg(_hack_impl = "OpenPam")] +pub type pam_func_t = unsafe extern "C" fn( + handle: *mut pam_handle, + flags: c_int, + argc: c_int, + argv: *const *const c_char, +) -> c_int; + +#[cfg(_hack_impl = "OpenPam")] +#[derive(Debug)] +#[repr(C)] +pub struct pam_module { + path: *mut c_char, + func: [pam_func_t; 6], + dlh: *mut c_void, +} + +#[cfg(_hack_impl = "OpenPam")] +#[derive(Debug)] +#[repr(C)] +pub struct pam_repository { + typ: *mut c_char, + scope: *mut c_void, + scope_len: usize, +} + // These are the functions specified in X/SSO. Everybody exports them. extern "C" { /// Account validation. @@ -259,6 +285,15 @@ authtok: *mut *const c_char, prompt: *const c_char, ) -> c_int; + + pub fn pam_prompt( + pamh: *const pam_handle, + style: c_int, + response: *mut *mut c_char, + fmt: *const c_char, + ... + ) -> c_int; + } #[cfg(_hack_impl = "LinuxPam")] @@ -278,14 +313,6 @@ pub fn pam_syslog(pamh: *const pam_handle, priority: c_int, fmt: *const c_char, ...); - pub fn pam_prompt( - pamh: *const pam_handle, - style: c_int, - response: *mut *mut c_char, - fmt: *const c_char, - ... - ) -> c_int; - pub fn pam_get_authtok_noverify( pamh: *const pam_handle, authtok: *mut *const c_char, @@ -373,3 +400,114 @@ key: *const c_char, ) -> *mut c_char; } + +#[cfg(_hack_impl = "OpenPam")] +extern "C" { + pub fn openpam_borrow_cred(pamh: *mut pam_handle, passwd: *const libc::passwd) -> c_int; + + pub fn openpam_subst( + pamh: *const pam_handle, + buf: *mut c_char, + _bufsize: *mut usize, + _template: *const c_char, + ) -> c_int; + + pub fn openpam_free_data(pamh: *mut pam_handle, data: *mut c_void, status: c_int); + + pub fn openpam_free_envlist(_envlist: *mut *mut c_char); + + pub fn openpam_get_option(_pamh: *mut pam_handle, _option: *const c_char) -> *const c_char; + + pub fn openpam_restore_cred(pamh: *mut pam_handle) -> c_int; + + pub fn openpam_set_option( + _pamh: *mut pam_handle, + _option: *const c_char, + _value: *const c_char, + ) -> c_int; + + pub fn pam_error(pamh: *const pam_handle, _fmt: *const c_char, ...) -> c_int; + + pub fn pam_info(_pamh: *const pam_handle, _fmt: *const c_char, ...) -> c_int; + + pub fn openpam_readline( + _f: *mut libc::FILE, + _lineno: *mut c_int, + _lenp: *mut usize, + ) -> *mut c_char; + + pub fn openpam_readlinev( + _f: *mut libc::FILE, + _lineno: *mut c_int, + _lenp: *mut c_int, + ) -> *mut *mut c_char; + + pub fn openpam_readword( + _f: *mut libc::FILE, + _lineno: *mut c_int, + _lenp: *mut usize, + ) -> *mut c_char; + + pub fn openpam_straddch( + _str: *mut *mut c_char, + _sizep: *mut usize, + _lenp: *mut usize, + ch: c_int, + ) -> c_int; + + pub fn openpam_set_feature(_feature: c_int, _onoff: c_int) -> c_int; + + pub fn openpam_get_feature(_feature: c_int, _onoff: *mut c_int) -> c_int; + + pub fn _openpam_log(_level: c_int, _func: *const c_char, _fmt: *const c_char, ...); + + /// A premade conversation function that talks to the TTY. + /// + /// ```no_run + /// # use std::ffi::CString; + /// # use std::ptr; + /// use libpam_sys::*; + /// # let service = CString::new("whatever").unwrap(); + /// # let user = CString::new("whatever").unwrap(); + /// let mut handle: *mut pam_handle = ptr::null_mut(); + /// let mut conv = pam_conv{ + /// conv: openpam_ttyconv, + /// appdata_ptr: ptr::null_mut(), + /// }; + /// let result = unsafe { pam_start( + /// service.as_ptr(), user.as_ptr(), &mut conv, &mut handle + /// ) }; + /// ``` + pub fn openpam_ttyconv( + n: c_int, + _msg: *const *const pam_message, + _resp: *mut *mut pam_response, + _data: *mut AppData, + ) -> c_int; + + pub static mut openpam_ttyconv_timeout: c_int; + + /// A null conversation function. + /// + /// ```no_run + /// # use std::ffi::CString; + /// # use std::ptr; + /// use libpam_sys::*; + /// # let service = CString::new("whatever").unwrap(); + /// # let user = CString::new("whatever").unwrap(); + /// let mut handle: *mut pam_handle = ptr::null_mut(); + /// let mut conv = pam_conv{ + /// conv: openpam_nullconv, + /// appdata_ptr: ptr::null_mut(), + /// }; + /// let result = unsafe { pam_start( + /// service.as_ptr(), user.as_ptr(), &mut conv, &mut handle + /// ) }; + /// ``` + pub fn openpam_nullconv( + n: c_int, + _msg: *const *const pam_message, + _resp: *mut *mut pam_response, + _data: *mut AppData, + ) -> c_int; +}