summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-04-01 18:34:19 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-04-01 18:34:19 +0000
commitf505e1821bf0b6e3c36df4bab8e3a4f3d1710dfd (patch)
tree7aada963984af8f5c44ef4cede2d2e14a2ec662c
parent6c6d83a21718b342c4f615dcca4093d06638f9fb (diff)
Add -config parameter to bin/inspircd which allows a user to specify the config file on the commandline
Note: This should really be a full pathname, and not a configuration file in the current directory. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6726 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--include/inspircd.h4
-rw-r--r--src/cmd_rehash.cpp4
-rw-r--r--src/configreader.cpp10
-rw-r--r--src/inspircd.cpp28
-rw-r--r--src/modules/extra/m_ssl_gnutls.cpp2
-rw-r--r--src/modules/extra/m_ssl_openssl.cpp2
6 files changed, 30 insertions, 20 deletions
diff --git a/include/inspircd.h b/include/inspircd.h
index 984122a18..48560bab6 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -449,6 +449,10 @@ class InspIRCd : public classbase
*/
time_t startup_time;
+ /** Config file pathname specified on the commandline or via ./configure
+ */
+ char ConfigFileName[MAXBUF];
+
/** Mode handler, handles mode setting and removal
*/
ModeParser* Modes;
diff --git a/src/cmd_rehash.cpp b/src/cmd_rehash.cpp
index 815e241f0..4d4b97c8e 100644
--- a/src/cmd_rehash.cpp
+++ b/src/cmd_rehash.cpp
@@ -25,7 +25,7 @@ extern "C" command_t* init_command(InspIRCd* Instance)
CmdResult cmd_rehash::Handle (const char** parameters, int pcnt, userrec *user)
{
- user->WriteServ("382 %s %s :Rehashing",user->nick,ServerConfig::CleanFilename(CONFIG_FILE));
+ user->WriteServ("382 %s %s :Rehashing",user->nick,ServerConfig::CleanFilename(ServerInstance->ConfigFileName));
std::string parameter = "";
std::string old_disabled = ServerInstance->Config->DisabledCommands;
if (pcnt)
@@ -34,7 +34,7 @@ CmdResult cmd_rehash::Handle (const char** parameters, int pcnt, userrec *user)
}
else
{
- ServerInstance->WriteOpers("*** %s is rehashing config file %s",user->nick,ServerConfig::CleanFilename(CONFIG_FILE));
+ ServerInstance->WriteOpers("*** %s is rehashing config file %s",user->nick,ServerConfig::CleanFilename(ServerInstance->ConfigFileName));
ServerInstance->CloseLog();
ServerInstance->OpenLog(ServerInstance->Config->argv, ServerInstance->Config->argc);
ServerInstance->RehashUsersAndChans();
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 315c1eb08..26e9634d1 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -682,7 +682,7 @@ void ServerConfig::Read(bool bail, userrec* user)
/* Make a copy here so if it fails then we can carry on running with an unaffected config */
ConfigDataHash newconfig;
- if (this->LoadConf(newconfig, CONFIG_FILE, errstr))
+ if (this->LoadConf(newconfig, ServerInstance->ConfigFileName, errstr))
{
/* If we succeeded, set the ircd config to the new one */
this->config_data = newconfig;
@@ -1211,7 +1211,7 @@ bool ServerConfig::DoInclude(ConfigDataHash &target, const std::string &file, st
std::string newfile;
std::string::size_type pos;
- confpath = CONFIG_FILE;
+ confpath = ServerInstance->ConfigFileName;
newfile = file;
for (std::string::iterator c = newfile.begin(); c != newfile.end(); c++)
@@ -1224,7 +1224,7 @@ bool ServerConfig::DoInclude(ConfigDataHash &target, const std::string &file, st
if (file[0] != '/')
{
- if((pos = confpath.find("/inspircd.conf")) != std::string::npos)
+ if((pos = confpath.rfind("/")) != std::string::npos)
{
/* Leaves us with just the path */
newfile = confpath.substr(0, pos) + std::string("/") + newfile;
@@ -1436,8 +1436,8 @@ bool ServerConfig::ReadFile(file_cache &F, const char* fname)
if (*fname != '/')
{
std::string::size_type pos;
- std::string confpath = CONFIG_FILE;
- if((pos = confpath.find("/inspircd.conf")) != std::string::npos)
+ std::string confpath = ServerInstance->ConfigFileName;
+ if((pos = confpath.rfind("/")) != std::string::npos)
{
/* Leaves us with just the path */
std::string newfile = confpath.substr(0, pos) + std::string("/") + fname;
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 14bff2bef..7390661dd 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -161,7 +161,7 @@ void InspIRCd::Start()
void InspIRCd::Rehash(int status)
{
- SI->WriteOpers("*** Rehashing config file %s due to SIGHUP",ServerConfig::CleanFilename(CONFIG_FILE));
+ SI->WriteOpers("*** Rehashing config file %s due to SIGHUP",ServerConfig::CleanFilename(SI->ConfigFileName));
SI->CloseLog();
SI->OpenLog(SI->Config->argv, SI->Config->argc);
SI->RehashUsersAndChans();
@@ -270,8 +270,8 @@ void InspIRCd::WritePID(const std::string &filename)
if (*(fname.begin()) != '/')
{
std::string::size_type pos;
- std::string confpath = CONFIG_FILE;
- if ((pos = confpath.find("/inspircd.conf")) != std::string::npos)
+ std::string confpath = this->ConfigFileName;
+ if ((pos = confpath.rfind("/")) != std::string::npos)
{
/* Leaves us with just the path */
fname = confpath.substr(0, pos) + std::string("/") + fname;
@@ -326,20 +326,14 @@ InspIRCd::InspIRCd(int argc, char** argv)
this->next_call = this->TIME + 3;
srand(this->TIME);
- if (!ServerConfig::FileExists(CONFIG_FILE))
- {
- printf("ERROR: Cannot open config file: %s\nExiting...\n",CONFIG_FILE);
- this->Log(DEFAULT,"main: no config");
- printf("ERROR: Your config file is missing, this IRCd will self destruct in 10 seconds!\n");
- Exit(EXIT_STATUS_CONFIG);
- }
-
*this->LogFileName = 0;
+ strlcpy(this->ConfigFileName, CONFIG_FILE, MAXBUF);
struct option longopts[] =
{
{ "nofork", no_argument, &do_nofork, 1 },
{ "logfile", required_argument, NULL, 'f' },
+ { "config", required_argument, NULL, 'c' },
{ "debug", no_argument, &do_debug, 1 },
{ "nolog", no_argument, &do_nolog, 1 },
{ "restart", no_argument, &do_restart, 1 },
@@ -355,6 +349,11 @@ InspIRCd::InspIRCd(int argc, char** argv)
strlcpy(LogFileName, optarg, MAXBUF);
printf("LOG: Setting logfile to %s\n", LogFileName);
break;
+ case 'c':
+ /* Config filename was set */
+ strlcpy(ConfigFileName, optarg, MAXBUF);
+ printf("CONFIG: Setting config file to %s\n", ConfigFileName);
+ break;
case 0:
/* getopt_long_only() set an int variable, just keep going */
break;
@@ -366,6 +365,13 @@ InspIRCd::InspIRCd(int argc, char** argv)
}
}
+ if (!ServerConfig::FileExists(this->ConfigFileName))
+ {
+ printf("ERROR: Cannot open config file: %s\nExiting...\n", this->ConfigFileName);
+ this->Log(DEFAULT,"Unable to open config file %s", this->ConfigFileName);
+ Exit(EXIT_STATUS_CONFIG);
+ }
+
/* Set the finished argument values */
Config->nofork = do_nofork;
Config->forcedebug = do_debug;
diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp
index daaa8b422..6abc5c1de 100644
--- a/src/modules/extra/m_ssl_gnutls.cpp
+++ b/src/modules/extra/m_ssl_gnutls.cpp
@@ -158,7 +158,7 @@ class ModuleSSLGnuTLS : public Module
}
}
- std::string confdir(CONFIG_FILE);
+ std::string confdir(ServerInstance->ConfigFileName);
// +1 so we the path ends with a /
confdir = confdir.substr(0, confdir.find_last_of('/') + 1);
diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp
index 9ced3a246..def8a0061 100644
--- a/src/modules/extra/m_ssl_openssl.cpp
+++ b/src/modules/extra/m_ssl_openssl.cpp
@@ -195,7 +195,7 @@ class ModuleSSLOpenSSL : public Module
}
}
- std::string confdir(CONFIG_FILE);
+ std::string confdir(ServerInstance->ConfigFileName);
// +1 so we the path ends with a /
confdir = confdir.substr(0, confdir.find_last_of('/') + 1);