PathValidator

Struct PathValidator 

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

Path validator that ensures paths stay within allowed directories

§Example

use ruvector_security::PathValidator;
use std::path::PathBuf;

// Create validator with allowed directories
let validator = PathValidator::new(vec![PathBuf::from("/data"), PathBuf::from("/tmp")]);

// Paths within allowed directories are valid
// (Note: these paths must exist for validate() to succeed)
// validator.validate("/data/vectors.db");

// Paths outside allowed directories are rejected
assert!(validator.validate("/etc/passwd").is_err());

// Path traversal attempts are rejected
assert!(validator.validate("/data/../etc/passwd").is_err());

Implementations§

Source§

impl PathValidator

Source

pub const DEFAULT_MAX_PATH_LENGTH: usize = 4_096usize

Maximum allowed path length (default 4096)

Source

pub fn new(allowed_dirs: Vec<PathBuf>) -> Self

Create a new path validator with allowed directories

Set whether symlinks are allowed

Source

pub fn max_path_length(self, length: usize) -> Self

Set maximum path length

Source

pub fn validate<P: AsRef<Path>>(&self, path: P) -> SecurityResult<PathBuf>

Validate a path and return the canonical path if valid

§Errors

Returns an error if:

  • The path contains path traversal sequences (..)
  • The path is outside all allowed directories
  • The path is a symlink (unless allowed)
  • The path exceeds maximum length
Source

pub fn validate_new_file<P: AsRef<Path>>( &self, path: P, ) -> SecurityResult<PathBuf>

Validate a path for a new file (may not exist yet)

This validates the parent directory exists and is within allowed paths, and that the filename is safe.

Trait Implementations§

Source§

impl Clone for PathValidator

Source§

fn clone(&self) -> PathValidator

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathValidator

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for PathValidator

Source§

fn default() -> Self

Returns the “default value” for a type. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,