]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules.cpp
Clean up the logic for parsing oper mode privileges.
[user/henk/code/inspircd.git] / src / modules.cpp
index 500bb708a6ba937b76d0df07a131152220463e20..2b83bc0d892d9bae26192d5ff1f693aeafd1fe0a 100644 (file)
@@ -1,14 +1,20 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
+ *   Copyright (C) 2019 nia <nia@netbsd.org>
+ *   Copyright (C) 2019 iwalkalone <iwalkalone69@gmail.com>
+ *   Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
+ *   Copyright (C) 2013 Adam <Adam@anope.org>
+ *   Copyright (C) 2012-2016, 2018 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
  *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
- *   Copyright (C) 2007, 2009 Dennis Friis <peavey@inspircd.org>
- *   Copyright (C) 2003-2008 Craig Edwards <craigedwards@brainbox.cc>
+ *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
  *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
- *   Copyright (C) 2006-2007 Robin Burchell <robin+git@viroteck.net>
- *   Copyright (C) 2006-2007 Oliver Lupton <oliverlupton@gmail.com>
- *   Copyright (C) 2007 Pippijn van Steenhoven <pip88nl@gmail.com>
- *   Copyright (C) 2003 randomdan <???@???>
+ *   Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007 Oliver Lupton <om@inspircd.org>
+ *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2006-2010 Craig Edwards <brain@inspircd.org>
  *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
  * redistribute it and/or modify it under the terms of the GNU General Public
@@ -58,6 +64,8 @@ Module::Module()
 
 CullResult Module::cull()
 {
+       if (ModuleDLLManager)
+               ServerInstance->GlobalCulls.AddItem(ModuleDLLManager);
        return classbase::cull();
 }
 
@@ -98,6 +106,7 @@ void         Module::OnUnloadModule(Module*) { DetachEvent(I_OnUnloadModule); }
 void           Module::OnBackgroundTimer(time_t) { DetachEvent(I_OnBackgroundTimer); }
 ModResult      Module::OnPreCommand(std::string&, CommandBase::Params&, LocalUser*, bool) { DetachEvent(I_OnPreCommand); return MOD_RES_PASSTHRU; }
 void           Module::OnPostCommand(Command*, const CommandBase::Params&, LocalUser*, CmdResult, bool) { DetachEvent(I_OnPostCommand); }
+void           Module::OnCommandBlocked(const std::string&, const CommandBase::Params&, LocalUser*) { DetachEvent(I_OnCommandBlocked); }
 void           Module::OnUserInit(LocalUser*) { DetachEvent(I_OnUserInit); }
 void           Module::OnUserPostInit(LocalUser*) { DetachEvent(I_OnUserPostInit); }
 ModResult      Module::OnCheckReady(LocalUser*) { DetachEvent(I_OnCheckReady); return MOD_RES_PASSTHRU; }
@@ -443,11 +452,8 @@ namespace
                UnloadAction(Module* m) : mod(m) {}
                void Call() CXX11_OVERRIDE
                {
-                       DLLManager* dll = mod->ModuleDLLManager;
                        ServerInstance->Modules->DoSafeUnload(mod);
                        ServerInstance->GlobalCulls.Apply();
-                       // In pure static mode this is always NULL
-                       delete dll;
                        ServerInstance->GlobalCulls.AddItem(this);
                }
        };
@@ -616,12 +622,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)