From: Michael Tremer Date: Thu, 22 Feb 2024 15:55:16 +0000 (+0000) Subject: lua: database: Implement verify() X-Git-Tag: 0.9.18~148 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24fce3a8198bccd224c8baad6f3387223d62a529;p=location%2Flibloc.git lua: database: Implement verify() Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 2e69126..6986afe 100644 --- a/Makefile.am +++ b/Makefile.am @@ -406,7 +406,8 @@ TESTS_ENVIRONMENT = \ LUA_CPATH="$(abs_builddir)/src/lua/.libs/?.so;;" \ PYTHONPATH=$(abs_srcdir)/src/python:$(abs_builddir)/src/python/.libs \ TEST_DATA_DIR="$(abs_top_srcdir)/data" \ - TEST_DATABASE="$(abs_top_srcdir)/data/database.db" + TEST_DATABASE="$(abs_top_srcdir)/data/database.db" \ + TEST_SIGNING_KEY="$(abs_top_srcdir)/data/signing-key.pem" TESTS = \ $(check_PROGRAMS) \ diff --git a/src/lua/database.c b/src/lua/database.c index ad19240..9f5d177 100644 --- a/src/lua/database.c +++ b/src/lua/database.c @@ -183,6 +183,30 @@ static int Database_lookup(lua_State* L) { return r; } +static int Database_verify(lua_State* L) { + FILE* f = NULL; + int r; + + Database* self = luaL_checkdatabase(L, 1); + + // Fetch path to key + const char* key = luaL_checkstring(L, 2); + + // Open the keyfile + f = fopen(key, "r"); + if (!f) + return luaL_error(L, "Could not open key %s: %s\n", key, strerror(errno)); + + // Verify! + r = loc_database_verify(self->db, f); + fclose(f); + + // Push result onto the stack + lua_pushboolean(L, (r == 0)); + + return 1; +} + static const struct luaL_Reg database_functions[] = { { "get_as", Database_get_as }, { "get_description", Database_get_description }, @@ -191,6 +215,7 @@ static const struct luaL_Reg database_functions[] = { { "get_vendor", Database_get_vendor }, { "open", Database_open }, { "lookup", Database_lookup }, + { "verify", Database_verify }, { "__gc", Database_gc }, { NULL, NULL }, }; diff --git a/tests/lua/main.lua b/tests/lua/main.lua index 073bdc5..d07ac45 100755 --- a/tests/lua/main.lua +++ b/tests/lua/main.lua @@ -19,7 +19,8 @@ luaunit = require("luaunit") -ENV_TEST_DATABASE = os.getenv("TEST_DATABASE") +ENV_TEST_DATABASE = os.getenv("TEST_DATABASE") +ENV_TEST_SIGNING_KEY = os.getenv("TEST_SIGNING_KEY") function test_load() -- Try loading the module @@ -35,6 +36,9 @@ function test_open_database() -- Open the database db = location.Database.open(ENV_TEST_DATABASE) + -- Verify + luaunit.assertIsTrue(db:verify(ENV_TEST_SIGNING_KEY)) + -- Description luaunit.assertIsString(db:get_description())