From 2c3699e257f39060c43b0c7de58375360feea8df Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 16 Dec 2021 19:17:44 +0100 Subject: [PATCH] LibCore: Add syscall wrappers for setuid/seteuid/setgid/setegid --- Userland/Libraries/LibCore/System.cpp | 28 +++++++++++++++++++++++++++ Userland/Libraries/LibCore/System.h | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index 4014830411..423d0b1ca0 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -388,4 +388,32 @@ ErrorOr waitpid(pid_t waitee, int* wstatus, int options) return pid; } +ErrorOr setuid(uid_t uid) +{ + if (::setuid(uid) < 0) + return Error::from_syscall("setuid"sv, -errno); + return {}; +} + +ErrorOr seteuid(uid_t uid) +{ + if (::setuid(uid) < 0) + return Error::from_syscall("seteuid"sv, -errno); + return {}; +} + +ErrorOr setgid(gid_t gid) +{ + if (::setgid(gid) < 0) + return Error::from_syscall("setgid"sv, -errno); + return {}; +} + +ErrorOr setegid(gid_t gid) +{ + if (::setgid(gid) < 0) + return Error::from_syscall("setegid"sv, -errno); + return {}; +} + } diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index 32d4beb711..47f2d6c92f 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -55,5 +55,9 @@ ErrorOr getgrnam(StringView name); ErrorOr clock_settime(clockid_t clock_id, struct timespec* ts); ErrorOr posix_spawnp(StringView const path, posix_spawn_file_actions_t* const file_actions, posix_spawnattr_t* const attr, char* const arguments[], char* const envp[]); ErrorOr waitpid(pid_t waitee, int* wstatus, int options); +ErrorOr setuid(uid_t); +ErrorOr seteuid(uid_t); +ErrorOr setgid(gid_t); +ErrorOr setegid(gid_t); }