CmdResult Handle (const std::vector<std::string> ¶meters, User *user)
{
- if (user->registered == REG_ALL)
+ /* changed from == REG_ALL to catch clients sending STARTTLS
+ * after NICK and USER but before OnUserConnect completes and
+ * give a proper error message (see bug #645) - dz
+ */
+ if (user->registered != REG_NONE)
{
- ServerInstance->Users->QuitUser(user, "STARTTLS not allowed after client registration");
+ ServerInstance->Users->QuitUser(user, "STARTTLS is not permitted after client registration has started");
}
else
{
Caller->OnRawSocketAccept(user->GetFd(), user->GetIPString(), user->GetPort());
}
else
- user->WriteNumeric(671, "%s :STARTTLS failure", user->nick.c_str());
+ user->WriteNumeric(691, "%s :STARTTLS failure", user->nick.c_str());
}
return CMD_FAILURE;
}
else
{
+ ServerInstance->Logs->Log("m_ssl_gnutls", DEFAULT,
+ "m_ssl_gnutls.so: Error while reading on fd %d: %s",
+ session->fd, gnutls_strerror(ret));
readresult = 0;
CloseSession(session);
}
{
if(ret != GNUTLS_E_AGAIN && ret != GNUTLS_E_INTERRUPTED)
{
+ ServerInstance->Logs->Log("m_ssl_gnutls", DEFAULT,
+ "m_ssl_gnutls.so: Error while writing to fd %d: %s",
+ session->fd, gnutls_strerror(ret));
CloseSession(session);
}
else
else
{
// Handshake failed.
+ ServerInstance->Logs->Log("m_ssl_gnutls", DEFAULT,
+ "m_ssl_gnutls.so: Handshake failed on fd %d: %s",
+ session->fd, gnutls_strerror(ret));
CloseSession(session);
session->status = ISSL_CLOSING;
}