From 55865d7fc608efe4e8f6da4577bd10cf50c46f95 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Tue, 26 Feb 2008 12:07:41 +0000 Subject: [PATCH] From: Rolf Eike Beer Fix sending of JOINs between servers I found a bug in "sending join 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. --- ChangeLog | 4 +++- src/ngircd/irc-channel.c | 22 +++++++++------------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b07949b..e717f266 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,8 @@ -- ChangeLog -- ngIRCd 0.11.1 + - Fix sending of JOINs between servers when remote server appended mode + flags. (Rolf Eike Beer) [from HEAD] - send "G" instead of "H" flag in WHO replies (reported by Dana Dahlstrom). - Under some circumstances ngIRCd issued channel MODE message with a trailing space. (Dana Dahlstrom) [from HEAD] @@ -738,4 +740,4 @@ ngIRCd 0.0.1, 31.12.2001 -- -$Id: ChangeLog,v 1.332.2.8 2008/02/26 12:06:57 fw Exp $ +$Id: ChangeLog,v 1.332.2.9 2008/02/26 12:07:41 fw Exp $ diff --git a/src/ngircd/irc-channel.c b/src/ngircd/irc-channel.c index 39ef83d3..139f5061 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.40.2.1 2008/01/07 11:42:14 fw Exp $"; +static char UNUSED id[] = "$Id: irc-channel.c,v 1.40.2.2 2008/02/26 12:07:41 fw Exp $"; #include "imp.h" #include @@ -79,6 +79,14 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req ) { chan = NULL; flags = NULL; + if (Client_Type(Client) == CLIENT_SERVER) { + flags = strchr( channame, 0x7 ); + if( flags ) { + *flags = '\0'; + flags++; + } + } + /* wird der Channel neu angelegt? */ if( Channel_Search( channame )) { is_new_chan = false; @@ -92,18 +100,6 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req ) is_new_chan = true; } - /* Hat ein Server Channel-User-Modes uebergeben? */ - if( Client_Type( Client ) == CLIENT_SERVER ) - { - /* Channel-Flags extrahieren */ - flags = strchr( channame, 0x7 ); - if( flags ) - { - *flags = '\0'; - flags++; - } - } - /* Local client? */ if( Client_Type( Client ) == CLIENT_USER ) { -- 2.39.2