]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
android: Exclude our own app from the VPN
authorTobias Brunner <tobias@strongswan.org>
Tue, 19 Jun 2018 15:01:21 +0000 (17:01 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 3 Jul 2018 09:31:39 +0000 (11:31 +0200)
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().

src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java

index 8d9284fcc59b6392c12dd57cd0fdca743ba83891..ebccdc060246f527b8c8b8df29e4717fac488efb 100644 (file)
@@ -955,8 +955,23 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe
                        mExcludedSubnets = IPRangeSet.fromString(profile.getExcludedSubnets());
                        Integer splitTunneling = profile.getSplitTunneling();
                        mSplitTunneling = splitTunneling != null ? splitTunneling : 0;
-                       mAppHandling = profile.getSelectedAppsHandling();
+                       SelectedAppsHandling appHandling = profile.getSelectedAppsHandling();
                        mSelectedApps = profile.getSelectedAppsSet();
+                       /* exclude our own app, otherwise the fetcher is blocked */
+                       switch (appHandling)
+                       {
+                               case SELECTED_APPS_DISABLE:
+                                       appHandling = SelectedAppsHandling.SELECTED_APPS_EXCLUDE;
+                                       mSelectedApps.clear();
+                                       /* fall-through */
+                               case SELECTED_APPS_EXCLUDE:
+                                       mSelectedApps.add(getPackageName());
+                                       break;
+                               case SELECTED_APPS_ONLY:
+                                       mSelectedApps.remove(getPackageName());
+                                       break;
+                       }
+                       mAppHandling = appHandling;
                }
 
                public void addAddress(String address, int prefixLength)