Browse Source

Merge pull request #1971 from gravitl/bugfix_node_update

Fix address range check
dcarns 2 years ago
parent
commit
cdd8527b51
2 changed files with 3 additions and 18 deletions
  1. 1 1
      logic/nodes.go
  2. 2 17
      logic/util.go

+ 1 - 1
logic/nodes.go

@@ -50,7 +50,7 @@ func GetNetworkNodes(network string) ([]models.Node, error) {
 func UpdateNode(currentNode *models.Node, newNode *models.Node) error {
 	if newNode.Address.IP.String() != currentNode.Address.IP.String() {
 		if network, err := GetParentNetwork(newNode.Network); err == nil {
-			if !IsAddressInCIDR(newNode.Address.IP.String(), network.AddressRange) {
+			if !IsAddressInCIDR(newNode.Address.IP, network.AddressRange) {
 				return fmt.Errorf("invalid address provided; out of network range for node %s", newNode.ID)
 			}
 		}

+ 2 - 17
logic/util.go

@@ -5,7 +5,6 @@ import (
 	crand "crypto/rand"
 	"encoding/base64"
 	"encoding/json"
-	"fmt"
 	"math/big"
 	"math/rand"
 	"net"
@@ -40,26 +39,12 @@ func FileExists(f string) bool {
 }
 
 // IsAddressInCIDR - util to see if an address is in a cidr or not
-func IsAddressInCIDR(address, cidr string) bool {
+func IsAddressInCIDR(address net.IP, cidr string) bool {
 	var _, currentCIDR, cidrErr = net.ParseCIDR(cidr)
 	if cidrErr != nil {
 		return false
 	}
-	var addrParts = strings.Split(address, ".")
-	var addrPartLength = len(addrParts)
-	if addrPartLength != 4 {
-		return false
-	} else {
-		if addrParts[addrPartLength-1] == "0" ||
-			addrParts[addrPartLength-1] == "255" {
-			return false
-		}
-	}
-	ip, _, err := net.ParseCIDR(fmt.Sprintf("%s/32", address))
-	if err != nil {
-		return false
-	}
-	return currentCIDR.Contains(ip)
+	return currentCIDR.Contains(address)
 }
 
 // SetNetworkNodesLastModified - sets the network nodes last modified