aboutsummaryrefslogtreecommitdiffstats
path: root/src/users.cpp
diff options
context:
space:
mode:
authorGravatar Daniel De Graaf2010-02-10 21:32:56 -0600
committerGravatar Daniel De Graaf2010-08-03 17:32:35 -0400
commit53c8efabaf6063cc3d9f4aaf08484866bb4eb7a2 (patch)
treecb9202fa4455ef8ee50a6a4d0b76e392ce898f17 /src/users.cpp
parentStrip channel mode Z from list sent to 1201-compat servers (diff)
Make named mode permissions a subset of all permissions
Diffstat (limited to 'src/users.cpp')
-rw-r--r--src/users.cpp23
1 files changed, 9 insertions, 14 deletions
diff --git a/src/users.cpp b/src/users.cpp
index 38f4563a3..a73b0629d 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -389,9 +389,11 @@ bool LocalUser::HasModePermission(ModeID id)
if (!mh)
return false;
- if (oper->AllowedModes.find(mh->name) != oper->AllowedModes.end())
+ if (oper->AllowedPrivs.find("mode/" + mh->name) != oper->AllowedPrivs.end())
return true;
- else if (oper->AllowedModes.find("*") != oper->AllowedModes.end())
+ else if (oper->AllowedPrivs.find("mode/*") != oper->AllowedPrivs.end())
+ return true;
+ else if (oper->AllowedPrivs.find("*") != oper->AllowedPrivs.end())
return true;
return false;
@@ -617,8 +619,7 @@ void OperInfo::init()
{
AllowedOperCommands.clear();
AllowedPrivs.clear();
- AllowedModes.clear();
- AllowedModes.insert("oper"); // Call me paranoid if you want.
+ AllowedPrivs.insert("mode/oper"); // Call me paranoid if you want.
for(std::vector<reference<ConfigTag> >::iterator iter = class_blocks.begin(); iter != class_blocks.end(); ++iter)
{
@@ -637,29 +638,23 @@ void OperInfo::init()
AllowedPrivs.insert(mypriv);
}
- irc::spacesepstream ModeList(tag->getString("modes"));
- while (ModeList.GetToken(mypriv))
- {
- AllowedModes.insert(mypriv);
- }
-
// backwards compatability for by-letter configuration
for (unsigned char* c = (unsigned char*)tag->getString("usermodes").c_str(); *c; ++c)
{
if (*c == '*')
- AllowedModes.insert("*");
+ AllowedPrivs.insert("mode/*");
ModeHandler* mh = ServerInstance->Modes->FindMode(*c, MODETYPE_USER);
if (mh)
- AllowedModes.insert(mh->name);
+ AllowedPrivs.insert("mode/" + mh->name);
}
for (unsigned char* c = (unsigned char*)tag->getString("chanmodes").c_str(); *c; ++c)
{
if (*c == '*')
- AllowedModes.insert("*");
+ AllowedPrivs.insert("mode/*");
ModeHandler* mh = ServerInstance->Modes->FindMode(*c, MODETYPE_CHANNEL);
if (mh)
- AllowedModes.insert(mh->name);
+ AllowedPrivs.insert("mode/" + mh->name);
}
}
}