]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/u_listmode.h
Working privs implementation, and example usage in NOTICE for mass messaging.
[user/henk/code/inspircd.git] / include / u_listmode.h
index 98166443684c2c6eb95441800895f148e2240af8..358ccbf8312346117ac15935afc95f9b9abe387c 100644 (file)
@@ -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();
                                        }
                                }