From 4237b5875d9775c20fbbe8cacf202c0b3d0d46d7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Wed, 30 Nov 2016 10:59:52 +0100 Subject: [PATCH] Revert "lua: embed bytecode instead of stripped source" This reverts commit 64f80706fbe428e4a93ac92f22cf6f5905a1e977. TL;DR: it brought almost no benefits AFAIK and potential for problems. The "portable bytecode" produced by luajit isn't compatible when (lib)luajit version changes or when some build-time configuration of it changes. If you mix these up, kresd fails to start. --- config.mk | 2 +- daemon/daemon.mk | 2 +- daemon/engine.c | 14 ++++++++------ scripts/embed-lua.sh | 10 ++++++++++ 4 files changed, 20 insertions(+), 8 deletions(-) create mode 100755 scripts/embed-lua.sh diff --git a/config.mk b/config.mk index 60686fa2a..d5a676008 100644 --- a/config.mk +++ b/config.mk @@ -23,7 +23,7 @@ ETCDIR ?= $(PREFIX)/etc/kresd CC ?= cc RM := rm -f LN := ln -s -LUA := luajit -b -t h +XXD_LUA := ./scripts/embed-lua.sh INSTALL := install # Flags diff --git a/daemon/daemon.mk b/daemon/daemon.mk index 583e2830a..fcdbde5ba 100644 --- a/daemon/daemon.mk +++ b/daemon/daemon.mk @@ -12,7 +12,7 @@ kresd_DIST := daemon/lua/kres.lua daemon/lua/trust_anchors.lua # Embedded resources %.inc: %.lua - @$(call quiet,LUA,$<) $< $@ + @$(call quiet,XXD_LUA,$<) $< > $@ ifeq ($(AMALG), yes) kresd.amalg.c: daemon/lua/sandbox.inc daemon/lua/config.inc else diff --git a/daemon/engine.c b/daemon/engine.c index 551d7bb3d..1751855d6 100644 --- a/daemon/engine.c +++ b/daemon/engine.c @@ -690,9 +690,10 @@ static int engine_loadconf(struct engine *engine, const char *config_path) lua_pop(engine->L, 1); } /* Init environment */ - #include "daemon/lua/sandbox.inc" - if (l_dobytecode(engine->L, luaJIT_BC_sandbox, - sizeof(luaJIT_BC_sandbox), "init") != 0) { + static const char sandbox_bytecode[] = { + #include "daemon/lua/sandbox.inc" + }; + if (l_dobytecode(engine->L, sandbox_bytecode, sizeof(sandbox_bytecode), "init") != 0) { fprintf(stderr, "[system] error %s\n", lua_tostring(engine->L, -1)); lua_pop(engine->L, 1); return kr_error(ENOEXEC); @@ -706,9 +707,10 @@ static int engine_loadconf(struct engine *engine, const char *config_path) } if (ret == 0) { /* Load defaults */ - #include "daemon/lua/config.inc" - ret = l_dobytecode(engine->L, luaJIT_BC_config, - sizeof(luaJIT_BC_config), "config"); + static const char config_bytecode[] = { + #include "daemon/lua/config.inc" + }; + ret = l_dobytecode(engine->L, config_bytecode, sizeof(config_bytecode), "config"); } /* Evaluate */ diff --git a/scripts/embed-lua.sh b/scripts/embed-lua.sh new file mode 100755 index 000000000..80f6cba26 --- /dev/null +++ b/scripts/embed-lua.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -e +# Clean unnecessary stuff from the lua file; note the significant tabulator. +alias strip="sed -e 's/^[ ]*//g; s/ */ /g; /^--/d; /^$/d'" +if command -v xxd > /dev/null 2>&1; then + strip < "$1" | xxd -i - +else + strip < "$1" | hexdump -v -e '/1 "0x%02X, " " "' +fi +exit $? -- 2.47.2