pub struct PrivilegeDrop {
pub chroot_dir: Option<PathBuf>,
pub uid: Option<Uid>,
pub gid: Option<Gid>,
}Expand description
Requested privilege drop.
All fields are optional — None / false means “no change” (back-compat).
Fields§
§chroot_dir: Option<PathBuf>If Some, call chroot(dir) followed by chdir("/").
The directory becomes the filesystem root for all subsequent I/O.
uid: Option<Uid>Target UID. None = don’t call setuid.
gid: Option<Gid>Target GID. None = don’t call setgid.
Implementations§
Source§impl PrivilegeDrop
impl PrivilegeDrop
Sourcepub fn apply(&self) -> Result<()>
pub fn apply(&self) -> Result<()>
Apply chroot + setgid + setuid in the correct order.
Ordering: chroot first (requires root), then setgroups/setgid, then setuid last (once root is dropped we cannot chroot or change group).
§Bind-ordering caveat
Because the current server architecture binds sockets inside spawned
tasks, calling apply() before the first tokio::spawn means that
sockets for privileged ports will be bound after root has been dropped.
See the module-level documentation for details and operator guidance.
Trait Implementations§
Source§impl Debug for PrivilegeDrop
impl Debug for PrivilegeDrop
Source§impl Default for PrivilegeDrop
impl Default for PrivilegeDrop
Source§fn default() -> PrivilegeDrop
fn default() -> PrivilegeDrop
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for PrivilegeDrop
impl RefUnwindSafe for PrivilegeDrop
impl Send for PrivilegeDrop
impl Sync for PrivilegeDrop
impl Unpin for PrivilegeDrop
impl UnsafeUnpin for PrivilegeDrop
impl UnwindSafe for PrivilegeDrop
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
Mutably borrows from an owned value. Read more
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
Converts
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>
Converts
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request