summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-08-16 14:01:25 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-08-16 14:01:25 -0700
commit715afc0314bd95bcce08240162a127f8adf8f803 (patch)
tree5c898c909dc9f2e3ee24cd0d4c2f15f6eacda1af
parentf281886bfdb05538f5cf12353916bbad5e816f2a (diff)
downloadinfinitytier-715afc0314bd95bcce08240162a127f8adf8f803.tar.gz
infinitytier-715afc0314bd95bcce08240162a127f8adf8f803.zip
Default to built-in root topology if signature check fails (instead of exiting)
-rw-r--r--node/Node.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/node/Node.cpp b/node/Node.cpp
index 75578446..460bf510 100644
--- a/node/Node.cpp
+++ b/node/Node.cpp
@@ -552,9 +552,13 @@ Node::ReasonForTermination Node::run()
rootTopology = ZT_DEFAULTS.defaultRootTopology;
try {
Dictionary rt(rootTopology);
- if (!Topology::authenticateRootTopology(rt))
- return impl->terminateBecause(Node::NODE_UNRECOVERABLE_ERROR,"root-topology failed signature verification check");
- _r->topology->setSupernodes(Dictionary(rt.get("supernodes")));
+ if (Topology::authenticateRootTopology(rt)) {
+ _r->topology->setSupernodes(Dictionary(rt.get("supernodes")));
+ } else {
+ LOG("%s failed signature check, using built-in defaults instead",rootTopologyPath.c_str());
+ Utils::rm(rootTopologyPath.c_str());
+ _r->topology->setSupernodes(Dictionary(Dictionary(ZT_DEFAULTS.defaultRootTopology).get("supernodes")));
+ }
} catch ( ... ) {
return impl->terminateBecause(Node::NODE_UNRECOVERABLE_ERROR,"invalid root-topology format");
}