Encrypt phone even if pattern or no keyguard

Add option to enablecrypto to take type, allowing us to set type
when encrypting.

Bug: 13749169
Change-Id: If22fcfa93f1ebd1a5bd3b0077bb3bd8ae71fe819
This commit is contained in:
Paul Lawrence 2014-04-02 13:34:36 -07:00 committed by JP Abgrall
parent 0798707334
commit 5cc86c5741
3 changed files with 36 additions and 26 deletions

View file

@ -526,6 +526,21 @@ CommandListener::CryptfsCmd::CryptfsCmd() :
VoldCommand("cryptfs") {
}
static int getType(const char* type)
{
if (!strcmp(type, "default")) {
return CRYPT_TYPE_DEFAULT;
} else if (!strcmp(type, "password")) {
return CRYPT_TYPE_PASSWORD;
} else if (!strcmp(type, "pin")) {
return CRYPT_TYPE_PIN;
} else if (!strcmp(type, "pattern")) {
return CRYPT_TYPE_PATTERN;
} else {
return -1;
}
}
int CommandListener::CryptfsCmd::runCommand(SocketClient *cli,
int argc, char **argv) {
if ((cli->getUid() != 0) && (cli->getUid() != AID_SYSTEM)) {
@ -562,21 +577,28 @@ int CommandListener::CryptfsCmd::runCommand(SocketClient *cli,
dumpArgs(argc, argv, -1);
rc = cryptfs_crypto_complete();
} else if (!strcmp(argv[1], "enablecrypto")) {
if ( (argc != 4 && argc != 3)
const char* syntax = "Usage: cryptfs enablecrypto <wipe|inplace> "
"default|password|pin|pattern [passwd]";
if ( (argc != 4 && argc != 5)
|| (strcmp(argv[2], "wipe") && strcmp(argv[2], "inplace")) ) {
cli->sendMsg(ResponseCode::CommandSyntaxError,
"Usage: cryptfs enablecrypto <wipe|inplace> [passwd]",
false);
cli->sendMsg(ResponseCode::CommandSyntaxError, syntax, false);
return 0;
}
dumpArgs(argc, argv, 3);
dumpArgs(argc, argv, 4);
int tries;
for (tries = 0; tries < 2; ++tries) {
if(argc == 3)
rc = cryptfs_enable_default(argv[2], /*allow_reboot*/false);
else
rc = cryptfs_enable(argv[2], argv[3], /*allow_reboot*/false);
int type = getType(argv[3]);
if (type == -1) {
cli->sendMsg(ResponseCode::CommandSyntaxError, syntax,
false);
return 0;
} else if (type == CRYPT_TYPE_DEFAULT) {
rc = cryptfs_enable_default(argv[2], /*allow_reboot*/false);
} else {
rc = cryptfs_enable(argv[2], type, argv[4],
/*allow_reboot*/false);
}
if (rc == 0) {
break;
@ -596,16 +618,8 @@ int CommandListener::CryptfsCmd::runCommand(SocketClient *cli,
cli->sendMsg(ResponseCode::CommandSyntaxError, syntax, false);
return 0;
}
int type = 0;
if (!strcmp(argv[2], "default")) {
type = CRYPT_TYPE_DEFAULT;
} else if (!strcmp(argv[2], "password")) {
type = CRYPT_TYPE_PASSWORD;
} else if (!strcmp(argv[2], "pin")) {
type = CRYPT_TYPE_PIN;
} else if (!strcmp(argv[2], "pattern")) {
type = CRYPT_TYPE_PATTERN;
} else {
int type = getType(argv[2]);
if (type == -1) {
cli->sendMsg(ResponseCode::CommandSyntaxError, syntax, false);
return 0;
}

View file

@ -2408,13 +2408,9 @@ error_shutting_down:
return -1;
}
int cryptfs_enable(char *howarg, char *passwd, int allow_reboot)
int cryptfs_enable(char *howarg, int type, char *passwd, int allow_reboot)
{
/** @todo If we keep this route (user selected encryption)
* need to take a type in and pass it to here.
*/
return cryptfs_enable_internal(howarg, CRYPT_TYPE_PASSWORD,
passwd, allow_reboot);
return cryptfs_enable_internal(howarg, type, passwd, allow_reboot);
}
int cryptfs_enable_default(char *howarg, int allow_reboot)

View file

@ -162,7 +162,7 @@ extern "C" {
int cryptfs_check_passwd(char *pw);
int cryptfs_verify_passwd(char *newpw);
int cryptfs_restart(void);
int cryptfs_enable(char *flag, char *passwd, int allow_reboot);
int cryptfs_enable(char *flag, int type, char *passwd, int allow_reboot);
int cryptfs_changepw(int type, const char *newpw);
int cryptfs_enable_default(char *flag, int allow_reboot);
int cryptfs_setup_volume(const char *label, int major, int minor,