summaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorPaul Crowley <paulcrowley@google.com>2015-05-28 17:35:06 +0100
committerPaul Crowley <paulcrowley@google.com>2015-06-23 15:21:51 +0000
commit749af8c08f6db8da4202ad93f9a6d06884b27c0d (patch)
tree75e05aa61b8c858d3c20d64f82d581ef6ca63885 /init
parentbd5cb997233acbfa2bebcafa698994d744e5c9a7 (diff)
downloadsystem_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.cpp23
-rw-r--r--init/init_parser.cpp1
-rw-r--r--init/keywords.h2
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)