mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	Only allow players with shout to chat
Fix regression of commit
5e507c9829 "Add server side ncurses terminal"
which allowed all players, even those without a shout priv, to chat.
Fixes #3362.
			
			
This commit is contained in:
		@@ -1063,7 +1063,8 @@ void Server::handleCommand_ChatMessage(NetworkPacket* pkt)
 | 
			
		||||
	std::string name = player->getName();
 | 
			
		||||
	std::wstring wname = narrow_to_wide(name);
 | 
			
		||||
 | 
			
		||||
	std::wstring answer_to_sender = handleChat(name, wname, message, pkt->getPeerId());
 | 
			
		||||
	std::wstring answer_to_sender = handleChat(name, wname, message,
 | 
			
		||||
		true, pkt->getPeerId());
 | 
			
		||||
	if (!answer_to_sender.empty()) {
 | 
			
		||||
		// Send the answer to sender
 | 
			
		||||
		SendChatMessage(pkt->getPeerId(), answer_to_sender);
 | 
			
		||||
 
 | 
			
		||||
@@ -2755,7 +2755,8 @@ void Server::handleChatInterfaceEvent(ChatEvent *evt)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::wstring Server::handleChat(const std::string &name, const std::wstring &wname,
 | 
			
		||||
	const std::wstring &wmessage, u16 peer_id_to_avoid_sending)
 | 
			
		||||
	const std::wstring &wmessage, bool check_shout_priv,
 | 
			
		||||
	u16 peer_id_to_avoid_sending)
 | 
			
		||||
{
 | 
			
		||||
	// If something goes wrong, this player is to blame
 | 
			
		||||
	RollbackScopeActor rollback_scope(m_rollback,
 | 
			
		||||
@@ -2783,10 +2784,15 @@ std::wstring Server::handleChat(const std::string &name, const std::wstring &wna
 | 
			
		||||
		else
 | 
			
		||||
			line += L"-!- Invalid command: " + str_split(wcmd, L' ')[0];
 | 
			
		||||
	} else {
 | 
			
		||||
		line += L"<";
 | 
			
		||||
		line += wname;
 | 
			
		||||
		line += L"> ";
 | 
			
		||||
		line += wmessage;
 | 
			
		||||
		if (check_shout_priv && !checkPriv(name, "shout")) {
 | 
			
		||||
			line += L"-!- You don't have permission to shout.";
 | 
			
		||||
			broadcast_line = false;
 | 
			
		||||
		} else {
 | 
			
		||||
			line += L"<";
 | 
			
		||||
			line += wname;
 | 
			
		||||
			line += L"> ";
 | 
			
		||||
			line += wmessage;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
 
 | 
			
		||||
@@ -481,6 +481,7 @@ private:
 | 
			
		||||
	// This returns the answer to the sender of wmessage, or "" if there is none
 | 
			
		||||
	std::wstring handleChat(const std::string &name, const std::wstring &wname,
 | 
			
		||||
		const std::wstring &wmessage,
 | 
			
		||||
		bool check_shout_priv = false,
 | 
			
		||||
		u16 peer_id_to_avoid_sending = PEER_ID_INEXISTENT);
 | 
			
		||||
	void handleAdminChat(const ChatEventChat *evt);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user