X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fchannels.cpp;h=fc6c90b5d7eeb89e1729a6d6a0b61dedbda504a2;hb=59b1a8955142935b02af6446005ab47fc7c3fc8c;hp=ec1be82cd0bbbccccc2482a67c0d2b5fc6e18001;hpb=c2f7cbbd151e67f088116e146da48230d8a26d43;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/channels.cpp b/src/channels.cpp index ec1be82cd..fc6c90b5d 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -66,7 +66,7 @@ extern chan_hash chanlist; using namespace std; -std::vector custom_mode_params; +//std::vector 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; }