summaryrefslogtreecommitdiff
path: root/src/client.h
diff options
context:
space:
mode:
authorred-001 <red-001@outlook.ie>2017-06-30 19:14:39 +0100
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-06-30 20:14:39 +0200
commitf3ad75691aea30d2d68aab19fbfa9031409c39d7 (patch)
treeb73109f1d3d14af91b3593dc80645a1bb70274a8 /src/client.h
parent2e53801fc0d9ba13afec6c1ddb5e3999f68b96bd (diff)
downloadminetest-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.h16
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;