summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-19 13:38:27 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-19 13:38:27 -0700
commit3adb183c5f76b69013d052383c4b812e3947041e (patch)
tree557531f3adbbb2b115fdd2b0e9352168ffb40b1b /node
parent95953b48f963213a803b230e2d83416257716e65 (diff)
downloadinfinitytier-3adb183c5f76b69013d052383c4b812e3947041e.tar.gz
infinitytier-3adb183c5f76b69013d052383c4b812e3947041e.zip
Fix bad COM attachment bug and eliminate an unnecessary redundant check.
Diffstat (limited to 'node')
-rw-r--r--node/IncomingPacket.cpp6
-rw-r--r--node/Switch.cpp4
2 files changed, 4 insertions, 6 deletions
diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp
index 6b39963a..19747bbd 100644
--- a/node/IncomingPacket.cpp
+++ b/node/IncomingPacket.cpp
@@ -529,15 +529,13 @@ bool IncomingPacket::_doEXT_FRAME(const RuntimeEnvironment *RR,const SharedPtr<P
const unsigned int flags = (*this)[ZT_PROTO_VERB_EXT_FRAME_IDX_FLAGS];
unsigned int comLen = 0;
- bool comFailed = false;
if ((flags & 0x01) != 0) {
CertificateOfMembership com;
comLen = com.deserialize(*this,ZT_PROTO_VERB_EXT_FRAME_IDX_COM);
- if (!peer->validateAndSetNetworkMembershipCertificate(RR,network->id(),com))
- comFailed = true;
+ peer->validateAndSetNetworkMembershipCertificate(RR,network->id(),com);
}
- if ((comFailed)||(!network->isAllowed(peer))) {
+ if (!network->isAllowed(peer)) {
TRACE("dropped EXT_FRAME from %s(%s): not a member of private network %.16llx",peer->address().toString().c_str(),_remoteAddress.toString().c_str(),network->id());
_sendErrorNeedCertificate(RR,peer,network->id());
return true;
diff --git a/node/Switch.cpp b/node/Switch.cpp
index 9ea8ac49..249a21d5 100644
--- a/node/Switch.cpp
+++ b/node/Switch.cpp
@@ -203,7 +203,7 @@ void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,c
Address toZT(to.toAddress(network->id())); // since in-network MACs are derived from addresses and network IDs, we can reverse this
SharedPtr<Peer> toPeer(RR->topology->getPeer(toZT));
- const bool includeCom = ((!toPeer)||(toPeer->needsOurNetworkMembershipCertificate(network->id(),RR->node->now(),true)));;
+ const bool includeCom = ( (nconf->isPrivate()) && (nconf->com()) && ((!toPeer)||(toPeer->needsOurNetworkMembershipCertificate(network->id(),RR->node->now(),true))) );
if ((fromBridged)||(includeCom)) {
Packet outp(toZT,RR->identity.address(),Packet::VERB_EXT_FRAME);
outp.append(network->id());
@@ -271,7 +271,7 @@ void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,c
SharedPtr<Peer> bridgePeer(RR->topology->getPeer(bridges[b]));
Packet outp(bridges[b],RR->identity.address(),Packet::VERB_EXT_FRAME);
outp.append(network->id());
- if ((!bridgePeer)||(bridgePeer->needsOurNetworkMembershipCertificate(network->id(),RR->node->now(),true))) {
+ if ( (nconf->isPrivate()) && (nconf->com()) && ((!bridgePeer)||(bridgePeer->needsOurNetworkMembershipCertificate(network->id(),RR->node->now(),true))) ) {
outp.append((unsigned char)0x01); // 0x01 -- COM included
nconf->com().serialize(outp);
} else {