mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 05:07:35 +00:00
Kernel: Make Socket::connect() take credentials as input
This commit is contained in:
parent
51318d51a4
commit
8997c6a4d1
6 changed files with 7 additions and 7 deletions
|
@ -138,7 +138,7 @@ ErrorOr<void> IPv4Socket::listen(size_t backlog)
|
||||||
return protocol_listen(result.did_allocate);
|
return protocol_listen(result.did_allocate);
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> IPv4Socket::connect(OpenFileDescription& description, Userspace<sockaddr const*> address, socklen_t address_size)
|
ErrorOr<void> IPv4Socket::connect(Credentials const&, OpenFileDescription& description, Userspace<sockaddr const*> address, socklen_t address_size)
|
||||||
{
|
{
|
||||||
if (address_size != sizeof(sockaddr_in))
|
if (address_size != sizeof(sockaddr_in))
|
||||||
return set_so_error(EINVAL);
|
return set_so_error(EINVAL);
|
||||||
|
|
|
@ -33,7 +33,7 @@ public:
|
||||||
|
|
||||||
virtual ErrorOr<void> close() override;
|
virtual ErrorOr<void> close() override;
|
||||||
virtual ErrorOr<void> bind(Credentials const&, Userspace<sockaddr const*>, socklen_t) override;
|
virtual ErrorOr<void> bind(Credentials const&, Userspace<sockaddr const*>, socklen_t) override;
|
||||||
virtual ErrorOr<void> connect(OpenFileDescription&, Userspace<sockaddr const*>, socklen_t) override;
|
virtual ErrorOr<void> connect(Credentials const&, OpenFileDescription&, Userspace<sockaddr const*>, socklen_t) override;
|
||||||
virtual ErrorOr<void> listen(size_t) override;
|
virtual ErrorOr<void> listen(size_t) override;
|
||||||
virtual void get_local_address(sockaddr*, socklen_t*) override;
|
virtual void get_local_address(sockaddr*, socklen_t*) override;
|
||||||
virtual void get_peer_address(sockaddr*, socklen_t*) override;
|
virtual void get_peer_address(sockaddr*, socklen_t*) override;
|
||||||
|
|
|
@ -160,7 +160,7 @@ ErrorOr<void> LocalSocket::bind(Credentials const& credentials, Userspace<sockad
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> LocalSocket::connect(OpenFileDescription& description, Userspace<sockaddr const*> user_address, socklen_t address_size)
|
ErrorOr<void> LocalSocket::connect(Credentials const& credentials, OpenFileDescription& description, Userspace<sockaddr const*> user_address, socklen_t address_size)
|
||||||
{
|
{
|
||||||
VERIFY(!m_bound);
|
VERIFY(!m_bound);
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ ErrorOr<void> LocalSocket::connect(OpenFileDescription& description, Userspace<s
|
||||||
auto path = SOCKET_TRY(KString::try_create(StringView { address.sun_path, strnlen(address.sun_path, sizeof(address.sun_path)) }));
|
auto path = SOCKET_TRY(KString::try_create(StringView { address.sun_path, strnlen(address.sun_path, sizeof(address.sun_path)) }));
|
||||||
dbgln_if(LOCAL_SOCKET_DEBUG, "LocalSocket({}) connect({})", this, *path);
|
dbgln_if(LOCAL_SOCKET_DEBUG, "LocalSocket({}) connect({})", this, *path);
|
||||||
|
|
||||||
auto file = SOCKET_TRY(VirtualFileSystem::the().open(Process::current().credentials(), path->view(), O_RDWR, 0, Process::current().current_directory()));
|
auto file = SOCKET_TRY(VirtualFileSystem::the().open(credentials, path->view(), O_RDWR, 0, Process::current().current_directory()));
|
||||||
auto inode = file->inode();
|
auto inode = file->inode();
|
||||||
m_inode = inode;
|
m_inode = inode;
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ public:
|
||||||
|
|
||||||
// ^Socket
|
// ^Socket
|
||||||
virtual ErrorOr<void> bind(Credentials const&, Userspace<sockaddr const*>, socklen_t) override;
|
virtual ErrorOr<void> bind(Credentials const&, Userspace<sockaddr const*>, socklen_t) override;
|
||||||
virtual ErrorOr<void> connect(OpenFileDescription&, Userspace<sockaddr const*>, socklen_t) override;
|
virtual ErrorOr<void> connect(Credentials const&, OpenFileDescription&, Userspace<sockaddr const*>, socklen_t) override;
|
||||||
virtual ErrorOr<void> listen(size_t) override;
|
virtual ErrorOr<void> listen(size_t) override;
|
||||||
virtual void get_local_address(sockaddr*, socklen_t*) override;
|
virtual void get_local_address(sockaddr*, socklen_t*) override;
|
||||||
virtual void get_peer_address(sockaddr*, socklen_t*) override;
|
virtual void get_peer_address(sockaddr*, socklen_t*) override;
|
||||||
|
|
|
@ -73,7 +73,7 @@ public:
|
||||||
ErrorOr<void> shutdown(int how);
|
ErrorOr<void> shutdown(int how);
|
||||||
|
|
||||||
virtual ErrorOr<void> bind(Credentials const&, Userspace<sockaddr const*>, socklen_t) = 0;
|
virtual ErrorOr<void> bind(Credentials const&, Userspace<sockaddr const*>, socklen_t) = 0;
|
||||||
virtual ErrorOr<void> connect(OpenFileDescription&, Userspace<sockaddr const*>, socklen_t) = 0;
|
virtual ErrorOr<void> connect(Credentials const&, OpenFileDescription&, Userspace<sockaddr const*>, socklen_t) = 0;
|
||||||
virtual ErrorOr<void> listen(size_t) = 0;
|
virtual ErrorOr<void> listen(size_t) = 0;
|
||||||
virtual void get_local_address(sockaddr*, socklen_t*) = 0;
|
virtual void get_local_address(sockaddr*, socklen_t*) = 0;
|
||||||
virtual void get_peer_address(sockaddr*, socklen_t*) = 0;
|
virtual void get_peer_address(sockaddr*, socklen_t*) = 0;
|
||||||
|
|
|
@ -152,7 +152,7 @@ ErrorOr<FlatPtr> Process::sys$connect(int sockfd, Userspace<sockaddr const*> use
|
||||||
return ENOTSOCK;
|
return ENOTSOCK;
|
||||||
auto& socket = *description->socket();
|
auto& socket = *description->socket();
|
||||||
REQUIRE_PROMISE_FOR_SOCKET_DOMAIN(socket.domain());
|
REQUIRE_PROMISE_FOR_SOCKET_DOMAIN(socket.domain());
|
||||||
TRY(socket.connect(*description, user_address, user_address_size));
|
TRY(socket.connect(credentials(), *description, user_address, user_address_size));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue