X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fu_listmode.h;h=358ccbf8312346117ac15935afc95f9b9abe387c;hb=9175a3799dbf1e0809fb1bb540ca715243c0be2a;hp=b81cfbb84c550c9f96b9bd2ae39cd79e29a3b3da;hpb=4fa581ea125ebbfd46571171a96abb988a9ea0c3;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/u_listmode.h b/include/u_listmode.h index b81cfbb84..358ccbf83 100644 --- a/include/u_listmode.h +++ b/include/u_listmode.h @@ -79,7 +79,7 @@ class ListModeRequest : public Request * @param literalstr String to check against, e.g. "Bob!Bobbertson@weeblshouse" * @param extbanchar Extended ban character to use for the match, or a null char if not using extban */ - ListModeRequest(Module* sender, Module* target, std::string literalstr, char extbanchar, Channel* channel) : Request(sender, target, "LM_CHECKLIST_EX"), literal(literalstr), extban(extbanchar), chan(channel) + ListModeRequest(Module* sender, Module* target, std::string literalstr, char extbanchar, Channel* channel) : Request(sender, target, "LM_CHECKLIST_EX"), user(NULL), literal(literalstr), extban(extbanchar), chan(channel) { } @@ -178,7 +178,7 @@ class ListModeBase : public ModeHandler { for (modelist::reverse_iterator it = el->rbegin(); it != el->rend(); ++it) { - user->WriteNumeric(listnumeric, "%s %s %s %s %s", user->nick.c_str(), channel->name.c_str(), it->mask.c_str(), it->nick.c_str(), it->time.c_str()); + user->WriteNumeric(listnumeric, "%s %s %s %s %s", user->nick.c_str(), channel->name.c_str(), it->mask.c_str(), (it->nick.length() ? it->nick.c_str() : ServerInstance->Config->ServerName), it->time.c_str()); } } user->WriteNumeric(endoflistnumeric, "%s %s :%s", user->nick.c_str(), channel->name.c_str(), endofliststring.c_str()); @@ -521,12 +521,23 @@ class ListModeBase : public ModeHandler { if (LM->extban && it->mask.length() > 1 && it->mask[0] == LM->extban && it->mask[1] == ':') { - if (InspIRCd::Match(LM->literal.substr(2), it->mask)) + static std::string ext = it->mask.substr(2); + if (LM->user) + { + if (InspIRCd::Match(LM->user->GetFullRealHost(), ext) || InspIRCd::Match(LM->user->GetFullHost(), ext) || (InspIRCd::MatchCIDR(LM->literal, ext))) + return it->mask.c_str(); + } + else if (InspIRCd::Match(LM->literal, ext)) return it->mask.c_str(); } else { - if (InspIRCd::Match(LM->literal, it->mask)) + if (LM->user) + { + if (InspIRCd::Match(LM->user->GetFullRealHost(), it->mask) || InspIRCd::Match(LM->user->GetFullHost(), it->mask) || (InspIRCd::MatchCIDR(LM->literal, it->mask))) + return it->mask.c_str(); + } + else if (InspIRCd::Match(LM->literal, it->mask)) return it->mask.c_str(); } }