it compiles again!

This commit is contained in:
Adam Ierymenko 2014-09-16 15:47:00 -07:00
parent 73dd9d3b74
commit e22fae2397
3 changed files with 36 additions and 3 deletions

View File

@ -226,4 +226,25 @@ void NodeControlService::_doCommand(IpcConnection *ipcc,const char *commandLine)
ipcc->printf("."ZT_EOL_S); // blank line ends response
}
std::string NodeControlService::readOrCreateAuthtoken(const char *path,bool generateIfNotFound)
{
unsigned char randbuf[24];
std::string token;
if (Utils::readFile(path,token))
return token;
else token = "";
if (generateIfNotFound) {
Utils::getSecureRandom(randbuf,sizeof(randbuf));
for(unsigned int i=0;i<sizeof(randbuf);++i)
token.push_back(("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")[(unsigned int)randbuf[i] % 62]);
if (!Utils::writeFile(path,token))
return std::string();
Utils::lockDownFile(path,false);
}
return token;
}
} // namespace ZeroTier

View File

@ -69,6 +69,15 @@ public:
void threadMain()
throw();
/**
* Load (or generate) the authentication token
*
* @param path Full path to authtoken.secret
* @param generateIfNotFound If true, generate and save if not found or readable
* @return Authentication token or empty string on failure
*/
static std::string readOrCreateAuthtoken(const char *path,bool generateIfNotFound);
private:
static void _CBcommandHandler(void *arg,IpcConnection *ipcc,IpcConnection::EventType event,const char *commandLine);
void _doCommand(IpcConnection *ipcc,const char *commandLine);

View File

@ -72,6 +72,9 @@
#include "node/EthernetTapFactory.hpp"
#include "node/RoutingTable.hpp"
#include "control/NodeControlClient.hpp"
#include "control/NodeControlService.hpp"
#ifdef __WINDOWS__
#include "osnet/WindowsEthernetTapFactory.hpp"
#include "osnet/WindowsRoutingTable.hpp"
@ -152,7 +155,7 @@ static int main(const char *homeDir,int argc,char **argv)
try {
volatile bool done = false;
Node::NodeControlClient client(homeDir,&_CBresultHandler,(void *)&done);
NodeControlClient client(homeDir,&_CBresultHandler,(void *)&done);
const char *err = client.error();
if (err) {
fprintf(stderr,"%s: fatal error: unable to connect (is ZeroTier One running?) (%s)"ZT_EOL_S,argv[0],err);
@ -778,7 +781,7 @@ int main(int argc,char **argv)
} break;
#else // __UNIX_LIKE__
case Node::NODE_RESTART_FOR_UPGRADE: {
const char *upgPath = node->reasonForTermination();
const char *upgPath = node->terminationMessage();
// On Unix-type OSes we exec() right into the upgrade. This in turn will
// end with us being re-launched either via the upgrade itself or something
// like OSX's launchd.
@ -797,7 +800,7 @@ int main(int argc,char **argv)
case Node::NODE_UNRECOVERABLE_ERROR: {
exitCode = 3;
const char *termReason = node->reasonForTermination();
const char *termReason = node->terminationMessage();
fprintf(stderr,"%s: abnormal termination: %s\n",argv[0],(termReason) ? termReason : "(unknown reason)");
} break;