Skip to main content

pam/
lib.rs

1//! Simplified PAM module creation in Rust.
2//!
3//! ```rust
4//! use pam::constants::{PamFlag, PamResultCode};
5//! use pam::module::{PamHandle, PamHooks};
6//! use std::ffi::CStr;
7//!
8//! struct AliceOnly;
9//! pam::pam_hooks!(AliceOnly);
10//!
11//! impl PamHooks for AliceOnly {
12//!     fn sm_authenticate(pamh: &mut PamHandle, _args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
13//!         let username = match pamh.get_user(None) {
14//!             Ok(username) => username,
15//!             Err(e) => {
16//!                 eprintln!("failed to get username, error code: {e:?}");
17//!                 return e;
18//!             }
19//!         };
20//!
21//!         match username.as_str() {
22//!             "alice" => PamResultCode::PAM_SUCCESS,
23//!             _ => PamResultCode::PAM_AUTH_ERR,
24//!         }
25//!     }
26//! }
27//! # fn main() {}
28//! ```
29//!
30//! # Introduction
31//!
32//! The Pluggable Authentication Modules (PAM) framework enables systems to
33//! authenticate users and perform other functions by composing PAM modules,
34//! which are distributed as shared libraries.
35//!
36//! The goal of this library is to provide a simple, type-safe API to write
37//! these modules.
38#![deny(
39    clippy::unwrap_used,
40    clippy::expect_used,
41    clippy::panic,
42    clippy::unreachable,
43    clippy::todo,
44    clippy::unimplemented,
45    improper_ctypes,
46    improper_ctypes_definitions
47)]
48
49pub mod constants;
50pub mod conv;
51pub mod items;
52#[doc(hidden)]
53pub mod macros;
54pub mod module;
55pub mod secret;