X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodules%2Fm_censor.cpp;h=796224890138ae3eaec432972421fbfa66c99a8d;hb=fd6ee21f2f55875984884a8413d61012e066029f;hp=d1e864419aeaac48caa381583256a92fa34a3ce6;hpb=c47776703ef551ed8eeee336d21da73aae020103;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_censor.cpp b/src/modules/m_censor.cpp index d1e864419..796224890 100644 --- a/src/modules/m_censor.cpp +++ b/src/modules/m_censor.cpp @@ -22,11 +22,14 @@ using namespace std; #include "channels.h" #include "modules.h" #include "helperfuncs.h" +#include "inspircd.h" typedef std::map censor_t; /* $ModDesc: Provides user and channel +G mode */ + + class CensorException : public ModuleException { public: @@ -39,10 +42,14 @@ class CensorException : public ModuleException class CensorUser : public ModeHandler { public: - CensorUser() : ModeHandler('G', 0, 0, false, MODETYPE_USER, false) { } + CensorUser(InspIRCd* Instance) : ModeHandler(Instance, 'G', 0, 0, false, MODETYPE_USER, false) { } ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding) { + /* Only opers can change other users modes */ + if ((source != dest) && (!*source->oper)) + return MODEACTION_DENY; + if (adding) { if (!dest->IsModeSet('G')) @@ -67,7 +74,7 @@ class CensorUser : public ModeHandler class CensorChannel : public ModeHandler { public: - CensorChannel() : ModeHandler('G', 0, 0, false, MODETYPE_CHANNEL, false) { } + CensorChannel(InspIRCd* Instance) : ModeHandler(Instance, 'G', 0, 0, false, MODETYPE_CHANNEL, false) { } ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding) { @@ -95,13 +102,13 @@ class CensorChannel : public ModeHandler class ModuleCensor : public Module { - Server *Srv; + censor_t censors; CensorUser *cu; CensorChannel *cc; public: - ModuleCensor(Server* Me) + ModuleCensor(InspIRCd* Me) : Module::Module(Me) { /* @@ -116,12 +123,12 @@ class ModuleCensor : public Module * * XXX - These module pre-date the include directive which exists since beta 5 -- Brain */ - Srv = Me; + OnRehash(""); - cu = new CensorUser; - cc = new CensorChannel; - Srv->AddMode(cu, 'G'); - Srv->AddMode(cc, 'G'); + cu = new CensorUser(ServerInstance); + cc = new CensorChannel(ServerInstance); + ServerInstance->AddMode(cu, 'G'); + ServerInstance->AddMode(cc, 'G'); } void Implements(char* List) @@ -132,7 +139,7 @@ class ModuleCensor : public Module virtual void On005Numeric(std::string &output) { - InsertMode(output,"G",4); + ServerInstance->ModeGrok->InsertMode(output,"G",4); } virtual ~ModuleCensor() @@ -237,7 +244,7 @@ class ModuleCensorFactory : public ModuleFactory { } - virtual Module * CreateModule(Server* Me) + virtual Module * CreateModule(InspIRCd* Me) { return new ModuleCensor(Me); }