]> git.ipfire.org Git - thirdparty/wireguard-apple.git/log
thirdparty/wireguard-apple.git
14 months agoApp: version bump master 1.0.16-27
Jason A. Donenfeld [Wed, 15 Feb 2023 13:20:52 +0000 (14:20 +0100)] 
App: version bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
14 months agoApp: bump copyright
Jason A. Donenfeld [Tue, 14 Feb 2023 15:10:32 +0000 (16:10 +0100)] 
App: bump copyright

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
14 months agoApp: bump minimum OS versions
Jason A. Donenfeld [Tue, 14 Feb 2023 14:31:52 +0000 (15:31 +0100)] 
App: bump minimum OS versions

This allows us to remove a good deal of legacy cruft.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
14 months agoWireGuardKitGo: bump
Jason A. Donenfeld [Tue, 14 Feb 2023 14:20:05 +0000 (15:20 +0100)] 
WireGuardKitGo: bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
14 months agoWireGuardKit: fix incorrect IP address allocation size
John Biggs [Tue, 15 Nov 2022 19:50:15 +0000 (20:50 +0100)] 
WireGuardKit: fix incorrect IP address allocation size

According to [1], the `capacity` parameter is specified as "the number
of instances of T in the re-bound region" and not the total size of the
rebound struct.

