Commit Graph
100 Commits
Author SHA1 Message Date
Tobias Brunner c163a53a3a ike-sa-manager: Log message when scheduling delete for reauthenticated IKE_SA 2018-08-29 15:46:37 +02:00
Tobias Brunner d98df236a9 Merge branch 'ip-header-fields'
Adds new options that allow configuring how/whether certain fields in
the IP headers are copied during IPsec processing. Currently only allows
configuration on Linux.

Closes strongswan/strongswan#104.
2018-08-29 11:50:13 +02:00
Tobias Brunner c993eaf9d1 kernel: Add option to control DS field behavior 2018-08-29 11:36:04 +02:00
Tobias Brunner dc8b015d78 kernel: Add options to control DF and ECN header bits/fields via XFRM
The options control whether the DF and ECN header bits/fields are copied
from the unencrypted packets to the encrypted packets in tunnel mode (DF only
for IPv4), and for ECN whether the same is done for inbound packets.

Note: This implementation only works with Linux/Netlink/XFRM.

Based on a patch by Markus Sattler.
2018-08-29 11:36:04 +02:00
Tobias Brunner de4c3d2e76 vici: Add error handling to message parsing in Perl bindings 2018-08-29 11:32:21 +02:00
Tobias Brunner 2ff4983adc libimcv: Fix Android.mk 2018-08-10 10:10:00 +02:00
Tobias Brunner 6ccfeeb1d8 travis: Fix vici Python tests when using Clang
For some reason the clang binary that's installed in an uncommon
directory could not be found anymore when installing packages via pip for
the last couple of builds. While the directory is obviously contained in PATH,
using `sudo -E` didn't help. So we now install the Python packages in the
user's home directory to avoid having to use sudo.
2018-08-06 15:59:09 +02:00
Tobias Brunner 75214fabd8 testing: Optionally build/install strongSwan only on a specific guest
This may be used to test different strongSwan versions against each
other.
2018-07-11 18:38:09 +02:00
Tobias Brunner a4617539a2 conf: Fix bench_time documentation 2018-07-09 18:10:07 +02:00
Tobias Brunner 9403320fca message: Report the size of the complete reassembled IKE message
This way we see the same size on both ends, namely that of the complete
IKE message as if it was sent in a single packet (excluding UDP/IP headers).
2018-07-09 17:49:07 +02:00
Tobias Brunner 62721936b1 encrypted-payload: Change how the length for reassembled messages is calculated
If we have an AEAD transform we add the overhead as if the data would have
been transported in a single encrypted payload.
2018-07-09 17:25:02 +02:00
Tobias Brunner cc1f01e009 encrypted-payload: Add getter for the used AEAD transform 2018-07-09 17:15:07 +02:00
Tobias Brunner 47ec761674 testing: Fix checks after changing fragmentation log messages 2018-07-09 17:15:07 +02:00
Tobias Brunner c798b94a43 kernel-pfkey: Add support for native ChaCha20/Poly1305 on macOS 2018-07-06 10:25:56 +02:00
Tobias Brunner df411bfa30 testing: The dhcp plugin uses the DHCP client port again by default
This reverts parts of commit becf027cd9.

Fixes: 707b70725a ("dhcp: Only use DHCP server port if explicitly configured")
2018-07-05 18:14:54 +02:00
Tobias Brunner 4802a7477f android: New release after fixing EAP-PEAP issue and Autofill crash 2018-07-04 20:02:23 +02:00
Tobias Brunner ba9255b358 Revert "android: Enable the eap-ttls and eap-peap plugins"
This reverts commit 064c97afae.

We have to make this optional and more configurable.  It seems some
commercial VPN providers use self-signed certificates for their AAA
servers.
2018-07-04 19:36:50 +02:00
Tobias Brunner b2363b3678 android: Move hint from TextInputEditText to TextInputLayout
This avoids a NullPointerException on Android 8 related to the optional
Autofill functionality.  The bug has been fixed in Android 8.1 [1] but there
is no fix for Android 8.

