Commit 4d0e5c02 authored by Sebastien Barre's avatar Sebastien Barre

FIX: if the 'hostname' and 'nslookup' commands were not found from their...

FIX: if the 'hostname' and 'nslookup' commands were not found from their HOSTNAME and NSLOOKUP cache definition, hard-coded values were used instead, thus causing pb if the corresponding progs were not in the PATH (RunCommand). Now use FindProgram() to be sure to find both, otherwise do nothing and set the site name to "unknown" (arbitrary. could be empty string ? or error ?).
parent d2411588
......@@ -48,6 +48,7 @@ bool cmSiteNameCommand::InitialPass(std::vector<std::string> const& args)
this->SetError("called with incorrect number of arguments");
return false;
}
const char* cacheValue
= m_Makefile->GetDefinition(args[0].c_str());
if(cacheValue)
......@@ -55,49 +56,76 @@ bool cmSiteNameCommand::InitialPass(std::vector<std::string> const& args)
return true;
}
const char* hostname = m_Makefile->GetDefinition("HOSTNAME");
if(!hostname)
const char *temp = m_Makefile->GetDefinition("HOSTNAME");
std::string hostname_cmd;
if(temp)
{
hostname = "hostname";
hostname_cmd = temp;
}
const char* nslookup = m_Makefile->GetDefinition("NSLOOKUP");
if(!nslookup)
else
{
nslookup = "nslookup";
hostname_cmd = cmSystemTools::FindProgram("hostname");
}
std::string host;
cmSystemTools::RunCommand(hostname,
host);
if (host.length())
std::string siteName = "unknown";
// try to find the hostname for this computer
if (hostname_cmd.length())
{
// remove any white space from the host name
std::string hostRegExp = "[ \t\n\r]*([^\t\n\r ]*)[ \t\n\r]*";
cmRegularExpression hostReg (hostRegExp.c_str());
if (hostReg.find(host.c_str()))
std::string host;
cmSystemTools::RunCommand(hostname_cmd.c_str(),
host);
// got the hostname
if (host.length())
{
// strip whitespace
host = hostReg.match(1);
}
}
// remove any white space from the host name
std::string hostRegExp = "[ \t\n\r]*([^\t\n\r ]*)[ \t\n\r]*";
cmRegularExpression hostReg (hostRegExp.c_str());
if (hostReg.find(host.c_str()))
{
// strip whitespace
host = hostReg.match(1);
}
std::string siteName = host;
if(host.length())
{
// try to find the domain name for this computer
std::string nsCmd = nslookup;
nsCmd += " ";
nsCmd += host;
std::string nsOutput;
cmSystemTools::RunCommand(nsCmd.c_str(),
nsOutput);
std::string RegExp = ".*Name:[ \t\n]*";
RegExp += host;
RegExp += "\\.([^ \t\n\r]*)[ \t\n\r]*Address:";
cmRegularExpression reg( RegExp.c_str() );
if(reg.find(nsOutput.c_str()))
{
siteName += '.' + cmSystemTools::LowerCase(reg.match(1));
if(host.length())
{
siteName = host;
temp = m_Makefile->GetDefinition("NSLOOKUP");
std::string nslookup_cmd;
if(temp)
{
nslookup_cmd = temp;
}
else
{
nslookup_cmd = cmSystemTools::FindProgram("nslookup");
}
// try to find the domain name for this computer
if (nslookup_cmd.length())
{
nslookup_cmd += " ";
nslookup_cmd += host;
std::string nsOutput;
cmSystemTools::RunCommand(nslookup_cmd.c_str(),
nsOutput);
// got the domain name
if (nsOutput.length())
{
std::string RegExp = ".*Name:[ \t\n]*";
RegExp += host;
RegExp += "\\.([^ \t\n\r]*)[ \t\n\r]*Address:";
cmRegularExpression reg( RegExp.c_str() );
if(reg.find(nsOutput.c_str()))
{
siteName += '.' + cmSystemTools::LowerCase(reg.match(1));
}
}
}
}
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment