diff --git a/frameworks/base/services/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
index cfeaede43..fcf02f041 100755
--- a/frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
+++ b/frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
@@ -1774,7 +1774,35 @@ public class PackageManagerService extends IPackageManager.Stub {
}
mSettings.removePackageLPw(ps.name);
}
+ void readVendorPermissions() {
+ File libraryDir = new File("/vendor/", "etc/permissions");
+ if (!libraryDir.exists() || !libraryDir.isDirectory()) {
+ Slog.w(TAG, "No directory " + libraryDir + ", skipping");
+ return;
+ }
+ if (!libraryDir.canRead()) {
+ Slog.w(TAG, "Directory " + libraryDir + " cannot be read");
+ return;
+ }
+ // Iterate over the files in the directory and scan .xml files
+ for (File f : libraryDir.listFiles()) {
+ // We'll read platform.xml last
+ if (f.getPath().endsWith("etc/permissions/platform.xml")) {
+ continue;
+ }
+
+ if (!f.getPath().endsWith(".xml")) {
+ Slog.i(TAG, "Non-xml file " + f + " in " + libraryDir + " directory, ignoring");
+ continue;
+ }
+ if (!f.canRead()) {
+ Slog.w(TAG, "Permissions library file " + f + " cannot be read");
+ continue;
+ }
+ readPermissionsFromXml(f);
+ }
+ }
void readPermissions() {
// Read permissions from .../etc/permission directory.
File libraryDir = new File(Environment.getRootDirectory(), "etc/permissions");
@@ -1805,7 +1833,7 @@ public class PackageManagerService extends IPackageManager.Stub {
readPermissionsFromXml(f);
}
-
+ readVendorPermissions();
// Read permissions from .../etc/permissions/platform.xml last so it will take precedence
final File permFile = new File(Environment.getRootDirectory(),
"etc/permissions/platform.xml");