diff options
author | Peter Powell <petpow@saberuk.com> | 2019-11-16 22:04:08 +0000 |
---|---|---|
committer | Peter Powell <petpow@saberuk.com> | 2019-11-16 22:05:42 +0000 |
commit | b443df39386c77cf2d027e2b45c4d629261e0100 (patch) | |
tree | fe2ef0a8204311a61ad4d04f3c2a709da20744fa | |
parent | d15e3bd110ea3e53fe1242c7d253bac685d0fca9 (diff) |
Close connections when an I/O hook is configured but not loaded.
-rw-r--r-- | include/dynref.h | 2 | ||||
-rw-r--r-- | src/usermanager.cpp | 15 |
2 files changed, 15 insertions, 2 deletions
diff --git a/include/dynref.h b/include/dynref.h index 6e2e17423..44829164b 100644 --- a/include/dynref.h +++ b/include/dynref.h @@ -43,7 +43,7 @@ class CoreExport dynamic_reference_base : public interfacebase, public insp::int ModuleRef creator; dynamic_reference_base(Module* Creator, const std::string& Name); ~dynamic_reference_base(); - inline const std::string& GetProvider() { return name; } + inline const std::string& GetProvider() const { return name; } void SetProvider(const std::string& newname); /** Set handler to call when the target object becomes available diff --git a/src/usermanager.cpp b/src/usermanager.cpp index 4f65994aa..bcb831858 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -149,10 +149,23 @@ void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs { ListenSocket::IOHookProvRef& iohookprovref = *i; if (!iohookprovref) + { + if (!iohookprovref.GetProvider().empty()) + { + ServerInstance->Logs->Log("USERS", LOG_DEBUG, "Non-existent I/O hook '%s' in <bind:%s> tag at %s", + iohookprovref.GetProvider().c_str(), + i == via->iohookprovs.begin() ? "hook" : "ssl", + via->bind_tag->getTagLocation().c_str()); + this->QuitUser(New, "Internal error handling connection"); + return; + } continue; + } iohookprovref->OnAccept(eh, client, server); - // IOHook could have encountered a fatal error, e.g. if the TLS ClientHello was already in the queue and there was no common TLS version + + // IOHook could have encountered a fatal error, e.g. if the TLS ClientHello + // was already in the queue and there was no common TLS version. if (!eh->getError().empty()) { QuitUser(New, eh->getError()); |