parse_boolean: require exact matches
Require exact matches in all cases instead of treating strings starting with 't' ('f') as true (false). This is required for config_parse_protect_system to parse ProtectSystem=full correctly: it uses parse_boolean and only tries a more specific parsing function if that did not return a valid result. Thus "full" was treated as "false" before.
This commit is contained in:
parent
ccc6fa0d6b
commit
0f625d0b87
|
@ -231,9 +231,9 @@ int unlink_noerrno(const char *path) {
|
|||
int parse_boolean(const char *v) {
|
||||
assert(v);
|
||||
|
||||
if (streq(v, "1") || v[0] == 'y' || v[0] == 'Y' || v[0] == 't' || v[0] == 'T' || strcaseeq(v, "on"))
|
||||
if (streq(v, "1") || strcaseeq(v, "yes") || strcaseeq(v, "y") || strcaseeq(v, "true") || strcaseeq(v, "t") || strcaseeq(v, "on"))
|
||||
return 1;
|
||||
else if (streq(v, "0") || v[0] == 'n' || v[0] == 'N' || v[0] == 'f' || v[0] == 'F' || strcaseeq(v, "off"))
|
||||
else if (streq(v, "0") || strcaseeq(v, "no") || strcaseeq(v, "n") || strcaseeq(v, "false") || strcaseeq(v, "f") || strcaseeq(v, "off"))
|
||||
return 0;
|
||||
|
||||
return -EINVAL;
|
||||
|
|
|
@ -129,6 +129,7 @@ static void test_parse_boolean(void) {
|
|||
|
||||
assert_se(parse_boolean("garbage") < 0);
|
||||
assert_se(parse_boolean("") < 0);
|
||||
assert_se(parse_boolean("full") < 0);
|
||||
}
|
||||
|
||||
static void test_parse_pid(void) {
|
||||
|
|
Loading…
Reference in a new issue