diff options
| author | Jeff Sharkey <jsharkey@android.com> | 2012-03-19 19:24:04 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-19 19:24:04 -0700 |
| commit | 09f5aededa1568f59bbe014ce5199ebca35a93b8 (patch) | |
| tree | 99ccbe34f133d94ff79a4a0f94b84d29ddd6a024 /services/java/com/android/server/pm/PackageManagerService.java | |
| parent | 975e04c24494cf4515a61f3bcf6b25fb5f565f4f (diff) | |
| parent | edc84ee8392afa0102f098168329db5bb43a6d4b (diff) | |
| download | frameworks_base-09f5aededa1568f59bbe014ce5199ebca35a93b8.zip frameworks_base-09f5aededa1568f59bbe014ce5199ebca35a93b8.tar.gz frameworks_base-09f5aededa1568f59bbe014ce5199ebca35a93b8.tar.bz2 | |
Merge "Selective enforcement of READ_EXTERNAL_STORAGE."
Diffstat (limited to 'services/java/com/android/server/pm/PackageManagerService.java')
| -rw-r--r-- | services/java/com/android/server/pm/PackageManagerService.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 9f45eff..bc98f86 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -20,6 +20,10 @@ import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED; import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER; import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; +import static android.content.pm.PackageManager.ENFORCEMENT_DEFAULT; +import static android.content.pm.PackageManager.ENFORCEMENT_YES; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; +import static android.Manifest.permission.GRANT_REVOKE_PERMISSIONS; import static libcore.io.OsConstants.S_ISLNK; import com.android.internal.app.IMediaContainerService; @@ -1872,6 +1876,9 @@ public class PackageManagerService extends IPackageManager.Stub { return PackageManager.PERMISSION_GRANTED; } } + if (!isPermissionEnforcedLocked(permName)) { + return PackageManager.PERMISSION_GRANTED; + } } return PackageManager.PERMISSION_DENIED; } @@ -1890,6 +1897,9 @@ public class PackageManagerService extends IPackageManager.Stub { return PackageManager.PERMISSION_GRANTED; } } + if (!isPermissionEnforcedLocked(permName)) { + return PackageManager.PERMISSION_GRANTED; + } } return PackageManager.PERMISSION_DENIED; } @@ -8835,4 +8845,44 @@ public class PackageManagerService extends IPackageManager.Stub { public List<UserInfo> getUsers() { return mUserManager.getUsers(); } + + @Override + public void setPermissionEnforcement(String permission, int enforcement) { + mContext.enforceCallingOrSelfPermission(GRANT_REVOKE_PERMISSIONS, null); + if (READ_EXTERNAL_STORAGE.equals(permission)) { + synchronized (mPackages) { + if (mSettings.mReadExternalStorageEnforcement != enforcement) { + mSettings.mReadExternalStorageEnforcement = enforcement; + mSettings.writeLPr(); + } + } + } else { + throw new IllegalArgumentException("No selective enforcement for " + permission); + } + } + + @Override + public int getPermissionEnforcement(String permission) { + mContext.enforceCallingOrSelfPermission(GRANT_REVOKE_PERMISSIONS, null); + if (READ_EXTERNAL_STORAGE.equals(permission)) { + synchronized (mPackages) { + return mSettings.mReadExternalStorageEnforcement; + } + } else { + throw new IllegalArgumentException("No selective enforcement for " + permission); + } + } + + private boolean isPermissionEnforcedLocked(String permission) { + if (READ_EXTERNAL_STORAGE.equals(permission)) { + switch (mSettings.mReadExternalStorageEnforcement) { + case ENFORCEMENT_DEFAULT: + return false; + case ENFORCEMENT_YES: + return true; + } + } + + return true; + } } |
