mirror of
https://github.com/gravitl/netmaker.git
synced 2024-09-20 23:36:18 +08:00
Merge pull request #1971 from gravitl/bugfix_node_update
Fix address range check
This commit is contained in:
commit
cdd8527b51
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue