Struct ScopedDirBuilder

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

Safe version of DirBuilder to protect from TOCTOU style of attacks.

The ScopedDirBuilder is a counterpart for DirBuilder, with safety enhancements of:

  • ensuring the new directories are created under a specified root directory.
  • ensuring all created directories are still scoped under root even under symlink based attacks.
  • returning a PinnedPathBuf for the last level of directory, so it could be used for other operations safely.

Implementations§

Source§

impl ScopedDirBuilder

Source

pub fn new<P: AsRef<Path>>(root: P) -> Result<Self>

Create a new instance of ScopedDirBuilder with with default mode/security settings.

Source

pub fn recursive(&mut self, recursive: bool) -> &mut Self

Indicates that directories should be created recursively, creating all parent directories.

Parents that do not exist are created with the same security and permissions settings.

Source

pub fn mode(&mut self, mode: u32) -> &mut Self

Sets the mode to create new directories with. This option defaults to 0o755.

Source

pub fn create_with_unscoped_path<P: AsRef<Path>>( &self, path: P, ) -> Result<PinnedPathBuf>

Creates the specified directory with the options configured in this builder.

This is a helper to create subdirectory with an absolute path, without stripping off self.root. So error will be returned if path does start with self.root. It is considered an error if the directory already exists unless recursive mode is enabled.

Source

pub fn create<P: AsRef<Path>>(&self, path: P) -> Result<PinnedPathBuf>

Creates sub-directory with the options configured in this builder.

It is considered an error if the directory already exists unless recursive mode is enabled.

Trait Implementations§

Source§

impl Debug for ScopedDirBuilder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.