* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ * InspIRCd: (C) 2002-2008 InspIRCd Development Team
* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
{
}
- ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding)
+ ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding, bool)
{
if (source != dest)
return MODEACTION_DENY;
if (!IS_LOCAL(dest))
return MODEACTION_ALLOW;
+ /* don't allow this user to spam modechanges */
+ dest->IncreasePenalty(5);
+
if (adding)
{
if(!dest->IsModeSet('x'))
* 'real' hostname which you shouldnt write to.
*/
- /* 2007/08/18: add <cloak:ipalways> which always cloaks
+ /* 2008/08/18: add <cloak:ipalways> which always cloaks
* the IP, for anonymity. --nenolod
*/
if (!ipalways)
ModuleCloaking(InspIRCd* Me)
: Module(Me)
{
- ServerInstance->Modules->UseInterface("HashRequest");
-
/* Attempt to locate the md5 service provider, bail if we can't find it */
HashModule = ServerInstance->Modules->Find("m_md5.so");
if (!HashModule)
throw ModuleException("Can't find m_md5.so. Please load m_md5.so before m_cloaking.so.");
- /* Create new mode handler object */
cu = new CloakUser(ServerInstance, this, HashModule);
- /* Register it with the core */
- if (!ServerInstance->AddMode(cu, 'x'))
+ try
+ {
+ OnRehash(NULL,"");
+ }
+ catch (CoreException &e)
+ {
+ delete cu;
+ throw e;
+ }
+
+ /* Register it with the core */
+ if (!ServerInstance->Modes->AddMode(cu))
+ {
+ delete cu;
throw ModuleException("Could not add new modes!");
+ }
- OnRehash(NULL,"");
+ ServerInstance->Modules->UseInterface("HashRequest");
+
+ Implementation eventlist[] = { I_OnRehash };
+ ServerInstance->Modules->Attach(eventlist, this, 1);
}
virtual ~ModuleCloaking()
{
ServerInstance->Modes->DelMode(cu);
- DELETE(cu);
+ delete cu;
ServerInstance->Modules->DoneWithInterface("HashRequest");
}
{
// returns the version number of the module to be
// listed in /MODULES
- return Version(1,1,0,2,VF_COMMON|VF_VENDOR,API_VERSION);
+ return Version(1,2,0,2,VF_COMMON|VF_VENDOR,API_VERSION);
}
virtual void OnRehash(User* user, const std::string ¶meter)
cu->DoRehash();
}
- void Implements(char* List)
- {
- List[I_OnRehash] = 1;
- }
};
MODULE_INIT(ModuleCloaking)