Browse Source

Merge pull request #1079 from gravitl/bugfix_v0.14.0_untrapped_err

added length checks as temp solution
dcarns 3 years ago
parent
commit
eade829f19
3 changed files with 34 additions and 21 deletions
  1. 3 0
      logic/util.go
  2. 5 3
      logic/wireguard.go
  3. 26 18
      netclient/wireguard/common.go

+ 3 - 0
logic/util.go

@@ -202,6 +202,9 @@ func StringSliceContains(slice []string, item string) bool {
 // sets the network server peers of a given node
 // sets the network server peers of a given node
 func setNetworkServerPeers(serverNode *models.Node) {
 func setNetworkServerPeers(serverNode *models.Node) {
 	if currentPeersList, err := getSystemPeers(serverNode); err == nil {
 	if currentPeersList, err := getSystemPeers(serverNode); err == nil {
+		if currentPeersList == nil {
+			currentPeersList = make(map[string]string)
+		}
 		if database.SetPeers(currentPeersList, serverNode.Network) {
 		if database.SetPeers(currentPeersList, serverNode.Network) {
 			logger.Log(1, "set new peers on network", serverNode.Network)
 			logger.Log(1, "set new peers on network", serverNode.Network)
 		}
 		}

+ 5 - 3
logic/wireguard.go

@@ -114,9 +114,11 @@ func getSystemPeers(node *models.Node) (map[string]string, error) {
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
-	for _, peer := range device.Peers {
-		if IsBase64(peer.PublicKey.String()) && peer.Endpoint != nil && CheckEndpoint(peer.Endpoint.String()) {
-			peers[peer.PublicKey.String()] = peer.Endpoint.String()
+	if device.Peers != nil && len(device.Peers) > 0 {
+		for _, peer := range device.Peers {
+			if IsBase64(peer.PublicKey.String()) && peer.Endpoint != nil && CheckEndpoint(peer.Endpoint.String()) {
+				peers[peer.PublicKey.String()] = peer.Endpoint.String()
+			}
 		}
 		}
 	}
 	}
 	return peers, nil
 	return peers, nil

+ 26 - 18
netclient/wireguard/common.go

@@ -58,7 +58,9 @@ func SetPeers(iface string, node *models.Node, peers []wgtypes.PeerConfig) error
 				iparr = append(iparr, ipaddr.String())
 				iparr = append(iparr, ipaddr.String())
 			}
 			}
 		}
 		}
-		allowedips = strings.Join(iparr, ",")
+		if iparr != nil && len(iparr) > 0 {
+			allowedips = strings.Join(iparr, ",")
+		}
 		keepAliveString := strconv.Itoa(int(keepalive))
 		keepAliveString := strconv.Itoa(int(keepalive))
 		if keepAliveString == "0" {
 		if keepAliveString == "0" {
 			keepAliveString = "15"
 			keepAliveString = "15"
@@ -78,30 +80,36 @@ func SetPeers(iface string, node *models.Node, peers []wgtypes.PeerConfig) error
 		}
 		}
 	}
 	}
 
 
-	for _, currentPeer := range devicePeers {
-		shouldDelete := true
-		for _, peer := range peers {
-			if peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
-				shouldDelete = false
-			}
-			// re-check this if logic is not working, added in case of allowedips not working
-			if peer.PublicKey.String() == currentPeer.PublicKey.String() {
-				shouldDelete = false
-			}
-		}
-		if shouldDelete {
-			output, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
-			if err != nil {
-				log.Println(output, "error removing peer", currentPeer.PublicKey.String())
+	if devicePeers != nil && len(devicePeers) > 0 {
+		for _, currentPeer := range devicePeers {
+			shouldDelete := true
+			if peers != nil && len(peers) > 0 {
+				for _, peer := range peers {
+					if peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
+						shouldDelete = false
+					}
+					// re-check this if logic is not working, added in case of allowedips not working
+					if peer.PublicKey.String() == currentPeer.PublicKey.String() {
+						shouldDelete = false
+					}
+				}
+				if shouldDelete {
+					output, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
+					if err != nil {
+						log.Println(output, "error removing peer", currentPeer.PublicKey.String())
+					}
+				}
+				oldPeerAllowedIps[currentPeer.PublicKey.String()] = currentPeer.AllowedIPs
 			}
 			}
 		}
 		}
-		oldPeerAllowedIps[currentPeer.PublicKey.String()] = currentPeer.AllowedIPs
 	}
 	}
 	if ncutils.IsMac() {
 	if ncutils.IsMac() {
 		err = SetMacPeerRoutes(iface)
 		err = SetMacPeerRoutes(iface)
 		return err
 		return err
 	} else if ncutils.IsLinux() {
 	} else if ncutils.IsLinux() {
-		local.SetPeerRoutes(iface, oldPeerAllowedIps, peers)
+		if peers != nil && len(peers) > 0 {
+			local.SetPeerRoutes(iface, oldPeerAllowedIps, peers)
+		}
 	}
 	}
 
 
 	return nil
 	return nil