]> git.ipfire.org Git - location/libloc.git/commitdiff
lua: database: Implement verify()
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 22 Feb 2024 15:55:16 +0000 (15:55 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 22 Feb 2024 15:55:16 +0000 (15:55 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/lua/database.c
tests/lua/main.lua

index 2e691264e884289652a6dc352c341978f5b2ee20..6986afeeec95882bdf76a76903be96c24d33e1de 100644 (file)
@@ -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) \
index ad192407dd26f9e7e976bee11b19ed99b0777318..9f5d177076a5487c1a29db1467e86beb917c43a3 100644 (file)
@@ -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 },
 };
index 073bdc5bb6c02c99f2bd3ae566ffa307909a0194..d07ac450824adb9a311a159a90b27e35827ab197 100755 (executable)
@@ -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())