New API for getting uids have specific permissions from SystemConfig
SysetmConfig is internal service for frameworks only which cannot use by Connectivity mainline module, but PermissionMonitor which is part of the module needs to get uids that have been granted INTERNET/UPDATE_DEVICE_STATS permission from SystemConfig. Therefore, add a new API to SystemConfigManager that can get these uids from SysetmConfig. Bug: 177188455 Test: atest SystemConfigTest Change-Id: I62bdd969b1b813631ed6223df97bda21a39aec2c
This commit is contained in:
@@ -7503,6 +7503,7 @@ package android.os {
|
||||
public class SystemConfigManager {
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Set<java.lang.String> getDisabledUntilUsedPreinstalledCarrierApps();
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public int[] getSystemPermissionUids(@NonNull String);
|
||||
}
|
||||
|
||||
public class SystemProperties {
|
||||
|
||||
@@ -35,4 +35,9 @@ interface ISystemConfig {
|
||||
* @see SystemConfigManager#getDisabledUntilUsedPreinstalledCarrierAssociatedAppEntries
|
||||
*/
|
||||
Map getDisabledUntilUsedPreinstalledCarrierAssociatedAppEntries();
|
||||
|
||||
/**
|
||||
* @see SystemConfigManager#getSystemPermissionUids
|
||||
*/
|
||||
int[] getSystemPermissionUids(String permissionName);
|
||||
}
|
||||
|
||||
@@ -111,4 +111,22 @@ public class SystemConfigManager {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get uids which have been granted given permission in system configuration.
|
||||
*
|
||||
* The uids and assigning permissions are defined on data/etc/platform.xml
|
||||
*
|
||||
* @param permissionName The target permission.
|
||||
* @return The uids have been granted given permission in system configuration.
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS)
|
||||
@NonNull
|
||||
public int[] getSystemPermissionUids(@NonNull String permissionName) {
|
||||
try {
|
||||
return mInterface.getSystemPermissionUids(permissionName);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,10 @@ import static java.util.stream.Collectors.toMap;
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.os.ISystemConfig;
|
||||
import android.util.ArraySet;
|
||||
import android.util.SparseArray;
|
||||
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -64,6 +68,22 @@ public class SystemConfigService extends SystemService {
|
||||
return SystemConfig.getInstance()
|
||||
.getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getSystemPermissionUids(String permissionName) {
|
||||
mContext.enforceCallingOrSelfPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS,
|
||||
"getSystemPermissionUids requires GET_RUNTIME_PERMISSIONS");
|
||||
final List<Integer> uids = new ArrayList<>();
|
||||
final SparseArray<ArraySet<String>> systemPermissions =
|
||||
SystemConfig.getInstance().getSystemPermissions();
|
||||
for (int i = 0; i < systemPermissions.size(); i++) {
|
||||
final ArraySet<String> permissions = systemPermissions.valueAt(i);
|
||||
if (permissions != null && permissions.contains(permissionName)) {
|
||||
uids.add(systemPermissions.keyAt(i));
|
||||
}
|
||||
}
|
||||
return ArrayUtils.convertToIntArray(uids);
|
||||
}
|
||||
};
|
||||
|
||||
public SystemConfigService(Context context) {
|
||||
|
||||
Reference in New Issue
Block a user