aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2024-07-22 20:57:35 -0400
committerTest_User <hax@andrewyu.org>2024-07-22 20:57:35 -0400
commit69f4e3e77b48e2901c908837978282ea86c54d24 (patch)
tree9b794f2842623589216f3dc3da470460840652b2
parent9ccf3ab2ced07c537e91f2c19c5d967b39b0a1e2 (diff)
downloadhaxircd-69f4e3e77b48e2901c908837978282ea86c54d24.tar.gz
haxircd-69f4e3e77b48e2901c908837978282ea86c54d24.zip
Configurable services db path
-rw-r--r--.gitignore4
-rw-r--r--config.h1
-rw-r--r--pseudoclients/services.c9
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;