From 66fe5244ad2916c4ec9c7eda977df234fb88d572 Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Fri, 31 May 2019 15:13:31 -0700 Subject: [PATCH] Fix testNetworkSettingsPermission for headless User 0 This test fails on devices with headless user 0 when it tries to verify apps with android:sharedUserId="android.uid.system" (and without explicit ask for NETWORK_SETTINGS). Such apps get this permission by default, but when running on user 1 they get UID 1001000, what doesn't match SYSTEM_UID=1000. By the chance of modifying this code, let's also add more verbose error message (with UID), simplify it and reduce indentation count. Bug: 120143468 Test: atest android.net.wifi.cts.WifiManagerTest#testNetworkSettingsPermission Change-Id: Ifc09320cf738a518003126fad1ce31f5e38a3aff --- tests/cts/net/AndroidManifest.xml | 1 + .../android/net/wifi/cts/WifiManagerTest.java | 30 +++++++++---------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/tests/cts/net/AndroidManifest.xml b/tests/cts/net/AndroidManifest.xml index 44a00ef619..c2b3bf77ad 100644 --- a/tests/cts/net/AndroidManifest.xml +++ b/tests/cts/net/AndroidManifest.xml @@ -27,6 +27,7 @@ + diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java index 75764508c8..fbf1abd3b8 100644 --- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java +++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java @@ -36,6 +36,7 @@ import android.net.wifi.hotspot2.pps.Credential; import android.net.wifi.hotspot2.pps.HomeSp; import android.os.Process; import android.os.SystemClock; +import android.os.UserHandle; import android.platform.test.annotations.AppModeFull; import android.provider.Settings; import android.support.test.uiautomator.UiDevice; @@ -770,21 +771,20 @@ public class WifiManagerTest extends AndroidTestCase { }, PackageManager.MATCH_UNINSTALLED_PACKAGES); for (PackageInfo pi : holding) { String packageName = pi.packageName; - if (allowedPackages.contains(packageName)) { - // this is an explicitly allowed package - } else { - // now check if the packages are from allowed UIDs - boolean allowed = false; - try { - if (allowedUIDs.contains(pm.getPackageUid(packageName, 0))) { - allowed = true; - Log.d(TAG, packageName + " is on an allowed UID"); - } - } catch (PackageManager.NameNotFoundException e) { } - if (!allowed) { - fail("The NETWORK_SETTINGS permission must not be held by " - + packageName + " and must be revoked for security reasons"); - } + + // this is an explicitly allowed package + if (allowedPackages.contains(packageName)) continue; + + // now check if the packages are from allowed UIDs + int uid = -1; + try { + uid = pm.getPackageUidAsUser(packageName, UserHandle.USER_SYSTEM); + } catch (PackageManager.NameNotFoundException e) { + continue; + } + if (!allowedUIDs.contains(uid)) { + fail("The NETWORK_SETTINGS permission must not be held by " + packageName + + ":" + uid + " and must be revoked for security reasons"); } } }