]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
Add a global fake client to class InspIRCd used instead of instantiating a fake clien...
[user/henk/code/inspircd.git] / src / channels.cpp
index 6ba5aaa5f857021ef3f13d5ba622c0734dce8f9a..d33caa34c6190d88fe458128adce490f7c2531c4 100644 (file)
@@ -13,9 +13,6 @@
 
 #include "inspircd.h"
 #include <stdarg.h>
-#include "configreader.h"
-#include "users.h"
-#include "modules.h"
 #include "wildcard.h"
 #include "mode.h"
 
@@ -175,8 +172,11 @@ CUList* chanrec::GetVoicedUsers()
 void chanrec::SetDefaultModes()
 {
        irc::spacesepstream list(ServerInstance->Config->DefaultModes);
-       std::string modeseq = list.GetToken();
+       std::string modeseq;
        std::string parameter;
+
+       list.GetToken(modeseq);
+
        userrec* dummyuser = new userrec(ServerInstance);
        dummyuser->SetFd(FD_MAGIC_NUMBER);
 
@@ -186,7 +186,7 @@ void chanrec::SetDefaultModes()
                if (mode)
                {
                        if (mode->GetNumParams(true))
-                               parameter = list.GetToken().c_str();
+                               list.GetToken(parameter);
                        else
                                parameter.clear();
 
@@ -219,9 +219,9 @@ chanrec* chanrec::JoinUser(InspIRCd* Instance, userrec *user, const char* cn, bo
         */
        if (IS_LOCAL(user) && !override)
        {
-               if (IS_OPER(user))
+               if (user->GetMaxChans())
                {
-                       if (user->chans.size() >= Instance->Config->OperMaxChans)
+                       if (user->chans.size() >= user->GetMaxChans())
                        {
                                user->WriteServ("405 %s %s :You are on too many channels",user->nick, cn);
                                return NULL;
@@ -229,10 +229,21 @@ chanrec* chanrec::JoinUser(InspIRCd* Instance, userrec *user, const char* cn, bo
                }
                else
                {
-                       if (user->chans.size() >= Instance->Config->MaxChans)
+                       if (IS_OPER(user))
                        {
-                               user->WriteServ("405 %s %s :You are on too many channels",user->nick, cn);
-                               return NULL;
+                               if (user->chans.size() >= Instance->Config->OperMaxChans)
+                               {
+                                       user->WriteServ("405 %s %s :You are on too many channels",user->nick, cn);
+                                       return NULL;
+                               }
+                       }
+                       else
+                       {
+                               if (user->chans.size() >= Instance->Config->MaxChans)
+                               {
+                                       user->WriteServ("405 %s %s :You are on too many channels",user->nick, cn);
+                                       return NULL;
+                               }
                        }
                }
        }