diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-08-16 14:01:25 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-08-16 14:01:25 -0700 |
commit | 715afc0314bd95bcce08240162a127f8adf8f803 (patch) | |
tree | 5c898c909dc9f2e3ee24cd0d4c2f15f6eacda1af | |
parent | f281886bfdb05538f5cf12353916bbad5e816f2a (diff) | |
download | infinitytier-715afc0314bd95bcce08240162a127f8adf8f803.tar.gz infinitytier-715afc0314bd95bcce08240162a127f8adf8f803.zip |
Default to built-in root topology if signature check fails (instead of exiting)
-rw-r--r-- | node/Node.cpp | 10 |
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"); } |