summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoïc Blot <nerzhul@users.noreply.github.com>2018-12-24 10:51:10 +0100
committerGitHub <noreply@github.com>2018-12-24 10:51:10 +0100
commita5197eaebc61ac6b555a640f36c0b427faef381d (patch)
tree48b4deb787731aba6b2c7f50e3664420cdbe94db
parent9080d7c990e9efd52c418369c83dd365837f2f05 (diff)
downloadminetest-a5197eaebc61ac6b555a640f36c0b427faef381d.tar.gz
minetest-a5197eaebc61ac6b555a640f36c0b427faef381d.tar.bz2
minetest-a5197eaebc61ac6b555a640f36c0b427faef381d.zip
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
-rw-r--r--builtin/client/chatcommands.lua9
-rw-r--r--builtin/settingtypes.txt2
-rw-r--r--doc/client_lua_api.txt2
-rw-r--r--minetest.conf.example3
-rw-r--r--src/defaultsettings.cpp2
-rw-r--r--src/network/networkprotocol.h1
-rw-r--r--src/script/lua_api/l_client.cpp7
7 files changed, 20 insertions, 6 deletions
diff --git a/builtin/client/chatcommands.lua b/builtin/client/chatcommands.lua
index ed43a6140..201ca4a9b 100644
--- a/builtin/client/chatcommands.lua
+++ b/builtin/client/chatcommands.lua
@@ -40,8 +40,13 @@ end)
core.register_chatcommand("list_players", {
description = core.gettext("List online players"),
func = function(param)
- local players = table.concat(core.get_player_names(), ", ")
- core.display_chat_message(core.gettext("Online players: ") .. players)
+ local player_names = core.get_player_names()
+ if not player_names then
+ return false, core.gettext("This command is disabled by server.")
+ end
+
+ local players = table.concat(player_names, ", ")
+ return true, core.gettext("Online players: ") .. players
end
})
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 40db037ea..66d4c324e 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -1198,7 +1198,7 @@ server_side_occlusion_culling (Server side occlusion culling) bool true
# READ_NODEDEFS: 8 (disable get_node_def call client-side)
# LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to
# csm_restriction_noderange)
-csm_restriction_flags (Client side modding restrictions) int 30
+csm_restriction_flags (Client side modding restrictions) int 62
# If the CSM restriction for node range is enabled, get_node calls are limited
# to this distance from the player to the node.
diff --git a/doc/client_lua_api.txt b/doc/client_lua_api.txt
index 3b6e1b25b..41560b983 100644
--- a/doc/client_lua_api.txt
+++ b/doc/client_lua_api.txt
@@ -763,7 +763,7 @@ Call these functions only at load time!
### Client Environment
* `minetest.get_player_names()`
- * Returns list of player names on server
+ * Returns list of player names on server (nil if CSM_RF_READ_PLAYERINFO is enabled by server)
* `minetest.disconnect()`
* Disconnect from the server and exit to main menu.
* Returns `false` if the client is already disconnecting otherwise returns `true`.
diff --git a/minetest.conf.example b/minetest.conf.example
index b76473449..0bf0b988e 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -1468,8 +1468,9 @@
# READ_NODEDEFS: 8 (disable get_node_def call client-side)
# LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to
# csm_restriction_noderange)
+# READ_PLAYERINFO: 32 (disable get_player_names call client-side)
# type: int
-# csm_restriction_flags = 30
+# csm_restriction_flags = 62
# If the CSM restriction for node range is enabled, get_node calls are limited
# to this distance from the player to the node.
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 1ae6e0465..b061b6845 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -346,7 +346,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("max_block_send_distance", "9");
settings->setDefault("block_send_optimize_distance", "4");
settings->setDefault("server_side_occlusion_culling", "true");
- settings->setDefault("csm_restriction_flags", "30");
+ settings->setDefault("csm_restriction_flags", "62");
settings->setDefault("csm_restriction_noderange", "0");
settings->setDefault("max_clearobjects_extra_loaded_blocks", "4096");
settings->setDefault("time_speed", "72");
diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h
index 0cf77b8c5..6d6708482 100644
--- a/src/network/networkprotocol.h
+++ b/src/network/networkprotocol.h
@@ -952,5 +952,6 @@ enum CSMRestrictionFlags : u64 {
CSM_RF_READ_ITEMDEFS = 0x00000004, // Disable itemdef lookups
CSM_RF_READ_NODEDEFS = 0x00000008, // Disable nodedef lookups
CSM_RF_LOOKUP_NODES = 0x00000010, // Limit node lookups
+ CSM_RF_READ_PLAYERINFO = 0x00000020, // Disable player info lookups
CSM_RF_ALL = 0xFFFFFFFF,
};
diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp
index 8a5867a32..6d9d832b7 100644
--- a/src/script/lua_api/l_client.cpp
+++ b/src/script/lua_api/l_client.cpp
@@ -116,6 +116,13 @@ int ModApiClient::l_clear_out_chat_queue(lua_State *L)
// get_player_names()
int ModApiClient::l_get_player_names(lua_State *L)
{
+ // clang-format off
+ if (getClient(L)->checkCSMRestrictionFlag(
+ CSMRestrictionFlags::CSM_RF_READ_PLAYERINFO)) {
+ return 0;
+ }
+ // clang-format on
+
const std::list<std::string> &plist = getClient(L)->getConnectedPlayerNames();
lua_createtable(L, plist.size(), 0);
int newTable = lua_gettop(L);