From 2ad38362997a213161d068550ff5c0280b43a788 Mon Sep 17 00:00:00 2001
From: Alan Graham <alan@nettica.com>
Date: Mon, 1 Jul 2024 02:58:21 +0000
Subject: [PATCH] on network change remove the current IP address from the DNS
 list

---
 api/v1/net/net.go | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/api/v1/net/net.go b/api/v1/net/net.go
index 7169bf3..aa07589 100644
--- a/api/v1/net/net.go
+++ b/api/v1/net/net.go
@@ -235,6 +235,7 @@ func updateNet(c *gin.Context) {
 
 	updateMTU := false
 	updateAddress := false
+	updateDNS := false
 	updateAllowed := false
 	updateFailSafe := false
 	updatePresharedKey := false
@@ -247,6 +248,7 @@ func updateNet(c *gin.Context) {
 		if !util.CompareArrays(data.Default.Address, net.Default.Address) {
 			log.Infof("updateNet: updateAddress for %s %v", data.NetName, data.Default.Address)
 			updateAddress = true
+			updateDNS = true
 		}
 		if !util.CompareArrays(data.Default.AllowedIPs, net.Default.AllowedIPs) {
 			log.Infof("updateNet: updateAllowed for %s %v", data.NetName, data.Default.AllowedIPs)
@@ -279,6 +281,22 @@ func updateNet(c *gin.Context) {
 			v.Current.Mtu = data.Default.Mtu
 			changed = true
 		}
+		if updateDNS {
+			log.Infof("updateNet: updateDNS for %s %v", v.Id, data.Default.Address)
+			v.Default.Dns = data.Default.Dns
+			for x, dns := range v.Current.Dns {
+				if dns == v.Current.Address[0] {
+					v.Current.Dns = append(v.Current.Dns[:x], v.Current.Dns[x+1:]...)
+					break
+				}
+				ip, err := util.GetIpFromCidr(v.Current.Address[0])
+				if err == nil && dns == ip {
+					v.Current.Dns = append(v.Current.Dns[:x], v.Current.Dns[x+1:]...)
+					break
+				}
+			}
+			changed = true
+		}
 		if updateAddress && !util.CompareArrays(v.Default.Address, data.Default.Address) {
 			log.Infof("updateNet: updateAddress for %s %v", v.Id, data.Default.Address)
 			v.Default.Address = data.Default.Address