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
diff --git a/services/core/java/com/android/server/pm/DumpState.java b/services/core/java/com/android/server/pm/DumpState.java
index 89895c5..d473fbf 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 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 648522a..eaae009 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 @@
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 2a9cb89..333e8f0 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 @@
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<PermissionState> permissions = permissionsState
- .getRuntimePermissionStates(userId);
+ final List<PermissionState> 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 {