aboutsummaryrefslogtreecommitdiffstats
path: root/src/channels.cpp
diff options
context:
space:
mode:
authorGravatar Peter Powell2014-03-19 20:52:56 +0000
committerGravatar Attila Molnar2014-04-11 16:14:10 +0200
commitc511bb56f5ceff1e395d82c4bfd78e5c23aabab6 (patch)
tree389364fc0772775199d4e716da414571086d090e /src/channels.cpp
parentImplement support for numeric character references. (diff)
downloadinspircd++-c511bb56f5ceff1e395d82c4bfd78e5c23aabab6.tar.gz
inspircd++-c511bb56f5ceff1e395d82c4bfd78e5c23aabab6.tar.bz2
inspircd++-c511bb56f5ceff1e395d82c4bfd78e5c23aabab6.zip
Kill <channels> in favour of <connect:maxchans> and <oper:maxchans>.
Remove channels/high-join-limit privilege
Diffstat (limited to 'src/channels.cpp')
-rw-r--r--src/channels.cpp30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/channels.cpp b/src/channels.cpp
index 089b6927e..46f9cfe89 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -161,30 +161,26 @@ Channel* Channel::JoinUser(LocalUser* user, std::string cname, bool override, co
/*
* We don't restrict the number of channels that remote users or users that are override-joining may be in.
- * We restrict local users to MaxChans channels.
- * We restrict local operators to OperMaxChans channels.
+ * We restrict local users to <connect:maxchans> channels.
+ * We restrict local operators to <oper:maxchans> channels.
* This is a lot more logical than how it was formerly. -- w00t
*/
if (!override)
{
- if (user->HasPrivPermission("channels/high-join-limit"))
+ unsigned int maxchans = user->GetClass()->maxchans;
+ if (user->IsOper())
{
- if (user->chans.size() >= ServerInstance->Config->OperMaxChans)
- {
- user->WriteNumeric(ERR_TOOMANYCHANNELS, "%s :You are on too many channels", cname.c_str());
- return NULL;
- }
+ unsigned int opermaxchans = ConvToInt(user->oper->getConfig("maxchans"));
+ // If not set, use 2.0's <channels:opers>, if that's not set either, use limit from CC
+ if (!opermaxchans)
+ opermaxchans = ServerInstance->Config->OperMaxChans;
+ if (opermaxchans)
+ maxchans = opermaxchans;
}
- else
+ if (user->chans.size() >= maxchans)
{
- unsigned int maxchans = user->GetClass()->maxchans;
- if (!maxchans)
- maxchans = ServerInstance->Config->MaxChans;
- if (user->chans.size() >= maxchans)
- {
- user->WriteNumeric(ERR_TOOMANYCHANNELS, "%s :You are on too many channels", cname.c_str());
- return NULL;
- }
+ user->WriteNumeric(ERR_TOOMANYCHANNELS, "%s :You are on too many channels", cname.c_str());
+ return NULL;
}
}