Skip to main content

Pam

Struct Pam 

Source
pub struct Pam { /* private fields */ }
Expand description

Authentication through a PAM service, from cx.pam(service), as a lock screen does. A clone is cheap and shares it.

libpam blocks, so each attempt runs on a thread of its own, and the loop hears from it only while it runs: an idle Pam wakes nothing. When the context that made it goes, an attempt still running is refused its answer, so its thread ends.

Implementations§

Source§

impl Pam

Source

pub fn start(&self, user: Option<&str>)

Starts authenticating user, or with None the user the shell runs as, found by its uid. An attempt already running is aborted first.

Ending an attempt while PAM waits for an answer, by aborting it, starting another or dropping its context, counts as a failed login where pam_faillock counts failures, and enough of them lock the account. So take the password first, start on Enter, and answer as soon as PAM asks.

Source

pub fn respond(&self, text: impl Into<String>)

Answers the question asked, and the state turns Busy. The answer is never logged, and its bytes are zeroed once handed on, but the copy made for libpam is freed unzeroed. With no question waiting, it is dropped, and that is logged.

Source

pub fn abort(&self)

Stops the attempt running: its question is refused, its thread ends and the state turns Idle. With none running, nothing changes. A refused question counts as a failed login, as start says.

Source

pub fn state(&self) -> ReadSignal<PamState>

Where the attempt is.

Source

pub fn messages(&self) -> ReadSignal<Vec<PamMessage>>

The info and error lines PAM sent during the attempt, oldest first. Each start empties it.

Trait Implementations§

Source§

impl Clone for Pam

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Pam

§

impl !Send for Pam

§

impl !Sync for Pam

§

impl !UnwindSafe for Pam

§

impl Forget for Pam

§

impl Freeze for Pam

§

impl Move for Pam

§

impl Unpin for Pam

§

impl UnsafeUnpin for Pam

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more