Browse Source

adding check for AllowedIP length

afeiszli 3 years ago
parent
commit
605e7e727a
1 changed files with 11 additions and 4 deletions
  1. 11 4
      netclient/wireguard/common.go

+ 11 - 4
netclient/wireguard/common.go

@@ -40,9 +40,14 @@ func SetPeers(iface string, node *models.Node, peers []wgtypes.PeerConfig) error
 		return err
 		return err
 	}
 	}
 	for _, peer := range peers {
 	for _, peer := range peers {
-
+		// make sure peer has AllowedIP's before comparison
+		hasPeerIP := len(peer.AllowedIPs) > 0
 		for _, currentPeer := range devicePeers {
 		for _, currentPeer := range devicePeers {
-			if currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() &&
+			// make sure currenPeer has AllowedIP's before comparison
+			hascurrentPeerIP := len(currentPeer.AllowedIPs) > 0
+
+			if hasPeerIP && hascurrentPeerIP &&
+				currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() &&
 				currentPeer.PublicKey.String() != peer.PublicKey.String() {
 				currentPeer.PublicKey.String() != peer.PublicKey.String() {
 				_, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
 				_, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
 				if err != nil {
 				if err != nil {
@@ -54,7 +59,7 @@ func SetPeers(iface string, node *models.Node, peers []wgtypes.PeerConfig) error
 		var allowedips string
 		var allowedips string
 		var iparr []string
 		var iparr []string
 		for _, ipaddr := range peer.AllowedIPs {
 		for _, ipaddr := range peer.AllowedIPs {
-			if len(peer.AllowedIPs) > 0 && (&ipaddr) != nil {
+			if hasPeerIP && (&ipaddr) != nil {
 				iparr = append(iparr, ipaddr.String())
 				iparr = append(iparr, ipaddr.String())
 			}
 			}
 		}
 		}
@@ -85,7 +90,9 @@ func SetPeers(iface string, node *models.Node, peers []wgtypes.PeerConfig) error
 			shouldDelete := true
 			shouldDelete := true
 			if peers != nil && len(peers) > 0 {
 			if peers != nil && len(peers) > 0 {
 				for _, peer := range peers {
 				for _, peer := range peers {
-					if peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
+
+					if len(peer.AllowedIPs) > 0 && len(currentPeer.AllowedIPs) > 0 &&
+						peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
 						shouldDelete = false
 						shouldDelete = false
 					}
 					}
 					// re-check this if logic is not working, added in case of allowedips not working
 					// re-check this if logic is not working, added in case of allowedips not working