aboutsummaryrefslogtreecommitdiff
path: root/games/minimal/mods/default/textures/default_clay_brick.png
blob: e25633b70a51a4aa736e6583b3f1cd57eea8aca3 (plain)
ofshex dumpascii
0000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 10 00 00 00 11 08 03 00 00 00 e3 71 dc .PNG........IHDR..............q.
0020 f6 00 00 00 1b 50 4c 54 45 00 00 00 a3 00 00 cc 00 00 a3 00 00 a4 00 00 cb 00 00 cc 00 00 ee 2a .....PLTE......................*
0040 29 ef 29 29 7a 66 04 a9 00 00 00 03 74 52 4e 53 00 00 00 fa 76 c4 de 00 00 00 3e 49 44 41 54 78 ).))zf......tRNS....v.....>IDATx
0060 da a5 c8 49 0e c0 20 0c c0 40 0a d9 fe ff e2 d6 2a 11 28 47 f0 6d dc 6e 72 2f a4 42 2a 94 f1 31 ...I.....@......*.(G.m.nr/.B*..1
0080 36 0e 86 69 24 73 a8 06 24 99 43 e5 e7 d3 18 66 8c e4 5c 02 57 dd e0 71 2f 4c 0f 02 32 12 f1 bb 6..i$s..$.C....f..\.W..q/L..2...
00a0 f1 00 00 00 00 49 45 4e 44 ae 42 60 82 .....IEND.B`.
id='n67' href='#n67'>67 68 69 70 71 72 73 74 75 76 77 78
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#pragma once

#include "cpp_api/s_base.h"


#define CHECK_SECURE_PATH_INTERNAL(L, path, write_required, ptr) \
	if (!ScriptApiSecurity::checkPath(L, path, write_required, ptr)) { \
		throw LuaError(std::string("Mod security: Blocked attempted ") + \
				(write_required ? "write to " : "read from ") + path); \
	}
#define CHECK_SECURE_PATH(L, path, write_required) \
	if (ScriptApiSecurity::isSecure(L)) { \
		CHECK_SECURE_PATH_INTERNAL(L, path, write_required, NULL); \
	}
#define CHECK_SECURE_PATH_POSSIBLE_WRITE(L, path, ptr) \
	if (ScriptApiSecurity::isSecure(L)) { \
		CHECK_SECURE_PATH_INTERNAL(L, path, false, ptr); \
	}


class ScriptApiSecurity : virtual public ScriptApiBase
{
public:
	int getThread(lua_State *L);
	// creates an empty Lua environment
	void createEmptyEnv(lua_State *L);
	// sets the enviroment to the table thats on top of the stack
	void setLuaEnv(lua_State *L, int thread);
	// Sets up security on the ScriptApi's Lua state
	void initializeSecurity();
	void initializeSecurityClient();
	// Checks if the Lua state has been secured
	static bool isSecure(lua_State *L);
	// Loads a string as Lua code safely (doesn't allow bytecode).
	static bool safeLoadString(lua_State *L, const std::string &code, const char *chunk_name);
	// Loads a file as Lua code safely (doesn't allow bytecode).
	static bool safeLoadFile(lua_State *L, const char *path, const char *display_name = NULL);
	// Checks if mods are allowed to read (and optionally write) to the path
	static bool checkPath(lua_State *L, const char *path, bool write_required,
			bool *write_allowed=NULL);

private:
	// Syntax: "sl_" <Library name or 'g' (global)> '_' <Function name>
	// (sl stands for Secure Lua)

	static int sl_g_dofile(lua_State *L);
	static int sl_g_load(lua_State *L);
	static int sl_g_loadfile(lua_State *L);
	static int sl_g_loadstring(lua_State *L);
	static int sl_g_require(lua_State *L);

	static int sl_io_open(lua_State *L);
	static int sl_io_input(lua_State *L);
	static int sl_io_output(lua_State *L);
	static int sl_io_lines(lua_State *L);

	static int sl_os_rename(lua_State *L);
	static int sl_os_remove(lua_State *L);
};