]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Protect a few more settings from being set from mods
authorsfan5 <sfan5@live.de>
Wed, 25 May 2022 17:07:49 +0000 (19:07 +0200)
committersfan5 <sfan5@live.de>
Sun, 29 May 2022 12:00:19 +0000 (14:00 +0200)
Of those settings main_menu_script has concrete security impact, the rest are added out of abundance of caution.

src/script/lua_api/l_settings.cpp

index 14398dda218485fc5e67097458fa9d8385a3fe0e..3f3fda56e6b8ab6e70705601de9274018937cb0a 100644 (file)
@@ -27,9 +27,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "log.h"
 
 
-/* This protects:
- * 'secure.*' settings from being set
- * some mapgen settings from being set
+/* This protects the following from being set:
+ * 'secure.*' settings
+ * some security-relevant settings
+ *   (better solution pending)
+ * some mapgen settings
  *   (not security-criticial, just to avoid messing up user configs)
  */
 #define CHECK_SETTING_SECURITY(L, name) \
@@ -41,7 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 static inline int checkSettingSecurity(lua_State* L, const std::string &name)
 {
        if (ScriptApiSecurity::isSecure(L) && name.compare(0, 7, "secure.") == 0)
-               throw LuaError("Attempt to set secure setting.");
+               throw LuaError("Attempted to set secure setting.");
 
        bool is_mainmenu = false;
 #ifndef SERVER
@@ -54,6 +56,17 @@ static inline int checkSettingSecurity(lua_State* L, const std::string &name)
                return -1;
        }
 
+       const char *disallowed[] = {
+               "main_menu_script", "shader_path", "texture_path", "screenshot_path",
+               "serverlist_file", "serverlist_url", "map-dir", "contentdb_url",
+       };
+       if (!is_mainmenu) {
+               for (const char *name2 : disallowed) {
+                       if (name == name2)
+                               throw LuaError("Attempted to set disallowed setting.");
+               }
+       }
+
        return 0;
 }