diff options
author | red-001 <red-001@outlook.ie> | 2017-06-30 19:14:39 +0100 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-06-30 20:14:39 +0200 |
commit | f3ad75691aea30d2d68aab19fbfa9031409c39d7 (patch) | |
tree | b73109f1d3d14af91b3593dc80645a1bb70274a8 /src/client.h | |
parent | 2e53801fc0d9ba13afec6c1ddb5e3999f68b96bd (diff) | |
download | minetest-f3ad75691aea30d2d68aab19fbfa9031409c39d7.tar.gz minetest-f3ad75691aea30d2d68aab19fbfa9031409c39d7.tar.bz2 minetest-f3ad75691aea30d2d68aab19fbfa9031409c39d7.zip |
Create a filesystem abstraction layer for CSM and only allow accessing files that are scanned into it. (#5965)
* Load client-side mods into memory before executing them.
This removes the remaining filesystem access that client-sided mods had and it will hopefully make then more secure.
* Lua Virtual filesystem: don't load the files into memory just scan the filenames into memory.
* Fix the issues with backtrace
* fix most of the issues
* fix code style.
* add a comment
Diffstat (limited to 'src/client.h')
-rw-r--r-- | src/client.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/client.h b/src/client.h index ab9801d62..0255b2803 100644 --- a/src/client.h +++ b/src/client.h @@ -37,6 +37,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapnode.h" #include "tileanimation.h" #include "mesh_generator_thread.h" +#include <fstream> +#include "filesys.h" #define CLIENT_CHAT_MESSAGE_LIMIT_PER_10S 10.0f @@ -273,6 +275,16 @@ public: ~Client(); DISABLE_CLASS_COPY(Client); + // Load local mods into memory + void loadMods(); + void scanModSubfolder(const std::string &mod_name, const std::string &mod_path, + std::string mod_subpath); + inline void scanModIntoMemory(const std::string &mod_name, const std::string &mod_path) + { + scanModSubfolder(mod_name, mod_path, ""); + } + + // Initizle the mods void initMods(); /* @@ -492,6 +504,7 @@ public: bool checkLocalPrivilege(const std::string &priv) { return checkPrivilege(priv); } virtual scene::IAnimatedMesh* getMesh(const std::string &filename); + const std::string* getModFile(const std::string &filename); virtual std::string getModStoragePath() const; virtual bool registerModStorage(ModMetadata *meta); @@ -672,6 +685,8 @@ private: // Storage for mesh data for creating multiple instances of the same mesh StringMap m_mesh_data; + StringMap m_mod_files; + // own state LocalClientState m_state; @@ -684,6 +699,7 @@ private: bool m_modding_enabled; std::unordered_map<std::string, ModMetadata *> m_mod_storages; float m_mod_storage_save_timer = 10.0f; + std::vector<ModSpec> m_mods; GameUIFlags *m_game_ui_flags; bool m_shutdown = false; |