diff options
author | Ricardo Cerqueira <ricardo@cyngn.com> | 2015-11-05 01:04:40 +0000 |
---|---|---|
committer | Ricardo Cerqueira <ricardo@cyngn.com> | 2015-11-05 18:26:36 +0000 |
commit | 31756a19f79d62b71fa87c4e656e00bfbb9a5385 (patch) | |
tree | d459d9f2147f52cc1a55d586686cea8603763e3e /init | |
parent | 22fffcc3d469176f9a7d52d7c6fe68186e9592ab (diff) | |
parent | f7f765fd62bf5db1271e0c0f51e9fb4df609dc6a (diff) | |
download | system_core-31756a19f79d62b71fa87c4e656e00bfbb9a5385.zip system_core-31756a19f79d62b71fa87c4e656e00bfbb9a5385.tar.gz system_core-31756a19f79d62b71fa87c4e656e00bfbb9a5385.tar.bz2 |
Merge tag 'android-6.0.0_r26' into cm-13.0
Android 6.0.0 release 26
Change-Id: I93d1e3767cbacab2b18cff360065c91b9eaf1d96
Diffstat (limited to 'init')
-rw-r--r-- | init/builtins.cpp | 27 | ||||
-rw-r--r-- | init/init_parser.cpp | 50 | ||||
-rw-r--r-- | init/keywords.h | 6 | ||||
-rw-r--r-- | init/property_service.cpp | 17 | ||||
-rw-r--r-- | init/property_service.h | 2 |
5 files changed, 56 insertions, 46 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp index bab30d7..9901786 100644 --- a/init/builtins.cpp +++ b/init/builtins.cpp @@ -816,9 +816,9 @@ int do_load_persist_props(int nargs, char **args) { return -1; } -int do_load_all_props(int nargs, char **args) { +int do_load_system_props(int nargs, char **args) { if (nargs == 1) { - load_all_props(); + load_system_props(); return 0; } return -1; @@ -846,18 +846,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 c760f53..c36d36e 100644 --- a/init/init_parser.cpp +++ b/init/init_parser.cpp @@ -159,7 +159,7 @@ static int lookup_keyword(const char *s) case 'l': if (!strcmp(s, "oglevel")) return K_loglevel; if (!strcmp(s, "oad_persist_props")) return K_load_persist_props; - if (!strcmp(s, "oad_all_props")) return K_load_all_props; + if (!strcmp(s, "oad_system_props")) return K_load_system_props; break; case 'm': if (!strcmp(s, "kdir")) return K_mkdir; @@ -188,6 +188,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; @@ -573,7 +574,7 @@ void queue_property_triggers(const char *name, const char *value) list_for_each(node, &action_list) { act = node_to_item(node, struct action, alist); - match = !name; + match = !name; list_for_each(node2, &act->triggers) { cur_trigger = node_to_item(node2, struct trigger, nlist); if (!strncmp(cur_trigger->name, "property:", strlen("property:"))) { @@ -587,29 +588,28 @@ void queue_property_triggers(const char *name, const char *value) match = true; continue; } - } else { - const char* equals = strchr(test, '='); - if (equals) { - char prop_name[PROP_NAME_MAX + 1]; - char value[PROP_VALUE_MAX]; - int length = equals - test; - if (length <= PROP_NAME_MAX) { - int ret; - memcpy(prop_name, test, length); - prop_name[length] = 0; - - /* does the property exist, and match the trigger value? */ - ret = property_get(prop_name, value); - if (ret > 0 && (!strcmp(equals + 1, value) || - !strcmp(equals + 1, "*"))) { - continue; - } - } - } - } - } - match = false; - break; + } + const char* equals = strchr(test, '='); + if (equals) { + char prop_name[PROP_NAME_MAX + 1]; + char value[PROP_VALUE_MAX]; + int length = equals - test; + if (length <= PROP_NAME_MAX) { + int ret; + memcpy(prop_name, test, length); + prop_name[length] = 0; + + /* does the property exist, and match the trigger value? */ + ret = property_get(prop_name, value); + if (ret > 0 && (!strcmp(equals + 1, value) || + !strcmp(equals + 1, "*"))) { + continue; + } + } + } + } + match = false; + break; } if (match) { action_add_queue_tail(act); diff --git a/init/keywords.h b/init/keywords.h index a5048f4..303685d 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); @@ -34,7 +35,7 @@ int do_chown(int nargs, char **args); int do_chmod(int nargs, char **args); int do_loglevel(int nargs, char **args); int do_load_persist_props(int nargs, char **args); -int do_load_all_props(int nargs, char **args); +int do_load_system_props(int nargs, char **args); int do_verity_load_state(int nargs, char **args); int do_verity_update_state(int nargs, char **args); int do_wait(int nargs, char **args); @@ -66,7 +67,7 @@ enum { KEYWORD(installkey, COMMAND, 1, do_installkey) KEYWORD(ioprio, OPTION, 0, 0) KEYWORD(keycodes, OPTION, 0, 0) - KEYWORD(load_all_props, COMMAND, 0, do_load_all_props) + KEYWORD(load_system_props, COMMAND, 0, do_load_system_props) KEYWORD(load_persist_props, COMMAND, 0, do_load_persist_props) KEYWORD(loglevel, COMMAND, 1, do_loglevel) KEYWORD(mkdir, COMMAND, 1, do_mkdir) @@ -87,6 +88,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) diff --git a/init/property_service.cpp b/init/property_service.cpp index 001aa1d..11ff06b 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp @@ -519,6 +519,11 @@ void load_persist_props(void) { load_override_properties(); /* Read persistent properties after all default values have been loaded. */ load_persistent_properties(); + + /* update with vendor-specific property runtime + * overrides + */ + vendor_load_properties(); } void load_recovery_id_prop() { @@ -561,21 +566,11 @@ void load_recovery_id_prop() { close(fd); } -void load_all_props() { +void load_system_props() { load_properties_from_file(PROP_PATH_SYSTEM_BUILD, NULL); load_properties_from_file(PROP_PATH_VENDOR_BUILD, NULL); load_properties_from_file(PROP_PATH_FACTORY, "ro.*"); - load_override_properties(); - - /* Read persistent properties after all default values have been loaded. */ - load_persistent_properties(); - - /* update with vendor-specific property runtime - * overrides - */ - vendor_load_properties(); - load_recovery_id_prop(); } diff --git a/init/property_service.h b/init/property_service.h index a27053d..303f251 100644 --- a/init/property_service.h +++ b/init/property_service.h @@ -23,7 +23,7 @@ extern void property_init(void); extern void property_load_boot_defaults(void); extern void load_persist_props(void); -extern void load_all_props(void); +extern void load_system_props(void); extern void start_property_service(void); void get_property_workspace(int *fd, int *sz); extern int __property_get(const char *name, char *value); |