Change permissions checks for setAirplaneMode.
Require NETWORK_SETTINGS (or NETWORK_SETUP_WIZARD) instead of the legacy CONNECTIVITY_INTERNAL permission. The users are as follows: - The system callers (Phone, Settings, SystemUI, VrSettings) all have NETWORK_SETTINGS. - SetupWizard has NETWORK_SETUP_WIZARD - sl4a has NETWORK_STACK Bug: 115302596 Test: builds, boots, airplane mode via SystemUI works Change-Id: I8ca40182bd8b5e3fd9a82296c0cc28de30ed4baf
This commit is contained in:
@@ -2727,7 +2727,10 @@ public class ConnectivityManager {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.NETWORK_SETTINGS,
|
||||
android.Manifest.permission.NETWORK_SETUP_WIZARD,
|
||||
android.Manifest.permission.NETWORK_STACK})
|
||||
@SystemApi
|
||||
public void setAirplaneMode(boolean enable) {
|
||||
try {
|
||||
|
||||
@@ -1679,6 +1679,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
"ConnectivityService");
|
||||
}
|
||||
|
||||
private void enforceAnyPermissionOf(String... permissions) {
|
||||
for (String permission : permissions) {
|
||||
if (mContext.checkCallingOrSelfPermission(permission) == PERMISSION_GRANTED) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
throw new SecurityException(
|
||||
"Requires one of the following permissions: " + String.join(", ", permissions) + ".");
|
||||
}
|
||||
|
||||
private void enforceInternetPermission() {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERNET,
|
||||
@@ -1723,6 +1733,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
"ConnectivityService");
|
||||
}
|
||||
|
||||
private void enforceNetworkStackSettingsOrSetup() {
|
||||
enforceAnyPermissionOf(
|
||||
android.Manifest.permission.NETWORK_SETTINGS,
|
||||
android.Manifest.permission.NETWORK_SETUP_WIZARD,
|
||||
android.Manifest.permission.NETWORK_STACK);
|
||||
}
|
||||
|
||||
private boolean checkNetworkStackPermission() {
|
||||
return PERMISSION_GRANTED == mContext.checkCallingOrSelfPermission(
|
||||
android.Manifest.permission.NETWORK_STACK);
|
||||
@@ -4008,7 +4025,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public void setAirplaneMode(boolean enable) {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceNetworkStackSettingsOrSetup();
|
||||
final long ident = Binder.clearCallingIdentity();
|
||||
try {
|
||||
final ContentResolver cr = mContext.getContentResolver();
|
||||
|
||||
Reference in New Issue
Block a user