]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_user/umode_s.cpp
Add a typedef for the data provider map.
[user/henk/code/inspircd.git] / src / coremods / core_user / umode_s.cpp
index 2c72ea1791e6a785dfe60d1a9d4d4487a5671e86..5994f97fb753a557bb4a1c9188be74e71ed05858 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
- *   Copyright (C) 2013, 2017, 2019 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2017, 2020 Sadie Powell <sadie@witchery.services>
  *   Copyright (C) 2013, 2016 Attila Molnar <attilamolnar@hush.com>
  *   Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
  *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
@@ -89,7 +89,8 @@ std::string ModeUserServerNoticeMask::ProcessNoticeMasks(User* user, const std::
                        case '*':
                                for (size_t j = 0; j < 64; j++)
                                {
-                                       if (ServerInstance->SNO->IsSnomaskUsable(j+'A'))
+                                       const char chr = j + 'A';
+                                       if (user->HasSnomaskPermission(chr) && ServerInstance->SNO->IsSnomaskUsable(chr))
                                                curr[j] = adding;
                                }
                        break;
@@ -103,6 +104,12 @@ std::string ModeUserServerNoticeMask::ProcessNoticeMasks(User* user, const std::
                                                user->WriteNumeric(ERR_UNKNOWNSNOMASK, *i, "is an unknown snomask character");
                                                continue;
                                        }
+                                       else if (!user->HasSnomaskPermission(*i))
+                                       {
+                                               user->WriteNumeric(ERR_NOPRIVILEGES, InspIRCd::Format("Permission Denied - Oper type %s does not have access to snomask %c",
+                                                       user->oper->name.c_str(), *i));
+                                               continue;
+                                       }
                                }
                                else if (!(((*i >= 'a') && (*i <= 'z')) || ((*i >= 'A') && (*i <= 'Z'))))
                                        continue;