diff options
author | Jason parks <jparks@google.com> | 2011-01-17 09:58:35 -0600 |
---|---|---|
committer | Jason parks <jparks@google.com> | 2011-01-21 00:06:20 -0600 |
commit | 9ed98bcdc9ef3445075fdba1933d0ec2b4bc147e (patch) | |
tree | 27258cb1eb3ad5660f30c481a9b22dfd1daba89f /services/java/com | |
parent | 04fba96bb7e3fdac2fe3b396ff5cc6560c13ecb5 (diff) | |
download | frameworks_base-9ed98bcdc9ef3445075fdba1933d0ec2b4bc147e.zip frameworks_base-9ed98bcdc9ef3445075fdba1933d0ec2b4bc147e.tar.gz frameworks_base-9ed98bcdc9ef3445075fdba1933d0ec2b4bc147e.tar.bz2 |
Update encryption commands.
* Changed to inplace encryption.
* Changed decryption to return the proper error code. It will now return success or the number of failed attempts.
* Be lazy and post a message 2 seconds later to call restart. I don't feel like messing with binder interfaces for a proper callback.
Change-Id: Iae2de7057aa66f248fd2df3f29777ad3368442f0
Diffstat (limited to 'services/java/com')
-rw-r--r-- | services/java/com/android/server/MountService.java | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java index d6804f9..d862585 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -618,7 +618,7 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC Slog.w(TAG, "Failed to get share availability"); } /* - * Now that we've done our initialization, release + * Now that we've done our initialization, release * the hounds! */ mReady = true; @@ -1237,7 +1237,7 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC waitForReady(); return doGetVolumeShared(Environment.getExternalStorageDirectory().getPath(), "ums"); } - + /** * @return state of the volume at the specified mount point */ @@ -1407,7 +1407,7 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC return rc; } - + public int mountSecureContainer(String id, String key, int ownerUid) { validatePermission(android.Manifest.permission.ASEC_MOUNT_UNMOUNT); waitForReady(); @@ -1495,7 +1495,7 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC synchronized (mAsecMountSet) { /* - * Because a mounted container has active internal state which cannot be + * Because a mounted container has active internal state which cannot be * changed while active, we must ensure both ids are not currently mounted. */ if (mAsecMountSet.contains(oldId) || mAsecMountSet.contains(newId)) { @@ -1644,13 +1644,30 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC } try { - mConnector.doCommand(String.format("cryptfs checkpw %s", password)); + ArrayList<String> rsp = mConnector.doCommand("cryptfs checkpw " + password); + String []tok = rsp.get(0).split(" "); + + if (tok == null || tok.length != 2) { + return -1; + } + + int code = Integer.parseInt(tok[1]); + + if (code == 0) { + // Decrypt was successful. Post a delayed message before restarting in order + // to let the UI to clear itself + mHandler.postDelayed(new Runnable() { + public void run() { + mConnector.doCommand(String.format("cryptfs restart")); + } + }, 2000); // 2 seconds + } + + return code; } catch (NativeDaemonConnectorException e) { // Decryption failed return e.getCode(); } - - return 0; } public int encryptStorage(String password) { @@ -1667,7 +1684,7 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC } try { - mConnector.doCommand(String.format("cryptfs enablecrypto wipe %s", password)); + mConnector.doCommand(String.format("cryptfs enablecrypto inplace %s", password)); } catch (NativeDaemonConnectorException e) { // Encryption failed return e.getCode(); |