mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 05:52:59 +00:00 
			
		
		
		
	Merge branch 'bug152-AllowedChannelTypes'
* bug152-AllowedChannelTypes: Implement new configuration option "AllowedChannelTypes" Introduce "CHANTYPES" #define
This commit is contained in:
		| @@ -391,6 +391,7 @@ Conf_Test( void ) | ||||
| 	puts(""); | ||||
|  | ||||
| 	puts("[OPTIONS]"); | ||||
| 	printf("  AllowedChannelTypes = %s\n", Conf_AllowedChannelTypes); | ||||
| 	printf("  AllowRemoteOper = %s\n", yesno_to_str(Conf_AllowRemoteOper)); | ||||
| 	printf("  ChrootDir = %s\n", Conf_Chroot); | ||||
| 	printf("  CloakHost = %s\n", Conf_CloakHost); | ||||
| @@ -415,7 +416,6 @@ Conf_Test( void ) | ||||
| 	printf("  PAM = %s\n", yesno_to_str(Conf_PAM)); | ||||
| 	printf("  PAMIsOptional = %s\n", yesno_to_str(Conf_PAMIsOptional)); | ||||
| #endif | ||||
| 	printf("  PredefChannelsOnly = %s\n", yesno_to_str(Conf_PredefChannelsOnly)); | ||||
| #ifndef STRICT_RFC | ||||
| 	printf("  RequireAuthPing = %s\n", yesno_to_str(Conf_AuthPing)); | ||||
| #endif | ||||
| @@ -758,6 +758,8 @@ Set_Defaults(bool InitServers) | ||||
| 	Conf_PongTimeout = 20; | ||||
|  | ||||
| 	/* Options */ | ||||
| 	strlcpy(Conf_AllowedChannelTypes, CHANTYPES, | ||||
| 		sizeof(Conf_AllowedChannelTypes)); | ||||
| 	Conf_AllowRemoteOper = false; | ||||
| #ifndef STRICT_RFC | ||||
| 	Conf_AuthPing = false; | ||||
| @@ -792,7 +794,6 @@ Set_Defaults(bool InitServers) | ||||
| 	Conf_PAM = false; | ||||
| #endif | ||||
| 	Conf_PAMIsOptional = false; | ||||
| 	Conf_PredefChannelsOnly = false; | ||||
| #ifdef SYSLOG | ||||
| 	Conf_ScrubCTCP = false; | ||||
| #ifdef LOG_LOCAL5 | ||||
| @@ -1633,12 +1634,37 @@ static void | ||||
| Handle_OPTIONS(const char *File, int Line, char *Var, char *Arg) | ||||
| { | ||||
| 	size_t len; | ||||
| 	char *p; | ||||
|  | ||||
| 	assert(File != NULL); | ||||
| 	assert(Line > 0); | ||||
| 	assert(Var != NULL); | ||||
| 	assert(Arg != NULL); | ||||
|  | ||||
| 	if (strcasecmp(Var, "AllowedChannelTypes") == 0) { | ||||
| 		p = Arg; | ||||
| 		Conf_AllowedChannelTypes[0] = '\0'; | ||||
| 		while (*p) { | ||||
| 			if (strchr(Conf_AllowedChannelTypes, *p)) { | ||||
| 				/* Prefix is already included; ignore it */ | ||||
| 				p++; | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
| 			if (strchr(CHANTYPES, *p)) { | ||||
| 				len = strlen(Conf_AllowedChannelTypes) + 1; | ||||
| 				assert(len < sizeof(Conf_AllowedChannelTypes)); | ||||
| 				Conf_AllowedChannelTypes[len - 1] = *p; | ||||
| 				Conf_AllowedChannelTypes[len] = '\0'; | ||||
| 			} else { | ||||
| 				Config_Error(LOG_WARNING, | ||||
| 					     "%s, line %d: Unknown channel prefix \"%c\" in \"AllowedChannelTypes\"!", | ||||
| 					     File, Line, *p); | ||||
| 			} | ||||
| 			p++; | ||||
| 		} | ||||
| 		return; | ||||
| 	} | ||||
| 	if (strcasecmp(Var, "AllowRemoteOper") == 0) { | ||||
| 		Conf_AllowRemoteOper = Check_ArgIsTrue(Arg); | ||||
| 		return; | ||||
| @@ -1731,7 +1757,19 @@ Handle_OPTIONS(const char *File, int Line, char *Var, char *Arg) | ||||
| 		return; | ||||
| 	} | ||||
| 	if (strcasecmp(Var, "PredefChannelsOnly") == 0) { | ||||
| 		Conf_PredefChannelsOnly = Check_ArgIsTrue(Arg); | ||||
| 		/* | ||||
| 		 * TODO: This section and support for "PredefChannelsOnly" | ||||
| 		 * could be removed starting with ngIRCd release 22 (one | ||||
| 		 * release after marking it "deprecated") ... | ||||
| 		 */ | ||||
| 		Config_Error(LOG_WARNING, | ||||
| 			     "%s, line %d (section \"Options\"): \"%s\" is deprecated, please use \"AllowedChannelTypes\"!", | ||||
| 			     File, Line, Var); | ||||
| 		if (Check_ArgIsTrue(Arg)) | ||||
| 			Conf_AllowedChannelTypes[0] = '\0'; | ||||
| 		else | ||||
| 			strlcpy(Conf_AllowedChannelTypes, CHANTYPES, | ||||
| 				sizeof(Conf_AllowedChannelTypes)); | ||||
| 		return; | ||||
| 	} | ||||
| #ifndef STRICT_RFC | ||||
|   | ||||
| @@ -148,8 +148,8 @@ GLOBAL CONF_SERVER Conf_Server[MAX_SERVERS]; | ||||
| /** Array of pre-defined channels */ | ||||
| GLOBAL array Conf_Channels; | ||||
|  | ||||
| /** Flag indicating if only pre-defined channels are allowed (true) or not */ | ||||
| GLOBAL bool Conf_PredefChannelsOnly; | ||||
| /** String containing all locally allowed channel prefixes for new channels */ | ||||
| GLOBAL char Conf_AllowedChannelTypes[8]; | ||||
|  | ||||
| /** Flag indicating if IRC operators are allowed to always use MODE (true) */ | ||||
| GLOBAL bool Conf_OperCanMode; | ||||
|   | ||||
| @@ -178,6 +178,9 @@ | ||||
| /** Supported channel modes. */ | ||||
| #define CHANMODES "abehiIklmMnoOPqQrRstvVz" | ||||
|  | ||||
| /** Supported channel types. */ | ||||
| #define CHANTYPES "#&+" | ||||
|  | ||||
| /** Away message for users connected to linked servers. */ | ||||
| #define DEFAULT_AWAY_MSG "Away" | ||||
|  | ||||
|   | ||||
| @@ -344,7 +344,7 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req ) | ||||
| 		} | ||||
|  | ||||
| 		chan = Channel_Search(channame); | ||||
| 		if (!chan && Conf_PredefChannelsOnly) { | ||||
| 		if (!chan && !strchr(Conf_AllowedChannelTypes, channame[0])) { | ||||
| 			 /* channel must be created, but forbidden by config */ | ||||
| 			IRC_WriteStrClient(Client, ERR_NOSUCHCHANNEL_MSG, | ||||
| 					   Client_ID(Client), channame); | ||||
|   | ||||
| @@ -1580,7 +1580,7 @@ GLOBAL bool | ||||
| IRC_Send_ISUPPORT(CLIENT * Client) | ||||
| { | ||||
| 	if (!IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client), | ||||
| 				Conf_MaxJoins)) | ||||
| 				CHANTYPES, CHANTYPES, Conf_MaxJoins)) | ||||
| 		return DISCONNECTED; | ||||
| 	return IRC_WriteStrClient(Client, RPL_ISUPPORT2_MSG, Client_ID(Client), | ||||
| 				  CHANNEL_NAME_LEN - 1, Conf_MaxNickLength - 1, | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * ngIRCd -- The Next Generation IRC Daemon | ||||
|  * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors. | ||||
|  * Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
| @@ -21,7 +21,7 @@ | ||||
| #define RPL_YOURHOST_MSG		"002 %s :Your host is %s, running version ngircd-%s (%s/%s/%s)" | ||||
| #define RPL_CREATED_MSG			"003 %s :This server has been started %s" | ||||
| #define RPL_MYINFO_MSG			"004 %s %s ngircd-%s %s %s" | ||||
| #define RPL_ISUPPORT1_MSG		"005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=#&+ CHANMODES=beI,k,l,imMnOPQRstVz CHANLIMIT=#&+:%d :are supported on this server" | ||||
| #define RPL_ISUPPORT1_MSG		"005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=%s CHANMODES=beI,k,l,imMnOPQRstVz CHANLIMIT=%s:%d :are supported on this server" | ||||
| #define RPL_ISUPPORT2_MSG		"005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY :are supported on this server" | ||||
|  | ||||
| #define RPL_TRACELINK_MSG		"200 %s Link %s-%s %s %s V%s %ld %d %d" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton