am 6864b7ec: Change the cryptfs command to separate out checking the password and restarting

* commit '6864b7ec94a57b73c300457955d86dc604aeddf5':
  Change the cryptfs command to separate out checking the password and restarting
This commit is contained in:
Ken Sumrall 2011-01-17 14:45:11 -08:00 committed by Android Git Automerger
commit 3b3b89e07c
3 changed files with 19 additions and 4 deletions

View file

@ -529,6 +529,12 @@ int CommandListener::CryptfsCmd::runCommand(SocketClient *cli,
return 0;
}
rc = cryptfs_check_passwd(argv[2]);
} else if (!strcmp(argv[1], "restart")) {
if (argc != 2) {
cli->sendMsg(ResponseCode::CommandSyntaxError, "Usage: cryptfs restart", false);
return 0;
}
rc = cryptfs_restart();
} else if (!strcmp(argv[1], "enablecrypto")) {
if ( (argc != 4) || (strcmp(argv[2], "wipe") && strcmp(argv[2], "inplace")) ) {
cli->sendMsg(ResponseCode::CommandSyntaxError, "Usage: cryptfs enablecrypto <wipe|inplace> <passwd>", false);

View file

@ -482,10 +482,11 @@ static int wait_and_unmount(char *mountpoint)
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 @@ static int cryptfs_restart(char *crypto_blkdev)
* 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 @@ static int test_mount_encrypted_fs(char *passwd, char *mount_point)
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;

View file

@ -53,6 +53,7 @@ struct crypt_mnt_ftr {
extern "C" {
#endif
int cryptfs_check_passwd(char *pw);
int cryptfs_restart(void);
int cryptfs_enable(char *flag, char *passwd);
#ifdef __cplusplus
}