From e728d9abdfd0ea41ac249273842924fe6bce6d4d Mon Sep 17 00:00:00 2001 From: w00t Date: Fri, 4 Apr 2008 12:55:51 +0000 Subject: [PATCH] Match on nick change option for RLine, document m_rline & this option. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9300 e03df62e-2008-0410-955e-edbf42e46eb7 --- docs/inspircd.conf.example | 10 ++++++++++ src/modules/extra/m_rline.cpp | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/docs/inspircd.conf.example b/docs/inspircd.conf.example index a4f1ad5bd..e3d8e8b33 100644 --- a/docs/inspircd.conf.example +++ b/docs/inspircd.conf.example @@ -2007,6 +2007,16 @@ # Restrict message module: Allows users to only message opers # +#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# +# Ban users through regular expression patterns +# +# +#-#-#-#-#-#-#-#-#-#-#-#- RLINE CONFIGURATION -#-#-#-#-#-#-#-#-#-#-#-#-# +# If you wish to re-check a user when they change nickname (can be +# useful under some situations, but *can* also use CPU with more users +# on a server) then set the following configuration value: +# + #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # Provide /LIST throttling (to prevent flooding) and /LIST safety to # prevent excess flood when the list is large. diff --git a/src/modules/extra/m_rline.cpp b/src/modules/extra/m_rline.cpp index 88e40811b..15bd60bc0 100644 --- a/src/modules/extra/m_rline.cpp +++ b/src/modules/extra/m_rline.cpp @@ -6,7 +6,7 @@ * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see - * the file COPYING for details. + * the file COPYING for details. * * --------------------------------------------------- */ @@ -196,9 +196,13 @@ class ModuleRLine : public Module private: CommandRLine *r; RLineFactory *f; + bool MatchOnNickChange; + public: ModuleRLine(InspIRCd* Me) : Module(Me) { + OnRehash(NULL, ""); + // Create a new command r = new CommandRLine(ServerInstance); ServerInstance->AddCommand(r); @@ -206,8 +210,8 @@ class ModuleRLine : public Module f = new RLineFactory(ServerInstance); ServerInstance->XLines->RegisterFactory(f); - Implementation eventlist[] = { I_OnUserConnect }; - ServerInstance->Modules->Attach(eventlist, this, 1); + Implementation eventlist[] = { I_OnUserConnect, I_OnRehash, I_OnUserPostNick }; + ServerInstance->Modules->Attach(eventlist, this, 3); } @@ -232,6 +236,31 @@ class ModuleRLine : public Module rl->Apply(user); } } + + virtual void OnRehash(User *user, const std::string ¶meter) + { + ConfigReader Conf(ServerInstance); + + MatchOnNickChange = Conf.ReadFlag("rline", "matchonnickchange", 1); + } + + virtual int OnUserPostNick(User *user, const std::string &oldnick) + { + if (!IS_LOCAL(user)) + return 0; + + if (!MatchOnNickChange) + return 0; + + XLine *r = ServerInstance->XLines->MatchesLine("R", user); + + if (r) + { + // Bang! :D + r->Apply(user); + } + } + }; MODULE_INIT(ModuleRLine) -- 2.39.5