From c2f7fc047c2e5bbb899c820590ce07fee593b28f Mon Sep 17 00:00:00 2001 From: ChrisTX Date: Sun, 23 Sep 2012 12:30:30 +0200 Subject: 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. --- src/helperfuncs.cpp | 2 +- src/inspircd.cpp | 2 +- src/modules/extra/m_ssl_gnutls.cpp | 8 ++++---- src/modules/extra/m_ssl_openssl.cpp | 8 ++++---- src/modules/m_xline_db.cpp | 19 ++++++++++++++++--- 5 files changed, 26 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index edb5005d2..4605092a1 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -293,7 +293,7 @@ bool InspIRCd::OpenLog(char**, int) if (!Config->cmdline.writelog) return true; // Skip opening default log if -nolog if (Config->cmdline.startup_log.empty()) - Config->cmdline.startup_log = "logs/startup.log"; + Config->cmdline.startup_log = LOG_PATH "/startup.log"; FILE* startup = fopen(Config->cmdline.startup_log.c_str(), "a+"); if (!startup) diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 4abfb496a..d154c3600 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -287,7 +287,7 @@ void InspIRCd::WritePID(const std::string &filename) { std::string fname(filename); if (fname.empty()) - fname = "data/inspircd.pid"; + fname = DATA_PATH "/inspircd.pid"; std::ofstream outfile(fname.c_str()); if (outfile.is_open()) { diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp index bf48a49d1..06daf763e 100644 --- a/src/modules/extra/m_ssl_gnutls.cpp +++ b/src/modules/extra/m_ssl_gnutls.cpp @@ -263,10 +263,10 @@ class ModuleSSLGnuTLS : public Module ConfigTag* Conf = ServerInstance->Config->ConfValue("gnutls"); - cafile = Conf->getString("cafile", "conf/ca.pem"); - crlfile = Conf->getString("crlfile", "conf/crl.pem"); - certfile = Conf->getString("certfile", "conf/cert.pem"); - keyfile = Conf->getString("keyfile", "conf/key.pem"); + cafile = Conf->getString("cafile", CONFIG_PATH "/ca.pem"); + crlfile = Conf->getString("crlfile", CONFIG_PATH "/crl.pem"); + certfile = Conf->getString("certfile", CONFIG_PATH "/cert.pem"); + keyfile = Conf->getString("keyfile", CONFIG_PATH "/key.pem"); dh_bits = Conf->getInt("dhbits"); std::string hashname = Conf->getString("hash", "md5"); diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp index a8020bba1..36fe2941e 100644 --- a/src/modules/extra/m_ssl_openssl.cpp +++ b/src/modules/extra/m_ssl_openssl.cpp @@ -203,10 +203,10 @@ class ModuleSSLOpenSSL : public Module ConfigTag* conf = ServerInstance->Config->ConfValue("openssl"); - cafile = conf->getString("cafile", "conf/ca.pem"); - certfile = conf->getString("certfile", "conf/cert.pem"); - keyfile = conf->getString("keyfile", "conf/key.pem"); - dhfile = conf->getString("dhfile", "conf/dhparams.pem"); + cafile = conf->getString("cafile", CONFIG_PATH "/ca.pem"); + certfile = conf->getString("certfile", CONFIG_PATH "/cert.pem"); + keyfile = conf->getString("keyfile", CONFIG_PATH "/key.pem"); + dhfile = conf->getString("dhfile", CONFIG_PATH "/dhparams.pem"); std::string hash = conf->getString("hash", "md5"); if (hash != "sha1" && hash != "md5") throw ModuleException("Unknown hash type " + hash); 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: + * 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 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) -- cgit v1.2.3