summaryrefslogtreecommitdiff
path: root/src/botserv.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-11-30 03:02:33 -0500
committerAdam <Adam@anope.org>2010-12-12 19:37:02 -0500
commit0ba566491ea246fcc895862d0ef80bdf4ee43b4b (patch)
tree9852671d32476ddad58e264a8e074c41fef9f69f /src/botserv.cpp
parent2a4d57a1cacd22084abea5dd21c87dc733a7b5bf (diff)
Allowing adding hostmasks to channel access lists
Diffstat (limited to 'src/botserv.cpp')
-rw-r--r--src/botserv.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/botserv.cpp b/src/botserv.cpp
index 1e7eb9551..32b6a42a3 100644
--- a/src/botserv.cpp
+++ b/src/botserv.cpp
@@ -511,7 +511,7 @@ void bot_raw_ban(User *requester, ChannelInfo *ci, const Anope::string &nick, co
Anope::string mask;
User *u = finduser(nick);
- if (!u)
+ if (!u || !ci)
return;
if (ModeManager::FindUserModeByName(UMODE_PROTECTED) && u->IsProtected() && requester != u)
@@ -520,7 +520,9 @@ void bot_raw_ban(User *requester, ChannelInfo *ci, const Anope::string &nick, co
return;
}
- if (ci->HasFlag(CI_PEACE) && !requester->nick.equals_ci(nick) && get_access(u, ci) >= get_access(requester, ci))
+ ChanAccess *u_access = ci->GetAccess(u), *req_access = ci->GetAccess(requester);
+ int16 u_level = u_access ? u_access->level : 0, req_level = req_access ? req_access->level : 0;
+ if (ci->HasFlag(CI_PEACE) && !requester->nick.equals_ci(nick) && u_level >= req_level)
return;
if (ModeManager::FindChannelModeByName(CMODE_EXCEPT) && is_excepted(ci, u) == 1)
@@ -548,7 +550,7 @@ void bot_raw_kick(User *requester, ChannelInfo *ci, const Anope::string &nick, c
{
User *u = finduser(nick);
- if (!u || !ci->c->FindUser(u))
+ if (!u || !ci || !ci->c || !ci->c->FindUser(u))
return;
if (ModeManager::FindUserModeByName(UMODE_PROTECTED) && u->IsProtected() && requester != u)
@@ -557,7 +559,9 @@ void bot_raw_kick(User *requester, ChannelInfo *ci, const Anope::string &nick, c
return;
}
- if (ci->HasFlag(CI_PEACE) && !requester->nick.equals_ci(nick) && get_access(u, ci) >= get_access(requester, ci))
+ ChanAccess *u_access = ci->GetAccess(u), *req_access = ci->GetAccess(requester);
+ int16 u_level = u_access ? u_access->level : 0, req_level = req_access ? req_access->level : 0;
+ if (ci->HasFlag(CI_PEACE) && !requester->nick.equals_ci(nick) && u_level >= req_level)
return;
if (ci->HasFlag(CI_SIGNKICK) || (ci->HasFlag(CI_SIGNKICK_LEVEL) && !check_access(requester, ci, CA_SIGNKICK)))
@@ -577,7 +581,7 @@ void bot_raw_mode(User *requester, ChannelInfo *ci, const Anope::string &mode, c
u = finduser(nick);
- if (!u || !ci->c->FindUser(u))
+ if (!u || !ci || !ci->c || !ci->c->FindUser(u))
return;
snprintf(buf, BUFSIZE - 1, "%ld", static_cast<long>(Anope::CurTime));
@@ -588,7 +592,9 @@ void bot_raw_mode(User *requester, ChannelInfo *ci, const Anope::string &mode, c
return;
}
- if (mode[0] == '-' && ci->HasFlag(CI_PEACE) && !requester->nick.equals_ci(nick) && get_access(u, ci) >= get_access(requester, ci))
+ ChanAccess *u_access = ci->GetAccess(u), *req_access = ci->GetAccess(requester);
+ int16 u_level = u_access ? u_access->level : 0, req_level = req_access ? req_access->level : 0;
+ if (mode[0] == '-' && ci->HasFlag(CI_PEACE) && !requester->nick.equals_ci(nick) && u_level >= req_level)
return;
ci->c->SetModes(NULL, "%s %s", mode.c_str(), nick.c_str());