diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:31 +0000 |
commit | dc0db358abe19481e475e10c32149b53370f1a1c (patch) | |
tree | ab8ce99c4b255ce46f99ef402c27916055b899ee /vendor/rustix/src/process/id.rs | |
parent | Releasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff) | |
download | rustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip |
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/rustix/src/process/id.rs')
-rw-r--r-- | vendor/rustix/src/process/id.rs | 178 |
1 files changed, 13 insertions, 165 deletions
diff --git a/vendor/rustix/src/process/id.rs b/vendor/rustix/src/process/id.rs index 687596a31..4cacf1ab0 100644 --- a/vendor/rustix/src/process/id.rs +++ b/vendor/rustix/src/process/id.rs @@ -9,163 +9,28 @@ use crate::{backend, io}; use alloc::vec::Vec; -#[cfg(any(target_os = "android", target_os = "linux"))] +#[cfg(linux_kernel)] use backend::process::types::RawCpuid; /// The raw integer value of a Unix user ID. -pub use backend::process::types::RawUid; +pub use crate::ugid::RawUid; /// The raw integer value of a Unix group ID. -pub use backend::process::types::RawGid; +pub use crate::ugid::RawGid; /// The raw integer value of a Unix process ID. -pub use backend::process::types::RawPid; +pub use crate::pid::RawPid; -/// The raw integer value of a Unix process ID. -pub use backend::process::types::RawNonZeroPid; - -/// `uid_t`—A Unix user ID. -#[repr(transparent)] -#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)] -pub struct Uid(RawUid); - -/// `gid_t`—A Unix group ID. -#[repr(transparent)] -#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)] -pub struct Gid(RawGid); - -/// `pid_t`—A non-zero Unix process ID. -/// -/// This is a pid, and not a pidfd. It is not a file descriptor, and the -/// process it refers to could disappear at any time and be replaced by -/// another, unrelated, process. -#[repr(transparent)] -#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)] -pub struct Pid(RawNonZeroPid); +pub use crate::pid::Pid; +pub use crate::ugid::{Gid, Uid}; /// A Linux CPU ID. -#[cfg(any(target_os = "android", target_os = "linux"))] +#[cfg(linux_kernel)] #[repr(transparent)] #[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)] pub struct Cpuid(RawCpuid); -impl Uid { - /// A `Uid` corresponding to the root user (uid 0). - pub const ROOT: Self = Self(0); - - /// Converts a `RawUid` into a `Uid`. - /// - /// # Safety - /// - /// `raw` must be the value of a valid Unix user ID. - #[inline] - pub const unsafe fn from_raw(raw: RawUid) -> Self { - Self(raw) - } - - /// Converts a `Uid` into a `RawUid`. - #[inline] - pub const fn as_raw(self) -> RawUid { - self.0 - } - - /// Test whether this uid represents the root user (uid 0). - #[inline] - pub const fn is_root(self) -> bool { - self.0 == Self::ROOT.0 - } -} - -impl Gid { - /// A `Gid` corresponding to the root group (gid 0). - pub const ROOT: Self = Self(0); - - /// Converts a `RawGid` into a `Gid`. - /// - /// # Safety - /// - /// `raw` must be the value of a valid Unix group ID. - #[inline] - pub const unsafe fn from_raw(raw: RawGid) -> Self { - Self(raw) - } - - /// Converts a `Gid` into a `RawGid`. - #[inline] - pub const fn as_raw(self) -> RawGid { - self.0 - } - - /// Test whether this gid represents the root group (gid 0). - #[inline] - pub const fn is_root(self) -> bool { - self.0 == Self::ROOT.0 - } -} - -impl Pid { - /// A `Pid` corresponding to the init process (pid 1). - pub const INIT: Self = Self( - // SAFETY: The init process' pid is always valid. - unsafe { RawNonZeroPid::new_unchecked(1) }, - ); - - /// Converts a `RawPid` into a `Pid`. - /// - /// # Safety - /// - /// `raw` must be the value of a valid Unix process ID, or zero. - #[inline] - pub const unsafe fn from_raw(raw: RawPid) -> Option<Self> { - match RawNonZeroPid::new(raw) { - Some(pid) => Some(Self(pid)), - None => None, - } - } - - /// Converts a known non-zero `RawPid` into a `Pid`. - /// - /// # Safety - /// - /// `raw` must be the value of a valid Unix process ID. It must not be - /// zero. - #[inline] - pub const unsafe fn from_raw_nonzero(raw: RawNonZeroPid) -> Self { - Self(raw) - } - - /// Creates a `Pid` holding the ID of the given child process. - #[cfg(feature = "std")] - #[inline] - pub fn from_child(child: &std::process::Child) -> Self { - let id = child.id(); - debug_assert_ne!(id, 0); - - // SAFETY: We know the returned ID is valid because it came directly - // from an OS API. - unsafe { Self::from_raw_nonzero(RawNonZeroPid::new_unchecked(id as _)) } - } - - /// Converts a `Pid` into a `RawNonZeroPid`. - #[inline] - pub const fn as_raw_nonzero(self) -> RawNonZeroPid { - self.0 - } - - /// Converts an `Option<Pid>` into a `RawPid`. - #[inline] - pub fn as_raw(pid: Option<Self>) -> RawPid { - pid.map_or(0, |pid| pid.0.get()) - } - - /// Test whether this pid represents the init process (pid 0). - #[inline] - pub const fn is_init(self) -> bool { - self.0.get() == Self::INIT.0.get() - } -} - -#[cfg(any(target_os = "android", target_os = "linux"))] +#[cfg(linux_kernel)] impl Cpuid { /// Converts a `RawCpuid` into a `Cpuid`. /// @@ -195,7 +60,7 @@ impl Cpuid { #[inline] #[must_use] pub fn getuid() -> Uid { - backend::process::syscalls::getuid() + backend::ugid::syscalls::getuid() } /// `geteuid()`—Returns the process' effective user ID. @@ -209,7 +74,7 @@ pub fn getuid() -> Uid { #[inline] #[must_use] pub fn geteuid() -> Uid { - backend::process::syscalls::geteuid() + backend::ugid::syscalls::geteuid() } /// `getgid()`—Returns the process' real group ID. @@ -223,7 +88,7 @@ pub fn geteuid() -> Uid { #[inline] #[must_use] pub fn getgid() -> Gid { - backend::process::syscalls::getgid() + backend::ugid::syscalls::getgid() } /// `getegid()`—Returns the process' effective group ID. @@ -237,7 +102,7 @@ pub fn getgid() -> Gid { #[inline] #[must_use] pub fn getegid() -> Gid { - backend::process::syscalls::getegid() + backend::ugid::syscalls::getegid() } /// `getpid()`—Returns the process' ID. @@ -251,7 +116,7 @@ pub fn getegid() -> Gid { #[inline] #[must_use] pub fn getpid() -> Pid { - backend::process::syscalls::getpid() + backend::pid::syscalls::getpid() } /// `getppid()`—Returns the parent process' ID. @@ -364,20 +229,3 @@ pub fn getgroups() -> io::Result<Vec<Gid>> { buffer.resize(buffer.capacity(), Gid::ROOT); } } - -// Return the raw value of the IDs. In case of `None` it returns `u32::MAX` -// since it has the same bit pattern as `-1` indicating no change to the -// owner/group ID. -pub(crate) fn translate_fchown_args(owner: Option<Uid>, group: Option<Gid>) -> (u32, u32) { - let ow = match owner { - Some(o) => o.as_raw(), - None => u32::MAX, - }; - - let gr = match group { - Some(g) => g.as_raw(), - None => u32::MAX, - }; - - (ow, gr) -} |