X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_chanprotect.cpp;h=ca331b0cf9170bab9a9ef2fe521a687e70ac6468;hb=fcafba14c5408360ec725ed1649ede75b7ae52c1;hp=cbb59948db942c4f12060093c53547dde3b8344c;hpb=43847ec9c7e1a195163eb4c529f1c92fd1ace0a4;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_chanprotect.cpp b/src/modules/m_chanprotect.cpp index cbb59948d..ca331b0cf 100644 --- a/src/modules/m_chanprotect.cpp +++ b/src/modules/m_chanprotect.cpp @@ -3,7 +3,7 @@ * +------------------------------------+ * * InspIRCd: (C) 2002-2009 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -12,6 +12,7 @@ */ #include "inspircd.h" +#include "m_override.h" /* $ModDesc: Provides channel modes +a and +q */ @@ -158,7 +159,7 @@ class ChanFounder : public ModeHandler, public FounderProtectBase { public: ChanFounder(InspIRCd* Instance, char my_prefix, bool &depriv_self, bool &depriv_others) - : ModeHandler(Instance, 'q', 1, 1, true, MODETYPE_CHANNEL, false, my_prefix, 0), + : ModeHandler(Instance, 'q', 1, 1, true, MODETYPE_CHANNEL, false, my_prefix, 0, TR_NICK), FounderProtectBase(Instance, "cm_founder_", "founder", 386, 387, depriv_self, depriv_others) { } unsigned int GetPrefixRank() @@ -193,13 +194,23 @@ class ChanFounder : public ModeHandler, public FounderProtectBase { return FounderProtectBase::HandleChange(source, theuser, adding, channel, parameter); } + + char isoverride=0; + Module *Override = ServerInstance->Modules->FindFeature("Override"); + if (Override) + { + OVRrequest ovr(NULL,Override,source,"OTHERMODE"); + const char * tmp = ovr.Send(); + isoverride = tmp[0]; + } // source is a server, or ulined, we'll let them +-q the user. if (source == ServerInstance->FakeClient || ((source == theuser) && (!adding) && (FounderProtectBase::remove_own_privs)) || (ServerInstance->ULine(source->nick.c_str())) || (ServerInstance->ULine(source->server)) || (!*source->server) || - (!IS_LOCAL(source))) + (!IS_LOCAL(source)) || + isoverride) { return FounderProtectBase::HandleChange(source, theuser, adding, channel, parameter); } @@ -224,7 +235,7 @@ class ChanProtect : public ModeHandler, public FounderProtectBase { public: ChanProtect(InspIRCd* Instance, char my_prefix, bool &depriv_self, bool &depriv_others) - : ModeHandler(Instance, 'a', 1, 1, true, MODETYPE_CHANNEL, false, my_prefix, 0), + : ModeHandler(Instance, 'a', 1, 1, true, MODETYPE_CHANNEL, false, my_prefix, 0, TR_NICK), FounderProtectBase(Instance,"cm_protect_","protected user", 388, 389, depriv_self, depriv_others) { } unsigned int GetPrefixRank() @@ -259,6 +270,15 @@ class ChanProtect : public ModeHandler, public FounderProtectBase { return FounderProtectBase::HandleChange(source, theuser, adding, channel, parameter); } + + char isoverride=0; + Module *Override = ServerInstance->Modules->FindFeature("Override"); + if (Override) + { + OVRrequest ovr(NULL,Override,source,"OTHERMODE"); + const char * tmp = ovr.Send(); + isoverride = tmp[0]; + } // source has +q, is a server, or ulined, we'll let them +-a the user. if (source == ServerInstance->FakeClient || ((source == theuser) && (!adding) && (FounderProtectBase::remove_own_privs)) || @@ -266,7 +286,9 @@ class ChanProtect : public ModeHandler, public FounderProtectBase (ServerInstance->ULine(source->server)) || (!*source->server) || (source->GetExt(founder)) || - (!IS_LOCAL(source))) + (!IS_LOCAL(source)) || + isoverride + ) { return FounderProtectBase::HandleChange(source, theuser, adding, channel, parameter); }