mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
basic/env-util: drop the validation when deserializing environment
The environment variables we've serialized can quite possibly contain characters outside the set allowed by env_assignment_is_valid(). In fact, my environment seems to contain a couple of these: * TERMCAP set by screen contains a '\x7f' character * BASH_FUNC_module%% variable has a '%' character in name Strict check of environment variables name and value certainly makes sense for unit files, but not so much for deserialization of values we already had in our environment.
This commit is contained in:
parent
3f6aef0d02
commit
ea43bdd1d7
@ -809,10 +809,5 @@ int deserialize_environment(char ***environment, const char *line) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
if (!env_assignment_is_valid(uce)) {
|
|
||||||
free(uce);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return strv_env_replace(environment, uce);
|
return strv_env_replace(environment, uce);
|
||||||
}
|
}
|
||||||
|
@ -319,10 +319,10 @@ static void test_env_assignment_is_valid(void) {
|
|||||||
static void test_deserialize_environment(void) {
|
static void test_deserialize_environment(void) {
|
||||||
_cleanup_strv_free_ char **env = strv_new("A=1", NULL);
|
_cleanup_strv_free_ char **env = strv_new("A=1", NULL);
|
||||||
|
|
||||||
assert_se(deserialize_environment(&env, "env=test") < 0);
|
|
||||||
assert_se(deserialize_environment(&env, "env=B=2") >= 0);
|
assert_se(deserialize_environment(&env, "env=B=2") >= 0);
|
||||||
|
assert_se(deserialize_environment(&env, "env=FOO%%=a\\177b\\nc\\td e") >= 0);
|
||||||
|
|
||||||
assert_se(strv_equal(env, STRV_MAKE("A=1", "B=2")));
|
assert_se(strv_equal(env, STRV_MAKE("A=1", "B=2", "FOO%%=a\177b\nc\td e")));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_serialize_environment(void) {
|
static void test_serialize_environment(void) {
|
||||||
@ -334,6 +334,7 @@ static void test_serialize_environment(void) {
|
|||||||
"B=2",
|
"B=2",
|
||||||
"C=ąęółń",
|
"C=ąęółń",
|
||||||
"D=D=a\\x0Ab",
|
"D=D=a\\x0Ab",
|
||||||
|
"FOO%%=a\177b\nc\td e",
|
||||||
NULL);
|
NULL);
|
||||||
_cleanup_strv_free_ char **env2 = NULL;
|
_cleanup_strv_free_ char **env2 = NULL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user