diff options
author | Adam <Adam@anope.org> | 2010-11-30 03:02:33 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-12-12 19:37:02 -0500 |
commit | 0ba566491ea246fcc895862d0ef80bdf4ee43b4b (patch) | |
tree | 9852671d32476ddad58e264a8e074c41fef9f69f /src/botserv.cpp | |
parent | 2a4d57a1cacd22084abea5dd21c87dc733a7b5bf (diff) |
Allowing adding hostmasks to channel access lists
Diffstat (limited to 'src/botserv.cpp')
-rw-r--r-- | src/botserv.cpp | 18 |
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()); |