diff options
author | Andreas Kling <kling@serenityos.org> | 2022-08-21 16:15:29 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-08-21 16:15:29 +0200 |
commit | 006f75364786b1c63efe2f0905c1b5faff907afb (patch) | |
tree | 33649486c9668422e13db4ed81831fe88a6067e4 /Kernel/Net | |
parent | c3351d4b9fc83c731f122de21adf52ef015aecb1 (diff) | |
download | serenity-006f75364786b1c63efe2f0905c1b5faff907afb.zip |
Kernel: Make File::{chown,chmod} take credentials as input
...instead of getting them from Process::current(). :^)
Diffstat (limited to 'Kernel/Net')
-rw-r--r-- | Kernel/Net/LocalSocket.cpp | 11 | ||||
-rw-r--r-- | Kernel/Net/LocalSocket.h | 4 |
2 files changed, 9 insertions, 6 deletions
diff --git a/Kernel/Net/LocalSocket.cpp b/Kernel/Net/LocalSocket.cpp index c6c4e7e457..d532dbad25 100644 --- a/Kernel/Net/LocalSocket.cpp +++ b/Kernel/Net/LocalSocket.cpp @@ -445,8 +445,10 @@ ErrorOr<void> LocalSocket::ioctl(OpenFileDescription& description, unsigned requ return EINVAL; } -ErrorOr<void> LocalSocket::chmod(OpenFileDescription&, mode_t mode) +ErrorOr<void> LocalSocket::chmod(Credentials const&, OpenFileDescription&, mode_t mode) { + // FIXME: Use the credentials. + auto inode = m_inode.strong_ref(); if (inode) return inode->chmod(mode); @@ -455,14 +457,15 @@ ErrorOr<void> LocalSocket::chmod(OpenFileDescription&, mode_t mode) return {}; } -ErrorOr<void> LocalSocket::chown(OpenFileDescription&, UserID uid, GroupID gid) +ErrorOr<void> LocalSocket::chown(Credentials const& credentials, OpenFileDescription&, UserID uid, GroupID gid) { + // FIXME: Use the credentials. + auto inode = m_inode.strong_ref(); if (inode) return inode->chown(uid, gid); - auto& current_process = Process::current(); - if (!current_process.is_superuser() && (current_process.euid() != uid || !current_process.in_group(gid))) + if (!credentials.is_superuser() && (credentials.euid() != uid || !credentials.in_group(gid))) return set_so_error(EPERM); m_prebind_uid = uid; diff --git a/Kernel/Net/LocalSocket.h b/Kernel/Net/LocalSocket.h index 451c3b3fff..51f57c76b5 100644 --- a/Kernel/Net/LocalSocket.h +++ b/Kernel/Net/LocalSocket.h @@ -49,8 +49,8 @@ public: virtual ErrorOr<size_t> recvfrom(OpenFileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) override; virtual ErrorOr<void> getsockopt(OpenFileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>) override; virtual ErrorOr<void> ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg) override; - virtual ErrorOr<void> chown(OpenFileDescription&, UserID, GroupID) override; - virtual ErrorOr<void> chmod(OpenFileDescription&, mode_t) override; + virtual ErrorOr<void> chown(Credentials const&, OpenFileDescription&, UserID, GroupID) override; + virtual ErrorOr<void> chmod(Credentials const&, OpenFileDescription&, mode_t) override; private: explicit LocalSocket(int type, NonnullOwnPtr<DoubleBuffer> client_buffer, NonnullOwnPtr<DoubleBuffer> server_buffer); |