|
@@ -17,6 +17,7 @@ import (
|
|
var (
|
|
var (
|
|
aclCacheMutex = &sync.RWMutex{}
|
|
aclCacheMutex = &sync.RWMutex{}
|
|
aclCacheMap = make(map[string]models.Acl)
|
|
aclCacheMap = make(map[string]models.Acl)
|
|
|
|
+ aclTagsMutex = &sync.RWMutex{}
|
|
)
|
|
)
|
|
|
|
|
|
func MigrateAclPolicies() {
|
|
func MigrateAclPolicies() {
|
|
@@ -575,8 +576,10 @@ func IsPeerAllowed(node, peer models.Node, checkDefaultPolicy bool) bool {
|
|
if peer.IsStatic {
|
|
if peer.IsStatic {
|
|
peer = peer.StaticNode.ConvertToStaticNode()
|
|
peer = peer.StaticNode.ConvertToStaticNode()
|
|
}
|
|
}
|
|
|
|
+ aclTagsMutex.RLock()
|
|
peerTags := maps.Clone(peer.Tags)
|
|
peerTags := maps.Clone(peer.Tags)
|
|
nodeTags := maps.Clone(node.Tags)
|
|
nodeTags := maps.Clone(node.Tags)
|
|
|
|
+ aclTagsMutex.RUnlock()
|
|
if checkDefaultPolicy {
|
|
if checkDefaultPolicy {
|
|
// check default policy if all allowed return true
|
|
// check default policy if all allowed return true
|
|
defaultPolicy, err := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
|
|
defaultPolicy, err := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
|
|
@@ -658,8 +661,10 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool)
|
|
if peer.IsStatic {
|
|
if peer.IsStatic {
|
|
peer = peer.StaticNode.ConvertToStaticNode()
|
|
peer = peer.StaticNode.ConvertToStaticNode()
|
|
}
|
|
}
|
|
|
|
+ aclTagsMutex.RLock()
|
|
peerTags := maps.Clone(peer.Tags)
|
|
peerTags := maps.Clone(peer.Tags)
|
|
nodeTags := maps.Clone(node.Tags)
|
|
nodeTags := maps.Clone(node.Tags)
|
|
|
|
+ aclTagsMutex.RUnlock()
|
|
if checkDefaultPolicy {
|
|
if checkDefaultPolicy {
|
|
// check default policy if all allowed return true
|
|
// check default policy if all allowed return true
|
|
defaultPolicy, err := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
|
|
defaultPolicy, err := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
|