1
0
mirror of https://github.com/anope/anope.git synced 2026-06-29 00:06:39 +02:00

Allowing adding hostmasks to channel access lists

This commit is contained in:
Adam
2010-11-30 03:02:33 -05:00
parent 2a4d57a1ca
commit 0ba566491e
24 changed files with 343 additions and 338 deletions
+7 -73
View File
@@ -401,19 +401,15 @@ void expire_chans()
/*************************************************************************/
// XXX this is slightly inefficient
void cs_remove_nick(const NickCore *nc)
void cs_remove_nick(NickCore *nc)
{
for (registered_channel_map::const_iterator it = RegisteredChannelList.begin(), it_end = RegisteredChannelList.end(); it != it_end; ++it)
{
ChannelInfo *ci = it->second;
for (unsigned j = ci->GetAccessCount(); j > 0; --j)
{
ChanAccess *ca = ci->GetAccess(j - 1);
if (ca->nc == nc)
ci->EraseAccess(j - 1);
}
ChanAccess *access = ci->GetAccess(nc);
if (access)
ci->EraseAccess(access);
for (unsigned j = ci->GetAkickCount(); j > 0; --j)
{
@@ -497,7 +493,8 @@ int check_access(User *user, ChannelInfo *ci, int what)
if (!user || !ci)
return 0;
level = get_access(user, ci);
ChanAccess *u_access = ci->GetAccess(user);
level = u_access ? u_access->level : 0;
limit = ci->levels[what];
/* Resetting the last used time */
@@ -564,45 +561,6 @@ bool IsFounder(User *user, ChannelInfo *ci)
return false;
}
/** Return the access level for the user on the channel.
* If the channel doesn't exist, the user isn't on the access list, or the
* channel is CI_SECURE and the user isn't identified, return 0
* @param user The user
* @param ci The cahnnel
* @return The level, or 0
*/
int get_access(User *user, ChannelInfo *ci)
{
ChanAccess *access = NULL;
if (!ci || !user)
return 0;
/* SuperAdmin always has highest level */
if (user->isSuperAdmin)
return ACCESS_SUPERADMIN;
if (IsFounder(user, ci))
return ACCESS_FOUNDER;
if (user->IsIdentified())
{
access = ci->GetAccess(user->Account());
if (access)
return access->level;
}
else
{
NickAlias *na = findnick(user->nick);
if (na)
access = ci->GetAccess(na->nc);
if (access && user->IsRecognized() && !ci->HasFlag(CI_SECURE))
return access->level;
}
return 0;
}
/*************************************************************************/
void update_cs_lastseen(User *user, ChannelInfo *ci)
@@ -613,7 +571,7 @@ void update_cs_lastseen(User *user, ChannelInfo *ci)
return;
if (IsFounder(user, ci) || user->IsIdentified() || (user->IsRecognized() && !ci->HasFlag(CI_SECURE)))
if ((access = ci->GetAccess(user->Account())))
if ((access = ci->GetAccess(user)))
access->last_seen = Anope::CurTime;
}
@@ -658,30 +616,6 @@ int get_idealban(ChannelInfo *ci, User *u, Anope::string &ret)
/*************************************************************************/
int get_access_level(ChannelInfo *ci, NickCore *nc)
{
if (!ci || !nc)
return 0;
if (nc == ci->founder)
return ACCESS_FOUNDER;
ChanAccess *access = ci->GetAccess(nc);
if (!access)
return 0;
else
return access->level;
}
int get_access_level(ChannelInfo *ci, NickAlias *na)
{
if (!na)
return 0;
return get_access_level(ci, na->nc);
}
Anope::string get_xop_level(int level)
{
ChannelMode *halfop = ModeManager::FindChannelModeByName(CMODE_HALFOP);