summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-02-21 21:07:17 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-02-21 21:07:17 +0000
commit4648c98fa1b221d8c9dff5dcae030d33ac12982f (patch)
tree77acc0fcf7d40767367e4c56128d95207baa2765
parent326a73ff7bd43564cd850c9db2ca9ccde53a5292 (diff)
Tests for channel ghosting?
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3276 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/channels.cpp21
-rw-r--r--src/users.cpp2
2 files changed, 22 insertions, 1 deletions
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);