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

Commit be331a38 authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge "Add security check for clearDeviceInitializer in the service."

parents d833ba8d 1c3754a3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5458,7 +5458,7 @@ package android.app.admin {
    method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName);
    method public void addUserRestriction(android.content.ComponentName, java.lang.String);
    method public void clearCrossProfileIntentFilters(android.content.ComponentName);
    method public void clearDeviceInitializerApp();
    method public void clearDeviceInitializerApp(android.content.ComponentName);
    method public void clearDeviceOwnerApp(java.lang.String);
    method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String);
    method public void clearUserRestriction(android.content.ComponentName, java.lang.String);
+1 −1
Original line number Diff line number Diff line
@@ -5552,7 +5552,7 @@ package android.app.admin {
    method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName);
    method public void addUserRestriction(android.content.ComponentName, java.lang.String);
    method public void clearCrossProfileIntentFilters(android.content.ComponentName);
    method public void clearDeviceInitializerApp();
    method public void clearDeviceInitializerApp(android.content.ComponentName);
    method public void clearDeviceOwnerApp(java.lang.String);
    method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String);
    method public void clearProfileOwner(android.content.ComponentName);
+5 −3
Original line number Diff line number Diff line
@@ -2476,12 +2476,14 @@ public class DevicePolicyManager {
    /**
     * Removes the device initializer, so that it will not be invoked on user initialization for any
     * subsequently created users. This method can be called by either the device owner or device
     * initializer itself.
     * initializer itself. The caller must be an active administrator.
     *
     * @param who Which {@link DeviceAdminReceiver} this request is associated with.
     */
    public void clearDeviceInitializerApp() {
    public void clearDeviceInitializerApp(ComponentName who) {
        if (mService != null) {
            try {
                mService.clearDeviceInitializer(mContext.getPackageName());
                mService.clearDeviceInitializer(who);
            } catch (RemoteException re) {
                Log.w(TAG, "Failed to clear device initializer");
            }
+1 −1
Original line number Diff line number Diff line
@@ -202,7 +202,7 @@ interface IDevicePolicyManager {

    boolean setUserEnabled(in ComponentName who);
    boolean isDeviceInitializer(String packageName);
    void clearDeviceInitializer(String packageName);
    void clearDeviceInitializer(in ComponentName who);
    boolean setDeviceInitializer(in ComponentName who, in ComponentName initializer, String initializerName);
    String getDeviceInitializer();
}
+10 −4
Original line number Diff line number Diff line
@@ -3940,15 +3940,21 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
    }

    @Override
    public void clearDeviceInitializer(String packageName) {
    public void clearDeviceInitializer(ComponentName who) {
        if (!mHasFeature) {
            return;
        }
        if (packageName == null) {
            throw new NullPointerException("packageName is null");
        Preconditions.checkNotNull(who, "ComponentName is null");

        ActiveAdmin admin = getActiveAdminUncheckedLocked(who, UserHandle.getCallingUserId());

        if (admin.getUid() != Binder.getCallingUid()) {
            throw new SecurityException("Admin " + who + " is not owned by uid "
                    + Binder.getCallingUid());
        }

        if (!isDeviceInitializer(packageName) && !isDeviceOwner(packageName)) {
        if (!isDeviceInitializer(admin.info.getPackageName())
                && !isDeviceOwner(admin.info.getPackageName())) {
            throw new SecurityException(
                    "clearDeviceInitializer can only be called by the device initializer/owner");
        }