New configuration option "OperServerMode".
This commit is contained in:
parent
5e929effca
commit
1d08d51e2e
|
@ -12,6 +12,10 @@
|
||||||
|
|
||||||
ngIRCd CVSHEAD
|
ngIRCd CVSHEAD
|
||||||
|
|
||||||
|
- New configuration option "OperServerMode" to enable a workaround needed
|
||||||
|
when running an network with ircd2 servers and "OperCanUseMode" enabled
|
||||||
|
to prevent the ircd2 daemon to drop mode changes of IRC operators.
|
||||||
|
Patch by Florian Westphal, <westphal@foo.fh-furtwangen.de>.
|
||||||
- Implemented support for "secret channels" (channel mode "s").
|
- Implemented support for "secret channels" (channel mode "s").
|
||||||
- New configuration option "Mask" for [Operator] sections to limit OPER
|
- New configuration option "Mask" for [Operator] sections to limit OPER
|
||||||
commands to ussers with a specific IRC mask. Patch from Florian Westphal.
|
commands to ussers with a specific IRC mask. Patch from Florian Westphal.
|
||||||
|
@ -589,4 +593,4 @@ ngIRCd 0.0.1, 31.12.2001
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
$Id: ChangeLog,v 1.263 2005/03/02 16:35:10 alex Exp $
|
$Id: ChangeLog,v 1.264 2005/03/15 16:56:16 alex Exp $
|
||||||
|
|
6
NEWS
6
NEWS
|
@ -12,6 +12,10 @@
|
||||||
|
|
||||||
ngIRCd CVSHEAD
|
ngIRCd CVSHEAD
|
||||||
|
|
||||||
|
- New configuration option "OperServerMode" to enable a workaround needed
|
||||||
|
when running an network with ircd2 servers and "OperCanUseMode" enabled
|
||||||
|
to prevent the ircd2 daemon to drop mode changes of IRC operators.
|
||||||
|
Patch by Florian Westphal, <westphal@foo.fh-furtwangen.de>.
|
||||||
- Implemented support for "secret channels" (channel mode "s").
|
- Implemented support for "secret channels" (channel mode "s").
|
||||||
- New configuration option "Mask" for [Operator] sections to limit OPER
|
- New configuration option "Mask" for [Operator] sections to limit OPER
|
||||||
commands to ussers with a specific IRC mask. Patch from Florian Westphal.
|
commands to ussers with a specific IRC mask. Patch from Florian Westphal.
|
||||||
|
@ -201,4 +205,4 @@ ngIRCd 0.0.1, 31.12.2001
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
$Id: NEWS,v 1.70 2005/03/02 16:35:10 alex Exp $
|
$Id: NEWS,v 1.71 2005/03/15 16:56:16 alex Exp $
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $Id: sample-ngircd.conf,v 1.31 2005/03/02 16:07:30 alex Exp $
|
# $Id: sample-ngircd.conf,v 1.32 2005/03/15 16:56:16 alex Exp $
|
||||||
|
|
||||||
#
|
#
|
||||||
# This is a sample configuration file for the ngIRCd, which must be adepted
|
# This is a sample configuration file for the ngIRCd, which must be adepted
|
||||||
|
@ -89,6 +89,10 @@
|
||||||
# they are not(!) channel-operators?
|
# they are not(!) channel-operators?
|
||||||
;OperCanUseMode = no
|
;OperCanUseMode = no
|
||||||
|
|
||||||
|
# Mask IRC Operator mode requests as if they were coming from the server?
|
||||||
|
# (This is a compatibility hack for ircd-irc2 servers )
|
||||||
|
;OperServerMode = no
|
||||||
|
|
||||||
# Maximum number of simultaneous connection the server is allowed
|
# Maximum number of simultaneous connection the server is allowed
|
||||||
# to accept (<=0: unlimited):
|
# to accept (<=0: unlimited):
|
||||||
;MaxConnections = -1
|
;MaxConnections = -1
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: ngircd.conf.5,v 1.15 2005/03/02 16:07:31 alex Exp $
|
.\" $Id: ngircd.conf.5,v 1.16 2005/03/15 16:56:17 alex Exp $
|
||||||
.\"
|
.\"
|
||||||
.TH ngircd.conf 5 "February 2005" ngircd "ngIRCd Manual"
|
.TH ngircd.conf 5 "February 2005" ngircd "ngIRCd Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@ -137,6 +137,11 @@ The server tries every <ConnectRetry> seconds to establish a link to not yet
|
||||||
Should IRC Operators be allowed to use the MODE command even if they are
|
Should IRC Operators be allowed to use the MODE command even if they are
|
||||||
not(!) channel-operators? Default: no.
|
not(!) channel-operators? Default: no.
|
||||||
.TP
|
.TP
|
||||||
|
\fBOperServerMode\fR
|
||||||
|
If OperCanUseMode is enabled, this may lead the compatibility problems with
|
||||||
|
Servers that run the ircd-irc2 Software. This Option "masks" mode requests
|
||||||
|
by non-chanops as if they were coming from the server. Default: no.
|
||||||
|
.TP
|
||||||
\fBMaxConnections\fR
|
\fBMaxConnections\fR
|
||||||
Maximum number of simultaneous connection the server is allowed to accept
|
Maximum number of simultaneous connection the server is allowed to accept
|
||||||
(<=0: unlimited). Default: -1.
|
(<=0: unlimited). Default: -1.
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#include "portab.h"
|
#include "portab.h"
|
||||||
|
|
||||||
static char UNUSED id[] = "$Id: conf.c,v 1.69 2005/03/02 16:07:31 alex Exp $";
|
static char UNUSED id[] = "$Id: conf.c,v 1.70 2005/03/15 16:56:18 alex Exp $";
|
||||||
|
|
||||||
#include "imp.h"
|
#include "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -142,6 +142,7 @@ Conf_Test( VOID )
|
||||||
printf( " PongTimeout = %d\n", Conf_PongTimeout );
|
printf( " PongTimeout = %d\n", Conf_PongTimeout );
|
||||||
printf( " ConnectRetry = %d\n", Conf_ConnectRetry );
|
printf( " ConnectRetry = %d\n", Conf_ConnectRetry );
|
||||||
printf( " OperCanUseMode = %s\n", Conf_OperCanMode == TRUE ? "yes" : "no" );
|
printf( " OperCanUseMode = %s\n", Conf_OperCanMode == TRUE ? "yes" : "no" );
|
||||||
|
printf( " OperServerMode = %s\n", Conf_OperServerMode == TRUE ? "yes" : "no" );
|
||||||
if( Conf_MaxConnections > 0 ) printf( " MaxConnections = %ld\n", Conf_MaxConnections );
|
if( Conf_MaxConnections > 0 ) printf( " MaxConnections = %ld\n", Conf_MaxConnections );
|
||||||
else printf( " MaxConnections = -1\n" );
|
else printf( " MaxConnections = -1\n" );
|
||||||
if( Conf_MaxConnectionsIP > 0 ) printf( " MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP );
|
if( Conf_MaxConnectionsIP > 0 ) printf( " MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP );
|
||||||
|
@ -374,6 +375,7 @@ Set_Defaults( BOOLEAN InitServers )
|
||||||
Conf_Channel_Count = 0;
|
Conf_Channel_Count = 0;
|
||||||
|
|
||||||
Conf_OperCanMode = FALSE;
|
Conf_OperCanMode = FALSE;
|
||||||
|
Conf_OperServerMode = FALSE;
|
||||||
|
|
||||||
Conf_MaxConnections = -1;
|
Conf_MaxConnections = -1;
|
||||||
Conf_MaxConnectionsIP = 5;
|
Conf_MaxConnectionsIP = 5;
|
||||||
|
@ -561,6 +563,17 @@ Read_Config( VOID )
|
||||||
} /* Read_Config */
|
} /* Read_Config */
|
||||||
|
|
||||||
|
|
||||||
|
LOCAL BOOLEAN
|
||||||
|
Check_ArgIsTrue( const char *Arg )
|
||||||
|
{
|
||||||
|
if( strcasecmp( Arg, "yes" ) == 0 ) return TRUE;
|
||||||
|
if( strcasecmp( Arg, "true" ) == 0 ) return TRUE;
|
||||||
|
if( atoi( Arg ) != 0 ) return TRUE;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
} /* Check_ArgIsTrue */
|
||||||
|
|
||||||
|
|
||||||
LOCAL VOID
|
LOCAL VOID
|
||||||
Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
|
Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
|
||||||
{
|
{
|
||||||
|
@ -734,10 +747,13 @@ Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
|
||||||
if( strcasecmp( Var, "OperCanUseMode" ) == 0 )
|
if( strcasecmp( Var, "OperCanUseMode" ) == 0 )
|
||||||
{
|
{
|
||||||
/* Are IRC operators allowed to use MODE in channels they aren't Op in? */
|
/* Are IRC operators allowed to use MODE in channels they aren't Op in? */
|
||||||
if( strcasecmp( Arg, "yes" ) == 0 ) Conf_OperCanMode = TRUE;
|
Conf_OperCanMode = Check_ArgIsTrue( Arg );
|
||||||
else if( strcasecmp( Arg, "true" ) == 0 ) Conf_OperCanMode = TRUE;
|
return;
|
||||||
else if( atoi( Arg ) != 0 ) Conf_OperCanMode = TRUE;
|
}
|
||||||
else Conf_OperCanMode = FALSE;
|
if( strcasecmp( Var, "OperServerMode" ) == 0 )
|
||||||
|
{
|
||||||
|
/* Mask IRC operator as if coming from the server? (ircd-irc2 compat hack) */
|
||||||
|
Conf_OperServerMode = Check_ArgIsTrue( Arg );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if( strcasecmp( Var, "MaxConnections" ) == 0 )
|
if( strcasecmp( Var, "MaxConnections" ) == 0 )
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
* Please read the file COPYING, README and AUTHORS for more information.
|
||||||
*
|
*
|
||||||
* $Id: conf.h,v 1.31 2005/03/02 16:07:31 alex Exp $
|
* $Id: conf.h,v 1.32 2005/03/15 16:56:18 alex Exp $
|
||||||
*
|
*
|
||||||
* Configuration management (header)
|
* Configuration management (header)
|
||||||
*/
|
*/
|
||||||
|
@ -114,6 +114,11 @@ GLOBAL INT Conf_Channel_Count;
|
||||||
/* Are IRC operators allowed to always use MODE? */
|
/* Are IRC operators allowed to always use MODE? */
|
||||||
GLOBAL BOOLEAN Conf_OperCanMode;
|
GLOBAL BOOLEAN Conf_OperCanMode;
|
||||||
|
|
||||||
|
/* If an IRC op gives chanop privileges without being a chanop,
|
||||||
|
* ircd2 will ignore the command. This enables a workaround:
|
||||||
|
* It masks the command as coming from the server */
|
||||||
|
GLOBAL BOOLEAN Conf_OperServerMode;
|
||||||
|
|
||||||
/* Maximum number of connections to this server */
|
/* Maximum number of connections to this server */
|
||||||
GLOBAL LONG Conf_MaxConnections;
|
GLOBAL LONG Conf_MaxConnections;
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#include "portab.h"
|
#include "portab.h"
|
||||||
|
|
||||||
static char UNUSED id[] = "$Id: irc-mode.c,v 1.38 2005/03/05 11:44:01 alex Exp $";
|
static char UNUSED id[] = "$Id: irc-mode.c,v 1.39 2005/03/15 16:56:18 alex Exp $";
|
||||||
|
|
||||||
#include "imp.h"
|
#include "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -242,7 +242,7 @@ Channel_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel )
|
||||||
/* Handle channel and channel-user modes */
|
/* Handle channel and channel-user modes */
|
||||||
|
|
||||||
CHAR the_modes[COMMAND_LEN], the_args[COMMAND_LEN], x[2], argadd[CLIENT_PASS_LEN], *mode_ptr;
|
CHAR the_modes[COMMAND_LEN], the_args[COMMAND_LEN], x[2], argadd[CLIENT_PASS_LEN], *mode_ptr;
|
||||||
BOOLEAN ok, set, modeok, skiponce;
|
BOOLEAN ok, set, modeok = FALSE, skiponce, use_servermode = FALSE;
|
||||||
INT mode_arg, arg_arg;
|
INT mode_arg, arg_arg;
|
||||||
CLIENT *client;
|
CLIENT *client;
|
||||||
LONG l;
|
LONG l;
|
||||||
|
@ -286,11 +286,13 @@ Channel_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel )
|
||||||
|
|
||||||
/* Is he channel operator? */
|
/* Is he channel operator? */
|
||||||
if( strchr( Channel_UserModes( Channel, Origin ), 'o' )) modeok = TRUE;
|
if( strchr( Channel_UserModes( Channel, Origin ), 'o' )) modeok = TRUE;
|
||||||
else modeok = FALSE;
|
else if( Conf_OperCanMode )
|
||||||
if( Conf_OperCanMode )
|
|
||||||
{
|
{
|
||||||
/* auch IRC-Operatoren duerfen MODE verwenden */
|
/* IRC-Operators can use MODE as well */
|
||||||
if( Client_OperByMe( Origin )) modeok = TRUE;
|
if( Client_OperByMe( Origin )) {
|
||||||
|
modeok = TRUE;
|
||||||
|
if ( Conf_OperServerMode ) use_servermode = TRUE; /* Change Origin to Server */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else modeok = TRUE;
|
else modeok = TRUE;
|
||||||
|
@ -584,6 +586,8 @@ chan_exit:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if ( use_servermode ) Origin = Client_ThisServer();
|
||||||
|
|
||||||
/* Send reply to client and inform other servers and channel users */
|
/* Send reply to client and inform other servers and channel users */
|
||||||
ok = IRC_WriteStrClientPrefix( Client, Origin, "MODE %s %s%s", Channel_Name( Channel ), the_modes, the_args );
|
ok = IRC_WriteStrClientPrefix( Client, Origin, "MODE %s %s%s", Channel_Name( Channel ), the_modes, the_args );
|
||||||
IRC_WriteStrServersPrefix( Client, Origin, "MODE %s %s%s", Channel_Name( Channel ), the_modes, the_args );
|
IRC_WriteStrServersPrefix( Client, Origin, "MODE %s %s%s", Channel_Name( Channel ), the_modes, the_args );
|
||||||
|
|
Loading…
Reference in New Issue