mirror of https://github.com/Icinga/icinga2.git
Merge pull request #8479 from Icinga/bugfix/close-anonymous-connections
Close anonymous connections after 10 seconds
This commit is contained in:
commit
3dcc6c32f3
|
@ -348,20 +348,43 @@ void JsonRpcConnection::CheckLiveness(boost::asio::yield_context yc)
|
||||||
{
|
{
|
||||||
boost::system::error_code ec;
|
boost::system::error_code ec;
|
||||||
|
|
||||||
for (;;) {
|
if (!m_Authenticated) {
|
||||||
m_CheckLivenessTimer.expires_from_now(boost::posix_time::seconds(30));
|
/* Anonymous connections are normally only used for requesting a certificate and are closed after this request
|
||||||
|
* is received. However, the request is only sent if the child has successfully verified the certificate of its
|
||||||
|
* parent so that it is an authenticated connection from its perspective. In case this verification fails, both
|
||||||
|
* ends view it as an anonymous connection and never actually use it but attempt a reconnect after 10 seconds
|
||||||
|
* leaking the connection. Therefore close it after a timeout.
|
||||||
|
*/
|
||||||
|
|
||||||
|
m_CheckLivenessTimer.expires_from_now(boost::posix_time::seconds(10));
|
||||||
m_CheckLivenessTimer.async_wait(yc[ec]);
|
m_CheckLivenessTimer.async_wait(yc[ec]);
|
||||||
|
|
||||||
if (m_ShuttingDown) {
|
if (m_ShuttingDown) {
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Seen < Utility::GetTime() - 60 && (!m_Endpoint || !m_Endpoint->GetSyncing())) {
|
auto remote (m_Stream->lowest_layer().remote_endpoint());
|
||||||
Log(LogInformation, "JsonRpcConnection")
|
|
||||||
<< "No messages for identity '" << m_Identity << "' have been received in the last 60 seconds.";
|
|
||||||
|
|
||||||
Disconnect();
|
Log(LogInformation, "JsonRpcConnection")
|
||||||
break;
|
<< "Closing anonymous connection [" << remote.address() << "]:" << remote.port() << " after 10 seconds.";
|
||||||
|
|
||||||
|
Disconnect();
|
||||||
|
} else {
|
||||||
|
for (;;) {
|
||||||
|
m_CheckLivenessTimer.expires_from_now(boost::posix_time::seconds(30));
|
||||||
|
m_CheckLivenessTimer.async_wait(yc[ec]);
|
||||||
|
|
||||||
|
if (m_ShuttingDown) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_Seen < Utility::GetTime() - 60 && (!m_Endpoint || !m_Endpoint->GetSyncing())) {
|
||||||
|
Log(LogInformation, "JsonRpcConnection")
|
||||||
|
<< "No messages for identity '" << m_Identity << "' have been received in the last 60 seconds.";
|
||||||
|
|
||||||
|
Disconnect();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue