view src/libpam/mod.rs @ 78:002adfb98c5c

Rename files, reorder structs, remove annoying BorrowedBinaryData type. This is basically a cleanup change. Also it adds tests. - Renames the files with Questions and Answers to question and answer. - Reorders the structs in those files to put the important ones first. - Removes the BorrowedBinaryData type. It was a bad idea all along. Instead, we just use (&[u8], u8). - Adds some tests because I just can't help myself.
author Paul Fisher <paul@pfish.zone>
date Sun, 08 Jun 2025 03:48:40 -0400
parents c30811b4afae
children 5aa1a010f1e8
line wrap: on
line source

//! The PAM library FFI and helpers for managing it.
//!
//! This includes the functions provided by PAM and the data structures
//! used by PAM, as well as a few low-level abstractions for dealing with
//! those data structures.
//!
//! Everything in here is hazmat.

#![allow(dead_code)]

mod answer;
mod conversation;
mod handle;
mod memory;
mod module;
mod question;

pub use handle::{LibPamHandle, OwnedLibPamHandle};
use std::ffi::{c_char, c_int, c_void};

#[link(name = "pam")]
extern "C" {
    fn pam_get_data(
        pamh: *mut LibPamHandle,
        module_data_name: *const c_char,
        data: &mut *const c_void,
    ) -> c_int;

    fn pam_set_data(
        pamh: *mut LibPamHandle,
        module_data_name: *const c_char,
        data: *const c_void,
        cleanup: extern "C" fn(pamh: *const c_void, data: *mut c_void, error_status: c_int),
    ) -> c_int;

    fn pam_get_item(pamh: *mut LibPamHandle, item_type: c_int, item: &mut *const c_void) -> c_int;

    fn pam_set_item(pamh: *mut LibPamHandle, item_type: c_int, item: *const c_void) -> c_int;

    fn pam_get_user(
        pamh: *mut LibPamHandle,
        user: &mut *const c_char,
        prompt: *const c_char,
    ) -> c_int;

    fn pam_get_authtok(
        pamh: *mut LibPamHandle,
        item_type: c_int,
        data: &mut *const c_char,
        prompt: *const c_char,
    ) -> c_int;

    fn pam_end(pamh: *mut LibPamHandle, status: c_int) -> c_int;

    // TODO: pam_authenticate - app
    //       pam_setcred - app
    //       pam_acct_mgmt - app
    //       pam_chauthtok - app
    //       pam_open_session - app
    //       pam_close_session - app
    //       pam_putenv - shared
    //       pam_getenv - shared
    //       pam_getenvlist - shared
}