[−][src]Struct redox_users::AllUsers
AllUsers
provides
(borrowed) access to all the users on the system.
Note that this struct implements All
for
a bunch of convenient access functions.
Notes
Note that everything in this section also applies to
AllGroups
- If you mutate anything owned by an
AllUsers
, you must call thesave
method in order for those changes to be applied to the system. - The API here is kept small on purpose in order to reduce the
surface area for security exploitation. Most mutating actions
can be accomplished via the
get_mut_by_id
andget_mut_by_name
functions.
Shadowfile handling
This implementation of redox-users uses a shadowfile implemented primarily
by this struct. AllUsers
respects the auth_enabled
status of the Config
that is was passed. If auth is enabled, it populates the
hash fields of each user struct that it parses from /etc/passwd
with
info from /et/shadow
. If a caller attempts to perform an action that
requires this info with an AllUsers
config that does not have auth enabled,
the User
handling action will panic.
Implementations
impl AllUsers
[src]
pub fn new(config: Config) -> Result<AllUsers>
[src]
See Shadowfile Handling for configuration information regarding this constructor.
pub fn add_user(
&mut self,
login: &str,
uid: usize,
gid: usize,
name: &str,
home: &str,
shell: &str
) -> Result<()>
[src]
&mut self,
login: &str,
uid: usize,
gid: usize,
name: &str,
home: &str,
shell: &str
) -> Result<()>
Adds a user with the specified attributes to the AllUsers
instance. Note that the user's password is set unset (see
Unset vs Blank Passwords)
during this call.
This function is classified as a mutating operation,
and users must therefore call save
in order for the new user to be applied to the system.
Panics
This function will panic!
if the Config
passed to AllUsers::new
does not have authentication enabled (see
Shadowfile handling
).
pub fn save(&self) -> Result<()>
[src]
Syncs the data stored in the AllUsers
instance to the filesystem.
To apply changes to the system from an AllUsers
, you MUST call this function!
Trait Implementations
impl All for AllUsers
[src]
fn iter(&self) -> Iter<'_, Self::Gruser>
[src]
fn iter_mut(&mut self) -> IterMut<'_, Self::Gruser>
[src]
fn get_by_name(&self, name: impl AsRef<str>) -> Option<&Self::Gruser>
[src]
fn get_mut_by_name(
&mut self,
name: impl AsRef<str>
) -> Option<&mut Self::Gruser>
[src]
&mut self,
name: impl AsRef<str>
) -> Option<&mut Self::Gruser>
fn get_by_id(&self, id: usize) -> Option<&Self::Gruser>
[src]
fn get_mut_by_id(&mut self, id: usize) -> Option<&mut Self::Gruser>
[src]
fn get_unique_id(&self) -> Option<usize>
[src]
fn remove_by_name(&mut self, name: impl AsRef<str>)
[src]
fn remove_by_id(&mut self, id: usize)
[src]
impl Debug for AllUsers
[src]
Auto Trait Implementations
impl RefUnwindSafe for AllUsers
impl Send for AllUsers
impl Sync for AllUsers
impl Unpin for AllUsers
impl UnwindSafe for AllUsers
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,