Mercurial > crates > nonstick
comparison src/handle.rs @ 92:5ddbcada30f2
Add the ability to log against a PAM handle.
PAM impls provide a way to log to syslog. This exposes it via nonstick.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Sun, 22 Jun 2025 19:29:32 -0400 |
| parents | 039aae9a01f7 |
| children | db167f96ba46 |
comparison
equal
deleted
inserted
replaced
| 91:039aae9a01f7 | 92:5ddbcada30f2 |
|---|---|
| 1 //! The wrapper types and traits for handles into the PAM library. | 1 //! The wrapper types and traits for handles into the PAM library. |
| 2 | 2 |
| 3 use crate::constants::Result; | 3 use crate::constants::Result; |
| 4 use crate::conv::Conversation; | 4 use crate::conv::Conversation; |
| 5 use crate::logging::Level; | |
| 5 | 6 |
| 6 macro_rules! trait_item { | 7 macro_rules! trait_item { |
| 7 ($(#[$md:meta])* get = $getter:ident, item = $item:literal $(, see = $see:path)?) => { | 8 ($(#[$md:meta])* get = $getter:ident, item = $item:literal $(, see = $see:path)?) => { |
| 8 $(#[$md])* | 9 $(#[$md])* |
| 9 #[doc = ""] | 10 #[doc = ""] |
| 54 /// | 55 /// |
| 55 /// You probably want [`LibPamHandle`](crate::libpam::OwnedLibPamHandle). | 56 /// You probably want [`LibPamHandle`](crate::libpam::OwnedLibPamHandle). |
| 56 /// This trait is intended to allow creating mock PAM handle types | 57 /// This trait is intended to allow creating mock PAM handle types |
| 57 /// to test PAM modules and applications. | 58 /// to test PAM modules and applications. |
| 58 pub trait PamShared { | 59 pub trait PamShared { |
| 60 /// Logs something via this PAM handle. | |
| 61 /// | |
| 62 /// You probably want to use one of the logging macros, | |
| 63 /// like [`error!`], [`warning!`], [`info!`], or [`debug!`]. | |
| 64 /// | |
| 65 /// In most PAM implementations, this will go to syslog. | |
| 66 /// | |
| 67 /// # Example | |
| 68 /// | |
| 69 /// ```no_run | |
| 70 /// # use nonstick::{PamShared}; | |
| 71 /// # use nonstick::logging::Level; | |
| 72 /// # let pam_hdl: Box<dyn PamShared> = todo!(); | |
| 73 /// # let delay_ms = 100; | |
| 74 /// # let url = "https://zombo.com"; | |
| 75 /// // Usually, instead of calling this manually, just use the macros. | |
| 76 /// nonstick::error!(pam_hdl, "something bad happened!"); | |
| 77 /// nonstick::warn!(pam_hdl, "loading information took {delay_ms} ms"); | |
| 78 /// nonstick::info!(pam_hdl, "using network backend"); | |
| 79 /// nonstick::debug!(pam_hdl, "sending GET request to {url}"); | |
| 80 /// // But if you really want to, you can call this yourself: | |
| 81 /// pam_hdl.log(Level::Warning, "this is unnecessarily verbose"); | |
| 82 /// ``` | |
| 83 fn log(&self, level: Level, entry: &str); | |
| 84 | |
| 59 /// Retrieves the name of the user who is authenticating or logging in. | 85 /// Retrieves the name of the user who is authenticating or logging in. |
| 60 /// | 86 /// |
| 61 /// If the username has previously been obtained, this uses that username; | 87 /// If the username has previously been obtained, this uses that username; |
| 62 /// otherwise it prompts the user with the first of these that is present: | 88 /// otherwise it prompts the user with the first of these that is present: |
| 63 /// | 89 /// |
