From 92aa5a2f15032f3e5a5394ca96d0b6fd03f0b405 Mon Sep 17 00:00:00 2001 From: Emily Bernier Date: Mon, 7 Jul 2014 10:11:48 -0400 Subject: [PATCH] Re-commit of reverted change 458959 Using correct parameters for Slog.w(). Change-Id: I0ab7a1b114431f15fe3652e98c75e7baab7a2d95 --- .../java/com/android/server/MountService.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index 39410c2671093..6c3a4b4bdb113 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -33,6 +33,7 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.hardware.usb.UsbManager; +import android.app.admin.DevicePolicyManager; import android.net.Uri; import android.os.Binder; import android.os.Environment; @@ -47,6 +48,7 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; +import android.os.UserManager; import android.os.storage.IMountService; import android.os.storage.IMountServiceListener; import android.os.storage.IMountShutdownObserver; @@ -1038,6 +1040,11 @@ class MountService extends IMountService.Stub volume = mVolumesByPath.get(path); } + if (!volume.isEmulated() && hasUserRestriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA)) { + Slog.w(TAG, "User has restriction DISALLOW_MOUNT_PHYSICAL_MEDIA; cannot mount volume."); + return StorageResultCode.OperationFailedInternalError; + } + if (DEBUG_EVENTS) Slog.i(TAG, "doMountVolume: Mouting " + path); try { mConnector.execute("volume", "mount", path); @@ -1237,6 +1244,17 @@ class MountService extends IMountService.Stub } } + private boolean hasUserRestriction(String restriction) { + UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); + return um.hasUserRestriction(restriction, Binder.getCallingUserHandle()); + } + + private void validateUserRestriction(String restriction) { + if (hasUserRestriction(restriction)) { + throw new SecurityException("User has restriction " + restriction); + } + } + // Storage list XML tags private static final String TAG_STORAGE_LIST = "StorageList"; private static final String TAG_STORAGE = "storage"; @@ -1559,6 +1577,7 @@ class MountService extends IMountService.Stub public void setUsbMassStorageEnabled(boolean enable) { waitForReady(); validatePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS); + validateUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER); final StorageVolume primary = getPrimaryPhysicalVolume(); if (primary == null) return; @@ -1633,7 +1652,6 @@ class MountService extends IMountService.Stub public int mountVolume(String path) { validatePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS); - waitForReady(); return doMountVolume(path); }