From b8789dd9cd77175980acae13137704eab02d8a32 Mon Sep 17 00:00:00 2001 From: Jaekyun Seok Date: Mon, 20 Feb 2017 11:25:07 +0900 Subject: [PATCH] Allow default permission exceptions to be read from vendor partition 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 --- .../pm/DefaultPermissionGrantPolicy.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java index 06b6f66203aa4..6365d1581cee2 100644 --- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java @@ -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 File[] getDefaultPermissionFiles() { + ArrayList ret = new ArrayList(); + File dir = new File(Environment.getRootDirectory(), "etc/default-permissions"); + 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]); + } + private @NonNull ArrayMap> readDefaultPermissionExceptionsLPw() { - File dir = new File(Environment.getRootDirectory(), "etc/default-permissions"); - if (!dir.exists() || !dir.isDirectory() || !dir.canRead()) { - return new ArrayMap<>(0); - } - - File[] files = dir.listFiles(); + 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()) {