* ---------------------------------------------------
*/
+#include "inspircd.h"
#include "configreader.h"
#include <sstream>
#include <fstream>
-#include "inspircd.h"
#include "xline.h"
#include "exitcodes.h"
#include "commands/cmd_whowas.h"
{
if (!*(data.GetString()))
{
+ std::string nameserver;
+#ifdef WINDOWS
+ conf->GetInstance()->Log(DEFAULT,"WARNING: <dns:server> not defined, attempting to find working server in the registry...");
+ nameserver = FindNameServerWin();
+ data.Set(nameserver.c_str());
+ conf->GetInstance()->Log(DEFAULT,"<dns:server> set to '%s' as first active resolver in registry.", nameserver.c_str());
+#else
// attempt to look up their nameserver from /etc/resolv.conf
conf->GetInstance()->Log(DEFAULT,"WARNING: <dns:server> not defined, attempting to find working server in /etc/resolv.conf...");
ifstream resolv("/etc/resolv.conf");
- std::string nameserver;
bool found_server = false;
if (resolv.is_open())
conf->GetInstance()->Log(DEFAULT,"/etc/resolv.conf can't be opened! Defaulting to nameserver '127.0.0.1'!");
data.Set("127.0.0.1");
}
+#endif
}
return true;
}
std::string ServerConfig::GetFullProgDir()
{
- char buffer[1024];
+ char buffer[PATH_MAX+1];
// Get the current working directory
- if (getcwd(buffer, 1024) == NULL)
+ if (getcwd(buffer, PATH_MAX))
{
- return "";
- }
+ std::string remainder = this->argv[0];
- if (chdir(buffer) == -1)
- {
- return "";
+ /* Does argv[0] start with /? its a full path, use it */
+ if (remainder[0] == '/')
+ {
+ std::string::size_type n = remainder.rfind("/inspircd");
+ return std::string(remainder, 0, n);
+ }
+
+ std::string fullpath = std::string(buffer) + "/" + remainder;
+ std::string::size_type n = fullpath.rfind("/inspircd");
+ return std::string(fullpath, 0, n);
}
- return buffer;
+ return "/";
}
InspIRCd* ServerConfig::GetInstance()