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); }