1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Mod security: Allow read-only access to all mod paths

This commit is contained in:
ShadowNinja 2016-12-05 19:59:15 +00:00 committed by paramat
parent 24edfb77af
commit 59f84ca0a0
8 changed files with 90 additions and 42 deletions

View file

@ -118,6 +118,11 @@ int LuaSettings::l_write(lua_State* L)
NO_MAP_LOCK_REQUIRED;
LuaSettings* o = checkobject(L, 1);
if (!o->m_write_allowed) {
throw LuaError("Settings: writing " + o->m_filename +
" not allowed with mod security on.");
}
bool success = o->m_settings->updateConfigFile(o->m_filename.c_str());
lua_pushboolean(L, success);
@ -142,8 +147,9 @@ int LuaSettings::l_to_table(lua_State* L)
return 1;
}
LuaSettings::LuaSettings(const char* filename)
LuaSettings::LuaSettings(const char* filename, bool write_allowed)
{
m_write_allowed = write_allowed;
m_filename = std::string(filename);
m_settings = new Settings();
@ -188,9 +194,10 @@ void LuaSettings::Register(lua_State* L)
int LuaSettings::create_object(lua_State* L)
{
NO_MAP_LOCK_REQUIRED;
bool write_allowed;
const char* filename = luaL_checkstring(L, 1);
CHECK_SECURE_PATH_OPTIONAL(L, filename);
LuaSettings* o = new LuaSettings(filename);
CHECK_SECURE_PATH_POSSIBLE_WRITE(L, filename, &write_allowed);
LuaSettings* o = new LuaSettings(filename, write_allowed);
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
luaL_getmetatable(L, className);
lua_setmetatable(L, -2);