Skip to content

Commit 657a16d

Browse files
committedNov 13, 2015
Only allow players with shout to chat
Fix regression of commit 5e507c9 "Add server side ncurses terminal" which allowed all players, even those without a shout priv, to chat. Fixes #3362.
1 parent 3685552 commit 657a16d

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed
 

Diff for: ‎src/network/serverpackethandler.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -1063,7 +1063,8 @@ void Server::handleCommand_ChatMessage(NetworkPacket* pkt)
10631063
std::string name = player->getName();
10641064
std::wstring wname = narrow_to_wide(name);
10651065

1066-
std::wstring answer_to_sender = handleChat(name, wname, message, pkt->getPeerId());
1066+
std::wstring answer_to_sender = handleChat(name, wname, message,
1067+
true, pkt->getPeerId());
10671068
if (!answer_to_sender.empty()) {
10681069
// Send the answer to sender
10691070
SendChatMessage(pkt->getPeerId(), answer_to_sender);

Diff for: ‎src/server.cpp

+11-5
Original file line numberDiff line numberDiff line change
@@ -2755,7 +2755,8 @@ void Server::handleChatInterfaceEvent(ChatEvent *evt)
27552755
}
27562756

27572757
std::wstring Server::handleChat(const std::string &name, const std::wstring &wname,
2758-
const std::wstring &wmessage, u16 peer_id_to_avoid_sending)
2758+
const std::wstring &wmessage, bool check_shout_priv,
2759+
u16 peer_id_to_avoid_sending)
27592760
{
27602761
// If something goes wrong, this player is to blame
27612762
RollbackScopeActor rollback_scope(m_rollback,
@@ -2783,10 +2784,15 @@ std::wstring Server::handleChat(const std::string &name, const std::wstring &wna
27832784
else
27842785
line += L"-!- Invalid command: " + str_split(wcmd, L' ')[0];
27852786
} else {
2786-
line += L"<";
2787-
line += wname;
2788-
line += L"> ";
2789-
line += wmessage;
2787+
if (check_shout_priv && !checkPriv(name, "shout")) {
2788+
line += L"-!- You don't have permission to shout.";
2789+
broadcast_line = false;
2790+
} else {
2791+
line += L"<";
2792+
line += wname;
2793+
line += L"> ";
2794+
line += wmessage;
2795+
}
27902796
}
27912797

27922798
/*

Diff for: ‎src/server.h

+1
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
481481
// This returns the answer to the sender of wmessage, or "" if there is none
482482
std::wstring handleChat(const std::string &name, const std::wstring &wname,
483483
const std::wstring &wmessage,
484+
bool check_shout_priv = false,
484485
u16 peer_id_to_avoid_sending = PEER_ID_INEXISTENT);
485486
void handleAdminChat(const ChatEventChat *evt);
486487

0 commit comments

Comments
 (0)
Please sign in to comment.