pub struct IdRanges {
pub user: String,
pub from_env: bool,
pub uid: u32,
pub subuid: String,
pub subgid: String,
}Expand description
The account QCode runs as and what /etc/passwd, /etc/subuid and /etc/subgid say, which
is everything needed to know whether rootless podman can map the ids an image uses.
Plain data, so every case is checked without touching the machine’s files; only
IdRanges::here reads them.
Fields§
§user: StringThe account’s name.
from_env: boolWhether user is the name the environment gave. It is not when the environment named
nobody, which is the case for a qcode a service or env -i started: the name then comes
from /etc/passwd, so IdRanges::line writes it out in full instead of leaving
$USER to a shell that has none.
uid: u32The account’s numeric id; either may stand at the start of a line.
subuid: StringThe text of /etc/subuid, empty when it is missing.
subgid: StringThe text of /etc/subgid, empty when it is missing.
Implementations§
Source§impl IdRanges
impl IdRanges
Sourcepub fn here() -> Self
pub fn here() -> Self
Reads this machine: the account from the environment, or from /etc/passwd when the
environment names nobody, the owner of this process, and the two id files as they are. A
file that cannot be read counts as empty, which is what podman makes of it too.
Sourcepub fn of(
environment: Option<&str>,
uid: u32,
passwd: &str,
subuid: &str,
subgid: &str,
) -> Self
pub fn of( environment: Option<&str>, uid: u32, passwd: &str, subuid: &str, subgid: &str, ) -> Self
The ranges of the account environment names, or of the one the passwd file holds for
uid when the environment names nobody.
/etc/subuid names an account by name far more often than by number, so an empty name
makes a machine on which podman works look like one that has no id ranges for it: the
account is read from passwd, whose own lines name every account there is.
The files are parameters so a test can describe any machine from any other one.
Sourcepub fn line(&self) -> String
pub fn line(&self) -> String
The line that gives this account a range in both files, then tells podman to take it up.
The range starts after every range either file already hands out, so it never overlaps
another account’s: two accounts sharing ids could read each other’s container files.
$USER is left for the shell, which knows the name for certain; a name /etc/passwd gave
is written out instead, because a shell as bare as the one this program was started from
would leave $USER empty and usermod would range nobody.
Trait Implementations§
impl Eq for IdRanges
impl StructuralPartialEq for IdRanges
Auto Trait Implementations§
impl Freeze for IdRanges
impl RefUnwindSafe for IdRanges
impl Send for IdRanges
impl Sync for IdRanges
impl Unpin for IdRanges
impl UnsafeUnpin for IdRanges
impl UnwindSafe for IdRanges
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more