summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-09-16 15:47:00 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-09-16 15:47:00 -0700
commite22fae2397f69302820b7a1af2fe2291bb6865e0 (patch)
tree9ecb4c23cc4235bd0ce204233402618a03d5a4c5
parent73dd9d3b74ecee4d7da1368265c780d5464910e4 (diff)
downloadinfinitytier-e22fae2397f69302820b7a1af2fe2291bb6865e0.tar.gz
infinitytier-e22fae2397f69302820b7a1af2fe2291bb6865e0.zip
it compiles again!
-rw-r--r--control/NodeControlService.cpp21
-rw-r--r--control/NodeControlService.hpp9
-rw-r--r--main.cpp9
3 files changed, 36 insertions, 3 deletions
diff --git a/control/NodeControlService.cpp b/control/NodeControlService.cpp
index a3b1eca6..536752cc 100644
--- a/control/NodeControlService.cpp
+++ b/control/NodeControlService.cpp
@@ -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
diff --git a/control/NodeControlService.hpp b/control/NodeControlService.hpp
index 453e943b..737878e0 100644
--- a/control/NodeControlService.hpp
+++ b/control/NodeControlService.hpp
@@ -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);
diff --git a/main.cpp b/main.cpp
index 6fdcc1a9..67d4a808 100644
--- a/main.cpp
+++ b/main.cpp
@@ -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;