Skip to content

Commit a5197ea

Browse files
authoredDec 24, 2018
CSM: add requested CSM_RF_READ_PLAYERINFO (#8007)
* CSM: add requested CSM_RF_READ_PLAYERINFO This new CSM limit permit to limit PLAYERINFO read from server. It affects get_player_names call
1 parent 9080d7c commit a5197ea

File tree

7 files changed

+20
-6
lines changed

7 files changed

+20
-6
lines changed
 

Diff for: ‎builtin/client/chatcommands.lua

+7-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,13 @@ end)
4040
core.register_chatcommand("list_players", {
4141
description = core.gettext("List online players"),
4242
func = function(param)
43-
local players = table.concat(core.get_player_names(), ", ")
44-
core.display_chat_message(core.gettext("Online players: ") .. players)
43+
local player_names = core.get_player_names()
44+
if not player_names then
45+
return false, core.gettext("This command is disabled by server.")
46+
end
47+
48+
local players = table.concat(player_names, ", ")
49+
return true, core.gettext("Online players: ") .. players
4550
end
4651
})
4752

Diff for: ‎builtin/settingtypes.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1198,7 +1198,7 @@ server_side_occlusion_culling (Server side occlusion culling) bool true
11981198
# READ_NODEDEFS: 8 (disable get_node_def call client-side)
11991199
# LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to
12001200
# csm_restriction_noderange)
1201-
csm_restriction_flags (Client side modding restrictions) int 30
1201+
csm_restriction_flags (Client side modding restrictions) int 62
12021202

12031203
# If the CSM restriction for node range is enabled, get_node calls are limited
12041204
# to this distance from the player to the node.

Diff for: ‎doc/client_lua_api.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,7 @@ Call these functions only at load time!
763763

764764
### Client Environment
765765
* `minetest.get_player_names()`
766-
* Returns list of player names on server
766+
* Returns list of player names on server (nil if CSM_RF_READ_PLAYERINFO is enabled by server)
767767
* `minetest.disconnect()`
768768
* Disconnect from the server and exit to main menu.
769769
* Returns `false` if the client is already disconnecting otherwise returns `true`.

Diff for: ‎minetest.conf.example

+2-1
Original file line numberDiff line numberDiff line change
@@ -1468,8 +1468,9 @@
14681468
# READ_NODEDEFS: 8 (disable get_node_def call client-side)
14691469
# LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to
14701470
# csm_restriction_noderange)
1471+
# READ_PLAYERINFO: 32 (disable get_player_names call client-side)
14711472
# type: int
1472-
# csm_restriction_flags = 30
1473+
# csm_restriction_flags = 62
14731474

14741475
# If the CSM restriction for node range is enabled, get_node calls are limited
14751476
# to this distance from the player to the node.

Diff for: ‎src/defaultsettings.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ void set_default_settings(Settings *settings)
346346
settings->setDefault("max_block_send_distance", "9");
347347
settings->setDefault("block_send_optimize_distance", "4");
348348
settings->setDefault("server_side_occlusion_culling", "true");
349-
settings->setDefault("csm_restriction_flags", "30");
349+
settings->setDefault("csm_restriction_flags", "62");
350350
settings->setDefault("csm_restriction_noderange", "0");
351351
settings->setDefault("max_clearobjects_extra_loaded_blocks", "4096");
352352
settings->setDefault("time_speed", "72");

Diff for: ‎src/network/networkprotocol.h

+1
Original file line numberDiff line numberDiff line change
@@ -952,5 +952,6 @@ enum CSMRestrictionFlags : u64 {
952952
CSM_RF_READ_ITEMDEFS = 0x00000004, // Disable itemdef lookups
953953
CSM_RF_READ_NODEDEFS = 0x00000008, // Disable nodedef lookups
954954
CSM_RF_LOOKUP_NODES = 0x00000010, // Limit node lookups
955+
CSM_RF_READ_PLAYERINFO = 0x00000020, // Disable player info lookups
955956
CSM_RF_ALL = 0xFFFFFFFF,
956957
};

Diff for: ‎src/script/lua_api/l_client.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ int ModApiClient::l_clear_out_chat_queue(lua_State *L)
116116
// get_player_names()
117117
int ModApiClient::l_get_player_names(lua_State *L)
118118
{
119+
// clang-format off
120+
if (getClient(L)->checkCSMRestrictionFlag(
121+
CSMRestrictionFlags::CSM_RF_READ_PLAYERINFO)) {
122+
return 0;
123+
}
124+
// clang-format on
125+
119126
const std::list<std::string> &plist = getClient(L)->getConnectedPlayerNames();
120127
lua_createtable(L, plist.size(), 0);
121128
int newTable = lua_gettop(L);

0 commit comments

Comments
 (0)
Please sign in to comment.