// run-pass // ignore-android // ignore-emscripten // ignore-sgx // ignore-fuchsia no '/bin/sh', '/bin/ls' #![feature(rustc_private)] fn main() { #[cfg(unix)] run() } #[cfg(unix)] fn run() { extern crate libc; use std::process::Command; use std::os::unix::prelude::*; let mut p = Command::new("/bin/sh") .arg("-c").arg("true") .uid(unsafe { libc::getuid() }) .gid(unsafe { libc::getgid() }) .spawn().unwrap(); assert!(p.wait().unwrap().success()); // if we're already root, this isn't a valid test. Most of the bots run // as non-root though (android is an exception). if unsafe { libc::getuid() != 0 } { assert!(Command::new("/bin/ls").uid(0).gid(0).spawn().is_err()); } }