[1] https://issuetracker.google.com/issues/67675432
2018-07-04 11:52:32 +02:00
Tobias Brunner 485d202adc android: Don't enforce the server address as AAA identity for EAP-PEAP/TTLS
This is similar to EAP-TLS.  We could probably make this configurable
later.
2018-07-04 11:52:23 +02:00
Tobias Brunner 07237f94e2 android: New release after fixing cancelling connecting on older systems 2018-07-03 15:44:36 +02:00
Tobias Brunner 4e905b96dd android: Poll dropper TUN device for data on older Android systems
It seems that even the NIO version of read() is uninterruptible on
platforms < Android 7 (24).
2018-07-03 15:35:29 +02:00
Tobias Brunner 6ca381be05 Merge branch 'android-updates'
Lots of new features, e.g. Quick Settings tile, Always-on VPN, error
recovery, and lots of improvements under the hood.
2018-07-03 12:15:52 +02:00
Tobias Brunner abb4a4c825 android: New version after adding lots of new features 2018-07-03 11:38:46 +02:00
Tobias Brunner 9e05f219fd android: Use ListView for log messages
This is hopefully a bit more efficient for large log files than the previous
single TextView.  The ListView widget also provides an auto-scroll mechanism.
2018-07-03 11:31:44 +02:00
Tobias Brunner 3f71118b08 android: Simplify error handling in VPN state fragment
Always reset the error state when disconnecting via state service. This
way the error state is also cleared when the connection is terminated
directly via control activity.
2018-07-03 11:31:44 +02:00
Tobias Brunner 00a9ff4085 android: Remove MIME type filter when importing trusted certificates
This way we should see files even if the MIME type has not been set
correctly while downloading it.
2018-07-03 11:31:44 +02:00
Tobias Brunner 27cf3e666e android: Show date/thread prefix in log view if we have enough space
This is the case for tablets or even phones in landscape orientation.
600dp is the breaking point for small tablets according to Google's
docs.
2018-07-03 11:31:44 +02:00
Tobias Brunner 19c95c9bc4 android: Change log message when initializing the native code and add a divider
We don't really start a daemon and the divider should make it easier to
identify retries.
2018-07-03 11:31:44 +02:00
Tobias Brunner ef0f0cc839 android: Don't use infinite keying tries on Android 5+
This way we get some feedback about the issue in the GUI (otherwise it
would just switch to connecting state) and also some delays between retries.
2018-07-03 11:31:43 +02:00
Tobias Brunner a2b3122865 android: Allow explicit termination of a profile without confirmation 2018-07-03 11:31:43 +02:00
Tobias Brunner baf2f47413 android: Handle restarts of the control Activity better
For instance, rotating a device will restart it and this previously
could have started the wrong profile or shown the system's VPN
confirmation dialog twice.
2018-07-03 11:31:43 +02:00
Tobias Brunner 4db3bf0cb0 android: Properly handle pressing home when VPN confirmation dialog is shown
As documented, onActivityResult() is called right before onResume() when
the activity is reactivated.  However, if the system's VPN confirmation
dialog is shown and the home button is pressed, the activity is stopped
and not just paused, so its state is saved.  And onActivityResult() is
actually also called before onStart().  This means that no fragment
transactions may be committed (i.e. no dialog may be shown) when the
activity is later restarted (e.g. because there is another attempt to
connect the VPN) until onStart() has been called.  So if we'd try to show
the error dialog in onActivityResult() after returning to the launcher
it would result in an IllegalStateException.

However, showing the dialog for the previous confirmation dialog is not
ideal anyway, so we just ignore that result.
2018-07-03 11:31:43 +02:00
Tobias Brunner b1b626a1e3 android: Crudely catch exception if no file browser is available
Seen on Android TV in the emulator.
2018-07-03 11:31:43 +02:00
Tobias Brunner 064c97afae android: Enable the eap-ttls and eap-peap plugins 2018-07-03 11:31:43 +02:00
Tobias Brunner 6f9b96acb4 android: Pass UUID to VPN service to initiate profiles 2018-07-03 11:31:42 +02:00
Tobias Brunner 163f752022 android: Remove Suite B ESP proposals and reorder some algorithms 2018-07-03 11:31:42 +02:00
Tobias Brunner 058fe95339 android: Make RSA/PSS flag configurable in the GUI 2018-07-03 11:31:42 +02:00
Tobias Brunner 079094df18 android: Import RSA/PSS flag 2018-07-03 11:31:42 +02:00
Tobias Brunner 205ec47ddb android: Add flag to enable RSA/PSS 2018-07-03 11:31:42 +02:00
Tobias Brunner ad2d20e5f0 android: Make fetching OCSP/CRL interruptible
This allows cancelling connecting if e.g. the OCSP server is not
reachable. Previously this caused some delay in disconnecting state but
even worse it cause an ANR if the user tried reconnecting during that
time as the main thread would get struck in setNextProfile() (we could
probably find a better solution there too in the future).
2018-07-03 11:31:41 +02:00
Tobias Brunner 8a09350f9f android: Make CRL/OCSP/strict flags configurable in the GUI 2018-07-03 11:31:41 +02:00
Tobias Brunner e1e6096b31 android: Import CRL/OCSP/strict flags 2018-07-03 11:31:41 +02:00
Tobias Brunner 81bace09a4 android: Fix import of certificate request flag 2018-07-03 11:31:40 +02:00
Tobias Brunner a706058118 android: Add flags to control CRL/OCSP fetching and strict revocation 2018-07-03 11:31:40 +02:00
Tobias Brunner 0e2a6c46e9 revocation: Support en-/disabling CRL/OCSP at runtime 2018-07-03 11:31:40 +02:00
Tobias Brunner 3eda52f039 android: Use activity when reconnecting without (or a possibly wrong) password 2018-07-03 11:31:40 +02:00
Tobias Brunner 5bdb800abf android: Use startForegroundService() to start VpnService
This gives us some time to call startForeground() so we don't get
terminated.
2018-07-03 11:31:40 +02:00
Tobias Brunner fe1f143277 android: Install a blocking TUN device until the VPN is established
It's reinstalled when reconnecting (or during error recovery) and
eventually uninstalled after disconnecting.

