Fix that fail to setup any vpn after Network Settings reset and always-on vpn is on

Cause: It revoked the user consent of the vpn app without reseting always-on vpn.
In addition, prepareVpn sets legacy vpn as the current package, the state in
Vpn.class is broken, as it thought the current always-on package is legacy vpn,
(mAlwaysOn is only for app vpn, not for legacy vpn). As a result, prepareVpn rejects
all VpnService.prepare.

Bug: 29031820
Change-Id: Id6bf1d6f38cf134a872811806301b8a602fb5725
This commit is contained in:
Victor Chang
2016-05-30 20:36:30 +01:00
parent 4fb4490dfb
commit a81567b746

View File

@@ -5202,6 +5202,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
// Remove always-on package
synchronized (mVpns) {
final String alwaysOnPackage = getAlwaysOnVpnPackage(userId);
if (alwaysOnPackage != null) {
setAlwaysOnVpnPackage(userId, null, false);
setVpnPackageAuthorization(alwaysOnPackage, userId, false);
}
}
// Turn VPN off
VpnConfig vpnConfig = getVpnConfig(userId);
if (vpnConfig != null) {
@@ -5212,7 +5221,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// in the future without user intervention.
setVpnPackageAuthorization(vpnConfig.user, userId, false);
prepareVpn(vpnConfig.user, VpnConfig.LEGACY_VPN, userId);
prepareVpn(null, VpnConfig.LEGACY_VPN, userId);
}
}
}