Loading core/java/com/android/internal/net/VpnConfig.java +4 −2 Original line number Diff line number Diff line Loading @@ -34,17 +34,19 @@ public class VpnConfig implements Parcelable { public static final String SERVICE_INTERFACE = "android.net.VpnService"; public static final String DIALOGS_PACKAGE = "com.android.vpndialogs"; public static final String LEGACY_VPN = "[Legacy VPN]"; public static Intent getIntentForConfirmation() { Intent intent = new Intent(); intent.setClassName("com.android.vpndialogs", "com.android.vpndialogs.ConfirmDialog"); intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ConfirmDialog"); return intent; } public static PendingIntent getIntentForStatusPanel(Context context, VpnConfig config) { Intent intent = new Intent(); intent.setClassName("com.android.vpndialogs", "com.android.vpndialogs.ManageDialog"); intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ManageDialog"); intent.putExtra("config", config); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); Loading packages/VpnDialogs/AndroidManifest.xml +1 −2 Original line number Diff line number Diff line <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.vpndialogs" android:sharedUserId="android.uid.system"> package="com.android.vpndialogs"> <application android:label="VpnDialogs" android:allowBackup="false" > Loading services/java/com/android/server/connectivity/Vpn.java +26 −8 Original line number Diff line number Diff line Loading @@ -106,16 +106,16 @@ public class Vpn extends INetworkManagementEventObserver.Stub { return true; } // Only system user can revoke a package. if (Binder.getCallingUid() != Process.SYSTEM_UID) { throw new SecurityException("Unauthorized Caller"); } // Check if the caller is authorized. enforceControlPermission(); // Reset the interface and hide the notification. if (mInterface != null) { jniReset(mInterface); long identity = Binder.clearCallingIdentity(); mCallback.restore(); hideNotification(); Binder.restoreCallingIdentity(identity); mInterface = null; } Loading Loading @@ -291,6 +291,26 @@ public class Vpn extends INetworkManagementEventObserver.Stub { public void limitReached(String limit, String interfaze) { } private void enforceControlPermission() { // System user is allowed to control VPN. if (Binder.getCallingUid() == Process.SYSTEM_UID) { return; } try { // System dialogs are also allowed to control VPN. PackageManager pm = mContext.getPackageManager(); ApplicationInfo app = pm.getApplicationInfo(VpnConfig.DIALOGS_PACKAGE, 0); if (Binder.getCallingUid() == app.uid) { return; } } catch (Exception e) { // ignore } throw new SecurityException("Unauthorized Caller"); } private class Connection implements ServiceConnection { private IBinder mService; Loading Loading @@ -368,10 +388,8 @@ public class Vpn extends INetworkManagementEventObserver.Stub { * Return the information of the current ongoing legacy VPN. */ public synchronized LegacyVpnInfo getLegacyVpnInfo() { // Only system user can call this method. if (Binder.getCallingUid() != Process.SYSTEM_UID) { throw new SecurityException("Unauthorized Caller"); } // Check if the caller is authorized. enforceControlPermission(); return (mLegacyVpnRunner == null) ? null : mLegacyVpnRunner.getInfo(); } Loading Loading
core/java/com/android/internal/net/VpnConfig.java +4 −2 Original line number Diff line number Diff line Loading @@ -34,17 +34,19 @@ public class VpnConfig implements Parcelable { public static final String SERVICE_INTERFACE = "android.net.VpnService"; public static final String DIALOGS_PACKAGE = "com.android.vpndialogs"; public static final String LEGACY_VPN = "[Legacy VPN]"; public static Intent getIntentForConfirmation() { Intent intent = new Intent(); intent.setClassName("com.android.vpndialogs", "com.android.vpndialogs.ConfirmDialog"); intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ConfirmDialog"); return intent; } public static PendingIntent getIntentForStatusPanel(Context context, VpnConfig config) { Intent intent = new Intent(); intent.setClassName("com.android.vpndialogs", "com.android.vpndialogs.ManageDialog"); intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ManageDialog"); intent.putExtra("config", config); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); Loading
packages/VpnDialogs/AndroidManifest.xml +1 −2 Original line number Diff line number Diff line <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.vpndialogs" android:sharedUserId="android.uid.system"> package="com.android.vpndialogs"> <application android:label="VpnDialogs" android:allowBackup="false" > Loading
services/java/com/android/server/connectivity/Vpn.java +26 −8 Original line number Diff line number Diff line Loading @@ -106,16 +106,16 @@ public class Vpn extends INetworkManagementEventObserver.Stub { return true; } // Only system user can revoke a package. if (Binder.getCallingUid() != Process.SYSTEM_UID) { throw new SecurityException("Unauthorized Caller"); } // Check if the caller is authorized. enforceControlPermission(); // Reset the interface and hide the notification. if (mInterface != null) { jniReset(mInterface); long identity = Binder.clearCallingIdentity(); mCallback.restore(); hideNotification(); Binder.restoreCallingIdentity(identity); mInterface = null; } Loading Loading @@ -291,6 +291,26 @@ public class Vpn extends INetworkManagementEventObserver.Stub { public void limitReached(String limit, String interfaze) { } private void enforceControlPermission() { // System user is allowed to control VPN. if (Binder.getCallingUid() == Process.SYSTEM_UID) { return; } try { // System dialogs are also allowed to control VPN. PackageManager pm = mContext.getPackageManager(); ApplicationInfo app = pm.getApplicationInfo(VpnConfig.DIALOGS_PACKAGE, 0); if (Binder.getCallingUid() == app.uid) { return; } } catch (Exception e) { // ignore } throw new SecurityException("Unauthorized Caller"); } private class Connection implements ServiceConnection { private IBinder mService; Loading Loading @@ -368,10 +388,8 @@ public class Vpn extends INetworkManagementEventObserver.Stub { * Return the information of the current ongoing legacy VPN. */ public synchronized LegacyVpnInfo getLegacyVpnInfo() { // Only system user can call this method. if (Binder.getCallingUid() != Process.SYSTEM_UID) { throw new SecurityException("Unauthorized Caller"); } // Check if the caller is authorized. enforceControlPermission(); return (mLegacyVpnRunner == null) ? null : mLegacyVpnRunner.getInfo(); } Loading