Sandbox

Struct Sandbox 

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

Build sandbox manager.

Implementations§

Source§

impl Sandbox

Source

pub fn mount_bindfs( &self, src: &Path, dest: &Path, opts: &[&str], ) -> Result<Option<ExitStatus>>

Source

pub fn mount_devfs( &self, _src: &Path, dest: &Path, opts: &[&str], ) -> Result<Option<ExitStatus>>

Source

pub fn mount_fdfs( &self, _src: &Path, dest: &Path, opts: &[&str], ) -> Result<Option<ExitStatus>>

Source

pub fn mount_nfs( &self, src: &Path, dest: &Path, opts: &[&str], ) -> Result<Option<ExitStatus>>

Source

pub fn mount_procfs( &self, _src: &Path, dest: &Path, opts: &[&str], ) -> Result<Option<ExitStatus>>

Source

pub fn mount_tmpfs( &self, _src: &Path, dest: &Path, opts: &[&str], ) -> Result<Option<ExitStatus>>

Source

pub fn unmount_bindfs(&self, dest: &Path) -> Result<Option<ExitStatus>>

Source

pub fn unmount_devfs(&self, dest: &Path) -> Result<Option<ExitStatus>>

Source

pub fn unmount_fdfs(&self, dest: &Path) -> Result<Option<ExitStatus>>

Source

pub fn unmount_nfs(&self, dest: &Path) -> Result<Option<ExitStatus>>

Source

pub fn unmount_procfs(&self, dest: &Path) -> Result<Option<ExitStatus>>

Source

pub fn unmount_tmpfs(&self, dest: &Path) -> Result<Option<ExitStatus>>

Source

pub fn kill_processes(&self, sandbox: &Path)

Kill all processes with open file handles within a sandbox path.

Uses procfs to scan all processes for file descriptors, cwd, or root that point into the sandbox directory. This is more thorough than fuser which only checks the exact path, not files within subdirs.

Source§

impl Sandbox

Source

pub fn new(config: &Config) -> Sandbox

Create a new Sandbox instance. This is used even if sandboxes have not been enabled, as it provides a consistent interface to run commands through using execute. If sandboxes are enabled then commands are executed via chroot(8), otherwise they are executed directly.

Source

pub fn enabled(&self) -> bool

Return whether sandboxes have been enabled.

This is based on whether a valid sandboxes section has been specified in the config file.

Source

pub fn path(&self, id: usize) -> PathBuf

Return full path to a sandbox by id.

Source

pub fn command(&self, id: usize, cmd: &Path) -> Command

Create a Command that runs in the sandbox (via chroot) if enabled, or directly if sandboxes are disabled.

Source

pub fn kill_processes_by_id(&self, id: usize)

Kill all processes in a sandbox by id. This is used for graceful shutdown on Ctrl+C.

Source

pub fn create(&self, id: usize) -> Result<()>

Create a single sandbox by id. If the sandbox already exists and is valid (has lock), this is a no-op.

Source

pub fn execute( &self, id: usize, script: &Path, envs: Vec<(String, String)>, stdin_data: Option<&str>, protected: bool, ) -> Result<Child>

Execute a script file with supplied environment variables and optional stdin data.

If protected is true, the process is placed in its own process group to isolate it from terminal signals (Ctrl+C). Use this for cleanup scripts that must complete even during shutdown.

Source

pub fn execute_script( &self, id: usize, content: &str, envs: Vec<(String, String)>, ) -> Result<Child>

Execute inline script content via /bin/sh.

Source

pub fn execute_command<I, S>( &self, id: usize, cmd: &Path, args: I, envs: Vec<(String, String)>, ) -> Result<Child>
where I: IntoIterator<Item = S>, S: AsRef<OsStr>,

Execute a command directly without shell interpretation.

Source

pub fn run_pre_build( &self, id: usize, config: &Config, envs: Vec<(String, String)>, ) -> Result<bool>

Run the pre-build script if configured. Returns Ok(true) if script ran successfully or wasn’t configured, Ok(false) if script failed.

Source

pub fn run_post_build( &self, id: usize, config: &Config, envs: Vec<(String, String)>, ) -> Result<bool>

Run the post-build script if configured. Returns Ok(true) if script ran successfully or wasn’t configured, Ok(false) if script failed.

Post-build scripts run with signal protection (process_group(0)) to ensure cleanup completes even during shutdown from Ctrl+C.

Source

pub fn destroy(&self, id: usize) -> Result<()>

Destroy a single sandbox by id.

Source

pub fn create_all(&self, count: usize) -> Result<()>

Create all sandboxes in parallel, rolling back on failure.

Source

pub fn destroy_all(&self, count: usize) -> Result<()>

Destroy all sandboxes in parallel. Continue on errors to ensure all sandboxes are attempted, printing each error as it occurs.

Source

pub fn list_all(&self, count: usize)

List all sandboxes.

Source

pub fn count_existing(&self, count: usize) -> usize

Count existing sandboxes (complete or incomplete).

Trait Implementations§

Source§

impl Clone for Sandbox

Source§

fn clone(&self) -> Sandbox

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 Sandbox

Source§

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

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

impl Default for Sandbox

Source§

fn default() -> Sandbox

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

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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<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<T> MaybeSend for T
where T: Send,