repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 44cdf1b1cac5eba318b388312efd9f00206632f8:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 44cdf1b1cac5eba318b388312efd9f00206632f8
Author: Rolf Eike Beer 
Date:   Sun Feb 24 18:57:38 2008 +0000

    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.

diff --git a/ChangeLog b/ChangeLog
index b36a0a92c4777117728287e33b0af928c5a1b132..
index ..1576f726076e95a257aceca5f852d835604fcd00 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,6 +12,8 @@

 ngIRCd HEAD

+  - Fix sending of JOINs between servers when remote server appended mode
+  flags. (Rolf Eike Beer)
   - Install a LaunchDaemon script to start/stop ngIRCd on Mac OS X.
   - Implemented IRC commands INFO, SUMMON (dummy), and USERS (dummy) and
     enhanced test suite to check these commands. (Dana Dahlstrom)
@@ -752,4 +754,4 @@ ngIRCd 0.0.1, 31.12.2001


 -- 
-$Id: ChangeLog,v 1.341 2008/02/17 15:31:14 alex Exp $
+$Id: ChangeLog,v 1.342 2008/02/24 18:57:38 fw Exp $
diff --git a/src/ngircd/irc-channel.c b/src/ngircd/irc-channel.c
index 3ffd85a0196ce035cff2e73d848bbe733bf29954..
index ..55770571f61b68b13d39d60bc89abad0100b1642 100644
--- a/src/ngircd/irc-channel.c
+++ b/src/ngircd/irc-channel.c
@@ -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 
@@ -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 */

-----END OF PAGE-----