Only on Android 5+, otherwise we'd block our fetcher (and Android 4.4 is
stupid in regards to overlapping TUN devices anyway).

Note that Android 8's blocking feature blocks everything that passes by
the VPN, so this only works when tunneling everything (i.e. neither subnets,
nor apps can be excluded from the VPN if that feature is enabled).
2018-07-03 11:31:39 +02:00
Tobias Brunner 99cc2d82d4 android: Exclude our own app from the VPN
Otherwise, a blocking VPN interface would prevent our fetcher from working
as we currently rely on an interface that doesn't allow access to the
underlying socket/FD, which would be required to call VpnService.protect().
2018-07-03 11:31:39 +02:00
Tobias Brunner fb3772ec95 android: Log retries to the same log file
It's cleared when a new connection is started or there is a manual
retry.
2018-07-03 11:31:39 +02:00
Tobias Brunner 1350ee1ec7 android: Use capped exponential backoff for automatic retries 2018-07-03 11:31:39 +02:00
Tobias Brunner 2ec6ad71d3 android: Show countdown and retry button in notification 2018-07-03 11:31:39 +02:00
Tobias Brunner 0d9dd4b150 android: Avoid IllegalStateException in state fragments
This happened if the state service got connected while such a fragment was
not visible (anymore or at all).
2018-07-03 11:31:38 +02:00
Tobias Brunner bc52868173 android: Don't hide the notification if we are connecting to a profile
In particular, if we are reconnecting after an error.
2018-07-03 11:31:38 +02:00
Tobias Brunner 68afdd3464 android: Add an automatic reconnect on errors
This way the connection will be attempted to be kept up even on "fatal"
errors like authentication failures.
2018-07-03 11:31:38 +02:00
Tobias Brunner 89a88d7c56 ike-sa-manager: Fix races when changing initiator SPI of an IKE_SA
Removing and readding the entry to a potentially different row/segment,
while driving out waiting and new threads, could prevent threads from
acquiring the SA even if they were waiting to check it out by unique
ID (which doesn't change), or if they were just trying to enumerate it.
With this change the row and segment doesn't change anymore and waiting
threads may acquire the SA. However, those looking for an IKE_SA by SPIs
might get one back that has a different SPI (but that's probably not
something that happens very often this early).

This was noticed because we check out SAs by unique ID in the Android
app to terminate them after failed retransmits if we are not reestablishing
the SA (otherwise we continue), and this sometimes failed.

Fixes: eaedcf8c00 ("ike-sa-manager: Add method to change the initiator SPI of an IKE_SA")
2018-07-03 11:31:38 +02:00
Tobias Brunner f23b107857 android: Show a retry button in the error banner
The button to view the log is now below the status info.  And since the
IMC results are just below that we don't need a special handling for
that anymore.
2018-07-03 11:31:38 +02:00
Tobias Brunner 063230c27b android: Add function to quickly reconnect the current profile 2018-07-03 11:31:37 +02:00
Tobias Brunner a5f565646a android: Use Java 8 features 2018-07-03 11:31:37 +02:00
Tobias Brunner ab5dbbc4ab android: Show an error if client certificate is unavailable
This can happen on systems (e.g. Android 7.x) where Always-on VPNs are
triggered right after booting before the KeyChain is unlocked by the user.
Retrieving the certificate chain or private key then fails with
"KeyChainException: IllegalStateException: keystore is LOCKED" until the
user unlocks the screen once.

The built-in client actually also fails in this situation (e.g. with XAuth
RSA), it tries three times then stops and shows an error notification.
2018-07-03 11:31:37 +02:00
Tobias Brunner f0b3e303c4 android: Show an error if a profile without a password is initiated
This could happen if an incomplete profile is used with Always-on VPN.
2018-07-03 11:31:37 +02:00
Tobias Brunner e145a5e66d android: Use modern shortcuts on Android 8+ 2018-07-03 11:31:37 +02:00
Tobias Brunner 5b6a0a3f9e android: Add an adaptive launcher icon
Using <inset> in a mipmap folder apparently is not fully valid, at least
Android Studio complains about it (it seems to work fine, though).
2018-07-03 11:31:36 +02:00
Tobias Brunner a7d679ff1b android: Show the actual error description in the notification 2018-07-03 11:31:36 +02:00
Tobias Brunner c353734f47 android: Change format for error strings
Place the dot in the main message not the descriptions of the individual
errors.
2018-07-03 11:31:36 +02:00
Tobias Brunner 4dbe7ffa3e android: Collapse Quick Settings drawer if password entry is required 2018-07-03 11:31:36 +02:00
Tobias Brunner 56f599560c android: Initiate configured default profile when triggered as Always-on VPN
With Android 8.1 this isn't triggered after a reboot until the device
has been unlocked once (solving the issue with the key store) and traffic
may optionally be blocked by the user until the VPN is established.

There are still some issues (e.g. password prompts and fatal errors), and we
might need some workaround for older Android releases.
2018-07-03 11:31:36 +02:00
Tobias Brunner d56f1bf832 android: Just reconnect if the tile is clicked even if there was an error
A long press click on the tile (or a click on the notification) will open
the main activity if more information about the error are necessary.
2018-07-03 11:31:35 +02:00
Tobias Brunner be89310784 android: Allow reconnecting without confirmation in case of an error 2018-07-03 11:31:35 +02:00
Tobias Brunner 6987ddb313 android: Show connection errors as banner, not as modal dialog 2018-07-03 11:31:35 +02:00
Tobias Brunner 64b7a6d622 android: Add Quick Settings tile to toggle VPN state
Only if there is no currently active (or previously active) profile does
this currently operate on the configured (or stored most recently used)
profile.  This way it's possible to use a different connection and
quickly disable and re-enable it again.  When unlocked the profile name
is shown, when locked a generic text is used (this detection doesn't seem
to work 100% reliably).  To disconnect, the user is forced to unlock the
device, connecting is possible without, if the credentials are available
and no fatal error occurs (it even works with the system credential store,
at least on Android 8.1).

Note that the tile is not available right after a reboot.  It seems that
the system has to be unlocked once to activate third-party tiles (will
be interesting to see how this works together with Always-on VPN).
2018-07-03 11:31:35 +02:00
Tobias Brunner 08c79d5112 android: Store the ID of the most recently used profile as preference 2018-07-03 11:31:35 +02:00
Tobias Brunner acdac14818 android: Add settings activity and default profile selection
The default profile can then be used for a Quick Settings tile or the
Always-on VPN feature.
2018-07-03 11:31:34 +02:00
Tobias Brunner 6e73a939a9 android: Reset error state after user confirmed it
This allows other listeners to change their display.
2018-07-03 11:31:34 +02:00
Tobias Brunner 52aaffdeb4 android: Use specific icon when connecting to the VPN 2018-07-03 11:31:34 +02:00
Tobias Brunner 70d6a0cf33 android: Use a handler to show/remove notification from main UI thread
This avoids races that were previously seen (e.g. when disconnecting
while connecting, which sometimes showed a "Disconnecting..."
notification).
2018-07-03 11:31:34 +02:00
Tobias Brunner 58d139dad3 android: Use separate activity to control VPN connections
This way we don't have to open the main window, but only show a dialog
if necessary (or nothing in many cases).
2018-07-03 11:31:34 +02:00
Tobias Brunner 1d336cc2ae android: Migrate onAttach() from deprecated version 2018-07-03 11:31:33 +02:00
Tobias Brunner 4671f023c3 android: Make certificate import activity properly transparent 2018-07-03 11:31:33 +02:00
Tobias Brunner d390d97da4 android: Remove deprecated progress indicator in MainActivity
Support for this was already removed with API level 21. On modern
devices loading CA certs should be quick enough anyway.
2018-07-03 11:31:33 +02:00
Tobias Brunner ed9d5a314c android: Replace deprecated ProgressDialog during profile import 2018-07-03 11:31:33 +02:00
Tobias Brunner 6ca0b46c20 android: Add notification channel for API level 26+
Unfortunately, setLockscreenVisibility() doesn't seem to have any
effect. So the full notification is shown unless the user manually
configures the notification settings.
2018-07-03 11:31:33 +02:00
Tobias Brunner 56dec924ec android: Set compile-/targetSdkVersion to 26
This allows us to add tiles to Quick Settings and enabling the Always-on
VPN feature in the VPN settings (both require API level 24, but 26 will
be required as targetSdkVersion later this year).
2018-07-03 11:31:33 +02:00
Tobias Brunner 71f4a20aa1 android: Show profile ID at bottom of advanced settings
Can be selected and copied to the clipboard to use in automation
software that doesn't support the shortcut.
2018-07-03 11:31:32 +02:00
Tobias Brunner 93033728a9 android: Accept a profile's UUID when initiating 2018-07-03 11:31:32 +02:00
Tobias Brunner 581f4326d5 android: Add additional Intent filter for import Activity with MIME type mask
Chrome creates such an Intent when opening downloaded files (not when
directly opening them), a MIME type is set, but apparently not ours.
2018-07-03 11:31:32 +02:00
Tobias Brunner 93489acc0d android: UUID is now mandatory
Unless there are profiles created with old versions of the app (< 1.8.0)
that were never updated since, all profiles should already have a UUID
assigned.  If not, we do that now with a DB migration.
2018-07-03 11:31:32 +02:00
Tobias Brunner 0917caa195 android: Show an error dialog if we can't get permission for VPNs
This is either because a third-party VPN app has the always-on feature
enabled, or because the user denied the permission in the system's confirmation
dialog.

If the always-on feature is enabled for a connection of the built-in VPN
client we get an IllegalStateException, for which we show an updated and
clearer error message.
2018-07-03 11:31:32 +02:00
Tobias Brunner 08601c58e9 android: Suppress self-assign warnings with clang
These are triggered by the little endian functions in byteorder.h.
2018-07-03 11:31:31 +02:00
Tobias Brunner 2afdb92dd0 atomics: Use type of destination in CAS implementation
The type of the value was incorrect (void**) if NULL was passed to cas_ptr()
as expected value, which caused a compiler warning with Clang because
__atomic_compare_exchange_n() expects the types of the first two arguments
to be the same.
2018-07-03 11:31:31 +02:00
Tobias Brunner 942599b623 atomics: Define HAVE_GCC_ATOMIC_OPERATIONS when building with clang
We should probably check for stdatomic.h and use the c11 functions if
available.
2018-07-03 11:31:31 +02:00
Tobias Brunner 929badfefd android: Build native libraries for all non-deprecated ABIs
armeabi has been superseded by armeabi-v7a and the MIPS ABIs were removed
with the latest NDK (r17), after being marked deprecated for a while.
By not specifying APP_ABI we build for all non-deprecated ABIs.
2018-07-03 11:31:31 +02:00
Tobias Brunner 4bb0a589ff android: Update Gradle plugin and wrapper 2018-07-03 11:31:31 +02:00
Tobias Brunner b68a0adace ike: Include length of reassembled IKE message in log message
Also simplify wording a bit when fragmenting.
2018-07-02 12:19:00 +02:00
Tobias Brunner 707b70725a dhcp: Only use DHCP server port if explicitly configured
If a DHCP server is running on the same host it isn't necessary to
bind the server port and might even cause conflicts.
2018-07-02 11:39:22 +02:00
Tobias Brunner 50c4c1bb40 kernel-pfkey: Avoid updating policies if nothing significant changed
The FreeBSD kernel doesn't update policies atomically, causing
unnecessary traffic loss during simple rekeyings.

Fixes #2677.
2018-07-02 10:17:04 +02:00
Tobias Brunner daa0a0cc1b settings: Fix compilation with newer versions of Clang
Depending on the actual va_list definition it's not valid to compare it
directly or assign NULL.
2018-06-29 11:47:26 +02:00
Tobias Brunner fecafaaca3 Merge branch 'ike-proposal-switch'
This allows switching the originally selected IKE config (based on the
IPs and IKE version) to a different one if no matching proposal is found.

This way we don't rely that much on the order of configs anymore and it's
possible to configure separate configs for clients that require weak
algorithms.
2018-06-28 18:47:15 +02:00
Tobias Brunner 1ecac75f37 testing: Fix IKE proposal in swanctl/net2net-gw scenario
Also simplify config by using references.
2018-06-28 18:46:42 +02:00
Tobias Brunner 187a01cc9f backend-manager: Change how IKE/peer config matches are logged
Instead of logging the search parameters for IKE configs (which were already
before starting the lookup) we log the configured settings.

The peer config lookup is also changed slightly by doing the IKE config
match first and skipping some checks if that or the local peer identity
doesn't match.
2018-06-28 18:46:42 +02:00