diff options
author | Paul Crowley <paulcrowley@google.com> | 2015-05-28 17:35:06 +0100 |
---|---|---|
committer | Paul Crowley <paulcrowley@google.com> | 2015-06-23 15:21:51 +0000 |
commit | 749af8c08f6db8da4202ad93f9a6d06884b27c0d (patch) | |
tree | 75e05aa61b8c858d3c20d64f82d581ef6ca63885 /init | |
parent | bd5cb997233acbfa2bebcafa698994d744e5c9a7 (diff) | |
download | system_core-749af8c08f6db8da4202ad93f9a6d06884b27c0d.zip system_core-749af8c08f6db8da4202ad93f9a6d06884b27c0d.tar.gz system_core-749af8c08f6db8da4202ad93f9a6d06884b27c0d.tar.bz2 |
Set up user directory crypto in init.
(cherry-picked from commit b94032b79c3cded501e2d5f7c328cf8c0c3911c4)
Bug: 19704432
Change-Id: Ife4928ffbee39c8ae69e6ba66d9ce5ef5a0beb76
Diffstat (limited to 'init')
-rw-r--r-- | init/builtins.cpp | 23 | ||||
-rw-r--r-- | init/init_parser.cpp | 1 | ||||
-rw-r--r-- | init/keywords.h | 2 |
3 files changed, 21 insertions, 5 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp index 9e5f9ff..335f371 100644 --- a/init/builtins.cpp +++ b/init/builtins.cpp @@ -833,18 +833,31 @@ static int do_installkeys_ensure_dir_exists(const char* dir) return 0; } +static bool is_file_crypto() { + char prop_value[PROP_VALUE_MAX] = {0}; + property_get("ro.crypto.type", prop_value); + return strcmp(prop_value, "file") == 0; +} + int do_installkey(int nargs, char **args) { if (nargs != 2) { return -1; } - - char prop_value[PROP_VALUE_MAX] = {0}; - property_get("ro.crypto.type", prop_value); - if (strcmp(prop_value, "file")) { + if (!is_file_crypto()) { return 0; } - return e4crypt_create_device_key(args[1], do_installkeys_ensure_dir_exists); } + +int do_setusercryptopolicies(int nargs, char **args) +{ + if (nargs != 2) { + return -1; + } + if (!is_file_crypto()) { + return 0; + } + return e4crypt_set_user_crypto_policies(args[1]); +} diff --git a/init/init_parser.cpp b/init/init_parser.cpp index 666a86e..35b22d7 100644 --- a/init/init_parser.cpp +++ b/init/init_parser.cpp @@ -187,6 +187,7 @@ static int lookup_keyword(const char *s) if (!strcmp(s, "etenv")) return K_setenv; if (!strcmp(s, "etprop")) return K_setprop; if (!strcmp(s, "etrlimit")) return K_setrlimit; + if (!strcmp(s, "etusercryptopolicies")) return K_setusercryptopolicies; if (!strcmp(s, "ocket")) return K_socket; if (!strcmp(s, "tart")) return K_start; if (!strcmp(s, "top")) return K_stop; diff --git a/init/keywords.h b/init/keywords.h index e637d7d..d5c7667 100644 --- a/init/keywords.h +++ b/init/keywords.h @@ -22,6 +22,7 @@ int do_rm(int nargs, char **args); int do_rmdir(int nargs, char **args); int do_setprop(int nargs, char **args); int do_setrlimit(int nargs, char **args); +int do_setusercryptopolicies(int nargs, char **args); int do_start(int nargs, char **args); int do_stop(int nargs, char **args); int do_swapon_all(int nargs, char **args); @@ -86,6 +87,7 @@ enum { KEYWORD(setenv, OPTION, 2, 0) KEYWORD(setprop, COMMAND, 2, do_setprop) KEYWORD(setrlimit, COMMAND, 3, do_setrlimit) + KEYWORD(setusercryptopolicies, COMMAND, 1, do_setusercryptopolicies) KEYWORD(socket, OPTION, 0, 0) KEYWORD(start, COMMAND, 1, do_start) KEYWORD(stop, COMMAND, 1, do_stop) |