]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
Decide that it wasn't quite appropriate :(
[user/henk/code/inspircd.git] / src / channels.cpp
index ec1be82cd0bbbccccc2482a67c0d2b5fc6e18001..fc6c90b5d7eeb89e1729a6d6a0b61dedbda504a2 100644 (file)
@@ -66,7 +66,7 @@ extern chan_hash chanlist;
 
 using namespace std;
 
-std::vector<ModeParameter> custom_mode_params;
+//std::vector<ModeParameter> custom_mode_params;
 
 chanrec* ForceChan(chanrec* Ptr,ucrec &a,userrec* user, int created);
 
@@ -139,7 +139,6 @@ bool chanrec::IsCustomModeSet(char mode)
        return (strchr(this->custom_modes,mode));
 }
 
-/* XXX - would it not be better to store a vector for each channel, rather than one huge list? -- w00t */
 std::string chanrec::GetModeParameter(char mode)
 {
        if (custom_mode_params.size())
@@ -291,7 +290,7 @@ chanrec* add_channel(userrec *user, const char* cn, const char* key, bool overri
                chanlist[cname]->binarymodes = CM_TOPICLOCK | CM_NOEXTERNAL;
                chanlist[cname]->created = TIME;
                *chanlist[cname]->topic = 0;
-               strlcpy(chanlist[cname]->setby, user->nick,NICKMAX);
+               strlcpy(chanlist[cname]->setby, user->nick,NICKMAX-1);
                chanlist[cname]->topicset = 0;
                Ptr = chanlist[cname];
                log(DEBUG,"add_channel: created: %s",cname);
@@ -427,7 +426,7 @@ chanrec* add_channel(userrec *user, const char* cn, const char* key, bool overri
                user->chans.push_back(a);
                return c;
        }
-       else if (strchr(user->modes,'o'))
+       else if (*user->oper)
        {
                /* Oper allows extension up to the OPERMAXCHANS value */
                if (user->chans.size() < OPERMAXCHANS)
@@ -441,6 +440,27 @@ chanrec* add_channel(userrec *user, const char* cn, const char* key, bool overri
 
        log(DEBUG,"add_channel: user channel max exceeded: %s %s",user->nick,cname);
        WriteServ(user->fd,"405 %s %s :You are on too many channels",user->nick, cname);
+
+       if (created == 2)
+       {
+               log(DEBUG,"BLAMMO, Whacking channel.");
+               /* Things went seriously pear shaped, so take this away. bwahaha. */
+               chan_hash::iterator n = chanlist.find(cname);
+               if (n != chanlist.end())
+               {
+                       Ptr->DelUser((char*)user);
+                       delete Ptr;
+                       chanlist.erase(n);
+                       for (unsigned int index =0; index < user->chans.size(); index++)
+                       {
+                               if (user->chans[index].channel == Ptr)
+                               {
+                                       user->chans[index].channel == NULL;
+                                       user->chans[index].uc_modes = 0;        
+                               }
+                       }
+               }
+       }
        return NULL;
 }