Updating Eth Service to use Eth Network Permission

Updating Ethernet Service network management APIs to
require the manage ethernet networks permission.

Bug: 210485380
Test: atest EthernetServiceTests
Change-Id: Ibc9b2930fc0069efd7c6f4b833aba7d6c8e93311
This commit is contained in:
James Mattis
2022-01-28 19:46:40 -08:00
parent 5aa01c3196
commit a2c204259d
3 changed files with 42 additions and 3 deletions

View File

@@ -208,6 +208,12 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
pw.decreaseIndent(); pw.decreaseIndent();
} }
private void enforceNetworkManagementPermission() {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.MANAGE_ETHERNET_NETWORKS,
"EthernetServiceImpl");
}
/** /**
* Validate the state of ethernet for APIs tied to network management. * Validate the state of ethernet for APIs tied to network management.
* *
@@ -216,12 +222,12 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
*/ */
private void validateNetworkManagementState(@NonNull final String iface, private void validateNetworkManagementState(@NonNull final String iface,
final @NonNull String methodName) { final @NonNull String methodName) {
enforceAutomotiveDevice(methodName);
enforceNetworkManagementPermission();
logIfEthernetNotStarted(); logIfEthernetNotStarted();
// TODO: add permission check here for MANAGE_INTERNAL_NETWORKS when it's available.
Objects.requireNonNull(iface, "Pass a non-null iface."); Objects.requireNonNull(iface, "Pass a non-null iface.");
Objects.requireNonNull(methodName, "Pass a non-null methodName."); Objects.requireNonNull(methodName, "Pass a non-null methodName.");
enforceAutomotiveDevice(methodName);
enforceInterfaceIsTracked(iface); enforceInterfaceIsTracked(iface);
} }

View File

@@ -362,7 +362,7 @@ public class EthernetNetworkFactoryTest {
assertFalse(ret); assertFalse(ret);
verifyNoStopOrStart(); verifyNoStopOrStart();
assertFailedListener(listener, "can't be updated as it is not configured"); assertFailedListener(listener, "can't be updated as it is not available");
} }
@Test @Test

View File

@@ -18,10 +18,13 @@ package com.android.server.ethernet;
import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.Manifest;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@@ -176,6 +179,36 @@ public class EthernetServiceImplTest {
}); });
} }
private void denyManageEthPermission() {
doThrow(new SecurityException("")).when(mContext)
.enforceCallingOrSelfPermission(
eq(Manifest.permission.MANAGE_ETHERNET_NETWORKS), anyString());
}
@Test
public void testUpdateConfigurationRejectsWithoutManageEthPermission() {
denyManageEthPermission();
assertThrows(SecurityException.class, () -> {
mEthernetServiceImpl.updateConfiguration(TEST_IFACE, UPDATE_REQUEST, NULL_LISTENER);
});
}
@Test
public void testConnectNetworkRejectsWithoutManageEthPermission() {
denyManageEthPermission();
assertThrows(SecurityException.class, () -> {
mEthernetServiceImpl.connectNetwork(TEST_IFACE, NULL_LISTENER);
});
}
@Test
public void testDisconnectNetworkRejectsWithoutManageEthPermission() {
denyManageEthPermission();
assertThrows(SecurityException.class, () -> {
mEthernetServiceImpl.disconnectNetwork(TEST_IFACE, NULL_LISTENER);
});
}
@Test @Test
public void testUpdateConfiguration() { public void testUpdateConfiguration() {
mEthernetServiceImpl.updateConfiguration(TEST_IFACE, UPDATE_REQUEST, NULL_LISTENER); mEthernetServiceImpl.updateConfiguration(TEST_IFACE, UPDATE_REQUEST, NULL_LISTENER);