view src/lib.rs @ 60:05cc2c27334f

The Big Refactor: clean up docs and exports. - Brings the most important symbols in the library to the root with `pub use` statements. - Expands and updates documentation. - Rearranges things extensively to make the external interface nicer and make the structure easier to understand. - Renames a few things (e.g. `Result`).
author Paul Fisher <paul@pfish.zone>
date Wed, 21 May 2025 19:00:51 -0400
parents 2a5c83d04b93
children d83623951070
line wrap: on
line source

//! A safe, nonstick interface to PAM.
//!
//! This implements a type-safe library to interact with PAM.
//! Currently, it implements the subset of PAM useful for implementing a module.
//!
//! To write a new PAM module using this crate:
//!
//!  1. Create a `dylib` crate.
//!  2. Implement a subset of the functions in the [PamModule] trait
//!     corresponding to what you want your module to do.
//!     In the simplest case (for a password-authentication system),
//!     this will be the [PamModule::sm_authenticate] function.
//!  3. Export your PAM module using the [pam_hooks!] macro.
//!  4. Build and install the dynamic library.
//!     This usually entails placing it at
//!     `/usr/lib/security/pam_your_module.so`,
//!     or maybe
//!     <code>/usr/lib/<var>your-architecture</var>/security/pam_your_module.so</code>.
//!
//! For general information on writing PAM modules, see
//! [The Linux-PAM Module Writers' Guide][module-guide]
//!
//! [module-guide]: https://www.chiark.greenend.org.uk/doc/libpam-doc/html/Linux-PAM_MWG.html

pub mod constants;
pub mod conv;
pub mod items;
pub mod module;

mod memory;
mod pam_ffi;

#[doc(inline)]
pub use crate::{
    constants::{ErrorCode, Flags, MessageStyle, Result},
    conv::Conversation,
    module::{PamHandle, PamModule},
};