X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_filter.cpp;h=3521f668743be903d7c9f943eea39b4ec93fa92c;hb=39897f56f5f84d8d4c8903fb46a03c2fdcf733ec;hp=034b2f21dd9c971cad3ed46c608f7602b127cd54;hpb=805830a135397cfa5b697f982b015ed73b8dddaa;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_filter.cpp b/src/modules/m_filter.cpp index 034b2f21d..3521f6687 100644 --- a/src/modules/m_filter.cpp +++ b/src/modules/m_filter.cpp @@ -12,9 +12,6 @@ */ #include "inspircd.h" -#include "users.h" -#include "channels.h" -#include "modules.h" #include "xline.h" #include "m_regex.h" @@ -126,6 +123,7 @@ protected: virtual int OnPreCommand(std::string &command, std::vector ¶meters, User *user, bool validated, const std::string &original_line); bool AppliesToMe(User* user, FilterResult* filter, int flags); void OnLoadModule(Module* mod, const std::string& name); + virtual void ReadFilters(ConfigReader &MyConf) = 0; }; class CommandFilter : public Command @@ -420,7 +418,6 @@ void FilterBase::OnRehash(User* user, const std::string ¶meter) } rxengine = NULL; - printf("In Rehash\n"); RegexEngine = newrxengine; modulelist* ml = ServerInstance->Modules->FindInterface("RegularExpression"); if (ml) @@ -449,8 +446,13 @@ void FilterBase::OnLoadModule(Module* mod, const std::string& name) std::string rxname = RegexNameRequest(this, mod).Send(); if (rxname == RegexEngine) { - ServerInstance->SNO->WriteToSnoMask('A', "Filter now using engine '%s'", RegexEngine.c_str()); rxengine = mod; + /* Force a rehash to make sure that any filters that couldnt be applied from the conf + * on startup or on load are applied right now. + */ + ConfigReader Config(ServerInstance); + ServerInstance->SNO->WriteToSnoMask('A', "Found and activated regex module '%s' for m_filter.so.", RegexEngine.c_str()); + ReadFilters(Config); } } } @@ -532,7 +534,6 @@ class ImplFilter : public FilterResult ImplFilter() { - delete regex; } }; @@ -559,12 +560,13 @@ class ModuleFilter : public FilterBase for (std::vector::iterator index = filters.begin(); index != filters.end(); index++) { /* Skip ones that dont apply to us */ - if (!FilterBase::AppliesToMe(user, dynamic_cast(&(*index)), flgs)) continue; + //ServerInstance->Logs->Log("m_filter", DEBUG, "Match '%s' against '%s'", text.c_str(), index->freeform.c_str()); if (index->regex->Matches(text)) { + //ServerInstance->Logs->Log("m_filter", DEBUG, "MATCH"); fr = *index; if (index != filters.begin()) { @@ -574,6 +576,7 @@ class ModuleFilter : public FilterBase } return &fr; } + //ServerInstance->Logs->Log("m_filter", DEBUG, "NO MATCH"); } return NULL; } @@ -584,6 +587,7 @@ class ModuleFilter : public FilterBase { if (i->freeform == freeform) { + delete i->regex; filters.erase(i); return true; } @@ -624,9 +628,12 @@ class ModuleFilter : public FilterBase virtual void OnRehash(User* user, const std::string ¶meter) { ConfigReader MyConf(ServerInstance); - FilterBase::OnRehash(user, parameter); + ReadFilters(MyConf); + } + void ReadFilters(ConfigReader &MyConf) + { for (int index = 0; index < MyConf.Enumerate("keyword"); index++) { this->DeleteFilter(MyConf.ReadValue("keyword", "pattern", index)); @@ -644,11 +651,11 @@ class ModuleFilter : public FilterBase try { filters.push_back(ImplFilter(this, reason, action, gline_time, pattern, flgs)); - ServerInstance->Logs->Log("m_filter",DEFAULT,"Regular expression %s loaded.", pattern.c_str()); + ServerInstance->Logs->Log("m_filter", DEFAULT, "Regular expression %s loaded.", pattern.c_str()); } catch (ModuleException &e) { - ServerInstance->Logs->Log("m_filter",DEFAULT,"Error in regular expression '%s': %s", pattern.c_str(), e.GetReason()); + ServerInstance->Logs->Log("m_filter", DEFAULT, "Error in regular expression '%s': %s", pattern.c_str(), e.GetReason()); } } } @@ -660,7 +667,7 @@ class ModuleFilter : public FilterBase std::string sn = ServerInstance->Config->ServerName; for (std::vector::iterator i = filters.begin(); i != filters.end(); i++) { - results.push_back(sn+" 223 "+user->nick+" :REGEXP:"+i->freeform+" "+i->flags+" "+i->action+" "+ConvToStr(i->gline_time)+" :"+i->reason); + results.push_back(sn+" 223 "+user->nick+" :"+RegexEngine+":"+i->freeform+" "+i->flags+" "+i->action+" "+ConvToStr(i->gline_time)+" :"+i->reason); } for (std::vector::iterator i = exemptfromfilter.begin(); i != exemptfromfilter.end(); ++i) {