From 53c8efabaf6063cc3d9f4aaf08484866bb4eb7a2 Mon Sep 17 00:00:00 2001 From: Daniel De Graaf Date: Wed, 10 Feb 2010 21:32:56 -0600 Subject: Make named mode permissions a subset of all permissions --- src/users.cpp | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'src/users.cpp') 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 >::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); } } } -- cgit v1.3.1-10-gc9f91