diff options
3 files changed, 21 insertions, 6 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 52effb3d4258..bb1784af6c85 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -14075,11 +14075,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 1727e75afe43..bce559396ddd 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]*"); |