Without this patch, there are crashes in the extension with the
following error:

  Fatal error: self must be a properly aligned pointer for types Pointee and T`

Since the subsequent line in the code only reads `sizeof(in_addr)` or
`sizeof(in6_addr)` anyway, change the `capacity` parameter to just be a
count of 1.

[1] https://developer.apple.com/documentation/swift/unsafepointer/withmemoryrebound(to:capacity:_:)

Signed-off-by: John Biggs <john.biggs@proton.ch>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
17 months agoglobal: apply MIT more consistently
Jason A. Donenfeld [Thu, 17 Nov 2022 00:17:52 +0000 (01:17 +0100)] 
global: apply MIT more consistently

People keep asking.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoUI: When saving on-demand rules, deactivate if reqd and then save
Roopesh Chander [Mon, 27 Sep 2021 10:37:20 +0000 (16:07 +0530)] 
UI: When saving on-demand rules, deactivate if reqd and then save

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: When saving on-demand rules on a config, enable on-demand if active
Roopesh Chander [Thu, 23 Sep 2021 19:11:46 +0000 (00:41 +0530)] 
UI: When saving on-demand rules on a config, enable on-demand if active

When a user saves on-demand rules on the configuration, set
onDemandEnabled to true if the tunnel is active, and false if it isn't.
Then deactivate the tunnel.

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoApp: version bump 1.0.15-26
Jason A. Donenfeld [Thu, 23 Sep 2021 04:20:28 +0000 (06:20 +0200)] 
App: version bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoUI: macOS: increase login detector file timeout
Jason A. Donenfeld [Thu, 23 Sep 2021 04:19:48 +0000 (06:19 +0200)] 
UI: macOS: increase login detector file timeout

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoModel: migrate iOS 14 keychain references to iOS 15 format
Jason A. Donenfeld [Thu, 23 Sep 2021 04:00:14 +0000 (06:00 +0200)] 
Model: migrate iOS 14 keychain references to iOS 15 format

Keychain references used to be bijective, but with the change in format,
Apple tried to be too clever, and references are no longer bijective.
This lead to us deleting keychain entries, which in turn emptied out
people's configs upon upgrading to iOS 15. Disaster!

Fix this by detecting the change in format and saving the new password
reference. We still rely on this being bijective moving forward;
hopefully this bug won't repeat itself. It would be nice to not rely on
that property, but doing so without grinding startup to a halt isn't
obviously done, given how slow the keychain accesses are and how limited
the API is.

Reported-by: Eddie <stunnel@attglobal.net>
Reported-by: Anatoli <me@anatoli.ws>
Reported-by: Alan Graham <alan@meshify.app>
Reported-by: Jacob Wilder <oss@jacobwilder.org>
Reported-by: Miguel Arroz <miguel.arroz@gmail.com>
Reported-by: Reid Rankin <reidrankin@gmail.com>
Reported-by: Fabien <patate.cosmique@pm.me>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoUI: iOS: remove list pinking when no config
Jason A. Donenfeld [Thu, 23 Sep 2021 04:08:20 +0000 (06:08 +0200)] 
UI: iOS: remove list pinking when no config

This reverts commit 86afd1a46a83038a787176272a7c486b7269e1a3.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoWireGuardApp: restore old keychain consistency behavior
Jason A. Donenfeld [Thu, 23 Sep 2021 03:39:47 +0000 (05:39 +0200)] 
WireGuardApp: restore old keychain consistency behavior

This reverts commit adcbd17ebeedaf6fa8106c8835ebf43667170878.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoApp: version bump 1.0.14-25
Jason A. Donenfeld [Wed, 22 Sep 2021 18:59:19 +0000 (20:59 +0200)] 
App: version bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoUI: iOS: disable list rows when no config
Jason A. Donenfeld [Wed, 22 Sep 2021 18:56:25 +0000 (20:56 +0200)] 
UI: iOS: disable list rows when no config

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoWireGuardApp: use file to communicate launch-by-login-helper
Jason A. Donenfeld [Wed, 22 Sep 2021 17:22:44 +0000 (19:22 +0200)] 
WireGuardApp: use file to communicate launch-by-login-helper

Apple event params are broken on recent macOS versions.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoKeychain: remove class constraint when copying
Jason A. Donenfeld [Wed, 22 Sep 2021 14:51:25 +0000 (16:51 +0200)] 
Keychain: remove class constraint when copying

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoWireGuardApp: do not delete unverifying profiles ever
Jason A. Donenfeld [Wed, 22 Sep 2021 05:11:32 +0000 (07:11 +0200)] 
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>
2 years agoWireGuardKitGo: bump wireguard-go version
Jason A. Donenfeld [Wed, 22 Sep 2021 03:20:46 +0000 (05:20 +0200)] 
WireGuardKitGo: bump wireguard-go version

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoMacAppStoreUpdateDetector: Detect StoreAEService correctly
Roopesh Chander [Thu, 22 Jul 2021 07:08:45 +0000 (12:38 +0530)] 
MacAppStoreUpdateDetector: Detect StoreAEService correctly

In macOS 10.15 and macOS 11, the quit Apple event is sent by:
  com.apple.AppStoreDaemon.StoreAEService

In some earlier macOS release, the quit Apple event was sent by:
  com.apple.CommerceKit.StoreAEService

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoMacAppStoreUpdateDetector: Add pid to the log
Roopesh Chander [Thu, 22 Jul 2021 07:06:26 +0000 (12:36 +0530)] 
MacAppStoreUpdateDetector: Add pid to the log

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoWireGuardKitGo: include new homebrew location in PATH
Jason A. Donenfeld [Wed, 22 Sep 2021 03:06:10 +0000 (05:06 +0200)] 
WireGuardKitGo: include new homebrew location in PATH

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agobuild: Fix swiftlint warnings
Roopesh Chander [Mon, 2 Aug 2021 08:19:47 +0000 (13:49 +0530)] 
build: Fix swiftlint warnings

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agobuild: Fix swift warnings
Roopesh Chander [Mon, 2 Aug 2021 08:16:06 +0000 (13:46 +0530)] 
build: Fix swift warnings

Use 'AnyObject' instead of 'class' to restrict protocol inheritance

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agobuild: Include 'swiftlint' location in the PATH before invoking it
Roopesh Chander [Mon, 2 Aug 2021 08:11:52 +0000 (13:41 +0530)] 
build: Include 'swiftlint' location in the PATH before invoking it

In macOS 11, HomeBrew installs swiftlint under /opt/homebrew, which is not
in the default path that Xcode seems to use. So we include the PATH
to contain:

  - /usr/local/bin:

    Where HomeBrew installs 'swiftlint' in macOS 10.15 and earlier

  - /opt/homebrew/bin:

    Where HomeBrew installs 'swiftlint' in macOS 11

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: Use 'On-Demand', with hyphen, consistently
Jason A. Donenfeld [Wed, 22 Sep 2021 03:00:56 +0000 (05:00 +0200)] 
UI: Use 'On-Demand', with hyphen, consistently

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoUI: macOS: do on-demand ritual for clicking list item too
Jason A. Donenfeld [Wed, 22 Sep 2021 00:40:49 +0000 (02:40 +0200)] 
UI: macOS: do on-demand ritual for clicking list item too

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoUI: Consider on-demand to be enabled iff the tunnel provider is enabled
Roopesh Chander [Tue, 3 Aug 2021 11:05:18 +0000 (16:35 +0530)] 
UI: Consider on-demand to be enabled iff the tunnel provider is enabled

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: When setting on-demand, avoid a second saveToPreferences() call
Roopesh Chander [Tue, 3 Aug 2021 11:03:59 +0000 (16:33 +0530)] 
UI: When setting on-demand, avoid a second saveToPreferences() call

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: When saving on-demand rules, don't set isOnDemandEnabled
Roopesh Chander [Mon, 2 Aug 2021 17:39:06 +0000 (23:09 +0530)] 
UI: When saving on-demand rules, don't set isOnDemandEnabled

When adding or modifying a config, when on-demand options are set by a
user, the rules are saved, but isOnDemandEnabled is left unset (and can
be set by the appropriate control in the detail view (switch in iOS /
button in macOS)).

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: macOS: Incorporate on-demand-ness in status menu
Roopesh Chander [Fri, 30 Jul 2021 07:56:56 +0000 (13:26 +0530)] 
UI: macOS: Incorporate on-demand-ness in status menu

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: macOS: Tunnel detail: Incorporate on-demand-ness in toggle button
Roopesh Chander [Fri, 30 Jul 2021 05:34:38 +0000 (11:04 +0530)] 
UI: macOS: Tunnel detail: Incorporate on-demand-ness in toggle button

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: macOS: Tunnel detail: Incorporate on-demand-ness in the status row
Roopesh Chander [Thu, 29 Jul 2021 10:27:04 +0000 (15:57 +0530)] 
UI: macOS: Tunnel detail: Incorporate on-demand-ness in the status row

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: macOS: Tunnel list: Incorporate on-demand-ness in the status circle
Roopesh Chander [Thu, 29 Jul 2021 05:42:30 +0000 (11:12 +0530)] 
UI: macOS: Tunnel list: Incorporate on-demand-ness in the status circle

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: macOS: Add yellow circle image
Roopesh Chander [Wed, 28 Jul 2021 08:01:43 +0000 (13:31 +0530)] 
UI: macOS: Add yellow circle image

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: Localizations: Remove alertTunnelActivationFailureOnDemandAddendum
Roopesh Chander [Wed, 28 Jul 2021 10:24:42 +0000 (15:54 +0530)] 
UI: Localizations: Remove alertTunnelActivationFailureOnDemandAddendum

It's not used anymore.

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: Remove addendum on on-demand from error on tunnel activation
Roopesh Chander [Wed, 28 Jul 2021 06:21:23 +0000 (11:51 +0530)] 
UI: Remove addendum on on-demand from error on tunnel activation

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: When setting on-demand, enable the tunnel if required
Roopesh Chander [Wed, 28 Jul 2021 05:59:34 +0000 (11:29 +0530)] 
UI: When setting on-demand, enable the tunnel if required

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: iOS: Tunnels list: Move the "On Demand" label to the right
Roopesh Chander [Sat, 24 Jul 2021 18:03:26 +0000 (23:33 +0530)] 
UI: iOS: Tunnels list: Move the "On Demand" label to the right

Having that at the bottom makes it harder for iOS to get
the row height correctly.

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: iOS: Show on-demand state in 'Status' if there are on-demand rules
Roopesh Chander [Tue, 27 Jul 2021 21:00:24 +0000 (02:30 +0530)] 
UI: iOS: Show on-demand state in 'Status' if there are on-demand rules

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: When reloading tunnels, preserve '.waiting' state
Roopesh Chander [Tue, 27 Jul 2021 08:05:30 +0000 (13:35 +0530)] 
UI: When reloading tunnels, preserve '.waiting' state

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: When deactivating for activating another tunnel, disable on-demand
Roopesh Chander [Tue, 27 Jul 2021 06:09:07 +0000 (11:39 +0530)] 
UI: When deactivating for activating another tunnel, disable on-demand

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: Keep on-demand rules even if on-demand is disabled
Roopesh Chander [Tue, 27 Jul 2021 20:40:45 +0000 (02:10 +0530)] 
UI: Keep on-demand rules even if on-demand is disabled

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: iOS: Tunnel detail: Incorporate on-demand-ness in 'Status'
Roopesh Chander [Mon, 26 Jul 2021 11:26:03 +0000 (16:56 +0530)] 
UI: iOS: Tunnel detail: Incorporate on-demand-ness in 'Status'

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: iOS: Show "on-demand is active" for tunnels with the active on-demand
Andrej Mihajlov [Sat, 27 Mar 2021 21:02:09 +0000 (22:02 +0100)] 
UI: iOS: Show "on-demand is active" for tunnels with the active on-demand

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: iOS: Tunnels list: Incorporate on-demand-ness in the switch
Roopesh Chander [Sat, 24 Jul 2021 20:04:03 +0000 (01:34 +0530)] 
UI: iOS: Tunnels list: Incorporate on-demand-ness in the switch

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: TunnelsManager: Add setOnDemandEnabled() instance method
Roopesh Chander [Sat, 24 Jul 2021 19:29:36 +0000 (00:59 +0530)] 
UI: TunnelsManager: Add setOnDemandEnabled() instance method

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoUI: TunnelsManager: Add TunnelContainer.hasOnDemandRules
Roopesh Chander [Sat, 24 Jul 2021 18:23:31 +0000 (23:53 +0530)] 
UI: TunnelsManager: Add TunnelContainer.hasOnDemandRules

Signed-off-by: Roopesh Chander <roop@roopc.net>
2 years agoGlobal: bump copyright year
Jason A. Donenfeld [Thu, 17 Jun 2021 14:56:46 +0000 (16:56 +0200)] 
Global: bump copyright year

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoKit: add missing import for WireGuardKitC
Andrej Mihajlov [Thu, 17 Jun 2021 11:23:22 +0000 (13:23 +0200)] 
Kit: add missing import for WireGuardKitC

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
2 years agoApp: version bump 1.0.13-24
Jason A. Donenfeld [Wed, 16 Jun 2021 16:11:22 +0000 (18:11 +0200)] 
App: version bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoKit: Go: mod bump
Jason A. Donenfeld [Wed, 16 Jun 2021 16:03:28 +0000 (18:03 +0200)] 
Kit: Go: mod bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoKit: Adapter: use more reliable utun detection technique
Jason A. Donenfeld [Wed, 16 Jun 2021 15:09:40 +0000 (17:09 +0200)] 
Kit: Adapter: use more reliable utun detection technique

Rather than hoping that the AF_SYSTEM fd is of type utun, and then
calling "2" on it to get the name -- which could be defined as something
else for a different AF_SYSTEM socket type -- instead simply query the
AF_SYSTEM control socket ID with getpeername. This has one catch, which
is that the ID is dynamically allocated, so we resolve it using the
qualified name. Normally we'd make a new AF_SYSTEM socket for this, but
since that's not allowed in the sandbox, we reuse the AF_SYSTEM socket
that we're checking. At this point in the flow, we know that it's a
proper AF_SYSTEM one, based on the first sockaddr member; we just don't
know that it's a utun variety.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoKit: Adapter: iterate through all FDs to find UTUN
Jason A. Donenfeld [Wed, 16 Jun 2021 13:56:21 +0000 (15:56 +0200)] 
Kit: Adapter: iterate through all FDs to find UTUN

This is a bit of a kludge, until I find something better. We simply
iterate through all FDs, and call getsockopt on each one until we find
the utun FD. This works, and completes rather quickly (fd is usually 6
or 7). Rather than maintain the old path for older kernels, just use
this for all versions, to get more coverage. Other techniques involve
undocumented APIs; this one has the advantage of using nothing
undocumented.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2 years agoSPM: update exclude rules
Andrej Mihajlov [Tue, 15 Jun 2021 13:18:21 +0000 (15:18 +0200)] 
SPM: update exclude rules

Fixes missing excluded file warning in Xcode. api-ios.go was renamed to api-apple.go.

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoUI: iOS: asynchronously load from NEHotspotNetwork on iOS 14
Jason A. Donenfeld [Mon, 8 Mar 2021 23:57:35 +0000 (00:57 +0100)] 
UI: iOS: asynchronously load from NEHotspotNetwork on iOS 14

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: iOS: clean up visuals in SSID editor
Jason A. Donenfeld [Mon, 8 Mar 2021 23:02:03 +0000 (00:02 +0100)] 
UI: iOS: clean up visuals in SSID editor

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoREADME: account for funky xcode paths
Jason A. Donenfeld [Mon, 8 Mar 2021 20:20:12 +0000 (21:20 +0100)] 
README: account for funky xcode paths

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoKit: Go: bump to latest API
Jason A. Donenfeld [Mon, 8 Mar 2021 19:29:12 +0000 (20:29 +0100)] 
Kit: Go: bump to latest API

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: iOS: Disable "copy" action on on-demand cells
Andrej Mihajlov [Wed, 6 Jan 2021 10:57:40 +0000 (11:57 +0100)] 
UI: iOS: Disable "copy" action on on-demand cells

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoKit: netcfg: add explicit IP mask routes
Jason A. Donenfeld [Fri, 1 Jan 2021 17:26:49 +0000 (18:26 +0100)] 
Kit: netcfg: add explicit IP mask routes

macOS will use the wrong source address unless we add explicit routes
that mention the self-pointing gateway. Actually, it won't add any
implicit routes on its own, so in order to route the masks of the
addresses, we have to add our own routes explicitly.

However, this still doesn't fix the problem while inside of the network
extension, even though it works outside it.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoKit: Go: mod bump
Jason A. Donenfeld [Wed, 23 Dec 2020 16:47:07 +0000 (17:47 +0100)] 
Kit: Go: mod bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: iOS: Remove duplicate call to addSubview
Andrej Mihajlov [Wed, 23 Dec 2020 15:03:41 +0000 (16:03 +0100)] 
UI: iOS: Remove duplicate call to addSubview

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoUI: iOS: Fix placeholder label alignment in text fields.
Andrej Mihajlov [Wed, 23 Dec 2020 15:03:01 +0000 (16:03 +0100)] 
UI: iOS: Fix placeholder label alignment in text fields.

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoApp: version bump 1.0.12-22
Jason A. Donenfeld [Wed, 23 Dec 2020 14:05:56 +0000 (15:05 +0100)] 
App: version bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoproject: sync translations and improve id generation again
Jason A. Donenfeld [Wed, 23 Dec 2020 13:55:29 +0000 (14:55 +0100)] 
project: sync translations and improve id generation again

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: macOS: Group more than 10 tunnels into submenu
Andrej Mihajlov [Tue, 22 Dec 2020 15:40:28 +0000 (16:40 +0100)] 
UI: macOS: Group more than 10 tunnels into submenu

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoUI: Avoid force unwrap when checking for errors
Andrej Mihajlov [Wed, 23 Dec 2020 13:16:27 +0000 (14:16 +0100)] 
UI: Avoid force unwrap when checking for errors

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoKit: do not crash on [abcd::] with missing port
Jason A. Donenfeld [Wed, 23 Dec 2020 13:06:26 +0000 (14:06 +0100)] 
Kit: do not crash on [abcd::] with missing port

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoKit: Go: bump module and simplify API
Jason A. Donenfeld [Wed, 23 Dec 2020 12:40:24 +0000 (13:40 +0100)] 
Kit: Go: bump module and simplify API

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: pause VPN configurations observer while adding or removing multiple tunnels
Andrej Mihajlov [Mon, 21 Dec 2020 12:46:55 +0000 (13:46 +0100)] 
UI: pause VPN configurations observer while adding or removing multiple tunnels

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoUI: use NotificationToken to properly clean up observers
Andrej Mihajlov [Tue, 22 Dec 2020 10:09:18 +0000 (11:09 +0100)] 
UI: use NotificationToken to properly clean up observers

When the variable goes out of scope, the observer isn't removed unless
an explicit call is made to the token.

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoKeychain: prevent call to stat() when determining appex path
Andrej Mihajlov [Mon, 21 Dec 2020 16:57:18 +0000 (17:57 +0100)] 
Keychain: prevent call to stat() when determining appex path

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoKit: Go: use Windows-style retry sleep loop on bind updates
Jason A. Donenfeld [Fri, 18 Dec 2020 10:50:13 +0000 (11:50 +0100)] 
Kit: Go: use Windows-style retry sleep loop on bind updates

Something odd happens in the network extension that we still don't
understand. Attempt to poke it in this terrible way.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: Model: remove 0.0.0.0/8 from non-private IPs
Jason A. Donenfeld [Fri, 18 Dec 2020 11:42:28 +0000 (12:42 +0100)] 
UI: Model: remove 0.0.0.0/8 from non-private IPs

macOS freaks out if you try to explicitly route to 0.0.0.0/8 in its
includedRoutes parameter. Even though 0.0.0.0/8 isn't RFC1918, it is
marked in RFC6890 as "this host on this network", so removing it from
the Internet routes makes sense semantically too.

This commit changes 0.0.0.0/5 into:
- 1.0.0.0/8
- 2.0.0.0/8
- 3.0.0.0/8
- 4.0.0.0/6

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: iOS: remove donation link 1.0.11-21
Jason A. Donenfeld [Tue, 15 Dec 2020 23:03:34 +0000 (00:03 +0100)] 
UI: iOS: remove donation link

Apple forbids us from having a simple link to wireguard.com/donations/
in the version info window, citing the existence of this link as a form
of payment outside of their in-app purchase framework that requires 30%.
The link had been there for around two years. After rejecting an app
update for a critical networking regression unrelated to this, they
wrote:

    Dec 17, 2020 at 8:35 PM
    From Apple

    3.1.1 - Business - Payments - In-App Purchase

    We noticed that your app allows users to contribute donations to the
    development of your app with a mechanism other than the in-app
    purchase API, which is not appropriate for the App Store.

    Next Steps

    To resolve this issue, please revise your app to use the in-app
    purchase API to pay for this type of transaction. Please note that
    even though tipping another individual is optional, the tip is
    connected to or associated with the receipt of digital content or
    services in your app and must be purchased through in-app purchase
    in accordance with guideline 3.1.1 of the App Store Review
    Guidelines.

    Please see attached screenshot for details.

Trying to appeal this or reason with Apple is not going to be a fruitful
endeavor, so instead we simply cut our losses and remove the donation
link entirely. The goal, anyway, is to get a timely critical update into
the hands of users, and encouraging Apple to block that further would be
a disservice.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: macOS: Fix UTF-8 and UTF-16 conversions in highlighter code
Andrej Mihajlov [Tue, 15 Dec 2020 17:26:55 +0000 (18:26 +0100)] 
UI: macOS: Fix UTF-8 and UTF-16 conversions in highlighter code

NSString uses UTF-16 internally, while String uses UTF-8 in Swift 5.

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoproject: generate more stable locale IDs
Jason A. Donenfeld [Thu, 17 Dec 2020 11:41:23 +0000 (12:41 +0100)] 
project: generate more stable locale IDs

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agobuild: disable hardened runtime on iOS but keep it enabled on macOS
Andrej Mihajlov [Thu, 17 Dec 2020 10:56:17 +0000 (11:56 +0100)] 
build: disable hardened runtime on iOS but keep it enabled on macOS

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoVersion bump 1.0.11-20
Jason A. Donenfeld [Wed, 16 Dec 2020 23:43:38 +0000 (00:43 +0100)] 
Version bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: add missing translations to incomplete locales
Jason A. Donenfeld [Wed, 16 Dec 2020 23:40:42 +0000 (00:40 +0100)] 
UI: add missing translations to incomplete locales

This is the wrong way to fix the problem. The correct way will involve
moving away from the whacky tr() macro and using translations functions
properly. But migrating to that will require some heavy scripting work.
So for now, use a hammer.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoKit: Adapter: do not treat NE settings timeouts as fatal
Jason A. Donenfeld [Wed, 16 Dec 2020 23:24:39 +0000 (00:24 +0100)] 
Kit: Adapter: do not treat NE settings timeouts as fatal

The general Network Extension framework is incredibly buggy, and a
timeout when setting the network settings does not necessarily imply
that the whole operation failed. Simply log the condition and move on.
This restores the app's old behavior.

Reported-by: Filipe Mendonça <cfilipem@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoKit: PacketTunnelSettingsGenerator: do not require DNS queries if no DNS
Jason A. Donenfeld [Wed, 16 Dec 2020 23:10:28 +0000 (00:10 +0100)] 
Kit: PacketTunnelSettingsGenerator: do not require DNS queries if no DNS

Prior, we would set matchDomains=[""] even if the user didn't provide
any DNS servers. This was kind of incoherent, but I guess we had in mind
some kind of non-sensical leakproof scheme that never really worked
anyway. NetworkExtension didn't like this, so setTunnelNetworkSettings
would, rather than return an error, simply timeout and never call its
callback function. But everything worked fine, so we had code in the UI
to check to make sure everything was okay after 5 seconds or so of no
callback. Recent changes made the timeout fatal on the network extension
side, so rather than succeed, configs with no DNS server started
erroring out, causing user reports.

This commit attempts to handle the root cause of the timeout issue by
not twiddling with DNS settings if no DNS server was specified. For now,
however, it leaves the hard-timeout semantics in place.

Reported-by: Filipe Mendonça <cfilipem@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoUI: macOS: remove donation link 1.0.10-19
Jason A. Donenfeld [Tue, 15 Dec 2020 23:03:34 +0000 (00:03 +0100)] 
UI: macOS: remove donation link

Apple forbids us from having a simple donation link in the "About
WireGuard" dialog, due to new policies. And arguing with the giant is
not going to be a fruitful battle. Do the practical thing and just
remove it.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoVersion bump 1.0.10-18
Jason A. Donenfeld [Tue, 15 Dec 2020 15:18:07 +0000 (16:18 +0100)] 
Version bump

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoWireGuardApp: Refactor TunnelListCell
Andrej Mihajlov [Tue, 15 Dec 2020 13:51:02 +0000 (14:51 +0100)] 
WireGuardApp: Refactor TunnelListCell

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: Replace AnyObject with a concrete NSKeyValueObservation
Andrej Mihajlov [Tue, 15 Dec 2020 13:21:39 +0000 (14:21 +0100)] 
WireGuardApp: Replace AnyObject with a concrete NSKeyValueObservation

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: Animate switch control in TunnelListCell
Andrej Mihajlov [Tue, 15 Dec 2020 13:21:21 +0000 (14:21 +0100)] 
WireGuardApp: Animate switch control in TunnelListCell

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: Remove 200ms delay when updating tunnel status switch
Andrej Mihajlov [Tue, 15 Dec 2020 11:41:26 +0000 (12:41 +0100)] 
WireGuardApp: Remove 200ms delay when updating tunnel status switch

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: Pin status switch to cell margin
Andrej Mihajlov [Mon, 14 Dec 2020 15:48:53 +0000 (16:48 +0100)] 
WireGuardApp: Pin status switch to cell margin

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: Refactor indicator view initialization
Andrej Mihajlov [Mon, 14 Dec 2020 15:38:16 +0000 (16:38 +0100)] 
WireGuardApp: Refactor indicator view initialization

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: Use Bundle.forInfoDictionaryKey to access Info.plist fields
Andrej Mihajlov [Mon, 14 Dec 2020 15:25:12 +0000 (16:25 +0100)] 
WireGuardApp: Use Bundle.forInfoDictionaryKey to access Info.plist fields

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: Refactor indicator initialization
Andrej Mihajlov [Mon, 14 Dec 2020 15:22:52 +0000 (16:22 +0100)] 
WireGuardApp: Refactor indicator initialization

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: Fix window background color to default black
Andrej Mihajlov [Mon, 14 Dec 2020 14:26:24 +0000 (15:26 +0100)] 
WireGuardApp: Fix window background color to default black

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoglobal: support DNS search domains
Jason A. Donenfeld [Tue, 15 Dec 2020 12:49:21 +0000 (13:49 +0100)] 
global: support DNS search domains

This has been supported by Windows and Linux for quite some time. Add
support here for iOS and macOS.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoWireGuardKitGo: update to latest wireguard-go tag
Jason A. Donenfeld [Tue, 15 Dec 2020 12:16:35 +0000 (13:16 +0100)] 
WireGuardKitGo: update to latest wireguard-go tag

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoRevert "[REVERT ME SOON] TunnelsManager: Workaround for macOS Catalina deleting tunne...
Jason A. Donenfeld [Fri, 11 Dec 2020 11:50:31 +0000 (12:50 +0100)] 
Revert "[REVERT ME SOON] TunnelsManager: Workaround for macOS Catalina deleting tunnels arbitrarily"

This reverts commit 028e76eb3fda127d84eb88dc5cb96d4278f37b96.

It's been over a year. I really hope this is fixed by Apple.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoWireGuardApp: modify xcodeproj when syncing translations
Jason A. Donenfeld [Fri, 11 Dec 2020 11:38:24 +0000 (12:38 +0100)] 
WireGuardApp: modify xcodeproj when syncing translations

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 years agoWireGuardKit: Let wireguard-go backend run in offline on macOS
Andrej Mihajlov [Fri, 11 Dec 2020 10:49:56 +0000 (11:49 +0100)] 
WireGuardKit: Let wireguard-go backend run in offline on macOS

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
3 years agoWireGuardApp: add CrowdIn syncer and run it
Jason A. Donenfeld [Fri, 11 Dec 2020 10:33:59 +0000 (11:33 +0100)] 
WireGuardApp: add CrowdIn syncer and run it

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>