From 23f3f48b4aaca4d933b0fc448482c463dd2f31be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?louiz=E2=80=99?= <louiz@louiz.org>
Date: Tue, 25 Feb 2020 22:53:37 +0100
Subject: Only consider sockets that are in valid states as identd candidates
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

When an identd query happens, we check all the connected sockets for their
local and remote ports, to compare them with the query.  But we MUST only
consider the connected ones because:

- It doesn’t make sense to answer for a connection that has just been closed
- A non-connected sockets is not in a valid state for this (specifically
  here: its ::port attribute is empty)

fix #3421
---
 src/network/tcp_client_socket_handler.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'src/network')

diff --git a/src/network/tcp_client_socket_handler.cpp b/src/network/tcp_client_socket_handler.cpp
index e5b1b75..dcf38f9 100644
--- a/src/network/tcp_client_socket_handler.cpp
+++ b/src/network/tcp_client_socket_handler.cpp
@@ -263,6 +263,8 @@ std::string TCPClientSocketHandler::get_port() const
 
 bool TCPClientSocketHandler::match_port_pair(const uint16_t local, const uint16_t remote) const
 {
+  if (!this->is_connected())
+    return false;
   const auto remote_port = static_cast<uint16_t>(std::stoi(this->port));
-  return this->is_connected() && local == this->local_port && remote == remote_port;
+  return local == this->local_port && remote == remote_port;
 }
-- 
cgit v1.2.3