]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Fix removal of DNSes from AllowedIPs when DNS has changed
authorRoopesh Chander <roop@roopc.net>
Thu, 21 Feb 2019 12:47:23 +0000 (18:17 +0530)
committerRoopesh Chander <roop@roopc.net>
Thu, 21 Feb 2019 12:47:28 +0000 (18:17 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/TunnelViewModel.swift
WireGuard/WireGuard/UI/macOS/ViewController/TunnelEditViewController.swift

index 9daf1aa8eb3dd6800db500f19cc13b6563eb2c2e..f57eed06849665961b87dadb4e82889f9ea665cb 100644 (file)
@@ -428,20 +428,22 @@ class TunnelViewModel {
             return list.compactMap { IPAddressRange(from: $0) }.map { $0.stringRepresentation }
         }
 
-        static func modifiedAllowedIPs(currentAllowedIPs: [String], excludePrivateIPs: Bool, dnsServers: [String]) -> [String] {
+        static func modifiedAllowedIPs(currentAllowedIPs: [String], excludePrivateIPs: Bool, dnsServers: [String], oldDNSServers: [String]?) -> [String] {
             let normalizedDNSServers = normalizedIPAddressRangeStrings(dnsServers)
+            let normalizedOldDNSServers = oldDNSServers == nil ? normalizedDNSServers : normalizedIPAddressRangeStrings(oldDNSServers!)
             let ipv6Addresses = normalizedIPAddressRangeStrings(currentAllowedIPs.filter { $0.contains(":") })
             if excludePrivateIPs {
                 return ipv6Addresses + TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String + normalizedDNSServers
             } else {
-                return ipv6Addresses.filter { !normalizedDNSServers.contains($0) } + [TunnelViewModel.PeerData.ipv4DefaultRouteString]
+                return ipv6Addresses.filter { !normalizedOldDNSServers.contains($0) } + [TunnelViewModel.PeerData.ipv4DefaultRouteString]
             }
         }
 
-        func excludePrivateIPsValueChanged(isOn: Bool, dnsServers: String) {
+        func excludePrivateIPsValueChanged(isOn: Bool, dnsServers: String, oldDNSServers: String? = nil) {
             let allowedIPStrings = scratchpad[.allowedIPs].splitToArray(trimmingCharacters: .whitespacesAndNewlines)
             let dnsServerStrings = dnsServers.splitToArray(trimmingCharacters: .whitespacesAndNewlines)
-            let modifiedAllowedIPStrings = TunnelViewModel.PeerData.modifiedAllowedIPs(currentAllowedIPs: allowedIPStrings, excludePrivateIPs: isOn, dnsServers: dnsServerStrings)
+            let oldDNSServerStrings = oldDNSServers?.splitToArray(trimmingCharacters: .whitespacesAndNewlines)
+            let modifiedAllowedIPStrings = TunnelViewModel.PeerData.modifiedAllowedIPs(currentAllowedIPs: allowedIPStrings, excludePrivateIPs: isOn, dnsServers: dnsServerStrings, oldDNSServers: oldDNSServerStrings)
             scratchpad[.allowedIPs] = modifiedAllowedIPStrings.joined(separator: ", ")
             validatedConfiguration = nil
             excludePrivateIPsValue = isOn
index 526dbc655bcb02e37fa7173ebfcc2809390e3c50..2e3bceff734519656aebcaae5fa76c24c4600bf7 100644 (file)
@@ -290,7 +290,7 @@ class TunnelEditViewController: NSViewController {
         guard let tunnelConfiguration = try? TunnelConfiguration(fromWgQuickConfig: textView.string, called: nameRow.value) else { return }
         let isOn = excludePrivateIPsCheckbox.state == .on
         let tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnelConfiguration)
-        tunnelViewModel.peersData.first?.excludePrivateIPsValueChanged(isOn: isOn, dnsServers: tunnelViewModel.interfaceData[.dns])
+        tunnelViewModel.peersData.first?.excludePrivateIPsValueChanged(isOn: isOn, dnsServers: tunnelViewModel.interfaceData[.dns], oldDNSServers: dnsServersAddedToAllowedIPs)
         if let modifiedConfig = tunnelViewModel.asWgQuickConfig() {
             textView.setConfText(modifiedConfig)
             dnsServersAddedToAllowedIPs = isOn ? tunnelViewModel.interfaceData[.dns] : nil