summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configreader.h4
-rw-r--r--src/configreader.cpp9
-rw-r--r--src/inspircd.cpp3
-rw-r--r--src/modules/extra/m_ssl_gnutls.cpp8
-rw-r--r--src/modules/extra/m_ssl_openssl.cpp8
5 files changed, 21 insertions, 11 deletions
diff --git a/include/configreader.h b/include/configreader.h
index aea355583..86191fa6d 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -681,6 +681,10 @@ class CoreExport ServerConfig : public Extensible
*/
bool ReadFile(file_cache &F, const char* fname);
+ /* Returns true if the given string starts with a windows drive letter
+ */
+ bool StartsWithWindowsDriveLetter(const std::string &path);
+
/** Report a configuration error given in errormessage.
* @param bail If this is set to true, the error is sent to the console, and the program exits
* @param user If this is set to a non-null value, and bail is false, the errors are spooled to
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 5b582b713..3f99a52e2 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -1649,6 +1649,11 @@ bool ServerConfig::DoPipe(ConfigDataHash &target, const std::string &file, std::
return ret;
}
+bool ServerConfig::StartsWithWindowsDriveLetter(const std::string &path)
+{
+ return (path.length() > 2 && isalpha(path[0]) && path[1] == ':');
+}
+
bool ServerConfig::DoInclude(ConfigDataHash &target, const std::string &file, std::ostringstream &errorstream)
{
std::string confpath;
@@ -1661,7 +1666,7 @@ bool ServerConfig::DoInclude(ConfigDataHash &target, const std::string &file, st
std::replace(newfile.begin(),newfile.end(),'\\','/');
std::replace(confpath.begin(),confpath.end(),'\\','/');
- if ((newfile[0] != '/') && (newfile.find("://") == std::string::npos))
+ if ((newfile[0] != '/') && (!StartsWithWindowsDriveLetter(newfile)))
{
if((pos = confpath.rfind("/")) != std::string::npos)
{
@@ -1883,7 +1888,7 @@ bool ServerConfig::ReadFile(file_cache &F, const char* fname)
F.clear();
- if ((*fname != '/') && (*fname != '\\'))
+ if ((*fname != '/') && (*fname != '\\') && (!StartsWithWindowsDriveLetter(fname)))
{
std::string::size_type pos;
std::string confpath = ServerInstance->ConfigFileName;
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 97e2c77e3..50e76b2a2 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -351,7 +351,8 @@ bool InspIRCd::DaemonSeed()
void InspIRCd::WritePID(const std::string &filename)
{
std::string fname = (filename.empty() ? "inspircd.pid" : filename);
- if (*(fname.begin()) != '/')
+ std::replace(fname.begin(), fname.end(), '\\', '/');
+ if ((fname[0] != '/') && (!Config->StartsWithWindowsDriveLetter(filename)))
{
std::string::size_type pos;
std::string confpath = this->ConfigFileName;
diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp
index 4b9d0fc4e..70c87d5fa 100644
--- a/src/modules/extra/m_ssl_gnutls.cpp
+++ b/src/modules/extra/m_ssl_gnutls.cpp
@@ -220,16 +220,16 @@ class ModuleSSLGnuTLS : public Module
dh_bits = 1024;
// Prepend relative paths with the path to the config directory.
- if(cafile[0] != '/')
+ if ((cafile[0] != '/') && (!ServerInstance->Config->StartsWithWindowsDriveLetter(cafile)))
cafile = confdir + cafile;
- if(crlfile[0] != '/')
+ if ((crlfile[0] != '/') && (!ServerInstance->Config->StartsWithWindowsDriveLetter(crlfile)))
crlfile = confdir + crlfile;
- if(certfile[0] != '/')
+ if ((certfile[0] != '/') && (!ServerInstance->Config->StartsWithWindowsDriveLetter(certfile)))
certfile = confdir + certfile;
- if(keyfile[0] != '/')
+ if ((keyfile[0] != '/') && (!ServerInstance->Config->StartsWithWindowsDriveLetter(keyfile)))
keyfile = confdir + keyfile;
int ret;
diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp
index 4691b874e..304e57989 100644
--- a/src/modules/extra/m_ssl_openssl.cpp
+++ b/src/modules/extra/m_ssl_openssl.cpp
@@ -244,16 +244,16 @@ class ModuleSSLOpenSSL : public Module
dhfile = "dhparams.pem";
// Prepend relative paths with the path to the config directory.
- if (cafile[0] != '/')
+ if ((cafile[0] != '/') && (!ServerInstance->Config->StartsWithWindowsDriveLetter(cafile)))
cafile = confdir + cafile;
- if (certfile[0] != '/')
+ if ((certfile[0] != '/') && (!ServerInstance->Config->StartsWithWindowsDriveLetter(certfile)))
certfile = confdir + certfile;
- if (keyfile[0] != '/')
+ if ((keyfile[0] != '/') && (!ServerInstance->Config->StartsWithWindowsDriveLetter(keyfile)))
keyfile = confdir + keyfile;
- if (dhfile[0] != '/')
+ if ((dhfile[0] != '/') && (!ServerInstance->Config->StartsWithWindowsDriveLetter(dhfile)))
dhfile = confdir + dhfile;
/* Load our keys and certificates