]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/u_listmode.h
Also fix here; glob patterns may not start with > or <. TODO: iterate comma sep token...
[user/henk/code/inspircd.git] / include / u_listmode.h
index b81cfbb84c550c9f96b9bd2ae39cd79e29a3b3da..69ee4f668db7cc20097bea1b1758fca4853cc034 100644 (file)
@@ -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)
        {
        }
 
@@ -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();
                                        }
                                }