Mercurial > crates > nonstick
comparison src/handle.rs @ 159:634cd5f2ac8b
Separate logging into its own trait apart from the rest of PAM.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Sat, 12 Jul 2025 18:16:18 -0400 |
| parents | 0099f2f79f86 |
| children | 2f5913131295 |
comparison
equal
deleted
inserted
replaced
| 158:d5b7b28d754e | 159:634cd5f2ac8b |
|---|---|
| 3 use crate::_doc::{guide, linklist, man7, manbsd, stdlinks}; | 3 use crate::_doc::{guide, linklist, man7, manbsd, stdlinks}; |
| 4 use crate::constants::{Flags, Result}; | 4 use crate::constants::{Flags, Result}; |
| 5 use crate::conv::Conversation; | 5 use crate::conv::Conversation; |
| 6 use crate::environ::{EnvironMap, EnvironMapMut}; | 6 use crate::environ::{EnvironMap, EnvironMapMut}; |
| 7 use crate::items::{getter, Items, ItemsMut}; | 7 use crate::items::{getter, Items, ItemsMut}; |
| 8 use crate::logging::{Level, Location}; | 8 use crate::logging::Logger; |
| 9 use std::ffi::{OsStr, OsString}; | 9 use std::ffi::{OsStr, OsString}; |
| 10 use std::fmt; | |
| 11 | 10 |
| 12 /// Functionality for both PAM applications and PAM modules. | 11 /// Functionality for both PAM applications and PAM modules. |
| 13 /// | 12 /// |
| 14 /// This base trait includes features of a PAM handle that are available | 13 /// This base trait includes features of a PAM handle that are available |
| 15 /// to both applications and modules. | 14 /// to both applications and modules. |
| 16 /// | 15 /// |
| 17 /// You probably want [`LibPamTransaction`](crate::libpam::LibPamTransaction). | 16 /// You probably want [`LibPamTransaction`](crate::libpam::LibPamTransaction). |
| 18 /// This trait is intended to allow creating mock PAM handle types | 17 /// This trait is intended to allow creating mock PAM handle types |
| 19 /// to test PAM modules and applications. | 18 /// to test PAM modules and applications. |
| 20 pub trait PamShared { | 19 pub trait PamShared: Logger { |
| 21 /// Logs something via this PAM handle. | |
| 22 /// | |
| 23 /// You probably want to use one of the logging macros, | |
| 24 /// like [`error!`](crate::error!), | |
| 25 /// [`warn!`](crate::warn!), | |
| 26 /// [`info!`](crate::info!), | |
| 27 /// or [`debug!`](crate::debug!). | |
| 28 /// | |
| 29 /// In most PAM implementations, this will go to syslog. | |
| 30 /// See [Linux-PAM's `pam_syslog`][man7] or | |
| 31 /// [OpenPAM's `openpam_log`][manbsd] for more details. | |
| 32 /// | |
| 33 /// # Example | |
| 34 /// | |
| 35 /// ```no_run | |
| 36 /// # use nonstick::PamShared; | |
| 37 /// use nonstick::logging::Level; | |
| 38 /// use nonstick::location; | |
| 39 /// # fn _test(pam_hdl: impl PamShared) { | |
| 40 /// # let delay_ms = 100; | |
| 41 /// # let url = "https://zombo.com"; | |
| 42 /// // Usually, instead of calling this manually, just use the macros. | |
| 43 /// nonstick::error!(pam_hdl, "something bad happened!"); | |
| 44 /// nonstick::warn!(pam_hdl, "loading information took {delay_ms} ms"); | |
| 45 /// nonstick::info!(pam_hdl, "using network backend"); | |
| 46 /// nonstick::debug!(pam_hdl, "sending GET request to {url}"); | |
| 47 /// // But if you really want to, you can call this yourself: | |
| 48 /// pam_hdl.log(Level::Warn, location!(), format_args!("this is unnecessarily verbose")); | |
| 49 /// # } | |
| 50 /// ``` | |
| 51 #[doc = man7!(3 pam_syslog)] | |
| 52 #[doc = manbsd!(3 openpam_log)] | |
| 53 fn log(&self, level: Level, loc: Location<'_>, entry: fmt::Arguments); | |
| 54 | |
| 55 /// Retrieves the name of the user who is authenticating or logging in. | 20 /// Retrieves the name of the user who is authenticating or logging in. |
| 56 /// | 21 /// |
| 57 /// If the username has previously been obtained, this uses that username; | 22 /// If the username has previously been obtained, this uses that username; |
| 58 /// otherwise it prompts the user with the first of these that is present: | 23 /// otherwise it prompts the user with the first of these that is present: |
| 59 /// | 24 /// |
