aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_opflags.cpp
diff options
context:
space:
mode:
authorGravatar Daniel De Graaf2010-02-26 16:13:56 -0600
committerGravatar Daniel De Graaf2010-08-03 17:32:38 -0400
commit3a80eb767569a64f39d28a4f2f2e52520f24d599 (patch)
tree8b621aaec77286236c3ec325c9e22f130b76367b /src/modules/m_opflags.cpp
parentRemove three rarely-used cache items (diff)
Change PermissionCheck to ModResult, allow flags to grant an ACL directly in addition to via +WX
Diffstat (limited to 'src/modules/m_opflags.cpp')
-rw-r--r--src/modules/m_opflags.cpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/modules/m_opflags.cpp b/src/modules/m_opflags.cpp
index 831ac281f..7eb5644e7 100644
--- a/src/modules/m_opflags.cpp
+++ b/src/modules/m_opflags.cpp
@@ -32,10 +32,26 @@ class OpFlagProviderImpl : public OpFlagProvider
return "";
}
- bool PermissionCheck(Membership* memb, const std::string& needed)
+ ModResult PermissionCheck(Membership* memb, const std::string& acl, const std::string& needed)
{
if (!memb)
- return false;
+ return MOD_RES_DENY;
+
+ std::string* mine = ext.get(memb);
+ if (mine && !acl.empty())
+ {
+ irc::commasepstream myflags(*mine);
+ std::string myflag;
+ while (myflags.GetToken(myflag))
+ {
+ if (acl == myflag)
+ return MOD_RES_ALLOW;
+ }
+ }
+
+ if (needed.empty())
+ return MOD_RES_PASSTHRU;
+
irc::commasepstream flags(needed);
std::string flag;
if (flags.GetToken(flag))
@@ -45,11 +61,9 @@ class OpFlagProviderImpl : public OpFlagProvider
ServerInstance->Modes->FindMode(flag);
unsigned int neededrank = privmh ? privmh->GetPrefixRank() : INT_MAX;
if (memb->getRank() >= neededrank)
- return true;
+ return MOD_RES_ALLOW;
}
- std::string* mine = ext.get(memb);
- if (!mine)
- return false;
+
while (flags.GetToken(flag))
{
irc::commasepstream myflags(*mine);
@@ -57,10 +71,10 @@ class OpFlagProviderImpl : public OpFlagProvider
while (myflags.GetToken(myflag))
{
if (flag == myflag)
- return true;
+ return MOD_RES_ALLOW;
}
}
- return false;
+ return MOD_RES_DENY;
}
};
@@ -117,7 +131,7 @@ class FlagCmd : public Command
while (myflags.GetToken(flag))
flags.insert(flag);
}
-
+
bool adding = true;
irc::commasepstream deltaflags(parameters[2]);
while (deltaflags.GetToken(flag))