Adding a virtualserver channel limit
This commit is contained in:
		
							parent
							
								
									d8337214f0
								
							
						
					
					
						commit
						87d607335e
					
				| @ -590,9 +590,10 @@ command_result ConnectedClient::handleCommandChannelCreate(Command &cmd) { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     { |     { | ||||||
|         size_t created_tmp = 0, created_semi = 0, created_perm = 0; |         size_t created_total = 0, created_tmp = 0, created_semi = 0, created_perm = 0; | ||||||
|         auto own_cldbid = this->getClientDatabaseId(); |         auto own_cldbid = this->getClientDatabaseId(); | ||||||
|         for(const auto& channel : target_tree->channels()) { |         for(const auto& channel : target_tree->channels()) { | ||||||
|  |             created_total++; | ||||||
|             if(channel->properties()[property::CHANNEL_CREATED_BY] == own_cldbid) { |             if(channel->properties()[property::CHANNEL_CREATED_BY] == own_cldbid) { | ||||||
|                 if(channel->properties()[property::CHANNEL_FLAG_PERMANENT].as<bool>()) |                 if(channel->properties()[property::CHANNEL_FLAG_PERMANENT].as<bool>()) | ||||||
|                     created_perm++; |                     created_perm++; | ||||||
| @ -603,6 +604,8 @@ command_result ConnectedClient::handleCommandChannelCreate(Command &cmd) { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         if(created_total >= this->server->properties()[property::VIRTUALSERVER_MAX_CHANNELS].as<uint64_t>()) | ||||||
|  |             return command_result{error::channel_limit_reached}; | ||||||
| 
 | 
 | ||||||
|         auto max_channels = this->calculate_permission(permission::i_client_max_channels, 0, false, permission_cache); |         auto max_channels = this->calculate_permission(permission::i_client_max_channels, 0, false, permission_cache); | ||||||
|         if(max_channels.has_value) { |         if(max_channels.has_value) { | ||||||
|  | |||||||
| @ -92,6 +92,10 @@ command_result ConnectedClient::handleCommandServerEdit(Command &cmd) { | |||||||
|             if (cmd["virtualserver_maxclients"].as<size_t>() > 1024) |             if (cmd["virtualserver_maxclients"].as<size_t>() > 1024) | ||||||
|                 return command_result{error::accounting_slot_limit_reached, "Do you really need more that 1024 slots?"}; |                 return command_result{error::accounting_slot_limit_reached, "Do you really need more that 1024 slots?"}; | ||||||
|         } SERVEREDIT_CHK_PROP_CACHED("virtualserver_reserved_slots", permission::b_virtualserver_modify_reserved_slots, size_t) } |         } SERVEREDIT_CHK_PROP_CACHED("virtualserver_reserved_slots", permission::b_virtualserver_modify_reserved_slots, size_t) } | ||||||
|  |         SERVEREDIT_CHK_PROP_CACHED("virtualserver_max_channels", permission::b_virtualserver_modify_maxchannels, size_t) | ||||||
|  |             if(cmd["virtualserver_max_channels"].as<size_t>() > 8192) | ||||||
|  |                 return command_result{error::channel_protocol_limit_reached}; | ||||||
|  |         } | ||||||
|         SERVEREDIT_CHK_PROP_CACHED("virtualserver_icon_id", permission::b_virtualserver_modify_icon_id, int64_t) } |         SERVEREDIT_CHK_PROP_CACHED("virtualserver_icon_id", permission::b_virtualserver_modify_icon_id, int64_t) } | ||||||
|         SERVEREDIT_CHK_PROP_CACHED("virtualserver_channel_temp_delete_delay_default", permission::b_virtualserver_modify_channel_temp_delete_delay_default, ChannelId) } |         SERVEREDIT_CHK_PROP_CACHED("virtualserver_channel_temp_delete_delay_default", permission::b_virtualserver_modify_channel_temp_delete_delay_default, ChannelId) } | ||||||
|         SERVEREDIT_CHK_PROP_CACHED("virtualserver_codec_encryption_mode", permission::b_virtualserver_modify_codec_encryption_mode, int) } |         SERVEREDIT_CHK_PROP_CACHED("virtualserver_codec_encryption_mode", permission::b_virtualserver_modify_codec_encryption_mode, int) } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user