diff options
author | Chia-I Wu <olv@google.com> | 2022-01-14 20:39:00 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-01-14 20:39:00 +0000 |
commit | 6419688b47b479e47469e618e1e1729321915e9f (patch) | |
tree | e787c8e5b8dbf6dc15381e7a20d917cb1351cde7 | |
parent | 805867ceb3873da223dee7fbc06e109e892aabd7 (diff) | |
parent | 4c0e6014ab731ee2efcbf840041c8d40abff2727 (diff) | |
download | minijail-6419688b47b479e47469e618e1e1729321915e9f.tar.gz |
rust/minijail: add Minijail::run_command am: 4170a270c9 am: 4c0e6014ab
Original change: https://android-review.googlesource.com/c/platform/external/minijail/+/1947197
Change-Id: I551199edebef18ec81391f757af0de0bb9fe1f18
-rw-r--r-- | rust/minijail/src/lib.rs | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/rust/minijail/src/lib.rs b/rust/minijail/src/lib.rs index d55c735..000bba3 100644 --- a/rust/minijail/src/lib.rs +++ b/rust/minijail/src/lib.rs @@ -21,7 +21,7 @@ enum Program { } /// Configuration of a command to be run in a jail. -struct Command { +pub struct Command { program: Program, preserve_fds: Vec<(RawFd, RawFd)>, @@ -35,6 +35,24 @@ struct Command { } impl Command { + /// This exposes a subset of what Command can do, before we are ready to commit to a stable + /// API. + pub fn new_for_path<P: AsRef<Path>, S: AsRef<str>, A: AsRef<str>>( + path: P, + keep_fds: &[RawFd], + args: &[S], + env_vars: Option<&[A]>, + ) -> Result<Command> { + let mut cmd = Command::new(Program::Filename(path.as_ref().to_path_buf())) + .keep_fds(keep_fds) + .args(args)?; + if let Some(env_vars) = env_vars { + cmd = cmd.envs(env_vars)?; + } + + Ok(cmd) + } + fn new(program: Program) -> Command { Command { program, @@ -847,6 +865,11 @@ impl Minijail { ) } + /// A generic version of `run()` that is a super set of all variants. + pub fn run_command(&self, cmd: Command) -> Result<pid_t> { + self.run_internal(cmd) + } + fn run_internal(&self, cmd: Command) -> Result<pid_t> { for (src_fd, dst_fd) in cmd.preserve_fds.iter() { let ret = unsafe { minijail_preserve_fd(self.jail, *src_fd, *dst_fd) }; |