Merge "Add list of Administrator UIDs to NetworkCapabilities."
This commit is contained in:
@@ -35,6 +35,9 @@ import com.android.internal.util.Preconditions;
|
|||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
@@ -83,6 +86,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
mSignalStrength = SIGNAL_STRENGTH_UNSPECIFIED;
|
mSignalStrength = SIGNAL_STRENGTH_UNSPECIFIED;
|
||||||
mUids = null;
|
mUids = null;
|
||||||
mEstablishingVpnAppUid = INVALID_UID;
|
mEstablishingVpnAppUid = INVALID_UID;
|
||||||
|
mAdministratorUids.clear();
|
||||||
mSSID = null;
|
mSSID = null;
|
||||||
mPrivateDnsBroken = false;
|
mPrivateDnsBroken = false;
|
||||||
}
|
}
|
||||||
@@ -101,6 +105,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
mSignalStrength = nc.mSignalStrength;
|
mSignalStrength = nc.mSignalStrength;
|
||||||
setUids(nc.mUids); // Will make the defensive copy
|
setUids(nc.mUids); // Will make the defensive copy
|
||||||
mEstablishingVpnAppUid = nc.mEstablishingVpnAppUid;
|
mEstablishingVpnAppUid = nc.mEstablishingVpnAppUid;
|
||||||
|
setAdministratorUids(nc.mAdministratorUids);
|
||||||
mUnwantedNetworkCapabilities = nc.mUnwantedNetworkCapabilities;
|
mUnwantedNetworkCapabilities = nc.mUnwantedNetworkCapabilities;
|
||||||
mSSID = nc.mSSID;
|
mSSID = nc.mSSID;
|
||||||
mPrivateDnsBroken = nc.mPrivateDnsBroken;
|
mPrivateDnsBroken = nc.mPrivateDnsBroken;
|
||||||
@@ -832,6 +837,56 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
return mEstablishingVpnAppUid;
|
return mEstablishingVpnAppUid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UIDs of packages that are administrators of this network, or empty if none.
|
||||||
|
*
|
||||||
|
* <p>This field tracks the UIDs of packages that have permission to manage this network.
|
||||||
|
*
|
||||||
|
* <p>Network owners will also be listed as administrators.
|
||||||
|
*
|
||||||
|
* <p>For NetworkCapability instances being sent from the System Server, this value MUST be
|
||||||
|
* 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<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the list 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:
|
||||||
|
* <ul>
|
||||||
|
* <li>Carrier apps with privileges for the relevant subscription
|
||||||
|
* <li>Active VPN apps
|
||||||
|
* <li>Other application groups with a particular Network-related role
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* <p>In general, user-supplied networks (such as WiFi networks) do not have an administrator.
|
||||||
|
*
|
||||||
|
* <p>An app is granted owner privileges over Networks that it supplies. Owner privileges
|
||||||
|
* implicitly include administrator privileges.
|
||||||
|
*
|
||||||
|
* @param administratorUids the UIDs to be set as administrators of this Network.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi
|
||||||
|
public void setAdministratorUids(@NonNull final List<Integer> administratorUids) {
|
||||||
|
mAdministratorUids.clear();
|
||||||
|
mAdministratorUids.addAll(administratorUids);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the list of UIDs that are administrators of this Network.
|
||||||
|
*
|
||||||
|
* @return the List of UIDs that are administrators of this Network
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
@SystemApi
|
||||||
|
public List<Integer> getAdministratorUids() {
|
||||||
|
return Collections.unmodifiableList(mAdministratorUids);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Value indicating that link bandwidth is unspecified.
|
* Value indicating that link bandwidth is unspecified.
|
||||||
* @hide
|
* @hide
|
||||||
@@ -1471,6 +1526,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
public int describeContents() {
|
public int describeContents() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(Parcel dest, int flags) {
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
dest.writeLong(mNetworkCapabilities);
|
dest.writeLong(mNetworkCapabilities);
|
||||||
@@ -1484,6 +1540,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
dest.writeArraySet(mUids);
|
dest.writeArraySet(mUids);
|
||||||
dest.writeString(mSSID);
|
dest.writeString(mSSID);
|
||||||
dest.writeBoolean(mPrivateDnsBroken);
|
dest.writeBoolean(mPrivateDnsBroken);
|
||||||
|
dest.writeList(mAdministratorUids);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final @android.annotation.NonNull Creator<NetworkCapabilities> CREATOR =
|
public static final @android.annotation.NonNull Creator<NetworkCapabilities> CREATOR =
|
||||||
@@ -1504,6 +1561,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
null /* ClassLoader, null for default */);
|
null /* ClassLoader, null for default */);
|
||||||
netCap.mSSID = in.readString();
|
netCap.mSSID = in.readString();
|
||||||
netCap.mPrivateDnsBroken = in.readBoolean();
|
netCap.mPrivateDnsBroken = in.readBoolean();
|
||||||
|
netCap.setAdministratorUids(in.readArrayList(null));
|
||||||
return netCap;
|
return netCap;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@@ -1557,6 +1615,10 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
sb.append(" EstablishingAppUid: ").append(mEstablishingVpnAppUid);
|
sb.append(" EstablishingAppUid: ").append(mEstablishingVpnAppUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mAdministratorUids.isEmpty()) {
|
||||||
|
sb.append(" AdministratorUids: ").append(mAdministratorUids);
|
||||||
|
}
|
||||||
|
|
||||||
if (null != mSSID) {
|
if (null != mSSID) {
|
||||||
sb.append(" SSID: ").append(mSSID);
|
sb.append(" SSID: ").append(mSSID);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -212,6 +212,7 @@ import java.net.UnknownHostException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.ConcurrentModificationException;
|
import java.util.ConcurrentModificationException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -1634,6 +1635,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
if (newNc.getNetworkSpecifier() != null) {
|
if (newNc.getNetworkSpecifier() != null) {
|
||||||
newNc.setNetworkSpecifier(newNc.getNetworkSpecifier().redact());
|
newNc.setNetworkSpecifier(newNc.getNetworkSpecifier().redact());
|
||||||
}
|
}
|
||||||
|
newNc.setAdministratorUids(Collections.EMPTY_LIST);
|
||||||
return newNc;
|
return newNc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1664,6 +1666,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
if (!checkSettingsPermission()) {
|
if (!checkSettingsPermission()) {
|
||||||
nc.setSingleUid(Binder.getCallingUid());
|
nc.setSingleUid(Binder.getCallingUid());
|
||||||
}
|
}
|
||||||
|
nc.setAdministratorUids(Collections.EMPTY_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restrictBackgroundRequestForCaller(NetworkCapabilities nc) {
|
private void restrictBackgroundRequestForCaller(NetworkCapabilities nc) {
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ public class NetworkCapabilitiesTest {
|
|||||||
.addCapability(NET_CAPABILITY_NOT_METERED);
|
.addCapability(NET_CAPABILITY_NOT_METERED);
|
||||||
assertParcelingIsLossless(netCap);
|
assertParcelingIsLossless(netCap);
|
||||||
netCap.setSSID(TEST_SSID);
|
netCap.setSSID(TEST_SSID);
|
||||||
assertParcelSane(netCap, 12);
|
assertParcelSane(netCap, 13);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user