From 95c0e2505cd70424a009d64fcdf4ea5bec68dbfd Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 29 Jan 2025 19:34:03 +0100 Subject: [PATCH] client/New: pass SocketPeerCredentials to client_new() --- src/client/Client.hxx | 4 +++- src/client/Listener.cxx | 9 ++++----- src/client/New.cxx | 6 +++++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/client/Client.hxx b/src/client/Client.hxx index 9524b2003..06b5a68b5 100644 --- a/src/client/Client.hxx +++ b/src/client/Client.hxx @@ -21,6 +21,7 @@ #include class SocketAddress; +class SocketPeerCredentials; class UniqueSocketDescriptor; class EventLoop; class Path; @@ -300,5 +301,6 @@ struct ClientPerPartitionListHook void client_new(EventLoop &loop, Partition &partition, - UniqueSocketDescriptor fd, SocketAddress address, int uid, + UniqueSocketDescriptor fd, SocketAddress address, + SocketPeerCredentials cred, unsigned permission) noexcept; diff --git a/src/client/Listener.cxx b/src/client/Listener.cxx index 45af7161b..4a52aaaf2 100644 --- a/src/client/Listener.cxx +++ b/src/client/Listener.cxx @@ -10,9 +10,9 @@ #include "config.h" static unsigned -GetPermissions(SocketAddress address, int uid) noexcept +GetPermissions(SocketAddress address, const SocketPeerCredentials cred) noexcept { - (void)uid; // TODO: implement option to derive permissions from uid + (void)cred; // TODO: implement option to derive permissions from uid #ifdef HAVE_UN if (address.GetFamily() == AF_LOCAL) @@ -33,9 +33,8 @@ ClientListener::OnAccept(UniqueSocketDescriptor fd, SocketAddress address) noexcept { const auto cred = fd.GetPeerCredentials(); - const int uid = cred.IsDefined() ? static_cast(cred.GetUid()) : -1; client_new(GetEventLoop(), partition, - std::move(fd), address, uid, - GetPermissions(address, uid)); + std::move(fd), address, cred, + GetPermissions(address, cred)); } diff --git a/src/client/New.cxx b/src/client/New.cxx index 818ae01c7..36d9f616d 100644 --- a/src/client/New.cxx +++ b/src/client/New.cxx @@ -9,6 +9,7 @@ #include "Partition.hxx" #include "Instance.hxx" #include "lib/fmt/SocketAddressFormatter.hxx" +#include "net/PeerCredentials.hxx" #include "net/UniqueSocketDescriptor.hxx" #include "net/SocketAddress.hxx" #include "util/SpanCast.hxx" @@ -39,7 +40,8 @@ Client::Client(EventLoop &_loop, Partition &_partition, void client_new(EventLoop &loop, Partition &partition, - UniqueSocketDescriptor fd, SocketAddress remote_address, int uid, + UniqueSocketDescriptor fd, SocketAddress remote_address, + SocketPeerCredentials cred, unsigned permission) noexcept { static unsigned int next_client_num; @@ -54,6 +56,8 @@ client_new(EventLoop &loop, Partition &partition, (void)fd.WriteNoWait(AsBytes(GREETING)); + const int uid = cred.IsDefined() ? static_cast(cred.GetUid()) : -1; + const unsigned num = next_client_num++; auto *client = new Client(loop, partition, std::move(fd), uid, permission,