From 0d80c4117eb44efacf11d2235eba2fb56a3bf71a Mon Sep 17 00:00:00 2001 From: Todd Kennedy Date: Fri, 10 May 2019 08:23:06 -0700 Subject: [PATCH] Dump package settings for shared users Bug: 111075456 Test: Manual. Builds and runs. Test: 'adb shell dumpsys package shared-users' dumps package settings Change-Id: I1cc8a65947c9b4087ad8c3806fafd1d1a7f6e8aa --- .../java/com/android/server/pm/DumpState.java | 1 + .../server/pm/PackageManagerService.java | 3 ++ .../java/com/android/server/pm/Settings.java | 28 +++++++++++++++---- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/pm/DumpState.java b/services/core/java/com/android/server/pm/DumpState.java index 89895c5232754..d473fbf5ed51f 100644 --- a/services/core/java/com/android/server/pm/DumpState.java +++ b/services/core/java/com/android/server/pm/DumpState.java @@ -45,6 +45,7 @@ public final class DumpState { public static final int OPTION_SHOW_FILTERS = 1 << 0; public static final int OPTION_DUMP_ALL_COMPONENTS = 1 << 1; + public static final int OPTION_SKIP_PERMISSIONS = 1 << 2; private int mTypes; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 648522a61dbc5..eaae00918d102 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -21822,6 +21822,9 @@ public class PackageManagerService extends IPackageManager.Stub dumpState.setDump(DumpState.DUMP_PACKAGES); } else if ("s".equals(cmd) || "shared-users".equals(cmd)) { dumpState.setDump(DumpState.DUMP_SHARED_USERS); + if (opti < args.length && "noperm".equals(args[opti])) { + dumpState.setOptionEnabled(DumpState.OPTION_SKIP_PERMISSIONS); + } } else if ("prov".equals(cmd) || "providers".equals(cmd)) { dumpState.setDump(DumpState.DUMP_PROVIDERS); } else if ("m".equals(cmd) || "messages".equals(cmd)) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 2a9cb8998cac4..333e8f0e00e90 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -4959,27 +4959,43 @@ public final class Settings { pw.println("Shared users:"); printedSomething = true; } + pw.print(" SharedUser ["); pw.print(su.name); pw.print("] ("); pw.print(Integer.toHexString(System.identityHashCode(su))); - pw.println("):"); + pw.println("):"); String prefix = " "; pw.print(prefix); pw.print("userId="); pw.println(su.userId); - PermissionsState permissionsState = su.getPermissionsState(); + pw.print(prefix); pw.println("Packages"); + final int numPackages = su.packages.size(); + for (int i = 0; i < numPackages; i++) { + final PackageSetting ps = su.packages.valueAt(i); + if (ps != null) { + pw.print(prefix + " "); pw.println(ps.toString()); + } else { + pw.print(prefix + " "); pw.println("NULL?!"); + } + } + + if (dumpState.isOptionEnabled(DumpState.OPTION_SKIP_PERMISSIONS)) { + continue; + } + + final PermissionsState permissionsState = su.getPermissionsState(); dumpInstallPermissionsLPr(pw, prefix, permissionNames, permissionsState); for (int userId : UserManagerService.getInstance().getUserIds()) { final int[] gids = permissionsState.computeGids(userId); - List permissions = permissionsState - .getRuntimePermissionStates(userId); + final List permissions = + permissionsState.getRuntimePermissionStates(userId); if (!ArrayUtils.isEmpty(gids) || !permissions.isEmpty()) { pw.print(prefix); pw.print("User "); pw.print(userId); pw.println(": "); dumpGidsLPr(pw, prefix + " ", gids); - dumpRuntimePermissionsLPr(pw, prefix + " ", permissionNames, permissions, - packageName != null); + dumpRuntimePermissionsLPr(pw, prefix + " ", permissionNames, + permissions, packageName != null); } } } else {