|
@@ -271,10 +271,10 @@ func GetEgressRanges(netID models.NetworkID) (map[string][]string, map[string]st
|
|
return nodeEgressMap, resultMap, nil
|
|
return nodeEgressMap, resultMap, nil
|
|
}
|
|
}
|
|
|
|
|
|
-func checkIfAclTagisValid(t models.AclPolicyTag, netID models.NetworkID, policyType models.AclPolicyType, isSrc bool) bool {
|
|
|
|
|
|
+func checkIfAclTagisValid(a models.Acl, t models.AclPolicyTag, isSrc bool) bool {
|
|
switch t.ID {
|
|
switch t.ID {
|
|
case models.NodeTagID:
|
|
case models.NodeTagID:
|
|
- if policyType == models.UserPolicy && isSrc {
|
|
|
|
|
|
+ if a.RuleType == models.UserPolicy && isSrc {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
// check if tag is valid
|
|
// check if tag is valid
|
|
@@ -283,12 +283,12 @@ func checkIfAclTagisValid(t models.AclPolicyTag, netID models.NetworkID, policyT
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
case models.NodeID:
|
|
case models.NodeID:
|
|
- if policyType == models.UserPolicy && isSrc {
|
|
|
|
|
|
+ if a.RuleType == models.UserPolicy && isSrc {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
_, nodeErr := GetNodeByID(t.Value)
|
|
_, nodeErr := GetNodeByID(t.Value)
|
|
if nodeErr != nil {
|
|
if nodeErr != nil {
|
|
- _, staticNodeErr := GetExtClient(t.Value, netID.String())
|
|
|
|
|
|
+ _, staticNodeErr := GetExtClient(t.Value, a.NetworkID.String())
|
|
if staticNodeErr != nil {
|
|
if staticNodeErr != nil {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
@@ -301,9 +301,35 @@ func checkIfAclTagisValid(t models.AclPolicyTag, netID models.NetworkID, policyT
|
|
if err != nil {
|
|
if err != nil {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
|
|
+ if e.IsInetGw {
|
|
|
|
+ req := models.InetNodeReq{}
|
|
|
|
+ for _, srcI := range a.Src {
|
|
|
|
+ if srcI.ID == models.NodeTagID {
|
|
|
|
+ nodesMap := GetNodesWithTag(models.TagID(srcI.Value))
|
|
|
|
+ for _, node := range nodesMap {
|
|
|
|
+ req.InetNodeClientIDs = append(req.InetNodeClientIDs, node.ID.String())
|
|
|
|
+ }
|
|
|
|
+ } else if srcI.ID == models.NodeID {
|
|
|
|
+ req.InetNodeClientIDs = append(req.InetNodeClientIDs, srcI.Value)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if len(e.Nodes) > 0 {
|
|
|
|
+ for k := range e.Nodes {
|
|
|
|
+ inetNode, err := GetNodeByID(k)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ if ValidateInetGwReq(inetNode, req, false) != nil {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
case models.UserAclID:
|
|
case models.UserAclID:
|
|
- if policyType == models.DevicePolicy {
|
|
|
|
|
|
+ if a.RuleType == models.DevicePolicy {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
if !isSrc {
|
|
if !isSrc {
|
|
@@ -314,7 +340,7 @@ func checkIfAclTagisValid(t models.AclPolicyTag, netID models.NetworkID, policyT
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
case models.UserGroupAclID:
|
|
case models.UserGroupAclID:
|
|
- if policyType == models.DevicePolicy {
|
|
|
|
|
|
+ if a.RuleType == models.DevicePolicy {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
if !isSrc {
|
|
if !isSrc {
|
|
@@ -325,7 +351,7 @@ func checkIfAclTagisValid(t models.AclPolicyTag, netID models.NetworkID, policyT
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
// check if group belongs to this network
|
|
// check if group belongs to this network
|
|
- netGrps := GetUserGroupsInNetwork(netID)
|
|
|
|
|
|
+ netGrps := GetUserGroupsInNetwork(a.NetworkID)
|
|
if _, ok := netGrps[models.UserGroupID(t.Value)]; !ok {
|
|
if _, ok := netGrps[models.UserGroupID(t.Value)]; !ok {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
@@ -351,7 +377,7 @@ func IsAclPolicyValid(acl models.Acl) bool {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
// check if user group is valid
|
|
// check if user group is valid
|
|
- if !checkIfAclTagisValid(srcI, acl.NetworkID, acl.RuleType, true) {
|
|
|
|
|
|
+ if !checkIfAclTagisValid(acl, srcI, true) {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -362,7 +388,7 @@ func IsAclPolicyValid(acl models.Acl) bool {
|
|
}
|
|
}
|
|
|
|
|
|
// check if user group is valid
|
|
// check if user group is valid
|
|
- if !checkIfAclTagisValid(dstI, acl.NetworkID, acl.RuleType, false) {
|
|
|
|
|
|
+ if !checkIfAclTagisValid(acl, dstI, false) {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -372,7 +398,7 @@ func IsAclPolicyValid(acl models.Acl) bool {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
// check if user group is valid
|
|
// check if user group is valid
|
|
- if !checkIfAclTagisValid(srcI, acl.NetworkID, acl.RuleType, true) {
|
|
|
|
|
|
+ if !checkIfAclTagisValid(acl, srcI, true) {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -382,7 +408,7 @@ func IsAclPolicyValid(acl models.Acl) bool {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
// check if user group is valid
|
|
// check if user group is valid
|
|
- if !checkIfAclTagisValid(dstI, acl.NetworkID, acl.RuleType, false) {
|
|
|
|
|
|
+ if !checkIfAclTagisValid(acl, dstI, false) {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
}
|