Browse Source

LibCore: Add syscall wrappers for setuid/seteuid/setgid/setegid

Andreas Kling 3 years ago
parent
commit
2c3699e257
2 changed files with 32 additions and 0 deletions
  1. 28 0
      Userland/Libraries/LibCore/System.cpp
  2. 4 0
      Userland/Libraries/LibCore/System.h

+ 28 - 0
Userland/Libraries/LibCore/System.cpp

@@ -388,4 +388,32 @@ ErrorOr<pid_t> waitpid(pid_t waitee, int* wstatus, int options)
     return pid;
 }
 
+ErrorOr<void> setuid(uid_t uid)
+{
+    if (::setuid(uid) < 0)
+        return Error::from_syscall("setuid"sv, -errno);
+    return {};
+}
+
+ErrorOr<void> seteuid(uid_t uid)
+{
+    if (::setuid(uid) < 0)
+        return Error::from_syscall("seteuid"sv, -errno);
+    return {};
+}
+
+ErrorOr<void> setgid(gid_t gid)
+{
+    if (::setgid(gid) < 0)
+        return Error::from_syscall("setgid"sv, -errno);
+    return {};
+}
+
+ErrorOr<void> setegid(gid_t gid)
+{
+    if (::setgid(gid) < 0)
+        return Error::from_syscall("setegid"sv, -errno);
+    return {};
+}
+
 }

+ 4 - 0
Userland/Libraries/LibCore/System.h

@@ -55,5 +55,9 @@ ErrorOr<struct group> getgrnam(StringView name);
 ErrorOr<void> clock_settime(clockid_t clock_id, struct timespec* ts);
 ErrorOr<pid_t> 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<pid_t> waitpid(pid_t waitee, int* wstatus, int options);
+ErrorOr<void> setuid(uid_t);
+ErrorOr<void> seteuid(uid_t);
+ErrorOr<void> setgid(gid_t);
+ErrorOr<void> setegid(gid_t);
 
 }