]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Close connections when an I/O hook is configured but not loaded.
authorPeter Powell <petpow@saberuk.com>
Sat, 16 Nov 2019 22:04:08 +0000 (22:04 +0000)
committerPeter Powell <petpow@saberuk.com>
Sat, 16 Nov 2019 22:05:42 +0000 (22:05 +0000)
include/dynref.h
src/usermanager.cpp

index 6e2e1742397edf463f551d56a6365bae09a7866f..44829164b270552a96b3c3919944ab76d05aa7b7 100644 (file)
@@ -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
index 4f65994aa29be6399964f51869c5b5546e30d627..bcb831858300a15be917184632684a1aa4b32c64 100644 (file)
@@ -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());