This commit is contained in:
keesbos 2015-06-26 07:15:44 +00:00
commit 3e1810f126
3 changed files with 32 additions and 16 deletions

View file

@ -1176,7 +1176,14 @@ unsigned int SqliteNetworkController::_doCPGet(
sqlite3_bind_text(_sGetIpAssignmentsForNode2,2,addrs,10,SQLITE_STATIC); sqlite3_bind_text(_sGetIpAssignmentsForNode2,2,addrs,10,SQLITE_STATIC);
bool firstIp = true; bool firstIp = true;
while (sqlite3_step(_sGetIpAssignmentsForNode2) == SQLITE_ROW) { while (sqlite3_step(_sGetIpAssignmentsForNode2) == SQLITE_ROW) {
InetAddress ip((const void *)sqlite3_column_blob(_sGetIpAssignmentsForNode2,0),(sqlite3_column_int(_sGetIpAssignmentsForNode2,2) == 6) ? 16 : 4,(unsigned int)sqlite3_column_int(_sGetIpAssignmentPools2,1)); int ipversion = sqlite3_column_int(_sGetIpAssignmentsForNode2,2);
char ipBlob[16];
memcpy(ipBlob,(const void *)sqlite3_column_blob(_sGetIpAssignmentsForNode2,0),16);
InetAddress ip(
(const void *)(ipversion == 6 ? ipBlob : &ipBlob[12]),
(ipversion == 6 ? 16 : 4),
(unsigned int)sqlite3_column_int(_sGetIpAssignmentsForNode2,1)
);
responseBody.append(firstIp ? "\"" : ",\""); responseBody.append(firstIp ? "\"" : ",\"");
firstIp = false; firstIp = false;
responseBody.append(_jsonEscape(ip.toString())); responseBody.append(_jsonEscape(ip.toString()));

View file

@ -286,6 +286,15 @@ void Network::addMembershipCertificate(const CertificateOfMembership &cert,bool
return; return;
} }
if (cert.signedBy() == RR->identity.address()) {
// We are the controller: RR->identity.address() == controller() == cert.signedBy()
// So, verify that we signed th cert ourself
if (!cert.verify(RR->identity)) {
TRACE("rejected network membership certificate for %.16llx self signed by %s: signature check failed",(unsigned long long)_id,cert.signedBy().toString().c_str());
return;
}
} else {
SharedPtr<Peer> signer(RR->topology->getPeer(cert.signedBy())); SharedPtr<Peer> signer(RR->topology->getPeer(cert.signedBy()));
if (!signer) { if (!signer) {
@ -300,6 +309,7 @@ void Network::addMembershipCertificate(const CertificateOfMembership &cert,bool
return; return;
} }
} }
}
// If we made it past authentication, update cert // If we made it past authentication, update cert
if (cert.revision() != old.revision()) if (cert.revision() != old.revision())

View file

@ -214,12 +214,11 @@ private:
inline SharedPtr<Network> _network(uint64_t nwid) const inline SharedPtr<Network> _network(uint64_t nwid) const
{ {
std::vector< SharedPtr<Network> >::const_iterator iter = std::lower_bound(_networks.begin(), _networks.end(), nwid, NetworkComparator()); for(std::vector< SharedPtr<Network> >::const_iterator iter(_networks.begin());iter!=_networks.end();++iter) {
if(iter != _networks.end() && (*iter)->id() == nwid) { if((*iter)->id() == nwid)
return *iter; return *iter;
} else {
return SharedPtr<Network>();
} }
return SharedPtr<Network>();
} }
RuntimeEnvironment _RR; RuntimeEnvironment _RR;