mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-04 08:21:03 +00:00
Deauth expiring members right away.
This commit is contained in:
parent
0cf62d334d
commit
663e748b8d
@ -240,9 +240,8 @@ void DBMirrorSet::onNetworkMemberDeauthorize(const void *db,uint64_t networkId,u
|
|||||||
_listener->onNetworkMemberDeauthorize(this,networkId,memberId);
|
_listener->onNetworkMemberDeauthorize(this,networkId,memberId);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set< std::pair<uint64_t, uint64_t> > DBMirrorSet::membersExpiringSoon()
|
void DBMirrorSet::membersExpiring(std::set< std::pair<uint64_t, uint64_t> > &soon, std::set< std::pair<uint64_t, uint64_t> > &expired)
|
||||||
{
|
{
|
||||||
std::set< std::pair<uint64_t, uint64_t> > soon;
|
|
||||||
std::unique_lock<std::mutex> l(_membersExpiringSoon_l);
|
std::unique_lock<std::mutex> l(_membersExpiringSoon_l);
|
||||||
int64_t now = OSUtils::now();
|
int64_t now = OSUtils::now();
|
||||||
for(auto next=_membersExpiringSoon.begin();next!=_membersExpiringSoon.end();) {
|
for(auto next=_membersExpiringSoon.begin();next!=_membersExpiringSoon.end();) {
|
||||||
@ -276,10 +275,9 @@ std::set< std::pair<uint64_t, uint64_t> > DBMirrorSet::membersExpiringSoon()
|
|||||||
}
|
}
|
||||||
_membersExpiringSoon.erase(next++);
|
_membersExpiringSoon.erase(next++);
|
||||||
}
|
}
|
||||||
return soon;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DBMirrorSet::memberExpiring(int64_t expTime, uint64_t nwid, uint64_t memberId)
|
void DBMirrorSet::memberWillExpire(int64_t expTime, uint64_t nwid, uint64_t memberId)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(_membersExpiringSoon_l);
|
std::unique_lock<std::mutex> l(_membersExpiringSoon_l);
|
||||||
_membersExpiringSoon.insert(std::pair< int64_t, std::pair< uint64_t, uint64_t > >(expTime, std::pair< uint64_t, uint64_t >(nwid, memberId)));
|
_membersExpiringSoon.insert(std::pair< int64_t, std::pair< uint64_t, uint64_t > >(expTime, std::pair< uint64_t, uint64_t >(nwid, memberId)));
|
||||||
|
@ -60,8 +60,8 @@ public:
|
|||||||
_dbs.push_back(db);
|
_dbs.push_back(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set< std::pair<uint64_t, uint64_t> > membersExpiringSoon();
|
void membersExpiring(std::set< std::pair<uint64_t, uint64_t> > &soon, std::set< std::pair<uint64_t, uint64_t> > &expired);
|
||||||
void memberExpiring(int64_t expTime, uint64_t nwid, uint64_t memberId);
|
void memberWillExpire(int64_t expTime, uint64_t nwid, uint64_t memberId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DB::ChangeListener *const _listener;
|
DB::ChangeListener *const _listener;
|
||||||
|
@ -1379,7 +1379,7 @@ void EmbeddedNetworkController::_request(
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (authorized) {
|
} else if (authorized) {
|
||||||
_db.memberExpiring(authenticationExpiryTime, nwid, identity.address().toInt());
|
_db.memberWillExpire(authenticationExpiryTime, nwid, identity.address().toInt());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1836,22 +1836,29 @@ void EmbeddedNetworkController::_startThreads()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto expiringSoon = _db.membersExpiringSoon();
|
std::set< std::pair<uint64_t, uint64_t> > soon;
|
||||||
for(auto soon=expiringSoon.begin();soon!=expiringSoon.end();++soon) {
|
std::set< std::pair<uint64_t, uint64_t> > expired;
|
||||||
|
_db.membersExpiring(soon, expired);
|
||||||
|
|
||||||
|
for(auto s=soon.begin();s!=soon.end();++s) {
|
||||||
Identity identity;
|
Identity identity;
|
||||||
Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> lastMetaData;
|
Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> lastMetaData;
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> ll(_memberStatus_l);
|
std::unique_lock<std::mutex> ll(_memberStatus_l);
|
||||||
auto ms = _memberStatus.find(_MemberStatusKey(soon->first, soon->second));
|
auto ms = _memberStatus.find(_MemberStatusKey(s->first, s->second));
|
||||||
if (ms != _memberStatus.end()) {
|
if (ms != _memberStatus.end()) {
|
||||||
lastMetaData = ms->second.lastRequestMetaData;
|
lastMetaData = ms->second.lastRequestMetaData;
|
||||||
identity = ms->second.identity;
|
identity = ms->second.identity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (identity) {
|
if (identity) {
|
||||||
request(soon->first,InetAddress(),0,identity,lastMetaData);
|
request(s->first,InetAddress(),0,identity,lastMetaData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(auto e=expired.begin();e!=expired.end();++e) {
|
||||||
|
onNetworkMemberDeauthorize(nullptr, e->first, e->second);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user