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
This commit is contained in:
parent
2eaf713852
commit
6864b7ec94
3 changed files with 19 additions and 4 deletions
|
@ -529,6 +529,12 @@ int CommandListener::CryptfsCmd::runCommand(SocketClient *cli,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
rc = cryptfs_check_passwd(argv[2]);
|
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")) {
|
} else if (!strcmp(argv[1], "enablecrypto")) {
|
||||||
if ( (argc != 4) || (strcmp(argv[2], "wipe") && strcmp(argv[2], "inplace")) ) {
|
if ( (argc != 4) || (strcmp(argv[2], "wipe") && strcmp(argv[2], "inplace")) ) {
|
||||||
cli->sendMsg(ResponseCode::CommandSyntaxError, "Usage: cryptfs enablecrypto <wipe|inplace> <passwd>", false);
|
cli->sendMsg(ResponseCode::CommandSyntaxError, "Usage: cryptfs enablecrypto <wipe|inplace> <passwd>", false);
|
||||||
|
|
16
cryptfs.c
16
cryptfs.c
|
@ -482,10 +482,11 @@ static int wait_and_unmount(char *mountpoint)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cryptfs_restart(char *crypto_blkdev)
|
int cryptfs_restart(void)
|
||||||
{
|
{
|
||||||
char fs_type[32];
|
char fs_type[32];
|
||||||
char real_blkdev[MAXPATHLEN];
|
char real_blkdev[MAXPATHLEN];
|
||||||
|
char crypto_blkdev[MAXPATHLEN];
|
||||||
char fs_options[256];
|
char fs_options[256];
|
||||||
unsigned long mnt_flags;
|
unsigned long mnt_flags;
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
|
@ -516,6 +517,12 @@ static int cryptfs_restart(char *crypto_blkdev)
|
||||||
* the tmpfs filesystem, and mount the real one.
|
* 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)) {
|
if (! get_orig_mount_parms("/data", fs_type, real_blkdev, &mnt_flags, fs_options)) {
|
||||||
SLOGD("Just got orig mount parms\n");
|
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;
|
rc = crypt_ftr.failed_decrypt_count;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* Woot! Success! Time to do the magic of unmounting the tmpfs
|
/* Woot! Success! Save the name of the crypto block device
|
||||||
* disk and mounting the encrypted one.
|
* 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;
|
return rc;
|
||||||
|
|
|
@ -53,6 +53,7 @@ struct crypt_mnt_ftr {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
int cryptfs_check_passwd(char *pw);
|
int cryptfs_check_passwd(char *pw);
|
||||||
|
int cryptfs_restart(void);
|
||||||
int cryptfs_enable(char *flag, char *passwd);
|
int cryptfs_enable(char *flag, char *passwd);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue