]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_redirect.cpp
Merge pull request #569 from ShutterQuick/inspircd+asrootfix
[user/henk/code/inspircd.git] / src / modules / m_redirect.cpp
index a045af8f83b1a5e723f5058e57c96026eb28c10b..5e78ccef2f405f47233290c76e170fc9845d9d7c 100644 (file)
@@ -39,7 +39,7 @@ class Redirect : public ModeHandler
                {
                        if (IS_LOCAL(source))
                        {
-                               if (!ServerInstance->IsChannel(parameter, ServerInstance->Config->Limits.ChanMax))
+                               if (!ServerInstance->IsChannel(parameter))
                                {
                                        source->WriteNumeric(403, "%s %s :Invalid channel name", source->nick.c_str(), parameter.c_str());
                                        parameter.clear();
@@ -64,20 +64,18 @@ class Redirect : public ModeHandler
                                }
                        }
 
-                       if (channel->GetModeParameter('L') == parameter)
+                       if (channel->GetModeParameter(this) == parameter)
                                return MODEACTION_DENY;
                        /*
                         * We used to do some checking for circular +L here, but there is no real need for this any more especially as we
                         * now catch +L looping in PreJoin. Remove it, since O(n) logic makes me sad, and we catch it anyway. :) -- w00t
                         */
-                       channel->SetModeParam('L', parameter);
                        return MODEACTION_ALLOW;
                }
                else
                {
-                       if (channel->IsModeSet('L'))
+                       if (channel->IsModeSet(this))
                        {
-                               channel->SetModeParam('L', "");
                                return MODEACTION_ALLOW;
                        }
                }
@@ -97,19 +95,18 @@ class AntiRedirect : public SimpleUserModeHandler
 
 class ModuleRedirect : public Module
 {
-
        Redirect re;
        AntiRedirect re_u;
        bool UseUsermode;
 
  public:
-
        ModuleRedirect()
-               : re(this), re_u(this)
+               : re(this)
+               , re_u(this)
        {
        }
 
-       void init()
+       void init() CXX11_OVERRIDE
        {
                /* Setting this here so it isn't changable by rehasing the config later. */
                UseUsermode = ServerInstance->Config->ConfValue("redirect")->getBool("antiredirect");
@@ -131,26 +128,26 @@ class ModuleRedirect : public Module
                ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
        }
 
-       ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven)
+       ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) CXX11_OVERRIDE
        {
                if (chan)
                {
-                       if (chan->IsModeSet('L') && chan->IsModeSet('l'))
+                       if (chan->IsModeSet(re) && chan->IsModeSet('l'))
                        {
                                if (chan->GetUserCounter() >= ConvToInt(chan->GetModeParameter('l')))
                                {
-                                       std::string channel = chan->GetModeParameter('L');
+                                       std::string channel = chan->GetModeParameter(&re);
 
                                        /* sometimes broken ulines can make circular or chained +L, avoid this */
                                        Channel* destchan = ServerInstance->FindChan(channel);
-                                       if (destchan && destchan->IsModeSet('L'))
+                                       if (destchan && destchan->IsModeSet(re))
                                        {
                                                user->WriteNumeric(470, "%s %s * :You may not join this channel. A redirect is set, but you may not be redirected as it is a circular loop.", user->nick.c_str(), cname.c_str());
                                                return MOD_RES_DENY;
                                        }
                                        /* We check the bool value here to make sure we have it enabled, if we don't then
                                                usermode +L might be assigned to something else. */
-                                       if (UseUsermode && user->IsModeSet('L'))
+                                       if (UseUsermode && user->IsModeSet(re_u))
                                        {
                                                user->WriteNumeric(470, "%s %s %s :Force redirection stopped.", user->nick.c_str(), cname.c_str(), channel.c_str());
                                                return MOD_RES_DENY;
@@ -167,7 +164,7 @@ class ModuleRedirect : public Module
                return MOD_RES_PASSTHRU;
        }
 
-       virtual Version GetVersion()
+       Version GetVersion() CXX11_OVERRIDE
        {
                return Version("Provides channel mode +L (limit redirection) and user mode +L (no forced redirection)", VF_VENDOR);
        }