summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Pape <mpape@google.com> 2019-01-04 08:10:41 -0800
committer Matt Pape <mpape@google.com> 2019-01-04 08:10:41 -0800
commit7b1c6cda12c7d687cef7c87f1031325e118214c3 (patch)
treeafb01d6dd55e5a87202a3bddadc3cb06456f4577
parent12278ded88e74db09a1624bd49cff322df33b88c (diff)
Update DeviceConfigService to pass Settings.AUTHORITY to IContentProvider.call invocations.
Also update SettingsProvider to resolve calling packages based on uids when receiving calls to put or reset values in the config table. This was necessary because the command line tool calls the DeviceConfig API, which calls through to SettingsProvider. That was resulting in a shell uid with an android package prior to this change. Test: atest SettingsProviderTest:DeviceConfigServiceTest Bug: 122304633 Change-Id: Ic80c734eb75dcaac688507c241b0995b7488a84f
-rw-r--r--core/java/android/provider/Settings.java3
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java4
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java20
3 files changed, 21 insertions, 6 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 65514b6f1872..81bc36506824 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -14070,11 +14070,10 @@ public final class Settings {
try {
Bundle arg = new Bundle();
arg.putInt(CALL_METHOD_USER_KEY, resolver.getUserId());
- arg.putInt(Settings.CALL_METHOD_RESET_MODE_KEY, resetMode);
+ arg.putInt(CALL_METHOD_RESET_MODE_KEY, resetMode);
if (prefix != null) {
arg.putString(Settings.CALL_METHOD_PREFIX_KEY, prefix);
}
- arg.putInt(CALL_METHOD_RESET_MODE_KEY, resetMode);
IContentProvider cp = sProviderHolder.getProvider(resolver);
cp.call(resolver.getPackageName(), sProviderHolder.mUri.getAuthority(),
CALL_METHOD_RESET_CONFIG, null, arg);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java b/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java
index f2b2719f2ee6..d0ffe7ae8c7e 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java
@@ -242,7 +242,7 @@ public final class DeviceConfigService extends Binder {
Bundle args = new Bundle();
args.putInt(Settings.CALL_METHOD_USER_KEY,
ActivityManager.getService().getCurrentUser().id);
- Bundle b = provider.call(resolveCallingPackage(),
+ Bundle b = provider.call(resolveCallingPackage(), Settings.AUTHORITY,
Settings.CALL_METHOD_DELETE_CONFIG, compositeKey, args);
success = (b != null && b.getInt(SettingsProvider.RESULT_ROWS_DELETED) == 1);
} catch (RemoteException e) {
@@ -261,7 +261,7 @@ public final class DeviceConfigService extends Binder {
if (namespace != null) {
args.putString(Settings.CALL_METHOD_PREFIX_KEY, namespace);
}
- Bundle b = provider.call(resolveCallingPackage(),
+ Bundle b = provider.call(resolveCallingPackage(), Settings.AUTHORITY,
Settings.CALL_METHOD_LIST_CONFIG, null, args);
if (b != null) {
Map<String, String> flagsToValues =
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index ce529a085e77..19ce2803fd60 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -1097,7 +1097,7 @@ public class SettingsProvider extends ContentProvider {
case MUTATION_OPERATION_INSERT: {
return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_CONFIG,
UserHandle.USER_SYSTEM, name, value, null, makeDefault, true,
- getCallingPackage(), false, null);
+ resolveCallingPackage(), false, null);
}
case MUTATION_OPERATION_DELETE: {
@@ -1107,7 +1107,7 @@ public class SettingsProvider extends ContentProvider {
case MUTATION_OPERATION_RESET: {
mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_CONFIG,
- UserHandle.USER_SYSTEM, getCallingPackage(), mode, null, prefix);
+ UserHandle.USER_SYSTEM, resolveCallingPackage(), mode, null, prefix);
} return true;
}
}
@@ -2247,6 +2247,22 @@ public class SettingsProvider extends ContentProvider {
return !(TextUtils.isEmpty(key) || SettingsState.isBinary(key));
}
+ private String resolveCallingPackage() {
+ switch (Binder.getCallingUid()) {
+ case Process.ROOT_UID: {
+ return "root";
+ }
+
+ case Process.SHELL_UID: {
+ return "com.android.shell";
+ }
+
+ default: {
+ return getCallingPackage();
+ }
+ }
+ }
+
private static final class Arguments {
private static final Pattern WHERE_PATTERN_WITH_PARAM_NO_BRACKETS =
Pattern.compile("[\\s]*name[\\s]*=[\\s]*\\?[\\s]*");