aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-09-22 07:11:32 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2021-09-22 07:13:48 +0200
commitadcbd17ebeedaf6fa8106c8835ebf43667170878 (patch)
treefb1ddc5b87eac868707215f99ce8e205c8486e1a
parentWireGuardKitGo: bump wireguard-go version (diff)
downloadwireguard-apple-adcbd17ebeedaf6fa8106c8835ebf43667170878.tar.xz
wireguard-apple-adcbd17ebeedaf6fa8106c8835ebf43667170878.zip
WireGuardApp: do not delete unverifying profiles ever
The Keychain code is much too fragile, and it's better to err on the safe side. Instead just log an error when this happens. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--Sources/WireGuardApp/Tunnel/TunnelsManager.swift16
1 files changed, 7 insertions, 9 deletions
diff --git a/Sources/WireGuardApp/Tunnel/TunnelsManager.swift b/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
index 83c48c9..152d26e 100644
--- a/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
+++ b/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
@@ -56,21 +56,19 @@ class TunnelsManager {
tunnelManager.saveToPreferences { _ in }
}
#if os(iOS)
- let passwordRef = proto.verifyConfigurationReference() ? proto.passwordReference : nil
+ let verify = true
#elseif os(macOS)
- let passwordRef: Data?
- if proto.providerConfiguration?["UID"] as? uid_t == getuid() {
- passwordRef = proto.verifyConfigurationReference() ? proto.passwordReference : nil
- } else {
- passwordRef = proto.passwordReference // To handle multiple users in macOS, we skip verifying
- }
+ let verify = proto.providerConfiguration?["UID"] as? uid_t == getuid()
#else
#error("Unimplemented")
#endif
- if let ref = passwordRef {
+ if verify && !proto.verifyConfigurationReference() {
+ wg_log(.error, message: "Unable to verify keychain entry of tunnel: \(tunnelManager.localizedDescription ?? "<unknown>")")
+ }
+ if let ref = proto.passwordReference {
refs.insert(ref)
} else {
- wg_log(.info, message: "Removing orphaned tunnel with non-verifying keychain entry: \(tunnelManager.localizedDescription ?? "<unknown>")")
+ wg_log(.error, message: "Removing orphaned tunnel with missing keychain entry: \(tunnelManager.localizedDescription ?? "<unknown>")")
tunnelManager.removeFromPreferences { _ in }
tunnelManagers.remove(at: index)
}