summaryrefslogtreecommitdiff
path: root/node/Capability.hpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-08-24 13:37:57 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-08-24 13:37:57 -0700
commit8e3463d47a8e7565784f349f359ebe7f4a4d0e57 (patch)
tree678b59a6d85bd456649ca4200761386eb64874e5 /node/Capability.hpp
parent8d594f8b536a1e4acfe62223eb4bd939a8e04fe9 (diff)
downloadinfinitytier-8e3463d47a8e7565784f349f359ebe7f4a4d0e57.tar.gz
infinitytier-8e3463d47a8e7565784f349f359ebe7f4a4d0e57.zip
Add length limit to TEE and REDIRECT, and completely factor out old C json-parser to eliminate a dependency.
Diffstat (limited to 'node/Capability.hpp')
-rw-r--r--node/Capability.hpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/node/Capability.hpp b/node/Capability.hpp
index b0620891..0b352725 100644
--- a/node/Capability.hpp
+++ b/node/Capability.hpp
@@ -181,6 +181,11 @@ public:
break;
case ZT_NETWORK_RULE_ACTION_TEE:
case ZT_NETWORK_RULE_ACTION_REDIRECT:
+ b.append((uint8_t)14);
+ b.append((uint64_t)rules[i].v.fwd.address);
+ b.append((uint32_t)rules[i].v.fwd.flags);
+ b.append((uint16_t)rules[i].v.fwd.length);
+ break;
case ZT_NETWORK_RULE_MATCH_SOURCE_ZEROTIER_ADDRESS:
case ZT_NETWORK_RULE_MATCH_DEST_ZEROTIER_ADDRESS:
b.append((uint8_t)5);
@@ -266,6 +271,10 @@ public:
break;
case ZT_NETWORK_RULE_ACTION_TEE:
case ZT_NETWORK_RULE_ACTION_REDIRECT:
+ rules[ruleCount].v.fwd.address = b.template at<uint64_t>(p);
+ rules[ruleCount].v.fwd.flags = b.template at<uint32_t>(p + 8);
+ rules[ruleCount].v.fwd.length = b.template at<uint16_t>(p + 12);
+ break;
case ZT_NETWORK_RULE_MATCH_SOURCE_ZEROTIER_ADDRESS:
case ZT_NETWORK_RULE_MATCH_DEST_ZEROTIER_ADDRESS:
rules[ruleCount].v.zt = Address(b.field(p,ZT_ADDRESS_LENGTH),ZT_ADDRESS_LENGTH).toInt();