summaryrefslogtreecommitdiff
path: root/src/modules/m_override.cpp
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2004-05-02 12:30:01 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2004-05-02 12:30:01 +0000
commit7b3f2150387d9e5d9468ad2eaaacef0acc08564d (patch)
treeb8640a7ef9ad3b440b050914a8ad936cfb29e294 /src/modules/m_override.cpp
parent7d0fc076616482c78d197cfda9d5bd7e075d43d0 (diff)
Added oper-override module
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@779 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_override.cpp')
-rw-r--r--src/modules/m_override.cpp137
1 files changed, 137 insertions, 0 deletions
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 <stdio.h>
+
+#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;
+}
+