From 3b3dd942ec6a0beaccd1cef0723d72786435d8f3 Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Tue, 12 May 2015 18:14:58 +0100 Subject: Support cross-user VPN calls (with permission) Settings and SystemUI need to act on other users than USER_OWNER. This is gated by INTERACT_ACROSS_USERS_FULL in addition to the existing CONTROL_VPN checks, so the number of processes able to interfere with other profiles' VPNs should be quite small. Bug: 20692490 Bug: 20747154 Bug: 20872408 Change-Id: I6e5d7220f73435bec350719e7b4715935caf4e19 --- core/java/android/net/IConnectivityManager.aidl | 6 +++--- core/java/android/net/VpnService.java | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'core/java/android/net') diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 77200a5..c1b4a1f 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -106,13 +106,13 @@ interface IConnectivityManager ProxyInfo getDefaultProxy(); - boolean prepareVpn(String oldPackage, String newPackage); + boolean prepareVpn(String oldPackage, String newPackage, int userId); - void setVpnPackageAuthorization(boolean authorized); + void setVpnPackageAuthorization(String packageName, int userId, boolean authorized); ParcelFileDescriptor establishVpn(in VpnConfig config); - VpnConfig getVpnConfig(); + VpnConfig getVpnConfig(int userId); void startLegacyVpn(in VpnProfile profile); diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index a0e65eb..2bb48b3 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -156,7 +156,7 @@ public class VpnService extends Service { */ public static Intent prepare(Context context) { try { - if (getService().prepareVpn(context.getPackageName(), null)) { + if (getService().prepareVpn(context.getPackageName(), null, UserHandle.myUserId())) { return null; } } catch (RemoteException e) { @@ -182,10 +182,11 @@ public class VpnService extends Service { String packageName = context.getPackageName(); try { // Only prepare if we're not already prepared. - if (!cm.prepareVpn(packageName, null)) { - cm.prepareVpn(null, packageName); + int userId = UserHandle.myUserId(); + if (!cm.prepareVpn(packageName, null, userId)) { + cm.prepareVpn(null, packageName, userId); } - cm.setVpnPackageAuthorization(true); + cm.setVpnPackageAuthorization(packageName, userId, true); } catch (RemoteException e) { // ignore } -- cgit v1.1