Merge "Allow USE_RESTRICTED_NETWORKS for registerSystemDefaultNetworkCallback"
This commit is contained in:
commit
31ee1c1121
5 changed files with 29 additions and 4 deletions
|
|
@ -15,7 +15,7 @@ package android.net {
|
|||
method @Nullable @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public android.net.LinkProperties getRedactedLinkPropertiesForPackage(@NonNull android.net.LinkProperties, int, @NonNull String);
|
||||
method @Nullable @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public android.net.NetworkCapabilities getRedactedNetworkCapabilitiesForPackage(@NonNull android.net.NetworkCapabilities, int, @NonNull String);
|
||||
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerDefaultNetworkCallbackForUid(int, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
|
||||
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerSystemDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
|
||||
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS}) public void registerSystemDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void removeUidFromMeteredNetworkAllowList(int);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void removeUidFromMeteredNetworkDenyList(int);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void replaceFirewallChain(int, @NonNull int[]);
|
||||
|
|
|
|||
|
|
@ -4789,7 +4789,8 @@ public class ConnectivityManager {
|
|||
@SuppressLint({"ExecutorRegistration", "PairedRegistration"})
|
||||
@RequiresPermission(anyOf = {
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
||||
android.Manifest.permission.NETWORK_SETTINGS})
|
||||
android.Manifest.permission.NETWORK_SETTINGS,
|
||||
android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS})
|
||||
public void registerSystemDefaultNetworkCallback(@NonNull NetworkCallback networkCallback,
|
||||
@NonNull Handler handler) {
|
||||
CallbackHandler cbHandler = new CallbackHandler(handler);
|
||||
|
|
|
|||
|
|
@ -2810,6 +2810,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private void enforceSettingsOrUseRestrictedNetworksPermission() {
|
||||
enforceAnyPermissionOf(mContext,
|
||||
android.Manifest.permission.NETWORK_SETTINGS,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
||||
Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS);
|
||||
}
|
||||
|
||||
private void enforceNetworkFactoryPermission() {
|
||||
// TODO: Check for the BLUETOOTH_STACK permission once that is in the API surface.
|
||||
if (UserHandle.getAppId(getCallingUid()) == Process.BLUETOOTH_UID) return;
|
||||
|
|
@ -6656,7 +6663,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
enforceAccessPermission();
|
||||
break;
|
||||
case TRACK_SYSTEM_DEFAULT:
|
||||
enforceSettingsPermission();
|
||||
enforceSettingsOrUseRestrictedNetworksPermission();
|
||||
networkCapabilities = new NetworkCapabilities(defaultNc);
|
||||
break;
|
||||
case BACKGROUND_REQUEST:
|
||||
|
|
|
|||
|
|
@ -1047,12 +1047,22 @@ public class ConnectivityManagerTest {
|
|||
final TestNetworkCallback bestMatchingCallback = new TestNetworkCallback();
|
||||
final Handler h = new Handler(Looper.getMainLooper());
|
||||
if (TestUtils.shouldTestSApis()) {
|
||||
assertThrows(SecurityException.class, () ->
|
||||
registerSystemDefaultNetworkCallback(systemDefaultCallback, h));
|
||||
runWithShellPermissionIdentity(() -> {
|
||||
registerSystemDefaultNetworkCallback(systemDefaultCallback, h);
|
||||
registerDefaultNetworkCallbackForUid(Process.myUid(), perUidCallback, h);
|
||||
}, NETWORK_SETTINGS);
|
||||
registerBestMatchingNetworkCallback(makeDefaultRequest(), bestMatchingCallback, h);
|
||||
}
|
||||
if (TestUtils.shouldTestTApis()) {
|
||||
// Verify registerSystemDefaultNetworkCallback can be accessed via
|
||||
// CONNECTIVITY_USE_RESTRICTED_NETWORKS permission.
|
||||
final TestNetworkCallback systemDefaultCallback2 = new TestNetworkCallback();
|
||||
runWithShellPermissionIdentity(() ->
|
||||
registerSystemDefaultNetworkCallback(systemDefaultCallback2, h),
|
||||
CONNECTIVITY_USE_RESTRICTED_NETWORKS);
|
||||
}
|
||||
|
||||
Network wifiNetwork = null;
|
||||
mCtsNetUtils.ensureWifiConnected();
|
||||
|
|
|
|||
|
|
@ -5181,9 +5181,10 @@ public class ConnectivityServiceTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testRegisterPrivilegedDefaultCallbacksRequireNetworkSettings() throws Exception {
|
||||
public void testRegisterPrivilegedDefaultCallbacksRequirePermissions() throws Exception {
|
||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||
mCellNetworkAgent.connect(false /* validated */);
|
||||
mServiceContext.setPermission(CONNECTIVITY_USE_RESTRICTED_NETWORKS, PERMISSION_DENIED);
|
||||
|
||||
final Handler handler = new Handler(ConnectivityThread.getInstanceLooper());
|
||||
final TestNetworkCallback callback = new TestNetworkCallback();
|
||||
|
|
@ -5194,6 +5195,12 @@ public class ConnectivityServiceTest {
|
|||
() -> mCm.registerDefaultNetworkCallbackForUid(APP1_UID, callback, handler));
|
||||
callback.assertNoCallback();
|
||||
|
||||
mServiceContext.setPermission(CONNECTIVITY_USE_RESTRICTED_NETWORKS, PERMISSION_GRANTED);
|
||||
mCm.registerSystemDefaultNetworkCallback(callback, handler);
|
||||
mServiceContext.setPermission(CONNECTIVITY_USE_RESTRICTED_NETWORKS, PERMISSION_DENIED);
|
||||
callback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent);
|
||||
mCm.unregisterNetworkCallback(callback);
|
||||
|
||||
mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED);
|
||||
mCm.registerSystemDefaultNetworkCallback(callback, handler);
|
||||
callback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent);
|
||||
|
|
|
|||
Loading…
Reference in a new issue