Fix sending of JOINs between servers.

This does hit only operators that join a channel with at least 2 servers active in the net
the server the oper connects to sends "channel^Go" to the other servers
the other server first searches for the channel and then strips the modes from the channel name
he has to do the other way round: first strip and then check the channel name.
This commit is contained in:
Rolf Eike Beer
2008-02-26 23:49:33 +01:00
committed by Florian Westphal
parent e710e8ae37
commit 44cdf1b1ca
2 changed files with 11 additions and 9 deletions
+8 -8
View File
@@ -14,7 +14,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: irc-channel.c,v 1.44 2008/02/16 11:21:33 fw Exp $";
static char UNUSED id[] = "$Id: irc-channel.c,v 1.45 2008/02/24 18:57:38 fw Exp $";
#include "imp.h"
#include <assert.h>
@@ -217,13 +217,6 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
while (channame) {
flags = NULL;
chan = Channel_Search(channame);
if (!chan && Conf_PredefChannelsOnly) {
/* channel must be created, but server does not allow this */
IRC_WriteStrClient(Client, ERR_BANNEDFROMCHAN_MSG, Client_ID(Client), channame);
break;
}
/* Did the server include channel-user-modes? */
if (Client_Type(Client) == CLIENT_SERVER) {
flags = strchr(channame, 0x7);
@@ -233,6 +226,13 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
}
}
chan = Channel_Search(channame);
if (!chan && Conf_PredefChannelsOnly) {
/* channel must be created, but server does not allow this */
IRC_WriteStrClient(Client, ERR_BANNEDFROMCHAN_MSG, Client_ID(Client), channame);
break;
}
/* Local client? */
if (Client_Type(Client) == CLIENT_USER) {
/* Test if the user has reached his maximum channel count */