aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsinanmohd <sinan@sinanmohd.com>2024-04-22 22:23:29 +0530
committersinanmohd <sinan@sinanmohd.com>2024-04-22 22:24:45 +0530
commitb33130cd384e531cb6dfbeefbb94f8f20bc967c6 (patch)
tree479d703c07bca440a30dc73147b872d7ebdbf55f /src
parent5c1279fe17f23ec1f407809567b8a752d3be7f09 (diff)
npassd/db: init
Diffstat (limited to 'src')
-rw-r--r--src/npassd/db.c49
-rw-r--r--src/npassd/meson.build3
-rw-r--r--src/npassd/npassd.c11
3 files changed, 62 insertions, 1 deletions
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 <errno.h>
+#include <linux/limits.h>
+#include <stdio.h>
+
+#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 <string.h>
#include <systemd/sd-bus.h>
+#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));