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

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

Merge "Change NetworkCapabilties administrator UIDs to be stored as int[]." am: 70a08d9f

Change-Id: I4f0c145c08a1e4fef7badcd6476d4a69808f15c1
parents 886ad7bb 70a08d9f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -4658,11 +4658,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
@@ -1671,7 +1671,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;
    }
@@ -1732,7 +1732,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);
@@ -7902,7 +7902,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);
    }

@@ -7952,8 +7952,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
@@ -56,7 +56,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;

@@ -251,7 +250,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);
        }
@@ -294,14 +293,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
@@ -6870,7 +6870,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,
@@ -6892,7 +6892,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,
@@ -6945,7 +6945,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;
                }));
    }
@@ -6966,7 +6966,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;
                }));
    }