Skip to content

Commit

Permalink
Check for windows drive letters on the start of paths and treat them …
Browse files Browse the repository at this point in the history
…the same as paths that start with /, this makes insp more friendly for windows filesystems

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9724 e03df62e-2008-0410-955e-edbf42e46eb7
  • Loading branch information
braindigitalis committed May 13, 2008
1 parent 25a7827 commit 9f33bf7
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 11 deletions.
4 changes: 4 additions & 0 deletions include/configreader.h
Expand Up @@ -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
Expand Down
9 changes: 7 additions & 2 deletions src/configreader.cpp
Expand Up @@ -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;
Expand All @@ -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)
{
Expand Down Expand Up @@ -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;
Expand Down
3 changes: 2 additions & 1 deletion src/inspircd.cpp
Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions src/modules/extra/m_ssl_gnutls.cpp
Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions src/modules/extra/m_ssl_openssl.cpp
Expand Up @@ -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
Expand Down

0 comments on commit 9f33bf7

Please sign in to comment.