#[non_exhaustive]pub enum Error {
Show 17 variants
NotFound(PathBuf),
BadPermission(PathBuf, u32, u32),
BadOwner(PathBuf, u32),
BadType(PathBuf),
CouldNotInspect(PathBuf, Arc<Error>),
Multiple(Vec<Box<Error>>),
StepsExceeded,
CurrentDirectory(Arc<Error>),
CreatingDir(Arc<Error>),
Content(Box<Error>),
Listing(Arc<Error>),
InvalidSubdirectory,
Io {
filename: PathBuf,
action: &'static str,
err: Arc<Error>,
},
MissingField(UninitializedFieldError),
NoSuchGroup(String),
NoSuchUser(String),
PasswdGroupIoError(Arc<Error>),
}
Expand description
An error returned while checking a path for privacy.
Note that this often means a necessary file doesn’t exist at all.
When printing a fs_mistrust::Error
, do not describe it as a “permissions error”.
Describe it with less specific wording, perhaps “Problem accessing Thing”.
The Display
impl will give the details.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
NotFound(PathBuf)
A target (or one of its ancestors) was not found.
BadPermission(PathBuf, u32, u32)
A target (or one of its ancestors) had incorrect permissions.
Only generated on unix-like systems.
The first integer contains the current permission bits, and the second contains the permission bits which were incorrectly set.
BadOwner(PathBuf, u32)
A target (or one of its ancestors) had an untrusted owner.
Only generated on unix-like systems.
The provided integer contains the user_id o
BadType(PathBuf)
A target (or one of its ancestors) had the wrong type.
Ordinarily, the target may be anything at all, though you can override
this with require_file
and
require_directory
.
CouldNotInspect(PathBuf, Arc<Error>)
We were unable to inspect the target or one of its ancestors.
(Ironically, we might lack permissions to see if something’s permissions are correct.)
(The std::io::Error
that caused this problem is wrapped in an Arc
so
that our own Error
type can implement Clone
.)
Multiple(Vec<Box<Error>>)
Multiple errors occurred while inspecting the target.
This variant will only be returned if the caller specifically asked for
it by calling all_errors
.
We will never construct an instance of this variant with an empty Vec
.
StepsExceeded
We’ve realized that we can’t finish resolving our path without taking more than the maximum number of steps. The likeliest explanation is a symlink loop.
CurrentDirectory(Arc<Error>)
We can’t find our current working directory, or we found it but it looks impossible.
CreatingDir(Arc<Error>)
We tried to create a directory, and encountered a failure in doing so.
Content(Box<Error>)
We found a problem while checking the contents of the directory.
Listing(Arc<Error>)
walkdir
only.We were unable to inspect the contents of the directory
This error is only present when the walkdir
feature is enabled.
InvalidSubdirectory
Tried to use an invalid path with a CheckedDir
,
Io
We encountered an error while attempting an IO operation on a file.
Fields
MissingField(UninitializedFieldError)
A field was missing when we tried to construct a
Mistrust
.
NoSuchGroup(String)
A group that we were configured to trust could not be found.
NoSuchUser(String)
A user that we were configured to trust could not be found.
PasswdGroupIoError(Arc<Error>)
Error accessing passwd/group databases or obtaining our uids/gids
Implementations§
Source§impl Error
impl Error
Sourcepub fn is_bad_permission(&self) -> bool
pub fn is_bad_permission(&self) -> bool
Return true iff this error indicates a problem with filesystem permissions.
(Other errors typically indicate an IO problem, possibly one preventing us from looking at permissions in the first place)
Sourcepub fn errors<'a>(&'a self) -> impl Iterator<Item = &'a Error> + 'a
pub fn errors<'a>(&'a self) -> impl Iterator<Item = &'a Error> + 'a
Return an iterator over all of the errors contained in this Error.
If this is a singleton, the iterator returns only a single element.
Otherwise, it returns all the elements inside the Error::Multiple
variant.
Does not recurse, since we do not create nested instances of
Error::Multiple
.
Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl From<UninitializedFieldError> for Error
impl From<UninitializedFieldError> for Error
Source§fn from(source: UninitializedFieldError) -> Self
fn from(source: UninitializedFieldError) -> Self
Auto Trait Implementations§
impl Freeze for Error
impl !RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl !UnwindSafe for Error
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,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 48 bytes
Size for each variant:
NotFound
: 32 bytesBadPermission
: 40 bytesBadOwner
: 40 bytesBadType
: 32 bytesCouldNotInspect
: 40 bytesMultiple
: 32 bytesStepsExceeded
: 0 bytesCurrentDirectory
: 16 bytesCreatingDir
: 16 bytesContent
: 16 bytesListing
: 16 bytesInvalidSubdirectory
: 0 bytesIo
: 48 bytesMissingField
: 24 bytesNoSuchGroup
: 32 bytesNoSuchUser
: 32 bytesPasswdGroupIoError
: 16 bytes