Merge pull request #1971 from gravitl/bugfix_node_update

Fix address range check
This commit is contained in:
dcarns 2023-01-26 08:33:31 -05:00 committed by GitHub
commit cdd8527b51
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 18 deletions

View file

@ -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)
}
}

View file

@ -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