From a7fba79be7427ad5d2b2d0dd06d68e2f9ee756d9 Mon Sep 17 00:00:00 2001 From: Paul Sajna <paulsajna@gmail.com> Date: Fri, 9 Mar 2018 00:28:46 -0800 Subject: [PATCH] implement setid functions and unlink --- src/platform/src/linux/mod.rs | 16 ++++++++++++++++ src/platform/src/redox/mod.rs | 17 +++++++++++++++++ src/unistd/src/lib.rs | 8 ++++---- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/platform/src/linux/mod.rs b/src/platform/src/linux/mod.rs index aa7eef7c..7025b487 100644 --- a/src/platform/src/linux/mod.rs +++ b/src/platform/src/linux/mod.rs @@ -139,6 +139,22 @@ pub fn rmdir(path: *const c_char) -> c_int { e(unsafe { syscall!(UNLINKAT, AT_FDCWD, path, AT_REMOVEDIR) }) as c_int } +pub fn setpgid(pid: pid_t, pgid: pid_t) -> c_int { + e(unsafe { syscall!(SETPGID, pid, pgid) }) as c_int +} + +pub fn setregid(rgid: gid_t, egid: gid_t) -> c_int { + e(unsafe { syscall!(SETREGID, rgid, egid) }) as c_int +} + +pub fn setreuid(ruid: uid_t, euid: uid_t) -> c_int { + e(unsafe { syscall!(SETREUID, ruid, euid) }) as c_int +} + +pub fn unlink(path: *const c_char) -> c_int { + e(unsafe { syscall!(UNLINKAT, AT_FDCWD, path, 0) }) as c_int +} + pub fn write(fildes: c_int, buf: &[u8]) -> ssize_t { e(unsafe { syscall!(WRITE, fildes, buf.as_ptr(), buf.len()) }) as ssize_t } diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index 264042d7..0ea4bda2 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -157,6 +157,23 @@ pub fn rmdir(path: *const c_char) -> c_int { e(syscall::rmdir(path)) as c_int } +pub fn setpgid(pid: pid_t, pgid: pid_t) -> c_int { + e(syscall::setpgid(pid as usize, pgid as usize)) as c_int +} + +pub fn setregid(rgid: gid_t, egid: gid_t) -> c_int { + e(syscall::setregid(rgid as usize, egid as usize)) as c_int +} + +pub fn setreuid(ruid: uid_t, euid: uid_t) -> c_int { + e(syscall::setreuid(ruid as usize, euid as usize)) as c_int +} + +pub fn unlink(path: *const c_char) -> c_int { + let path = unsafe { c_str(path) }; + e(syscall::unlink(path)) as c_int +} + pub fn write(fd: c_int, buf: &[u8]) -> ssize_t { e(syscall::write(fd as usize, buf)) as ssize_t } diff --git a/src/unistd/src/lib.rs b/src/unistd/src/lib.rs index e83c8a82..62912097 100644 --- a/src/unistd/src/lib.rs +++ b/src/unistd/src/lib.rs @@ -351,7 +351,7 @@ pub extern "C" fn setgid(gid: gid_t) -> c_int { #[no_mangle] pub extern "C" fn setpgid(pid: pid_t, pgid: pid_t) -> c_int { - unimplemented!(); + platform::setpgid(pid, pgid) } #[no_mangle] @@ -361,12 +361,12 @@ pub extern "C" fn setpgrp() -> pid_t { #[no_mangle] pub extern "C" fn setregid(rgid: gid_t, egid: gid_t) -> c_int { - unimplemented!(); + platform::setregid(rgid, egid) } #[no_mangle] pub extern "C" fn setreuid(ruid: uid_t, euid: uid_t) -> c_int { - unimplemented!(); + platform::setreuid(ruid, euid) } #[no_mangle] @@ -436,7 +436,7 @@ pub extern "C" fn ualarm(useconds: useconds_t, interval: useconds_t) -> useconds #[no_mangle] pub extern "C" fn unlink(path: *const c_char) -> c_int { - unimplemented!(); + platform::unlink(path) } #[no_mangle] -- GitLab