comparison 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
comparison
equal deleted inserted replaced
132:0b6a17f8c894 133:32b2a545ca3e
64 msg: *const *const pam_message, 64 msg: *const *const pam_message,
65 resp: *mut *mut pam_response, 65 resp: *mut *mut pam_response,
66 appdata: *mut AppData, 66 appdata: *mut AppData,
67 ) -> c_int; 67 ) -> c_int;
68 68
69 /// Alias for the callback to [`pam_set_data`](crate::pam_set_data). 69 /// Alias for the callback to [`pam_set_data`](pam_set_data).
70 /// 70 ///
71 /// ```no_run 71 /// ```no_run
72 /// # use std::ffi::CString; 72 /// # use std::ffi::CString;
73 /// use libpam_sys::{CleanupCallback, pam_set_data}; 73 /// use libpam_sys::{CleanupCallback, pam_set_data};
74 /// # use libpam_sys::pam_handle; 74 /// # use libpam_sys::pam_handle;
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")]
152 pub type pam_func_t = unsafe extern "C" fn(
153 handle: *mut pam_handle,
154 flags: c_int,
155 argc: c_int,
156 argv: *const *const c_char,
157 ) -> c_int;
158
159 #[cfg(_hack_impl = "OpenPam")]
160 #[derive(Debug)]
161 #[repr(C)]
162 pub struct pam_module {
163 path: *mut c_char,
164 func: [pam_func_t; 6],
165 dlh: *mut c_void,
166 }
167
168 #[cfg(_hack_impl = "OpenPam")]
169 #[derive(Debug)]
170 #[repr(C)]
171 pub struct pam_repository {
172 typ: *mut c_char,
173 scope: *mut c_void,
174 scope_len: usize,
175 }
176
151 // These are the functions specified in X/SSO. Everybody exports them. 177 // These are the functions specified in X/SSO. Everybody exports them.
152 extern "C" { 178 extern "C" {
153 /// Account validation. 179 /// Account validation.
154 pub fn pam_acct_mgmt(pamh: *mut pam_handle, flags: c_int) -> c_int; 180 pub fn pam_acct_mgmt(pamh: *mut pam_handle, flags: c_int) -> c_int;
155 181
257 pamh: *mut pam_handle, 283 pamh: *mut pam_handle,
258 item: c_int, 284 item: c_int,
259 authtok: *mut *const c_char, 285 authtok: *mut *const c_char,
260 prompt: *const c_char, 286 prompt: *const c_char,
261 ) -> c_int; 287 ) -> c_int;
288
289 pub fn pam_prompt(
290 pamh: *const pam_handle,
291 style: c_int,
292 response: *mut *mut c_char,
293 fmt: *const c_char,
294 ...
295 ) -> c_int;
296
262 } 297 }
263 298
264 #[cfg(_hack_impl = "LinuxPam")] 299 #[cfg(_hack_impl = "LinuxPam")]
265 extern "C" { 300 extern "C" {
266 pub fn pam_fail_delay(pamh: *mut pam_handle, musec_delay: c_uint) -> c_int; 301 pub fn pam_fail_delay(pamh: *mut pam_handle, musec_delay: c_uint) -> c_int;
276 311
277 // We don't export the v-variants of the formatting functions. 312 // We don't export the v-variants of the formatting functions.
278 313
279 pub fn pam_syslog(pamh: *const pam_handle, priority: c_int, fmt: *const c_char, ...); 314 pub fn pam_syslog(pamh: *const pam_handle, priority: c_int, fmt: *const c_char, ...);
280 315
281 pub fn pam_prompt(
282 pamh: *const pam_handle,
283 style: c_int,
284 response: *mut *mut c_char,
285 fmt: *const c_char,
286 ...
287 ) -> c_int;
288
289 pub fn pam_get_authtok_noverify( 316 pub fn pam_get_authtok_noverify(
290 pamh: *const pam_handle, 317 pamh: *const pam_handle,
291 authtok: *mut *const c_char, 318 authtok: *mut *const c_char,
292 prompt: *const c_char, 319 prompt: *const c_char,
293 ) -> c_int; 320 ) -> c_int;
371 pamh: *mut pam_handle, 398 pamh: *mut pam_handle,
372 file_name: *const c_char, 399 file_name: *const c_char,
373 key: *const c_char, 400 key: *const c_char,
374 ) -> *mut c_char; 401 ) -> *mut c_char;
375 } 402 }
403
404 #[cfg(_hack_impl = "OpenPam")]
405 extern "C" {
406 pub fn openpam_borrow_cred(pamh: *mut pam_handle, passwd: *const libc::passwd) -> c_int;
407
408 pub fn openpam_subst(
409 pamh: *const pam_handle,
410 buf: *mut c_char,
411 _bufsize: *mut usize,
412 _template: *const c_char,
413 ) -> c_int;
414
415 pub fn openpam_free_data(pamh: *mut pam_handle, data: *mut c_void, status: c_int);
416
417 pub fn openpam_free_envlist(_envlist: *mut *mut c_char);
418
419 pub fn openpam_get_option(_pamh: *mut pam_handle, _option: *const c_char) -> *const c_char;
420
421 pub fn openpam_restore_cred(pamh: *mut pam_handle) -> c_int;
422
423 pub fn openpam_set_option(
424 _pamh: *mut pam_handle,
425 _option: *const c_char,
426 _value: *const c_char,
427 ) -> c_int;
428
429 pub fn pam_error(pamh: *const pam_handle, _fmt: *const c_char, ...) -> c_int;
430
431 pub fn pam_info(_pamh: *const pam_handle, _fmt: *const c_char, ...) -> c_int;
432
433 pub fn openpam_readline(
434 _f: *mut libc::FILE,
435 _lineno: *mut c_int,
436 _lenp: *mut usize,
437 ) -> *mut c_char;
438
439 pub fn openpam_readlinev(
440 _f: *mut libc::FILE,
441 _lineno: *mut c_int,
442 _lenp: *mut c_int,
443 ) -> *mut *mut c_char;
444
445 pub fn openpam_readword(
446 _f: *mut libc::FILE,
447 _lineno: *mut c_int,
448 _lenp: *mut usize,
449 ) -> *mut c_char;
450
451 pub fn openpam_straddch(
452 _str: *mut *mut c_char,
453 _sizep: *mut usize,
454 _lenp: *mut usize,
455 ch: c_int,
456 ) -> c_int;
457
458 pub fn openpam_set_feature(_feature: c_int, _onoff: c_int) -> c_int;
459
460 pub fn openpam_get_feature(_feature: c_int, _onoff: *mut c_int) -> c_int;
461
462 pub fn _openpam_log(_level: c_int, _func: *const c_char, _fmt: *const c_char, ...);
463
464 /// A premade conversation function that talks to the TTY.
465 ///
466 /// ```no_run
467 /// # use std::ffi::CString;
468 /// # use std::ptr;
469 /// use libpam_sys::*;
470 /// # let service = CString::new("whatever").unwrap();
471 /// # let user = CString::new("whatever").unwrap();
472 /// let mut handle: *mut pam_handle = ptr::null_mut();
473 /// let mut conv = pam_conv{
474 /// conv: openpam_ttyconv,
475 /// appdata_ptr: ptr::null_mut(),
476 /// };
477 /// let result = unsafe { pam_start(
478 /// service.as_ptr(), user.as_ptr(), &mut conv, &mut handle
479 /// ) };
480 /// ```
481 pub fn openpam_ttyconv(
482 n: c_int,
483 _msg: *const *const pam_message,
484 _resp: *mut *mut pam_response,
485 _data: *mut AppData,
486 ) -> c_int;
487
488 pub static mut openpam_ttyconv_timeout: c_int;
489
490 /// A null conversation function.
491 ///
492 /// ```no_run
493 /// # use std::ffi::CString;
494 /// # use std::ptr;
495 /// use libpam_sys::*;
496 /// # let service = CString::new("whatever").unwrap();
497 /// # let user = CString::new("whatever").unwrap();
498 /// let mut handle: *mut pam_handle = ptr::null_mut();
499 /// let mut conv = pam_conv{
500 /// conv: openpam_nullconv,
501 /// appdata_ptr: ptr::null_mut(),
502 /// };
503 /// let result = unsafe { pam_start(
504 /// service.as_ptr(), user.as_ptr(), &mut conv, &mut handle
505 /// ) };
506 /// ```
507 pub fn openpam_nullconv(
508 n: c_int,
509 _msg: *const *const pam_message,
510 _resp: *mut *mut pam_response,
511 _data: *mut AppData,
512 ) -> c_int;
513 }