mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-05-12 05:23:10 +00:00
Fix bad COM attachment bug and eliminate an unnecessary redundant check.
This commit is contained in:
parent
95953b48f9
commit
3adb183c5f
@ -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];
|
const unsigned int flags = (*this)[ZT_PROTO_VERB_EXT_FRAME_IDX_FLAGS];
|
||||||
|
|
||||||
unsigned int comLen = 0;
|
unsigned int comLen = 0;
|
||||||
bool comFailed = false;
|
|
||||||
if ((flags & 0x01) != 0) {
|
if ((flags & 0x01) != 0) {
|
||||||
CertificateOfMembership com;
|
CertificateOfMembership com;
|
||||||
comLen = com.deserialize(*this,ZT_PROTO_VERB_EXT_FRAME_IDX_COM);
|
comLen = com.deserialize(*this,ZT_PROTO_VERB_EXT_FRAME_IDX_COM);
|
||||||
if (!peer->validateAndSetNetworkMembershipCertificate(RR,network->id(),com))
|
peer->validateAndSetNetworkMembershipCertificate(RR,network->id(),com);
|
||||||
comFailed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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());
|
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());
|
_sendErrorNeedCertificate(RR,peer,network->id());
|
||||||
return true;
|
return true;
|
||||||
|
@ -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
|
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));
|
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)) {
|
if ((fromBridged)||(includeCom)) {
|
||||||
Packet outp(toZT,RR->identity.address(),Packet::VERB_EXT_FRAME);
|
Packet outp(toZT,RR->identity.address(),Packet::VERB_EXT_FRAME);
|
||||||
outp.append(network->id());
|
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]));
|
SharedPtr<Peer> bridgePeer(RR->topology->getPeer(bridges[b]));
|
||||||
Packet outp(bridges[b],RR->identity.address(),Packet::VERB_EXT_FRAME);
|
Packet outp(bridges[b],RR->identity.address(),Packet::VERB_EXT_FRAME);
|
||||||
outp.append(network->id());
|
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
|
outp.append((unsigned char)0x01); // 0x01 -- COM included
|
||||||
nconf->com().serialize(outp);
|
nconf->com().serialize(outp);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user