diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-09-08 08:25:06 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-09-08 08:25:06 -0700 |
commit | b8729de9daa925f45705e72861b4986b328e65e9 (patch) | |
tree | b3131d810a8d0fb6b47ed9ca273446101c6a56b6 /node/PacketDecoder.cpp | |
parent | 4e9280fc7a41aac6171165487412d2a9abd432a4 (diff) | |
download | infinitytier-b8729de9daa925f45705e72861b4986b328e65e9.tar.gz infinitytier-b8729de9daa925f45705e72861b4986b328e65e9.zip |
Temporarily DISABLE multicast authentication (doing in branch, will reenable in dev)
Diffstat (limited to 'node/PacketDecoder.cpp')
-rw-r--r-- | node/PacketDecoder.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/node/PacketDecoder.cpp b/node/PacketDecoder.cpp index 369eda7b..9fa9d93c 100644 --- a/node/PacketDecoder.cpp +++ b/node/PacketDecoder.cpp @@ -612,10 +612,16 @@ bool PacketDecoder::_doMULTICAST_FRAME(const RuntimeEnvironment *_r,const Shared // Check the multicast frame's signature to verify that its original sender is // who it claims to be. - const unsigned int signedPartLen = (ZT_PROTO_VERB_MULTICAST_FRAME_IDX_FRAME - ZT_PROTO_VERB_MULTICAST_FRAME_IDX__START_OF_SIGNED_PORTION) + frameLen; - if (!originPeer->identity().verify(field(ZT_PROTO_VERB_MULTICAST_FRAME_IDX__START_OF_SIGNED_PORTION,signedPartLen),signedPartLen,signature,signatureLen)) { - LOG("dropped MULTICAST_FRAME from %s(%s): failed signature verification, claims to be from %s",source().toString().c_str(),_remoteAddress.toString().c_str(),origin.toString().c_str()); - return true; + if ((!network)||(network->authenticateMulticasts())) { + // Note that right now we authenticate multicasts if we aren't a member of a + // network... have to think about whether this is mandatory. It mostly only + // matters for supernodes though, since ordinary peers are unlikely ever to + // see multicasts for networks they don't belong to. + const unsigned int signedPartLen = (ZT_PROTO_VERB_MULTICAST_FRAME_IDX_FRAME - ZT_PROTO_VERB_MULTICAST_FRAME_IDX__START_OF_SIGNED_PORTION) + frameLen; + if (!originPeer->identity().verify(field(ZT_PROTO_VERB_MULTICAST_FRAME_IDX__START_OF_SIGNED_PORTION,signedPartLen),signedPartLen,signature,signatureLen)) { + LOG("dropped MULTICAST_FRAME from %s(%s): failed signature verification, claims to be from %s",source().toString().c_str(),_remoteAddress.toString().c_str(),origin.toString().c_str()); + return true; + } } // Security check to prohibit multicasts that are really Ethernet unicasts... |