Whitelist packages from VPN lockdown.
Bug: 77468593 Test: atest com.android.server.connectivity.VpnTest Change-Id: I9119c139ab07a761ce5dfd1365b70eb905fd32dc
This commit is contained in:
parent
7e81ae73b4
commit
3aeb3f3455
2 changed files with 214 additions and 20 deletions
|
|
@ -1014,20 +1014,54 @@ public class ConnectivityManager {
|
|||
* to remove an existing always-on VPN configuration.
|
||||
* @param lockdownEnabled {@code true} to disallow networking when the VPN is not connected or
|
||||
* {@code false} otherwise.
|
||||
* @param lockdownWhitelist The list of packages that are allowed to access network directly
|
||||
* when VPN is in lockdown mode but is not running. Non-existent packages are ignored so
|
||||
* this method must be called when a package that should be whitelisted is installed or
|
||||
* uninstalled.
|
||||
* @return {@code true} if the package is set as always-on VPN controller;
|
||||
* {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.CONTROL_ALWAYS_ON_VPN)
|
||||
public boolean setAlwaysOnVpnPackageForUser(int userId, @Nullable String vpnPackage,
|
||||
boolean lockdownEnabled) {
|
||||
boolean lockdownEnabled, @Nullable List<String> lockdownWhitelist) {
|
||||
try {
|
||||
return mService.setAlwaysOnVpnPackage(userId, vpnPackage, lockdownEnabled);
|
||||
return mService.setAlwaysOnVpnPackage(
|
||||
userId, vpnPackage, lockdownEnabled, lockdownWhitelist);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures an always-on VPN connection through a specific application.
|
||||
* This connection is automatically granted and persisted after a reboot.
|
||||
*
|
||||
* <p>The designated package should declare a {@link VpnService} in its
|
||||
* manifest guarded by {@link android.Manifest.permission.BIND_VPN_SERVICE},
|
||||
* otherwise the call will fail.
|
||||
*
|
||||
* @param userId The identifier of the user to set an always-on VPN for.
|
||||
* @param vpnPackage The package name for an installed VPN app on the device, or {@code null}
|
||||
* to remove an existing always-on VPN configuration.
|
||||
* @param lockdownEnabled {@code true} to disallow networking when the VPN is not connected or
|
||||
* {@code false} otherwise.
|
||||
* @return {@code true} if the package is set as always-on VPN controller;
|
||||
* {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.CONTROL_ALWAYS_ON_VPN)
|
||||
public boolean setAlwaysOnVpnPackageForUser(int userId, @Nullable String vpnPackage,
|
||||
boolean lockdownEnabled) {
|
||||
try {
|
||||
return mService.setAlwaysOnVpnPackage(
|
||||
userId, vpnPackage, lockdownEnabled, /* whitelist */ null);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the package name of the currently set always-on VPN application.
|
||||
* If there is no always-on VPN set, or the VPN is provided by the system instead
|
||||
* of by an app, {@code null} will be returned.
|
||||
|
|
@ -1036,6 +1070,7 @@ public class ConnectivityManager {
|
|||
* or {@code null} if none is set.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.CONTROL_ALWAYS_ON_VPN)
|
||||
public String getAlwaysOnVpnPackageForUser(int userId) {
|
||||
try {
|
||||
return mService.getAlwaysOnVpnPackage(userId);
|
||||
|
|
@ -1044,6 +1079,36 @@ public class ConnectivityManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether always-on VPN is in lockdown mode.
|
||||
*
|
||||
* @hide
|
||||
**/
|
||||
@RequiresPermission(android.Manifest.permission.CONTROL_ALWAYS_ON_VPN)
|
||||
public boolean isVpnLockdownEnabled(int userId) {
|
||||
try {
|
||||
return mService.isVpnLockdownEnabled(userId);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the list of packages that are allowed to access network when always-on VPN is in
|
||||
* lockdown mode but not connected. Returns {@code null} when VPN lockdown is not active.
|
||||
*
|
||||
* @hide
|
||||
**/
|
||||
@RequiresPermission(android.Manifest.permission.CONTROL_ALWAYS_ON_VPN)
|
||||
public List<String> getVpnLockdownWhitelist(int userId) {
|
||||
try {
|
||||
return mService.getVpnLockdownWhitelist(userId);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns details about the currently active default data network
|
||||
* for a given uid. This is for internal use only to avoid spying
|
||||
|
|
|
|||
|
|
@ -125,8 +125,11 @@ interface IConnectivityManager
|
|||
|
||||
boolean updateLockdownVpn();
|
||||
boolean isAlwaysOnVpnPackageSupported(int userId, String packageName);
|
||||
boolean setAlwaysOnVpnPackage(int userId, String packageName, boolean lockdown);
|
||||
boolean setAlwaysOnVpnPackage(int userId, String packageName, boolean lockdown,
|
||||
in List<String> lockdownWhitelist);
|
||||
String getAlwaysOnVpnPackage(int userId);
|
||||
boolean isVpnLockdownEnabled(int userId);
|
||||
List<String> getVpnLockdownWhitelist(int userId);
|
||||
|
||||
int checkMobileProvisioning(int suggestedTimeOutMs);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue