summaryrefslogtreecommitdiff
path: root/modules/core/cs_xop.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-11-15 20:23:43 -0500
committerAdam <Adam@anope.org>2010-12-12 19:33:58 -0500
commit872bc3fa5e696e5e05ec98bdadec309185c48419 (patch)
tree1ffa2bd25488f95f8717b2faa4cc686dec868ef7 /modules/core/cs_xop.cpp
parent1625a5af0ce1368e46705a2f72578eda463f3650 (diff)
Allow users to remove their own access in channels
Diffstat (limited to 'modules/core/cs_xop.cpp')
-rw-r--r--modules/core/cs_xop.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/modules/core/cs_xop.cpp b/modules/core/cs_xop.cpp
index 4dbd09525..a37ccaf4c 100644
--- a/modules/core/cs_xop.cpp
+++ b/modules/core/cs_xop.cpp
@@ -305,9 +305,20 @@ class XOPBase : public Command
return MOD_CONT;
}
+ NickAlias *na = NULL;
+ if (!isdigit(nick[0]))
+ {
+ na = findnick(nick);
+ if (!na)
+ {
+ u->SendMessage(ChanServ, NICK_X_NOT_REGISTERED, nick.c_str());
+ return MOD_CONT;
+ }
+ }
+
short ulev = get_access(u, ci);
- if ((level >= ulev || ulev < ACCESS_AOP) && !u->Account()->HasPriv("chanserv/access/modify"))
+ if ((!na || na->nc != u->Account()) && (level >= ulev || ulev < ACCESS_AOP) && !u->Account()->HasPriv("chanserv/access/modify"))
{
u->SendMessage(ChanServ, ACCESS_DENIED);
return MOD_CONT;
@@ -322,12 +333,6 @@ class XOPBase : public Command
}
else
{
- NickAlias *na = findnick(nick);
- if (!na)
- {
- u->SendMessage(ChanServ, NICK_X_NOT_REGISTERED, nick.c_str());
- return MOD_CONT;
- }
NickCore *nc = na->nc;
unsigned i, end;
for (i = 0, end = ci->GetAccessCount(); i < end; ++i)
@@ -344,7 +349,7 @@ class XOPBase : public Command
return MOD_CONT;
}
- if (ulev <= access->level && !u->Account()->HasPriv("chanserv/access/modify"))
+ if (nc != u->Account() && ulev <= access->level && !u->Account()->HasPriv("chanserv/access/modify"))
u->SendMessage(ChanServ, ACCESS_DENIED);
else
{