X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services.cpp;h=059ad7fed6b3be6ced74640fca7df65fa9b2fe87;hb=1383dba43e463f292aea094d01f62f355946049d;hp=5b99ea76b2552ae85819aa8a264aea0e1a9b6e3a;hpb=ab01aaeeee9aed655df2eec2522072233fe3aa57;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services.cpp b/src/modules/m_services.cpp index 5b99ea76b..059ad7fed 100644 --- a/src/modules/m_services.cpp +++ b/src/modules/m_services.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * Inspire is copyright (C) 2002-2004 ChatSpike-Dev. + * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. * E-mail: * * @@ -21,7 +21,8 @@ using namespace std; #include "channels.h" #include "modules.h" #include - +#include "helperfuncs.h" +#include "hashcomp.h" /* $ModDesc: Povides support for services +r user/chan modes and more */ @@ -29,9 +30,10 @@ class ModuleServices : public Module { Server *Srv; public: - ModuleServices() + ModuleServices(Server* Me) + : Module::Module(Me) { - Srv = new Server; + Srv = Me; Srv->AddExtendedMode('r',MT_CHANNEL,false,0,0); Srv->AddExtendedMode('r',MT_CLIENT,false,0,0); @@ -58,6 +60,11 @@ class ModuleServices : public Module if (temp2.length()) output = temp2.substr(0,temp2.length()-1); } + + void Implements(char* List) + { + List[I_OnUserPreMessage] = List[I_OnExtendedMode] = List[I_On005Numeric] = List[I_OnUserPreNotice] = List[I_OnUserPreJoin] = 1; + } virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list ¶ms) { @@ -67,24 +74,28 @@ class ModuleServices : public Module if (type == MT_CHANNEL) { // only a u-lined server may add or remove the +r mode. - if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,""))) + if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,"") || (strchr(user->nick,'.')))) { + log(DEBUG,"Allowing umode +r, server and nick are: '%s','%s'",user->nick,user->server); return 1; } else { - Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a U-Lined server may modify the +r channel mode"); + log(DEBUG,"Only a server can set chanmode +r, server and nick are: '%s','%s'",user->nick,user->server); + Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a server may modify the +r channel mode"); } } else { - if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,""))) + if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,"") || (strchr(user->nick,'.')))) { + log(DEBUG,"Allowing umode +r, server and nick are: '%s','%s'",user->nick,user->server); return 1; } else { - Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a U-Lined server may modify the +r user mode"); + log(DEBUG,"Only a server can set umode +r, server and nick are: '%s','%s'",user->nick,user->server); + Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a server may modify the +r user mode"); } } } @@ -200,18 +211,12 @@ class ModuleServices : public Module virtual ~ModuleServices() { - delete Srv; } virtual Version GetVersion() { return Version(1,0,0,0,VF_STATIC|VF_VENDOR); } - - virtual void OnUserConnect(userrec* user) - { - } - }; @@ -226,9 +231,9 @@ class ModuleServicesFactory : public ModuleFactory { } - virtual Module * CreateModule() + virtual Module * CreateModule(Server* Me) { - return new ModuleServices; + return new ModuleServices(Me); } };