OSDN Git Service

Allow default permission exceptions to be read from vendor partition
authorJaekyun Seok <jaekyun@google.com>
Mon, 20 Feb 2017 02:25:07 +0000 (11:25 +0900)
committerJaekyun Seok <jaekyun@google.com>
Mon, 20 Feb 2017 02:25:07 +0000 (11:25 +0900)
Soc vendors should be allowed to add their own default permission
exceptions because they can install their own apps in /vendor/app.

Test: building succeeded and tested on sailfish.
Bug: 35369237
Change-Id: I7fd0044f4edee6524232c6f8d77481c26535e1d6

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

index 06b6f66..6365d15 100644 (file)
@@ -59,6 +59,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -1035,14 +1036,22 @@ final class DefaultPermissionGrantPolicy {
         }
     }
 
-    private @NonNull ArrayMap<String, List<DefaultPermissionGrant>>
-            readDefaultPermissionExceptionsLPw() {
+    private File[] getDefaultPermissionFiles() {
+        ArrayList<File> ret = new ArrayList<File>();
         File dir = new File(Environment.getRootDirectory(), "etc/default-permissions");
-        if (!dir.exists() || !dir.isDirectory() || !dir.canRead()) {
-            return new ArrayMap<>(0);
+        if (dir.isDirectory() && dir.canRead()) {
+            Collections.addAll(ret, dir.listFiles());
+        }
+        dir = new File(Environment.getVendorDirectory(), "etc/default-permissions");
+        if (dir.isDirectory() && dir.canRead()) {
+            Collections.addAll(ret, dir.listFiles());
         }
+        return ret.isEmpty() ? null : ret.toArray(new File[0]);
+    }
 
-        File[] files = dir.listFiles();
+    private @NonNull ArrayMap<String, List<DefaultPermissionGrant>>
+            readDefaultPermissionExceptionsLPw() {
+        File[] files = getDefaultPermissionFiles();
         if (files == null) {
             return new ArrayMap<>(0);
         }
@@ -1052,7 +1061,7 @@ final class DefaultPermissionGrantPolicy {
         // Iterate over the files in the directory and scan .xml files
         for (File file : files) {
             if (!file.getPath().endsWith(".xml")) {
-                Slog.i(TAG, "Non-xml file " + file + " in " + dir + " directory, ignoring");
+                Slog.i(TAG, "Non-xml file " + file + " in " + file.getParent() + " directory, ignoring");
                 continue;
             }
             if (!file.canRead()) {