From 73d35bcdbaf6c7117b69b6656f69a0090356e158 Mon Sep 17 00:00:00 2001 From: mrmiywj Date: Sun, 10 May 2020 13:44:05 -0700 Subject: [PATCH] add support for getresuid --- vm/src/stdlib/os.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/vm/src/stdlib/os.rs b/vm/src/stdlib/os.rs index bd2a4e65367..583d2b3503c 100644 --- a/vm/src/stdlib/os.rs +++ b/vm/src/stdlib/os.rs @@ -1457,6 +1457,25 @@ fn os_sync(_vm: &VirtualMachine) -> PyResult<()> { Ok(()) } +// cfg from nix +#[cfg(any( + target_os = "android", + target_os = "freebsd", + target_os = "linux", + target_os = "openbsd" +))] +fn os_getresuid(vm: &VirtualMachine) -> PyResult<(u32, u32, u32)> { + let mut ruid = 0; + let mut euid = 0; + let mut suid = 0; + let ret = unsafe { libc::getresuid(&mut ruid, &mut euid, &mut suid) }; + if ret == 0 { + Ok((ruid, euid, suid)) + } else { + Err(errno_err(vm)) + } +} + pub fn make_module(vm: &VirtualMachine) -> PyObjectRef { let ctx = &vm.ctx; @@ -1688,6 +1707,7 @@ fn extend_module_platform_specific(vm: &VirtualMachine, module: &PyObjectRef) { ))] extend_module!(vm, module, { "setresuid" => ctx.new_function(os_setresuid), + "getresuid" => ctx.new_function(os_getresuid), }); // cfg taken from nix