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

Commit 252102d5 authored by Jackal Guo's avatar Jackal Guo Committed by Android (Google) Code Review
Browse files

Merge "Apply package visibility to getUidForSharedUser"

parents d18c61ae 6f2a341b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1061,7 +1061,7 @@ public class ApplicationPackageManager extends PackageManager {
            throws NameNotFoundException {
        try {
            int uid = mPM.getUidForSharedUser(sharedUserName);
            if(uid != -1) {
            if (uid != Process.INVALID_UID) {
                return uid;
            }
        } catch (RemoteException e) {
+10 −8
Original line number Diff line number Diff line
@@ -10060,24 +10060,26 @@ public class PackageManagerService extends IPackageManager.Stub
    @Override
    public int getUidForSharedUser(String sharedUserName) {
        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
            return -1;
        }
        if (sharedUserName == null) {
            return -1;
            return Process.INVALID_UID;
        }
        final int callingUid = Binder.getCallingUid();
        if (getInstantAppPackageName(callingUid) != null) {
            return Process.INVALID_UID;
        }
        // reader
        synchronized (mLock) {
            SharedUserSetting suid;
            try {
                suid = mSettings.getSharedUserLPw(sharedUserName, 0, 0, false);
                if (suid != null) {
                final SharedUserSetting suid = mSettings.getSharedUserLPw(sharedUserName,
                        0 /* pkgFlags */, 0 /* pkgPrivateFlags */, false /* create */);
                if (suid != null && !shouldFilterApplicationLocked(suid, callingUid,
                        UserHandle.getUserId(callingUid))) {
                    return suid.userId;
                }
            } catch (PackageManagerException ignore) {
                // can't happen, but, still need to catch it
            }
            return -1;
            return Process.INVALID_UID;
        }
    }
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
        <option name="push" value="AppEnumerationSyncProviderTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationSyncProviderTestApp.apk" />
        <option name="push" value="AppEnumerationHasAppOpPermissionTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationHasAppOpPermissionTestApp.apk" />
        <option name="push" value="AppEnumerationSharedUserTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationSharedUserTestApp.apk" />
    </target_preparer>

    <option name="test-tag" value="AppEnumerationInternalTest" />
+22 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static com.google.common.truth.Truth.assertThat;
import android.app.AppGlobals;
import android.content.pm.IPackageManager;
import android.content.pm.ProviderInfo;
import android.os.Process;

import androidx.test.runner.AndroidJUnit4;

@@ -45,14 +46,18 @@ public class AppEnumerationInternalTests {
            TEST_DATA_PATH + "AppEnumerationSyncProviderTestApp.apk";
    private static final String HAS_APPOP_PERMISSION_APK_PATH =
            TEST_DATA_PATH + "AppEnumerationHasAppOpPermissionTestApp.apk";
    private static final String SHARED_USER_APK_PATH =
            TEST_DATA_PATH + "AppEnumerationSharedUserTestApp.apk";

    private static final String TARGET_SYNC_PROVIDER = "com.android.appenumeration.syncprovider";
    private static final String TARGET_HAS_APPOP_PERMISSION =
            "com.android.appenumeration.hasappoppermission";
    private static final String TARGET_SHARED_USER = "com.android.appenumeration.shareduid";

    private static final String SYNC_PROVIDER_AUTHORITY = TARGET_SYNC_PROVIDER;
    private static final String PERMISSION_REQUEST_INSTALL_PACKAGES =
            "android.permission.REQUEST_INSTALL_PACKAGES";
    private static final String SHARED_USER_NAME = "com.android.appenumeration.shareduid";

    private IPackageManager mIPackageManager;

@@ -65,6 +70,7 @@ public class AppEnumerationInternalTests {
    public void tearDown() throws Exception {
        uninstallPackage(TARGET_SYNC_PROVIDER);
        uninstallPackage(TARGET_HAS_APPOP_PERMISSION);
        uninstallPackage(TARGET_SHARED_USER);
    }

    @Test
@@ -111,6 +117,22 @@ public class AppEnumerationInternalTests {
        assertThat(packageNames).asList().doesNotContain(TARGET_HAS_APPOP_PERMISSION);
    }

    @Test
    public void getUidForSharedUser_canSeeForceQueryable() throws Exception {
        installPackage(SHARED_USER_APK_PATH, true /* forceQueryable */);

        final int uid = mIPackageManager.getUidForSharedUser(SHARED_USER_NAME);
        assertThat(uid).isGreaterThan(Process.FIRST_APPLICATION_UID);
    }

    @Test
    public void getUidForSharedUser_cannotSeeSharedUser() throws Exception {
        installPackage(SHARED_USER_APK_PATH, false /* forceQueryable */);

        final int uid = mIPackageManager.getUidForSharedUser(SHARED_USER_NAME);
        assertThat(uid).isEqualTo(Process.INVALID_UID);
    }

    private static void installPackage(String apkPath, boolean forceQueryable) {
        final StringBuilder cmd = new StringBuilder("pm install ");
        if (forceQueryable) {
+14 −0
Original line number Diff line number Diff line
@@ -48,3 +48,17 @@ android_test_helper_app {
    test_suites: ["device-tests"],
    platform_apis: true,
}

android_test_helper_app {
    name: "AppEnumerationSharedUserTestApp",
    srcs: ["src/**/*.java"],
    manifest: "AndroidManifest-sharedUser.xml",
    dex_preopt: {
        enabled: false,
    },
    optimize: {
        enabled: false,
    },
    test_suites: ["device-tests"],
    platform_apis: true,
}
Loading