mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 22:13:00 +00:00 
			
		
		
		
	merge Conf_PredefChannelsOnly Config Option [from HEAD]
This commit is contained in:
		| @@ -14,6 +14,8 @@ ngIRCd 0.10.x | ||||
|  | ||||
|   - Fixed validation of server names containing digits. | ||||
|   - Update info text of local server after re-reading configuration. | ||||
|   - New configuration option "PredefChannelsOnly": if set, clients can | ||||
|    only join predefined channels. | ||||
|  | ||||
| ngIRCd 0.10.0 (2006-10-01) | ||||
|  | ||||
| @@ -666,4 +668,4 @@ ngIRCd 0.0.1, 31.12.2001 | ||||
|  | ||||
|  | ||||
| --  | ||||
| $Id: ChangeLog,v 1.302.2.6 2006/11/10 10:06:14 alex Exp $ | ||||
| $Id: ChangeLog,v 1.302.2.7 2006/12/02 13:10:44 fw Exp $ | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| # $Id: sample-ngircd.conf,v 1.37 2006/04/09 12:27:23 alex Exp $ | ||||
| # $Id: sample-ngircd.conf,v 1.37.2.1 2006/12/02 13:10:43 fw Exp $ | ||||
|  | ||||
| # | ||||
| # This is a sample configuration file for the ngIRCd, which must be adepted | ||||
| @@ -93,6 +93,9 @@ | ||||
| 	# server? (This is a compatibility hack for ircd-irc2 servers) | ||||
| 	;OperServerMode = no | ||||
|  | ||||
| 	# Allow Pre-Defined Channels only (see Section [Channels]) | ||||
| 	;PredefChannelsOnly = no | ||||
|  | ||||
| 	# Maximum number of simultaneous connection the server is allowed | ||||
| 	# to accept (<=0: unlimited): | ||||
| 	;MaxConnections = -1 | ||||
|   | ||||
| @@ -14,7 +14,7 @@ | ||||
|  | ||||
| #include "portab.h" | ||||
|  | ||||
| static char UNUSED id[] = "$Id: conf.c,v 1.92.2.2 2006/11/10 10:06:14 alex Exp $"; | ||||
| static char UNUSED id[] = "$Id: conf.c,v 1.92.2.3 2006/12/02 13:10:43 fw Exp $"; | ||||
|  | ||||
| #include "imp.h" | ||||
| #include <assert.h> | ||||
| @@ -202,8 +202,9 @@ Conf_Test( void ) | ||||
| 	printf( "  PingTimeout = %d\n", Conf_PingTimeout ); | ||||
| 	printf( "  PongTimeout = %d\n", Conf_PongTimeout ); | ||||
| 	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" ); | ||||
| 	printf( "  PredefChannelsOnly = %s\n", Conf_PredefChannelsOnly == true ? "yes" : "no" ); | ||||
| 	printf( "  MaxConnections = %ld\n", Conf_MaxConnections>0 ? Conf_MaxConnections : -1); | ||||
| 	printf( "  MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP>0 ? Conf_MaxConnectionsIP : -1); | ||||
| 	printf( "  MaxJoins = %d\n\n", Conf_MaxJoins>0 ? Conf_MaxJoins : -1); | ||||
| @@ -271,14 +272,14 @@ Conf_UnsetServer( CONN_ID Idx ) | ||||
| 			Init_Server_Struct( &Conf_Server[i] ); | ||||
| 		} else { | ||||
| 			/* Set time for next connect attempt */ | ||||
|  			t = time(NULL); | ||||
|  			if (Conf_Server[i].lasttry < t - Conf_ConnectRetry) { | ||||
|  				/* The connection has been "long", so we don't | ||||
|  				 * require the next attempt to be delayed. */ | ||||
|  				Conf_Server[i].lasttry = | ||||
|  					t - Conf_ConnectRetry + RECONNECT_DELAY; | ||||
|  			} else | ||||
|  				Conf_Server[i].lasttry = t; | ||||
| 			t = time(NULL); | ||||
| 			if (Conf_Server[i].lasttry < t - Conf_ConnectRetry) { | ||||
| 				/* The connection has been "long", so we don't | ||||
| 				 * require the next attempt to be delayed. */ | ||||
| 				Conf_Server[i].lasttry = | ||||
| 					t - Conf_ConnectRetry + RECONNECT_DELAY; | ||||
| 			} else | ||||
| 				Conf_Server[i].lasttry = t; | ||||
| 		} | ||||
| 	} | ||||
| } /* Conf_UnsetServer */ | ||||
| @@ -422,6 +423,7 @@ Set_Defaults( bool InitServers ) | ||||
| 	Conf_Channel_Count = 0; | ||||
|  | ||||
| 	Conf_OperCanMode = false; | ||||
| 	Conf_PredefChannelsOnly = false; | ||||
| 	Conf_OperServerMode = false; | ||||
|  | ||||
| 	Conf_MaxConnections = -1; | ||||
| @@ -753,6 +755,11 @@ Handle_GLOBAL( int Line, char *Var, char *Arg ) | ||||
| 		} | ||||
| 		return; | ||||
| 	} | ||||
| 	if( strcasecmp( Var, "PredefChannelsOnly" ) == 0 ) { | ||||
| 		/* Should we only allow pre-defined-channels? (i.e. users cannot create their own channels) */ | ||||
| 		Conf_PredefChannelsOnly = Check_ArgIsTrue( Arg ); | ||||
| 		return; | ||||
| 	} | ||||
| 	if( strcasecmp( Var, "OperCanUseMode" ) == 0 ) { | ||||
| 		/* Are IRC operators allowed to use MODE in channels they aren't Op in? */ | ||||
| 		Conf_OperCanMode = Check_ArgIsTrue( Arg ); | ||||
| @@ -915,6 +922,21 @@ Handle_SERVER( int Line, char *Var, char *Arg ) | ||||
| } /* Handle_SERVER */ | ||||
|  | ||||
|  | ||||
| static bool | ||||
| Handle_Channelname(size_t chancount, const char *name) | ||||
| { | ||||
| 	size_t size = sizeof( Conf_Channel[chancount].name ); | ||||
| 	char *dest = Conf_Channel[chancount].name; | ||||
|  | ||||
| 	if (*name && *name != '#') { | ||||
| 		*dest = '#'; | ||||
| 		--size; | ||||
| 		++dest; | ||||
| 	} | ||||
| 	return size > strlcpy(dest, name, size); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| Handle_CHANNEL( int Line, char *Var, char *Arg ) | ||||
| { | ||||
| @@ -928,9 +950,7 @@ Handle_CHANNEL( int Line, char *Var, char *Arg ) | ||||
| 		chancount = Conf_Channel_Count - 1; | ||||
|  | ||||
| 	if( strcasecmp( Var, "Name" ) == 0 ) { | ||||
| 		/* Name of the channel */ | ||||
| 		len = strlcpy( Conf_Channel[chancount].name, Arg, sizeof( Conf_Channel[chancount].name )); | ||||
| 		if (len >= sizeof( Conf_Channel[chancount].name )) | ||||
| 		if (!Handle_Channelname(chancount, Arg)) | ||||
| 			Config_Error_TooLong( Line, Var ); | ||||
| 		return; | ||||
| 	} | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|  * (at your option) any later version. | ||||
|  * Please read the file COPYING, README and AUTHORS for more information. | ||||
|  * | ||||
|  * $Id: conf.h,v 1.40 2006/05/10 21:24:01 alex Exp $ | ||||
|  * $Id: conf.h,v 1.40.2.1 2006/12/02 13:10:43 fw Exp $ | ||||
|  * | ||||
|  * Configuration management (header) | ||||
|  */ | ||||
| @@ -110,6 +110,8 @@ GLOBAL CONF_SERVER Conf_Server[MAX_SERVERS]; | ||||
| /* Pre-defined channels */ | ||||
| GLOBAL CONF_CHANNEL Conf_Channel[MAX_DEFCHANNELS]; | ||||
| GLOBAL unsigned int Conf_Channel_Count; | ||||
| /* Pre-defined channels only */ | ||||
| GLOBAL bool Conf_PredefChannelsOnly; | ||||
|  | ||||
| /* Are IRC operators allowed to always use MODE? */ | ||||
| GLOBAL bool Conf_OperCanMode; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Florian Westphal
					Florian Westphal