diff options
| author | 2012-09-23 12:30:30 +0200 | |
|---|---|---|
| committer | 2012-10-04 15:14:04 +0200 | |
| commit | c2f7fc047c2e5bbb899c820590ce07fee593b28f (patch) | |
| tree | dca97896004c71a484d6dd189e78e40732a5f041 /src/modules/m_xline_db.cpp | |
| parent | Merge pull request #313 from ChrisTX/insp20+explicittemps (diff) | |
Replace hardcoded paths with configurable ones
This patchset aims to ease the packaging of InspIRCd for a system-wide installation scenario.
Changes in detail:
configure: Add the options --log-path and --data-path
m_ssl_gnutls, openssl: Change the hardcoded "conf/" to the existent CONFIG_PATH macro
m_xline_db: Make the location of xline.db configurable. It will use --data-path as default value, but this can be
changed using the configuration files.
Diffstat (limited to 'src/modules/m_xline_db.cpp')
| -rw-r--r-- | src/modules/m_xline_db.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/modules/m_xline_db.cpp b/src/modules/m_xline_db.cpp index 683c14afa..21c75f45e 100644 --- a/src/modules/m_xline_db.cpp +++ b/src/modules/m_xline_db.cpp @@ -21,6 +21,8 @@ #include "inspircd.h" #include "xline.h" +/* $ModConfig: <xlinedb filename="data/xline.db"> + * Specify the filename for the xline database here*/ /* $ModDesc: Keeps a dynamic log of all XLines created, and stores them in a seperate conf file (xline.db). */ class ModuleXLineDB : public Module @@ -28,11 +30,21 @@ class ModuleXLineDB : public Module std::vector<XLine *> xlines; bool reading_db; // If this is true, addlines are as a result of db reading, so don't bother flushing the db to disk. // DO REMEMBER TO SET IT, otherwise it's annoying :P + std::string xlinedbpath; public: ModuleXLineDB() { Implementation eventlist[] = { I_OnAddLine, I_OnDelLine, I_OnExpireLine }; ServerInstance->Modules->Attach(eventlist, this, 3); + /* Load the configuration + * Note: + * this is on purpose not in the OnRehash() method. It would be non-trivial to change the database on-the-fly. + * Imagine a scenario where the new file already exists. Merging the current XLines with the existing database is likely a bad idea + * ...and so is discarding all current in-memory XLines for the ones in the database. + */ + ConfigTag* Conf = ServerInstance->Config->ConfValue("xlinedb"); + xlinedbpath = Conf->getString("filename", DATA_PATH "/xline.db"); + reading_db = true; ReadDatabase(); reading_db = false; @@ -99,7 +111,8 @@ class ModuleXLineDB : public Module * -- w00t */ ServerInstance->Logs->Log("m_xline_db",DEBUG, "xlinedb: Opening temporary database"); - f = fopen("data/xline.db.new", "w"); + std::string xlinenewdbpath = xlinedbpath + ".new"; + f = fopen(xlinenewdbpath.c_str(), "w"); if (!f) { ServerInstance->Logs->Log("m_xline_db",DEBUG, "xlinedb: Cannot create database! %s (%d)", strerror(errno), errno); @@ -140,7 +153,7 @@ class ModuleXLineDB : public Module } // Use rename to move temporary to new db - this is guarenteed not to fuck up, even in case of a crash. - if (rename("data/xline.db.new", "data/xline.db") < 0) + if (rename(xlinenewdbpath.c_str(), xlinedbpath.c_str()) < 0) { ServerInstance->Logs->Log("m_xline_db",DEBUG, "xlinedb: Cannot move new to old database! %s (%d)", strerror(errno), errno); ServerInstance->SNO->WriteToSnoMask('a', "database: cannot replace old with new db: %s (%d)", strerror(errno), errno); @@ -156,7 +169,7 @@ class ModuleXLineDB : public Module char linebuf[MAXBUF]; unsigned int lineno = 0; - f = fopen("data/xline.db", "r"); + f = fopen(xlinedbpath.c_str(), "r"); if (!f) { if (errno == ENOENT) |
