From 7b3f2150387d9e5d9468ad2eaaacef0acc08564d Mon Sep 17 00:00:00 2001 From: brain Date: Sun, 2 May 2004 12:30:01 +0000 Subject: Added oper-override module git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@779 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_chanprotect.cpp | 16 ++--- src/modules/m_override.cpp | 137 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+), 8 deletions(-) create mode 100644 src/modules/m_override.cpp (limited to 'src/modules') diff --git a/src/modules/m_chanprotect.cpp b/src/modules/m_chanprotect.cpp index 99d219d24..ce7680ad4 100644 --- a/src/modules/m_chanprotect.cpp +++ b/src/modules/m_chanprotect.cpp @@ -90,12 +90,12 @@ class ModuleChanProtect : public Module case AC_DEOP: if (dest->GetExt("cm_founder_"+std::string(channel->name))) { - Srv->SendServ(source->fd,"482 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't deop "+std::string(dest->nick)+" as the're a channel founder"); + Srv->SendServ(source->fd,"484 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't deop "+std::string(dest->nick)+" as the're a channel founder"); return ACR_DENY; } if ((dest->GetExt("cm_protect_"+std::string(channel->name))) && (!source->GetExt("cm_protect_"+std::string(channel->name)))) { - Srv->SendServ(source->fd,"482 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't deop "+std::string(dest->nick)+" as the're protected (+a)"); + Srv->SendServ(source->fd,"484 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't deop "+std::string(dest->nick)+" as the're protected (+a)"); return ACR_DENY; } break; @@ -104,12 +104,12 @@ class ModuleChanProtect : public Module case AC_KICK: if (dest->GetExt("cm_founder_"+std::string(channel->name))) { - Srv->SendServ(source->fd,"482 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't kick "+std::string(dest->nick)+" as the're a channel founder"); + Srv->SendServ(source->fd,"484 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't kick "+std::string(dest->nick)+" as the're a channel founder"); return ACR_DENY; } if ((dest->GetExt("cm_protect_"+std::string(channel->name))) && (!source->GetExt("cm_protect_"+std::string(channel->name)))) { - Srv->SendServ(source->fd,"482 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't kick "+std::string(dest->nick)+" as the're protected (+a)"); + Srv->SendServ(source->fd,"484 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't kick "+std::string(dest->nick)+" as the're protected (+a)"); return ACR_DENY; } break; @@ -118,12 +118,12 @@ class ModuleChanProtect : public Module case AC_DEHALFOP: if (dest->GetExt("cm_founder_"+std::string(channel->name))) { - Srv->SendServ(source->fd,"482 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't de-halfop "+std::string(dest->nick)+" as the're a channel founder"); + Srv->SendServ(source->fd,"484 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't de-halfop "+std::string(dest->nick)+" as the're a channel founder"); return ACR_DENY; } if ((dest->GetExt("cm_protect_"+std::string(channel->name))) && (!source->GetExt("cm_protect_"+std::string(channel->name)))) { - Srv->SendServ(source->fd,"482 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't de-halfop "+std::string(dest->nick)+" as the're protected (+a)"); + Srv->SendServ(source->fd,"484 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't de-halfop "+std::string(dest->nick)+" as the're protected (+a)"); return ACR_DENY; } break; @@ -132,12 +132,12 @@ class ModuleChanProtect : public Module case AC_DEVOICE: if (dest->GetExt("cm_founder_"+std::string(channel->name))) { - Srv->SendServ(source->fd,"482 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't devoice "+std::string(dest->nick)+" as the're a channel founder"); + Srv->SendServ(source->fd,"484 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't devoice "+std::string(dest->nick)+" as the're a channel founder"); return ACR_DENY; } if ((dest->GetExt("cm_protect_"+std::string(channel->name))) && (!source->GetExt("cm_protect_"+std::string(channel->name)))) { - Srv->SendServ(source->fd,"482 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't devoice "+std::string(dest->nick)+" as the're protected (+a)"); + Srv->SendServ(source->fd,"484 "+std::string(source->nick)+" "+std::string(channel->name)+" :Can't devoice "+std::string(dest->nick)+" as the're protected (+a)"); return ACR_DENY; } break; diff --git a/src/modules/m_override.cpp b/src/modules/m_override.cpp new file mode 100644 index 000000000..ae90a76a7 --- /dev/null +++ b/src/modules/m_override.cpp @@ -0,0 +1,137 @@ +#include + +#include "users.h" +#include "channels.h" +#include "modules.h" + +/* $ModDesc: Provides channel modes +a and +q */ + +char dummyvalue[] = "on"; + +class ModuleOverride : public Module +{ + Server *Srv; + bool NoisyOverride; + ConfigReader *Conf; + + public: + + ModuleOverride() + { + + // here we initialise our module. Use new to create new instances of the required + // classes. + + Srv = new Server; + Conf = new ConfigReader; + + // read our config options (main config file) + NoisyOverride = Conf->ReadFlag("override","noisy",0); + } + + virtual void OnRehash() + { + // on a rehash we delete our classes for good measure and create them again. + delete Conf; + Conf = new ConfigReader; + // re-read our config options on a rehash + NoisyOverride = Conf->ReadFlag("override","noisy",0); + } + + virtual int OnAccessCheck(userrec* source,userrec* dest,chanrec* channel,int access_type) + { + if (strchr(source->modes,'o')) + { + if ((Srv->ChanMode(source,channel) != "%") && (Srv->ChanMode(source,channel) != "@")) + { + switch (access_type) + { + case AC_KICK: + Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Kicked "+std::string(dest->nick)+" on "+std::string(channel->name)); + break; + case AC_DEOP: + Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Deopped "+std::string(dest->nick)+" on "+std::string(channel->name)); + break; + case AC_OP: + Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Opped "+std::string(dest->nick)+" on "+std::string(channel->name)); + break; + case AC_VOICE: + Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Voiced "+std::string(dest->nick)+" on "+std::string(channel->name)); + break; + case AC_DEVOICE: + Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Devoiced "+std::string(dest->nick)+" on "+std::string(channel->name)); + break; + case AC_HALFOP: + Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Halfopped "+std::string(dest->nick)+" on "+std::string(channel->name)); + break; + case AC_DEHALFOP: + Srv->SendOpers("*** NOTICE: "+std::string(source->nick)+" Override-Dehalfopped "+std::string(dest->nick)+" on "+std::string(channel->name)); + break; + } + } + return ACR_ALLOW; + } + + return ACR_DEFAULT; + } + + virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname) + { + if (strchr(user->modes,'o')) + { + if (chan) + { + if ((chan->inviteonly) || (chan->key[0]) || (chan->limit >= Srv->CountUsers(chan))) + { + if (NoisyOverride) + { + if (!user->IsInvited(chan->name)) + { + WriteChannelWithServ((char*)Srv->GetServerName().c_str(),chan,user,"NOTICE %s :%s invited himself into the channel",cname,user->nick); + } + } + Srv->SendOpers("*** "+std::string(user->nick)+" used operoverride to bypass +i, +k or +l on "+std::string(cname)); + } + return -1; + } + } + return 0; + } + + virtual ~ModuleOverride() + { + delete Conf; + delete Srv; + } + + virtual Version GetVersion() + { + return Version(1,0,0,0); + } +}; + + +class ModuleOverrideFactory : public ModuleFactory +{ + public: + ModuleOverrideFactory() + { + } + + ~ModuleOverrideFactory() + { + } + + virtual Module * CreateModule() + { + return new ModuleOverride; + } + +}; + + +extern "C" void * init_module( void ) +{ + return new ModuleOverrideFactory; +} + -- cgit v1.2.3