Change the cryptfs command to separate out checking the password and restarting

In order to make the animations and the UI look right, we need to change
the cryptfs checkpw command to return a status if the password was
correct or not, and not have it automatically restart if it's correct.

There is a new command restart that will restart the framework with the
encrypted filesystem.

Change-Id: Ia8ae00d7ed8667699aa58d05ad8ba953cca9316e
diff --git a/cryptfs.c b/cryptfs.c
index cf509c9..86cf17a 100644
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -482,10 +482,11 @@
     return rc;
 }
 
-static int cryptfs_restart(char *crypto_blkdev)
+int cryptfs_restart(void)
 {
     char fs_type[32];
     char real_blkdev[MAXPATHLEN];
+    char crypto_blkdev[MAXPATHLEN];
     char fs_options[256];
     unsigned long mnt_flags;
     struct stat statbuf;
@@ -516,6 +517,12 @@
      * the tmpfs filesystem, and mount the real one.
      */
 
+    property_get("ro.crypto.fs_crypto_blkdev", crypto_blkdev, "");
+    if (strlen(crypto_blkdev) == 0) {
+        SLOGE("fs_crypto_blkdev not set\n");
+        return -1;
+    }
+
     if (! get_orig_mount_parms("/data", fs_type, real_blkdev, &mnt_flags, fs_options)) {
         SLOGD("Just got orig mount parms\n");
 
@@ -622,10 +629,11 @@
     rc = crypt_ftr.failed_decrypt_count;
 
   } else {
-    /* Woot!  Success!  Time to do the magic of unmounting the tmpfs
-     * disk and mounting the encrypted one.
+    /* Woot!  Success!  Save the name of the crypto block device
+     * so we can mount it when restarting the framework.
      */
-    rc = cryptfs_restart(crypto_blkdev);
+    property_set("ro.crypto.fs_crypto_blkdev", crypto_blkdev);
+    rc = 0;
   }
 
   return rc;