X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_override.cpp;h=b0143ea4522269714387f34ff6a5128f702f9e32;hb=d54fd9b1e6b31f69332a9241b5f17330c0ad61e0;hp=16c3a529579cb978afe2c76ea090dc3b73c74aca;hpb=80005149269014babdcacd76f2be1d7249c489eb;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_override.cpp b/src/modules/m_override.cpp index 16c3a5295..b0143ea45 100644 --- a/src/modules/m_override.cpp +++ b/src/modules/m_override.cpp @@ -17,7 +17,8 @@ #include "users.h" #include "channels.h" #include "modules.h" -#include "helperfuncs.h" +#include "configreader.h" +#include "inspircd.h" /* $ModDesc: Provides support for unreal-style oper-override */ @@ -25,20 +26,14 @@ typedef std::map override_t; class ModuleOverride : public Module { - Server *Srv; + override_t overrides; bool NoisyOverride; public: - ModuleOverride(Server* Me) + ModuleOverride(InspIRCd* Me) : Module::Module(Me) - { - - // here we initialise our module. Use new to create new instances of the required - // classes. - - Srv = Me; - + { // read our config options (main config file) OnRehash(""); } @@ -46,7 +41,7 @@ class ModuleOverride : public Module virtual void OnRehash(const std::string ¶meter) { // on a rehash we delete our classes for good measure and create them again. - ConfigReader* Conf = new ConfigReader; + ConfigReader* Conf = new ConfigReader(ServerInstance); // re-read our config options on a rehash NoisyOverride = Conf->ReadFlag("override","noisy",0); @@ -58,7 +53,7 @@ class ModuleOverride : public Module overrides[typen] = tokenlist; } - delete Conf; + DELETE(Conf); } void Implements(char* List) @@ -90,9 +85,9 @@ class ModuleOverride : public Module { if ((*source->oper) && (CanOverride(source,"KICK"))) { - if (((Srv->ChanMode(source,chan) == "%") && (Srv->ChanMode(user,chan) == "@")) || (Srv->ChanMode(source,chan) == "")) + if (((chan->GetStatus(source) == STATUS_HOP) && (chan->GetStatus(user) == STATUS_OP)) || (chan->GetStatus(source) < STATUS_VOICE)) { - Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Kicked "+std::string(user->nick)+" on "+std::string(chan->name)+" ("+reason+")"); + ServerInstance->WriteOpers("*** NOTICE: "+std::string(source->nick)+" Override-Kicked "+std::string(user->nick)+" on "+std::string(chan->name)+" ("+reason+")"); } /* Returning -1 explicitly allows the kick */ return -1; @@ -104,19 +99,19 @@ class ModuleOverride : public Module { if (*source->oper) { - if ((Srv) && (source) && (channel)) + if (source && channel) { // Fix by brain - allow the change if they arent on channel - rely on boolean short-circuit // to not check the other items in the statement if they arent on the channel - std::string mode = Srv->ChanMode(source,channel); - if ((!channel->HasUser(source)) || ((mode != "%") && (mode != "@"))) + int mode = channel->GetStatus(source); + if ((!channel->HasUser(source)) || ((mode != STATUS_HOP) && (mode != STATUS_OP))) { switch (access_type) { case AC_DEOP: if (CanOverride(source,"MODEDEOP")) { - Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Deopped "+std::string(dest->nick)+" on "+std::string(channel->name)); + ServerInstance->WriteOpers("*** NOTICE: "+std::string(source->nick)+" Override-Deopped "+std::string(dest->nick)+" on "+std::string(channel->name)); return ACR_ALLOW; } else @@ -127,7 +122,7 @@ class ModuleOverride : public Module case AC_OP: if (CanOverride(source,"MODEOP")) { - Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Opped "+std::string(dest->nick)+" on "+std::string(channel->name)); + ServerInstance->WriteOpers("*** NOTICE: "+std::string(source->nick)+" Override-Opped "+std::string(dest->nick)+" on "+std::string(channel->name)); return ACR_ALLOW; } else @@ -138,7 +133,7 @@ class ModuleOverride : public Module case AC_VOICE: if (CanOverride(source,"MODEVOICE")) { - Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Voiced "+std::string(dest->nick)+" on "+std::string(channel->name)); + ServerInstance->WriteOpers("*** NOTICE: "+std::string(source->nick)+" Override-Voiced "+std::string(dest->nick)+" on "+std::string(channel->name)); return ACR_ALLOW; } else @@ -149,7 +144,7 @@ class ModuleOverride : public Module case AC_DEVOICE: if (CanOverride(source,"MODEDEVOICE")) { - Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Devoiced "+std::string(dest->nick)+" on "+std::string(channel->name)); + ServerInstance->WriteOpers("*** NOTICE: "+std::string(source->nick)+" Override-Devoiced "+std::string(dest->nick)+" on "+std::string(channel->name)); return ACR_ALLOW; } else @@ -160,7 +155,7 @@ class ModuleOverride : public Module case AC_HALFOP: if (CanOverride(source,"MODEHALFOP")) { - Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Halfopped "+std::string(dest->nick)+" on "+std::string(channel->name)); + ServerInstance->WriteOpers("*** NOTICE: "+std::string(source->nick)+" Override-Halfopped "+std::string(dest->nick)+" on "+std::string(channel->name)); return ACR_ALLOW; } else @@ -171,7 +166,7 @@ class ModuleOverride : public Module case AC_DEHALFOP: if (CanOverride(source,"MODEDEHALFOP")) { - Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Dehalfopped "+std::string(dest->nick)+" on "+std::string(channel->name)); + ServerInstance->WriteOpers("*** NOTICE: "+std::string(source->nick)+" Override-Dehalfopped "+std::string(dest->nick)+" on "+std::string(channel->name)); return ACR_ALLOW; } else @@ -209,32 +204,34 @@ class ModuleOverride : public Module if (!user->IsInvited(x)) { /* XXX - Ugly cast for a parameter that isn't used? :< - Om */ - WriteChannelWithServ((char*)Srv->GetServerName().c_str(), chan, "NOTICE %s :%s invited himself into the channel",cname,user->nick); + chan->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :%s used oper-override to bypass invite-only", cname, user->nick); } } - Srv->SendOpers("*** "+std::string(user->nick)+" used operoverride to bypass +i on "+std::string(cname)); + ServerInstance->WriteOpers("*** "+std::string(user->nick)+" used operoverride to bypass +i on "+std::string(cname)); return -1; } if ((chan->key[0]) && (CanOverride(user,"KEY"))) { if (NoisyOverride) - WriteChannelWithServ((char*)Srv->GetServerName().c_str(),chan,"NOTICE %s :%s bypassed the channel key",cname,user->nick); - Srv->SendOpers("*** "+std::string(user->nick)+" used operoverride to bypass +k on "+std::string(cname)); + chan->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :%s used oper-override to bypass the channel key", cname, user->nick); + ServerInstance->WriteOpers("*** "+std::string(user->nick)+" used operoverride to bypass +k on "+std::string(cname)); return -1; } - if ((chan->limit > 0) && (Srv->CountUsers(chan) >= chan->limit) && (CanOverride(user,"LIMIT"))) + if ((chan->limit > 0) && (chan->GetUserCounter() >= chan->limit) && (CanOverride(user,"LIMIT"))) { if (NoisyOverride) - WriteChannelWithServ((char*)Srv->GetServerName().c_str(),chan,"NOTICE %s :%s passed through your channel limit",cname,user->nick); - Srv->SendOpers("*** "+std::string(user->nick)+" used operoverride to bypass +l on "+std::string(cname)); + chan->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :%s used oper-override to bypass the channel limit", cname, user->nick); + ServerInstance->WriteOpers("*** "+std::string(user->nick)+" used operoverride to bypass +l on "+std::string(cname)); return -1; } if (CanOverride(user,"BANWALK")) { // other join + if (NoisyOverride) + chan->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :%s used oper-override to bypass channel bans", cname, user->nick); return -1; } } @@ -264,7 +261,7 @@ class ModuleOverrideFactory : public ModuleFactory { } - virtual Module * CreateModule(Server* Me) + virtual Module * CreateModule(InspIRCd* Me) { return new ModuleOverride(Me); }