Browse Source

LibCore: Add syscall wrapper for setgroups()

Andreas Kling 3 years ago
parent
commit
ad37ca4815
2 changed files with 8 additions and 0 deletions
  1. 7 0
      Userland/Libraries/LibCore/System.cpp
  2. 1 0
      Userland/Libraries/LibCore/System.h

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

@@ -83,6 +83,13 @@ ErrorOr<void> ptrace_peekbuf(pid_t tid, void const* tracee_addr, Bytes destinati
     int rc = syscall(SC_ptrace, &params);
     HANDLE_SYSCALL_RETURN_VALUE("ptrace_peekbuf", rc, {});
 }
+
+ErrorOr<void> setgroups(Span<gid_t const> gids)
+{
+    if (::setgroups(gids.size(), gids.data()) < 0)
+        return Error::from_syscall("setgroups"sv, -errno);
+    return {};
+}
 #endif
 
 ErrorOr<void> sigaction(int signal, struct sigaction const* action, struct sigaction* old_action)

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

@@ -26,6 +26,7 @@ ErrorOr<Array<int, 2>> pipe2(int flags);
 ErrorOr<void> sendfd(int sockfd, int fd);
 ErrorOr<int> recvfd(int sockfd, int options);
 ErrorOr<void> ptrace_peekbuf(pid_t tid, void const* tracee_addr, Bytes destination_buf);
+ErrorOr<void> setgroups(Span<gid_t const>);
 #endif
 
 ErrorOr<void> sigaction(int signal, struct sigaction const* action, struct sigaction* old_action);