Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85f28f06 authored by Cody Kesting's avatar Cody Kesting Committed by Automerger Merge Worker
Browse files

Change NetworkCapabilities administrator UIDs to be stored as int[]. am: f7ac996f am: 8c78e554

Change-Id: Ide9d239f813e8bff804d5e1a03f5dedee8e8edc1
parents b4d5fecc 8c78e554
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -6316,11 +6316,11 @@ package android.net {
  }
  public final class NetworkCapabilities implements android.os.Parcelable {
    method @NonNull public java.util.List<java.lang.Integer> getAdministratorUids();
    method @NonNull public int[] getAdministratorUids();
    method @Nullable public String getSSID();
    method @NonNull public int[] getTransportTypes();
    method public boolean satisfiedByNetworkCapabilities(@Nullable android.net.NetworkCapabilities);
    method @NonNull public android.net.NetworkCapabilities setAdministratorUids(@NonNull java.util.List<java.lang.Integer>);
    method @NonNull public android.net.NetworkCapabilities setAdministratorUids(@NonNull int[]);
    method @NonNull public android.net.NetworkCapabilities setRequestorPackageName(@NonNull String);
    method @NonNull public android.net.NetworkCapabilities setRequestorUid(int);
    method @NonNull public android.net.NetworkCapabilities setSSID(@Nullable String);
+14 −18
Original line number Diff line number Diff line
@@ -37,9 +37,7 @@ import com.android.internal.util.Preconditions;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Arrays;
import java.util.Objects;
import java.util.Set;
import java.util.StringJoiner;
@@ -96,7 +94,7 @@ public final class NetworkCapabilities implements Parcelable {
        mTransportInfo = null;
        mSignalStrength = SIGNAL_STRENGTH_UNSPECIFIED;
        mUids = null;
        mAdministratorUids.clear();
        mAdministratorUids = new int[0];
        mOwnerUid = Process.INVALID_UID;
        mSSID = null;
        mPrivateDnsBroken = false;
@@ -884,10 +882,10 @@ public final class NetworkCapabilities implements Parcelable {
     * empty unless the destination is 1) the System Server, or 2) Telephony. In either case, the
     * receiving entity must have the ACCESS_FINE_LOCATION permission and target R+.
     */
    private final List<Integer> mAdministratorUids = new ArrayList<>();
    private int[] mAdministratorUids = new int[0];

    /**
     * Sets the list of UIDs that are administrators of this network.
     * Sets the int[] of UIDs that are administrators of this network.
     *
     * <p>UIDs included in administratorUids gain administrator privileges over this Network.
     * Examples of UIDs that should be included in administratorUids are:
@@ -907,23 +905,21 @@ public final class NetworkCapabilities implements Parcelable {
     */
    @NonNull
    @SystemApi
    public NetworkCapabilities setAdministratorUids(
            @NonNull final List<Integer> administratorUids) {
        mAdministratorUids.clear();
        mAdministratorUids.addAll(administratorUids);
    public NetworkCapabilities setAdministratorUids(@NonNull final int[] administratorUids) {
        mAdministratorUids = Arrays.copyOf(administratorUids, administratorUids.length);
        return this;
    }

    /**
     * Retrieves the list of UIDs that are administrators of this Network.
     * Retrieves the UIDs that are administrators of this Network.
     *
     * @return the List of UIDs that are administrators of this Network
     * @return the int[] of UIDs that are administrators of this Network
     * @hide
     */
    @NonNull
    @SystemApi
    public List<Integer> getAdministratorUids() {
        return Collections.unmodifiableList(mAdministratorUids);
    public int[] getAdministratorUids() {
        return Arrays.copyOf(mAdministratorUids, mAdministratorUids.length);
    }

    /**
@@ -1584,7 +1580,7 @@ public final class NetworkCapabilities implements Parcelable {
        dest.writeArraySet(mUids);
        dest.writeString(mSSID);
        dest.writeBoolean(mPrivateDnsBroken);
        dest.writeList(mAdministratorUids);
        dest.writeIntArray(mAdministratorUids);
        dest.writeInt(mOwnerUid);
        dest.writeInt(mRequestorUid);
        dest.writeString(mRequestorPackageName);
@@ -1608,7 +1604,7 @@ public final class NetworkCapabilities implements Parcelable {
                        null /* ClassLoader, null for default */);
                netCap.mSSID = in.readString();
                netCap.mPrivateDnsBroken = in.readBoolean();
                netCap.setAdministratorUids(in.readArrayList(null));
                netCap.setAdministratorUids(in.createIntArray());
                netCap.mOwnerUid = in.readInt();
                netCap.mRequestorUid = in.readInt();
                netCap.mRequestorPackageName = in.readString();
@@ -1665,8 +1661,8 @@ public final class NetworkCapabilities implements Parcelable {
            sb.append(" OwnerUid: ").append(mOwnerUid);
        }

        if (!mAdministratorUids.isEmpty()) {
            sb.append(" AdministratorUids: ").append(mAdministratorUids);
        if (mAdministratorUids.length == 0) {
            sb.append(" AdministratorUids: ").append(Arrays.toString(mAdministratorUids));
        }

        if (null != mSSID) {
+6 −5
Original line number Diff line number Diff line
@@ -1669,7 +1669,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        if (newNc.getNetworkSpecifier() != null) {
            newNc.setNetworkSpecifier(newNc.getNetworkSpecifier().redact());
        }
        newNc.setAdministratorUids(Collections.EMPTY_LIST);
        newNc.setAdministratorUids(new int[0]);

        return newNc;
    }
@@ -1730,7 +1730,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            nc.setSingleUid(callerUid);
        }
        nc.setRequestorUidAndPackageName(callerUid, callerPackageName);
        nc.setAdministratorUids(Collections.EMPTY_LIST);
        nc.setAdministratorUids(new int[0]);

        // Clear owner UID; this can never come from an app.
        nc.setOwnerUid(INVALID_UID);
@@ -7911,7 +7911,7 @@ public class ConnectivityService extends IConnectivityManager.Stub

    private void clearNetworkCapabilitiesUids(@NonNull NetworkCapabilities nc) {
        nc.setUids(null);
        nc.setAdministratorUids(Collections.EMPTY_LIST);
        nc.setAdministratorUids(new int[0]);
        nc.setOwnerUid(Process.INVALID_UID);
    }

@@ -7958,8 +7958,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
        }

        // Administrator UIDs also contains the Owner UID
        if (nai.networkCapabilities.getAdministratorUids().contains(callbackUid)) {
            return true;
        final int[] administratorUids = nai.networkCapabilities.getAdministratorUids();
        for (final int uid : administratorUids) {
            if (uid == callbackUid) return true;
        }

        return false;
+1 −10
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@ import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;

@@ -250,7 +249,7 @@ class TestNetworkService extends ITestNetworkManager.Stub {
        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED);
        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
        nc.setNetworkSpecifier(new StringNetworkSpecifier(iface));
        nc.setAdministratorUids(intArrayToList(administratorUids));
        nc.setAdministratorUids(administratorUids);
        if (!isMetered) {
            nc.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
        }
@@ -293,14 +292,6 @@ class TestNetworkService extends ITestNetworkManager.Stub {
        return new TestNetworkAgent(looper, context, ni, nc, lp, callingUid, binder);
    }

    private List<Integer> intArrayToList(@NonNull int[] array) {
        final List<Integer> list = new ArrayList<>(array.length);
        for (final int i : array) {
            list.add(i);
        }
        return list;
    }

    /**
     * Sets up a Network with extremely limited privileges, guarded by the MANAGE_TEST_NETWORKS
     * permission.
+4 −4
Original line number Diff line number Diff line
@@ -6876,7 +6876,7 @@ public class ConnectivityServiceTest {
    @Test
    public void testCheckConnectivityDiagnosticsPermissionsNetworkAdministrator() throws Exception {
        final NetworkCapabilities nc = new NetworkCapabilities();
        nc.setAdministratorUids(Arrays.asList(Process.myUid()));
        nc.setAdministratorUids(new int[] {Process.myUid()});
        final NetworkAgentInfo naiWithUid =
                new NetworkAgentInfo(
                        null, null, null, null, null, nc, 0, mServiceContext, null, null,
@@ -6898,7 +6898,7 @@ public class ConnectivityServiceTest {
    public void testCheckConnectivityDiagnosticsPermissionsFails() throws Exception {
        final NetworkCapabilities nc = new NetworkCapabilities();
        nc.setOwnerUid(Process.myUid());
        nc.setAdministratorUids(Arrays.asList(Process.myUid()));
        nc.setAdministratorUids(new int[] {Process.myUid()});
        final NetworkAgentInfo naiWithUid =
                new NetworkAgentInfo(
                        null, null, null, null, null, nc, 0, mServiceContext, null, null,
@@ -6951,7 +6951,7 @@ public class ConnectivityServiceTest {
                argThat(report -> {
                    final NetworkCapabilities nc = report.getNetworkCapabilities();
                    return nc.getUids() == null
                            && nc.getAdministratorUids().isEmpty()
                            && nc.getAdministratorUids().length == 0
                            && nc.getOwnerUid() == Process.INVALID_UID;
                }));
    }
@@ -6972,7 +6972,7 @@ public class ConnectivityServiceTest {
                argThat(report -> {
                    final NetworkCapabilities nc = report.getNetworkCapabilities();
                    return nc.getUids() == null
                            && nc.getAdministratorUids().isEmpty()
                            && nc.getAdministratorUids().length == 0
                            && nc.getOwnerUid() == Process.INVALID_UID;
                }));
    }