From: brain Date: Tue, 21 Feb 2006 21:07:17 +0000 (+0000) Subject: Tests for channel ghosting? X-Git-Tag: v2.0.23~8812 X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=4648c98fa1b221d8c9dff5dcae030d33ac12982f;p=user%2Fhenk%2Fcode%2Finspircd.git Tests for channel ghosting? git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3276 e03df62e-2008-0410-955e-edbf42e46eb7 --- diff --git a/src/channels.cpp b/src/channels.cpp index 9335fe251..8ca993f2b 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -440,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; } diff --git a/src/users.cpp b/src/users.cpp index c89286273..a4be86c9e 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -397,6 +397,7 @@ void kill_link(userrec *user,const char* r) log(DEBUG,"closing fd %lu",(unsigned long)user->fd); if (user->registered == 7) { + purge_empty_chans(user); FOREACH_MOD(I_OnUserQuit,OnUserQuit(user,reason)); WriteCommonExcept(user,"QUIT :%s",reason); } @@ -425,7 +426,6 @@ void kill_link(userrec *user,const char* r) // this must come before the WriteOpers so that it doesnt try to fill their buffer with anything // if they were an oper with +s. if (user->registered == 7) { - purge_empty_chans(user); // fix by brain: only show local quits because we only show local connects (it just makes SENSE) if (user->fd > -1) WriteOpers("*** Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason);