]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
CSM: add requested CSM_RF_READ_PLAYERINFO (#8007)
authorLoïc Blot <nerzhul@users.noreply.github.com>
Mon, 24 Dec 2018 09:51:10 +0000 (10:51 +0100)
committerGitHub <noreply@github.com>
Mon, 24 Dec 2018 09:51:10 +0000 (10:51 +0100)
* CSM: add requested CSM_RF_READ_PLAYERINFO

This new CSM limit permit to limit PLAYERINFO read from server.

It affects get_player_names call

builtin/client/chatcommands.lua
builtin/settingtypes.txt
doc/client_lua_api.txt
minetest.conf.example
src/defaultsettings.cpp
src/network/networkprotocol.h
src/script/lua_api/l_client.cpp

index ed43a6140355956e44ff826e9cf0bd3a892250d8..201ca4a9bc0e1b040f19aed3e48c8aa6f192262b 100644 (file)
@@ -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
 })
 
index 40db037ea2529f5dacc000ab3cff1b81707f17d9..66d4c324e004eb7d07759db1d566422f0e2bb515 100644 (file)
@@ -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.
index 3b6e1b25b80a3ff540021578d94d52b2ca0aab75..41560b98311ac01b6c96972a505cad4ac00908e3 100644 (file)
@@ -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`.
index b76473449d8edafa495b49849047ccdbc6685282..0bf0b988e259650e991b401996df5a4219f23db0 100644 (file)
 #    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.
index 1ae6e046504127702e6439beb82bd7540362d38a..b061b6845cf429509aee26f84fc2a7d871838303 100644 (file)
@@ -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");
index 0cf77b8c5037801d67ba66ae75149e02dfd92101..6d6708482c28d579d0a267978dfd523aa071d718 100644 (file)
@@ -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,
 };
index 8a5867a32a01ec2fbef8a49b79e282b252cd763e..6d9d832b75353e5cb63cf7535a17acb9e13e2a03 100644 (file)
@@ -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);