From 69f4e3e77b48e2901c908837978282ea86c54d24 Mon Sep 17 00:00:00 2001 From: Test_User Date: Mon, 22 Jul 2024 20:57:35 -0400 Subject: Configurable services db path --- .gitignore | 4 ++-- config.h | 1 + pseudoclients/services.c | 9 ++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 4d22872..8c2cd14 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,5 @@ HaxIRCd core .makeopts output -pseudoclients/services.db -pseudoclients/services.db-lock +*.db +*.db-lock diff --git a/config.h b/config.h index 2d99a0d..5e02490 100644 --- a/config.h +++ b/config.h @@ -128,5 +128,6 @@ extern struct string NICKSERV_ADDRESS; // = STRING("/dev/null"); extern struct string SERVICES_CHANNEL; // = STRING("#services"); +extern struct string SERVICES_DB_PATH; // = STRING("./pseudoclients/services.db"); extern size_t SERVICES_DB_MAX_SIZE; // = 100 M; #endif diff --git a/pseudoclients/services.c b/pseudoclients/services.c index 4c96ddc..3be6d60 100644 --- a/pseudoclients/services.c +++ b/pseudoclients/services.c @@ -72,7 +72,14 @@ int services_pseudoclient_post_reload(void) { return 1; if (mdb_env_set_maxdbs(services_db_env, 5) != 0) // nick->account + cert->account + account->nicks (also used for account list) + account->certs + account->name return 1; - if (mdb_env_open(services_db_env, "./pseudoclients/services.db", MDB_NOSUBDIR | MDB_NOTLS | MDB_NORDAHEAD, 0600) != 0) + for (size_t i = 0; i < SERVICES_DB_PATH.len; i++) { + if (SERVICES_DB_PATH.data[i] == 0) + return 1; // LMDB does not support null in the filepath... nor do normal FSes really, but that can be changed + } + char path[SERVICES_DB_PATH.len + 1]; + memcpy(path, SERVICES_DB_PATH.data, SERVICES_DB_PATH.len); + path[SERVICES_DB_PATH.len] = 0; + if (mdb_env_open(services_db_env, path, MDB_NOSUBDIR | MDB_NOTLS | MDB_NORDAHEAD, 0600) != 0) return 1; { int discard; -- cgit v1.2.3