diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-08-24 13:37:57 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-08-24 13:37:57 -0700 |
commit | 8e3463d47a8e7565784f349f359ebe7f4a4d0e57 (patch) | |
tree | 678b59a6d85bd456649ca4200761386eb64874e5 /node/Network.cpp | |
parent | 8d594f8b536a1e4acfe62223eb4bd939a8e04fe9 (diff) | |
download | infinitytier-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/Network.cpp')
-rw-r--r-- | node/Network.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/node/Network.cpp b/node/Network.cpp index 1319df4e..e12dd027 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -154,13 +154,13 @@ static int _doZtFilter( break; case ZT_NETWORK_RULE_ACTION_TEE: case ZT_NETWORK_RULE_ACTION_REDIRECT: { - Packet outp(Address(rules[rn].v.zt),RR->identity.address(),Packet::VERB_EXT_FRAME); + Packet outp(Address(rules[rn].v.fwd.address),RR->identity.address(),Packet::VERB_EXT_FRAME); outp.append(nconf.networkId); - outp.append((uint8_t)((rt == ZT_NETWORK_RULE_ACTION_REDIRECT) ? 0x04 : 0x02)); + outp.append((uint8_t)( ((rt == ZT_NETWORK_RULE_ACTION_REDIRECT) ? 0x04 : 0x02) | (inbound ? 0x08 : 0x00) )); macDest.appendTo(outp); macSource.appendTo(outp); outp.append((uint16_t)etherType); - outp.append(frameData,frameLen); + outp.append(frameData,(rules[rn].v.fwd.length != 0) ? ((frameLen < (unsigned int)rules[rn].v.fwd.length) ? frameLen : (unsigned int)rules[rn].v.fwd.length) : frameLen); outp.compress(); RR->sw->send(outp,true); |