]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules.cpp
Improve the message sent when overriding channel modes.
[user/henk/code/inspircd.git] / src / modules.cpp
index 73bd2a5e2dd6988476dc8e1b2e0833afdff9fcc7..77e4142b3b9b569a33e11fc927083749ef101120 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
+ *   Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
  *   Copyright (C) 2019 nia <nia@netbsd.org>
  *   Copyright (C) 2019 iwalkalone <iwalkalone69@gmail.com>
  *   Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
@@ -131,6 +132,7 @@ void                Module::OnUserInvite(User*, User*, Channel*, time_t, unsigned int, CUList&
 void           Module::OnPostTopicChange(User*, Channel*, const std::string&) { DetachEvent(I_OnPostTopicChange); }
 void           Module::OnDecodeMetaData(Extensible*, const std::string&, const std::string&) { DetachEvent(I_OnDecodeMetaData); }
 void           Module::OnChangeHost(User*, const std::string&) { DetachEvent(I_OnChangeHost); }
+void           Module::OnChangeRealHost(User*, const std::string&) { DetachEvent(I_OnChangeRealHost); }
 void           Module::OnChangeRealName(User*, const std::string&) { DetachEvent(I_OnChangeRealName); }
 void           Module::OnChangeIdent(User*, const std::string&) { DetachEvent(I_OnChangeIdent); }
 void           Module::OnAddLine(User*, XLine*) { DetachEvent(I_OnAddLine); }
@@ -234,7 +236,7 @@ bool ModuleManager::SetPriority(Module* mod, Implementation i, Priority s, Modul
        }
 
        /* Eh? this module doesnt exist, probably trying to set priority on an event
-        * theyre not attached to.
+        * they're not attached to.
         */
        return false;
 
@@ -315,7 +317,7 @@ swap_now:
 bool ModuleManager::PrioritizeHooks()
 {
        /* We give every module a chance to re-prioritize when we introduce a new one,
-        * not just the one thats loading, as the new module could affect the preference
+        * not just the one that's loading, as the new module could affect the preference
         * of others
         */
        for (int tries = 0; tries < 20; tries++)
@@ -397,7 +399,7 @@ void ModuleManager::DoSafeUnload(Module* mod)
        for (user_hash::const_iterator u = users.begin(); u != users.end(); )
        {
                User* user = u->second;
-               // The module may quit the user (e.g. SSL mod unloading) and that will remove it from the container
+               // The module may quit the user (e.g. TLS (SSL) mod unloading) and that will remove it from the container
                ++u;
                mod->OnCleanup(ExtensionItem::EXT_USER, user);
                user->doUnhookExtensions(items);
@@ -477,13 +479,17 @@ void ModuleManager::LoadAll()
        for (ConfigIter i = tags.first; i != tags.second; ++i)
        {
                ConfigTag* tag = i->second;
-               std::string name = ExpandModName(tag->getString("name"));
-               this->NewServices = &servicemap[name];
+
+               const std::string shortname = tag->getString("name");
+               if (shortname.empty())
+                       continue; // Skip malformed module tags.
 
                // Skip modules which are already loaded.
+               const std::string name = ExpandModName(shortname);
                if (Modules.find(name) != Modules.end())
                        continue;
 
+               this->NewServices = &servicemap[name];
                std::cout << "[" << con_green << "*" << con_reset << "] Loading module:\t" << con_green << name << con_reset << std::endl;
                if (!this->Load(name, true))
                {
@@ -622,12 +628,13 @@ ServiceProvider* ModuleManager::FindService(ServiceType type, const std::string&
 
 std::string ModuleManager::ExpandModName(const std::string& modname)
 {
-       // Transform "callerid" -> "m_callerid.so" unless it already has a ".so" extension,
-       // so coremods in the "core_*.so" form aren't changed
-       std::string ret = modname;
-       if ((modname.length() < 3) || (modname.compare(modname.size() - 3, 3, ".so")))
-               ret.insert(0, "m_").append(".so");
-       return ret;
+       std::string fullname;
+       if (modname.compare(0, 5, "core_") != 0 && modname.compare(0, 2, "m_") != 0)
+               fullname.append("m_");
+       fullname.append(modname);
+       if (modname.length() < 3 || modname.compare(modname.size() - 3, 3, ".so") != 0)
+               fullname.append(".so");
+       return fullname;
 }
 
 dynamic_reference_base::dynamic_reference_base(Module* Creator, const std::string& Name)