Skip to content

Commit b739467

Browse files
Dianne HackbornAndroid (Google) Code Review
authored andcommitted
Merge "Work on issue #22303510: Additional permissions aren't properly..." into mnc-dev
2 parents ada70be + cfbfafe commit b739467

5 files changed

Lines changed: 70 additions & 23 deletions

File tree

api/current.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9445,6 +9445,7 @@ package android.content.pm {
94459445
method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
94469446
field public static final android.os.Parcelable.Creator<android.content.pm.PermissionInfo> CREATOR;
94479447
field public static final int FLAG_COSTS_MONEY = 1; // 0x1
9448+
field public static final int FLAG_INSTALLED = 1073741824; // 0x40000000
94489449
field public static final int PROTECTION_DANGEROUS = 1; // 0x1
94499450
field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
94509451
field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20

api/system-current.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9783,6 +9783,7 @@ package android.content.pm {
97839783
method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
97849784
field public static final android.os.Parcelable.Creator<android.content.pm.PermissionInfo> CREATOR;
97859785
field public static final int FLAG_COSTS_MONEY = 1; // 0x1
9786+
field public static final int FLAG_INSTALLED = 1073741824; // 0x40000000
97869787
field public static final int PROTECTION_DANGEROUS = 1; // 0x1
97879788
field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
97889789
field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20

core/java/android/content/pm/PermissionInfo.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,10 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
145145
public static final int FLAG_COSTS_MONEY = 1<<0;
146146

147147
/**
148-
* Flag for {@link #protectionLevel}, corresponding
149-
* to the <code>hide</code> value of
150-
* {@link android.R.attr#permissionFlags}.
151-
* @hide
148+
* Flag for {@link #flags}, indicating that this permission has been
149+
* installed into the system's globally defined permissions.
152150
*/
153-
public static final int PROTECTION_FLAG_HIDE = 1<<1;
151+
public static final int FLAG_INSTALLED = 1<<30;
154152

155153
/**
156154
* Additional flags about this permission as given by
@@ -210,6 +208,15 @@ public static String protectionToString(int level) {
210208
if ((level&PermissionInfo.PROTECTION_FLAG_PRE23) != 0) {
211209
protLevel += "|pre23";
212210
}
211+
if ((level&PermissionInfo.PROTECTION_FLAG_INSTALLER) != 0) {
212+
protLevel += "|installer";
213+
}
214+
if ((level&PermissionInfo.PROTECTION_FLAG_VERIFIER) != 0) {
215+
protLevel += "|verifier";
216+
}
217+
if ((level&PermissionInfo.PROTECTION_FLAG_PREINSTALLED) != 0) {
218+
protLevel += "|preinstalled";
219+
}
213220
return protLevel;
214221
}
215222

services/core/java/com/android/server/pm/PackageManagerService.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7321,6 +7321,9 @@ private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg, int
73217321
for (i=0; i<N; i++) {
73227322
PackageParser.Permission p = pkg.permissions.get(i);
73237323

7324+
// Assume by default that we did not install this permission into the system.
7325+
p.info.flags &= ~PermissionInfo.FLAG_INSTALLED;
7326+
73247327
// Now that permission groups have a special meaning, we ignore permission
73257328
// groups for legacy apps to prevent unexpected behavior. In particular,
73267329
// permissions for one app being granted to someone just becuase they happen
@@ -7350,6 +7353,7 @@ private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg, int
73507353
bp.perm = p;
73517354
bp.uid = pkg.applicationInfo.uid;
73527355
bp.sourcePackage = p.info.packageName;
7356+
p.info.flags |= PermissionInfo.FLAG_INSTALLED;
73537357
} else if (!currentOwnerIsSystem) {
73547358
String msg = "New decl " + p.owner + " of permission "
73557359
+ p.info.name + " is system; overriding " + bp.sourcePackage;
@@ -7375,6 +7379,7 @@ private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg, int
73757379
bp.perm = p;
73767380
bp.uid = pkg.applicationInfo.uid;
73777381
bp.sourcePackage = p.info.packageName;
7382+
p.info.flags |= PermissionInfo.FLAG_INSTALLED;
73787383
if ((parseFlags&PackageParser.PARSE_CHATTY) != 0) {
73797384
if (r == null) {
73807385
r = new StringBuilder(256);
@@ -14688,12 +14693,12 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
1468814693
pw.println(" s[hared-users]: dump shared user IDs");
1468914694
pw.println(" m[essages]: print collected runtime messages");
1469014695
pw.println(" v[erifiers]: print package verifier info");
14696+
pw.println(" d[omain-preferred-apps]: print domains preferred apps");
14697+
pw.println(" i[ntent-filter-verifiers]|ifv: print intent filter verifier info");
1469114698
pw.println(" version: print database version info");
1469214699
pw.println(" write: write current settings now");
14693-
pw.println(" <package.name>: info about given package");
1469414700
pw.println(" installs: details about install sessions");
14695-
pw.println(" d[omain-preferred-apps]: print domains preferred apps");
14696-
pw.println(" i[ntent-filter-verifiers]|ifv: print intent filter verifier info");
14701+
pw.println(" <package.name>: info about given package");
1469714702
return;
1469814703
} else if ("--checkin".equals(opt)) {
1469914704
checkin = true;

services/core/java/com/android/server/pm/Settings.java

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4120,6 +4120,28 @@ void dumpPackageLPr(PrintWriter pw, String prefix, String checkinTag,
41204120
pw.print(prefix); pw.print(" pkgFlags="); printFlags(pw, ps.pkgFlags, FLAG_DUMP_SPEC);
41214121
pw.println();
41224122

4123+
if (ps.pkg != null && ps.pkg.permissions != null && ps.pkg.permissions.size() > 0) {
4124+
final ArrayList<PackageParser.Permission> perms = ps.pkg.permissions;
4125+
pw.print(prefix); pw.println(" declared permissions:");
4126+
for (int i=0; i<perms.size(); i++) {
4127+
PackageParser.Permission perm = perms.get(i);
4128+
if (permissionNames != null
4129+
&& !permissionNames.contains(perm.info.name)) {
4130+
continue;
4131+
}
4132+
pw.print(prefix); pw.print(" "); pw.print(perm.info.name);
4133+
pw.print(": prot=");
4134+
pw.print(PermissionInfo.protectionToString(perm.info.protectionLevel));
4135+
if ((perm.info.flags&PermissionInfo.FLAG_COSTS_MONEY) != 0) {
4136+
pw.print(", COSTS_MONEY");
4137+
}
4138+
if ((perm.info.flags&PermissionInfo.FLAG_INSTALLED) != 0) {
4139+
pw.print(", INSTALLED");
4140+
}
4141+
pw.println();
4142+
}
4143+
}
4144+
41234145
if (ps.sharedUser == null || permissionNames != null) {
41244146
PermissionsState permissionsState = ps.getPermissionsState();
41254147
dumpInstallPermissionsLPr(pw, prefix + " ", permissionNames, permissionsState);
@@ -4155,14 +4177,14 @@ void dumpPackageLPr(PrintWriter pw, String prefix, String checkinTag,
41554177
if (cmp != null && cmp.size() > 0) {
41564178
pw.print(prefix); pw.println(" disabledComponents:");
41574179
for (String s : cmp) {
4158-
pw.print(prefix); pw.print(" "); pw.println(s);
4180+
pw.print(prefix); pw.print(" "); pw.println(s);
41594181
}
41604182
}
41614183
cmp = ps.getEnabledComponents(user.id);
41624184
if (cmp != null && cmp.size() > 0) {
41634185
pw.print(prefix); pw.println(" enabledComponents:");
41644186
for (String s : cmp) {
4165-
pw.print(prefix); pw.print(" "); pw.println(s);
4187+
pw.print(prefix); pw.print(" "); pw.println(s);
41664188
}
41674189
}
41684190
}
@@ -4267,11 +4289,14 @@ void dumpPermissionsLPr(PrintWriter pw, String packageName, ArraySet<String> per
42674289
pw.print(" type="); pw.print(p.type);
42684290
pw.print(" prot=");
42694291
pw.println(PermissionInfo.protectionToString(p.protectionLevel));
4270-
if (p.packageSetting != null) {
4271-
pw.print(" packageSetting="); pw.println(p.packageSetting);
4272-
}
42734292
if (p.perm != null) {
42744293
pw.print(" perm="); pw.println(p.perm);
4294+
if (p.perm.info.flags != PermissionInfo.FLAG_INSTALLED) {
4295+
pw.print(" flags=0x"); pw.println(Integer.toHexString(p.perm.info.flags));
4296+
}
4297+
}
4298+
if (p.packageSetting != null) {
4299+
pw.print(" packageSetting="); pw.println(p.packageSetting);
42754300
}
42764301
if (READ_EXTERNAL_STORAGE.equals(p.name)) {
42774302
pw.print(" enforced=");
@@ -4372,24 +4397,32 @@ void dumpRuntimePermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> p
43724397
continue;
43734398
}
43744399
pw.print(prefix); pw.print(" "); pw.print(permissionState.getName());
4375-
pw.print(", granted="); pw.print(permissionState.isGranted());
4376-
pw.print(", flags="); pw.println(permissionFlagsToString(
4377-
permissionState.getFlags()));
4400+
pw.print(": granted="); pw.print(permissionState.isGranted());
4401+
pw.println(permissionFlagsToString(", flags=",
4402+
permissionState.getFlags()));
43784403
}
43794404
}
43804405
}
43814406

4382-
private static String permissionFlagsToString(int flags) {
4383-
StringBuilder flagsString = new StringBuilder();
4384-
flagsString.append("[ ");
4407+
private static String permissionFlagsToString(String prefix, int flags) {
4408+
StringBuilder flagsString = null;
43854409
while (flags != 0) {
4410+
if (flagsString == null) {
4411+
flagsString = new StringBuilder();
4412+
flagsString.append(prefix);
4413+
flagsString.append("[ ");
4414+
}
43864415
final int flag = 1 << Integer.numberOfTrailingZeros(flags);
43874416
flags &= ~flag;
43884417
flagsString.append(PackageManager.permissionFlagToString(flag));
43894418
flagsString.append(' ');
43904419
}
4391-
flagsString.append(']');
4392-
return flagsString.toString();
4420+
if (flagsString != null) {
4421+
flagsString.append(']');
4422+
return flagsString.toString();
4423+
} else {
4424+
return "";
4425+
}
43934426
}
43944427

43954428
void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> permissionNames,
@@ -4403,8 +4436,8 @@ void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> p
44034436
continue;
44044437
}
44054438
pw.print(prefix); pw.print(" "); pw.print(permissionState.getName());
4406-
pw.print(", granted="); pw.print(permissionState.isGranted());
4407-
pw.print(", flags="); pw.println(permissionFlagsToString(
4439+
pw.print(": granted="); pw.print(permissionState.isGranted());
4440+
pw.println(permissionFlagsToString(", flags=",
44084441
permissionState.getFlags()));
44094442
}
44104443
}

0 commit comments

Comments
 (0)