- fixed broken handling of modes received from other servers.
This commit is contained in:
parent
865c43080a
commit
7f61f413f4
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#include "portab.h"
|
#include "portab.h"
|
||||||
|
|
||||||
static char UNUSED id[] = "$Id: irc-mode.c,v 1.21 2002/12/15 16:29:18 alex Exp $";
|
static char UNUSED id[] = "$Id: irc-mode.c,v 1.22 2002/12/16 10:52:53 alex Exp $";
|
||||||
|
|
||||||
#include "imp.h"
|
#include "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -148,16 +148,8 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
x[0] = '\0';
|
|
||||||
if( Client_Type( Client ) == CLIENT_SERVER )
|
|
||||||
{
|
|
||||||
/* MODE request was received from a server:
|
|
||||||
* therefore don't validate but trust it! */
|
|
||||||
x[0] = *mode_ptr;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Validate modes */
|
/* Validate modes */
|
||||||
|
x[0] = '\0';
|
||||||
switch( *mode_ptr )
|
switch( *mode_ptr )
|
||||||
{
|
{
|
||||||
case 'i':
|
case 'i':
|
||||||
|
@ -184,10 +176,9 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\"!?", set ? '+' : '-', *mode_ptr, Client_ID( Origin ));
|
Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\"!?", set ? '+' : '-', *mode_ptr, Client_ID( Origin ));
|
||||||
ok = IRC_WriteStrClient( Origin, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Origin ), set ? '+' : '-', *mode_ptr );
|
if( Client_Type( Client ) != CLIENT_SERVER ) ok = IRC_WriteStrClient( Origin, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Origin ), set ? '+' : '-', *mode_ptr );
|
||||||
x[0] = '\0';
|
x[0] = '\0';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if( ! ok ) break;
|
if( ! ok ) break;
|
||||||
|
|
||||||
/* Is there a valid mode change? */
|
/* Is there a valid mode change? */
|
||||||
|
@ -315,17 +306,9 @@ Channel_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel )
|
||||||
/* Are there arguments left? */
|
/* Are there arguments left? */
|
||||||
if( arg_arg >= Req->argc ) arg_arg = -1;
|
if( arg_arg >= Req->argc ) arg_arg = -1;
|
||||||
|
|
||||||
|
/* Validate modes */
|
||||||
x[0] = '\0';
|
x[0] = '\0';
|
||||||
client = NULL;
|
client = NULL;
|
||||||
if( Client_Type( Client ) == CLIENT_SERVER )
|
|
||||||
{
|
|
||||||
/* MODE request was received from a server:
|
|
||||||
* therefore don't validate but trust it! */
|
|
||||||
x[0] = *mode_ptr;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Validate modes */
|
|
||||||
switch( *mode_ptr )
|
switch( *mode_ptr )
|
||||||
{
|
{
|
||||||
/* Channel modes */
|
/* Channel modes */
|
||||||
|
@ -419,10 +402,9 @@ Channel_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel )
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\" on %s!?", set ? '+' : '-', *mode_ptr, Client_ID( Origin ), Channel_Name( Channel ));
|
Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\" on %s!?", set ? '+' : '-', *mode_ptr, Client_ID( Origin ), Channel_Name( Channel ));
|
||||||
ok = IRC_WriteStrClient( Origin, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Origin ), set ? '+' : '-', *mode_ptr );
|
if( Client_Type( Client ) != CLIENT_SERVER ) ok = IRC_WriteStrClient( Origin, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Origin ), set ? '+' : '-', *mode_ptr );
|
||||||
x[0] = '\0';
|
x[0] = '\0';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if( ! ok ) break;
|
if( ! ok ) break;
|
||||||
|
|
||||||
/* Is there a valid mode change? */
|
/* Is there a valid mode change? */
|
||||||
|
|
Loading…
Reference in New Issue