From b33130cd384e531cb6dfbeefbb94f8f20bc967c6 Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Mon, 22 Apr 2024 22:23:29 +0530 Subject: npassd/db: init --- src/npassd/db.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/npassd/meson.build | 3 ++- src/npassd/npassd.c | 11 +++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 src/npassd/db.c (limited to 'src/npassd') diff --git a/src/npassd/db.c b/src/npassd/db.c new file mode 100644 index 0000000..5afa45e --- /dev/null +++ b/src/npassd/db.c @@ -0,0 +1,49 @@ +#include +#include +#include + +#include "npassd/db.h" +#include "util.h" + +#define DB_NAME "secret_service.sqlite" + +const char sql_stmt_init[] = "CREATE TABLE IF NOT EXISTS store (" + " storeid INTEGER PRIMARY KEY," + " name TEXT NOT NULL UNIQUE" + ");" + "CREATE TABLE IF NOT EXISTS lookup (" + " key TEXT NOT NULL," + " value TEXT NOT NULL," + " storeid INTEGER," + " UNIQUE(storeid, key)," + " FOREIGN KEY(storeid) REFERENCES store(storeid)" + ");"; + +int db_init(const char *store_path, struct sqlite3 **db) +{ + char db_path[PATH_MAX]; + int ret; + + ret = snprintf(db_path, sizeof(db_path), "%s/" DB_NAME, store_path); + if (ret < 0 || (size_t)ret > sizeof(db_path)) { + print_err("Path exceeded PATH_MAX"); + return -ENAMETOOLONG; + } + + ret = sqlite3_open_v2(db_path, db, + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | + SQLITE_OPEN_FULLMUTEX, + NULL); + if (ret != SQLITE_OK) { + print_err("Can't open database: %s", sqlite3_errmsg(*db)); + return -EPERM; + } + + ret = sqlite3_exec(*db, sql_stmt_init, NULL, NULL, NULL); + if (ret != SQLITE_OK) { + print_err("Failed to create tables: %s", sqlite3_errmsg(*db)); + return -EPERM; + } + + return 0; +} diff --git a/src/npassd/meson.build b/src/npassd/meson.build index 10302cd..e73c28f 100644 --- a/src/npassd/meson.build +++ b/src/npassd/meson.build @@ -4,10 +4,11 @@ e = executable( 'npassd.c', 'service.c', 'session.c', + 'db.c', ], include_directories: npass_inc, - dependencies: sdbus_dep, + dependencies: [ sdbus_dep, sqlite_dep ], link_with: lib_npass, install: true, ) diff --git a/src/npassd/npassd.c b/src/npassd/npassd.c index a2f5173..22164dd 100644 --- a/src/npassd/npassd.c +++ b/src/npassd/npassd.c @@ -4,6 +4,8 @@ #include #include +#include "libnpass/libnpass.h" +#include "npassd/db.h" #include "npassd/service.h" #include "util.h" @@ -13,8 +15,17 @@ int main(void) { int ret; sd_bus *bus; + char *store_path; struct service service; + ret = pass_store_path_set(&store_path); + if (ret < 0) + return EXIT_FAILURE; + + ret = db_init(store_path, &service.db); + if (ret < 0) + return EXIT_FAILURE; + ret = sd_bus_open_user(&bus); if (ret < 0) { print_err("Failed to connect to bus: %s", strerror(-ret)); -- cgit v1.2.3