Browse Source

Merge pull request #3755 from gravitl/v1.2.0-legacy-acl-fix

v1.2.0: add safe nil check for legacy acls
Abhishek Kondur 1 week ago
parent
commit
405d38510d
2 changed files with 22 additions and 4 deletions
  1. 7 0
      logic/clients.go
  2. 15 4
      pro/logic/ext_acls.go

+ 7 - 0
logic/clients.go

@@ -26,6 +26,10 @@ var (
 	}
 	}
 	SetClientDefaultACLs = func(ec *models.ExtClient) error {
 	SetClientDefaultACLs = func(ec *models.ExtClient) error {
 		// allow all on CE
 		// allow all on CE
+		if !GetServerSettings().OldAClsSupport {
+			ec.DeniedACLs = make(map[string]struct{})
+			return nil
+		}
 		networkAcls := acls.ACLContainer{}
 		networkAcls := acls.ACLContainer{}
 		networkAcls, err := networkAcls.Get(acls.ContainerID(ec.Network))
 		networkAcls, err := networkAcls.Get(acls.ContainerID(ec.Network))
 		if err != nil {
 		if err != nil {
@@ -34,6 +38,9 @@ var (
 		}
 		}
 		networkAcls[acls.AclID(ec.ClientID)] = make(acls.ACL)
 		networkAcls[acls.AclID(ec.ClientID)] = make(acls.ACL)
 		for objId := range networkAcls {
 		for objId := range networkAcls {
+			if networkAcls[objId] == nil {
+				networkAcls[objId] = make(acls.ACL)
+			}
 			networkAcls[objId][acls.AclID(ec.ClientID)] = acls.Allowed
 			networkAcls[objId][acls.AclID(ec.ClientID)] = acls.Allowed
 			networkAcls[acls.AclID(ec.ClientID)][objId] = acls.Allowed
 			networkAcls[acls.AclID(ec.ClientID)][objId] = acls.Allowed
 		}
 		}

+ 15 - 4
pro/logic/ext_acls.go

@@ -48,6 +48,10 @@ func RemoveDeniedNodeFromClient(ec *models.ExtClient, clientOrNodeID string) boo
 
 
 // SetClientDefaultACLs - set's a client's default ACLs based on network and nodes in network
 // SetClientDefaultACLs - set's a client's default ACLs based on network and nodes in network
 func SetClientDefaultACLs(ec *models.ExtClient) error {
 func SetClientDefaultACLs(ec *models.ExtClient) error {
+	if !logic.GetServerSettings().OldAClsSupport {
+		ec.DeniedACLs = make(map[string]struct{})
+		return nil
+	}
 	networkNodes, err := logic.GetNetworkNodes(ec.Network)
 	networkNodes, err := logic.GetNetworkNodes(ec.Network)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
@@ -65,14 +69,18 @@ func SetClientDefaultACLs(ec *models.ExtClient) error {
 	networkAcls[acls.AclID(ec.ClientID)] = make(acls.ACL)
 	networkAcls[acls.AclID(ec.ClientID)] = make(acls.ACL)
 	for i := range networkNodes {
 	for i := range networkNodes {
 		currNode := networkNodes[i]
 		currNode := networkNodes[i]
+		nodeID := acls.AclID(currNode.ID.String())
+		if networkAcls[nodeID] == nil {
+			networkAcls[nodeID] = make(acls.ACL)
+		}
 		if network.DefaultACL == "no" || currNode.DefaultACL == "no" {
 		if network.DefaultACL == "no" || currNode.DefaultACL == "no" {
 			DenyClientNode(ec, currNode.ID.String())
 			DenyClientNode(ec, currNode.ID.String())
-			networkAcls[acls.AclID(ec.ClientID)][acls.AclID(currNode.ID.String())] = acls.NotAllowed
-			networkAcls[acls.AclID(currNode.ID.String())][acls.AclID(ec.ClientID)] = acls.NotAllowed
+			networkAcls[acls.AclID(ec.ClientID)][nodeID] = acls.NotAllowed
+			networkAcls[nodeID][acls.AclID(ec.ClientID)] = acls.NotAllowed
 		} else {
 		} else {
 			RemoveDeniedNodeFromClient(ec, currNode.ID.String())
 			RemoveDeniedNodeFromClient(ec, currNode.ID.String())
-			networkAcls[acls.AclID(ec.ClientID)][acls.AclID(currNode.ID.String())] = acls.Allowed
-			networkAcls[acls.AclID(currNode.ID.String())][acls.AclID(ec.ClientID)] = acls.Allowed
+			networkAcls[acls.AclID(ec.ClientID)][nodeID] = acls.Allowed
+			networkAcls[nodeID][acls.AclID(ec.ClientID)] = acls.Allowed
 		}
 		}
 	}
 	}
 	networkClients, err := logic.GetNetworkExtClients(ec.Network)
 	networkClients, err := logic.GetNetworkExtClients(ec.Network)
@@ -82,6 +90,9 @@ func SetClientDefaultACLs(ec *models.ExtClient) error {
 	}
 	}
 	for _, client := range networkClients {
 	for _, client := range networkClients {
 		// TODO: revisit when client-client acls are supported
 		// TODO: revisit when client-client acls are supported
+		if networkAcls[acls.AclID(client.ClientID)] == nil {
+			networkAcls[acls.AclID(client.ClientID)] = make(acls.ACL)
+		}
 		networkAcls[acls.AclID(ec.ClientID)][acls.AclID(client.ClientID)] = acls.Allowed
 		networkAcls[acls.AclID(ec.ClientID)][acls.AclID(client.ClientID)] = acls.Allowed
 		networkAcls[acls.AclID(client.ClientID)][acls.AclID(ec.ClientID)] = acls.Allowed
 		networkAcls[acls.AclID(client.ClientID)][acls.AclID(ec.ClientID)] = acls.Allowed
 	}
 	}