mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 07:17:35 +00:00
LibCore: Add Core::System::drop_privileges()
In a few places we intentionally drop privileges to reduce the potential security surface area of networked program, with the pattern of: ``` if (setgid(getgid()) || setuid(getuid()) { return 1; } ``` We can make this a bit nicer to use by creating a wrapper.
This commit is contained in:
parent
7403342387
commit
6eebd69b70
2 changed files with 12 additions and 0 deletions
|
@ -726,6 +726,17 @@ ErrorOr<pid_t> setsid()
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<void> drop_privileges()
|
||||||
|
{
|
||||||
|
auto gid_result = setgid(getgid());
|
||||||
|
auto uid_result = setuid(getuid());
|
||||||
|
|
||||||
|
if (gid_result.is_error() || uid_result.is_error())
|
||||||
|
return Error::from_string_literal("Failed to drop privileges");
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
ErrorOr<bool> isatty(int fd)
|
ErrorOr<bool> isatty(int fd)
|
||||||
{
|
{
|
||||||
int rc = ::isatty(fd);
|
int rc = ::isatty(fd);
|
||||||
|
|
|
@ -109,6 +109,7 @@ ErrorOr<void> setgid(gid_t);
|
||||||
ErrorOr<void> setegid(gid_t);
|
ErrorOr<void> setegid(gid_t);
|
||||||
ErrorOr<void> setpgid(pid_t pid, pid_t pgid);
|
ErrorOr<void> setpgid(pid_t pid, pid_t pgid);
|
||||||
ErrorOr<pid_t> setsid();
|
ErrorOr<pid_t> setsid();
|
||||||
|
ErrorOr<void> drop_privileges();
|
||||||
ErrorOr<bool> isatty(int fd);
|
ErrorOr<bool> isatty(int fd);
|
||||||
ErrorOr<void> symlink(StringView target, StringView link_path);
|
ErrorOr<void> symlink(StringView target, StringView link_path);
|
||||||
ErrorOr<void> mkdir(StringView path, mode_t);
|
ErrorOr<void> mkdir(StringView path, mode_t);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue