core/load-fragment: don't treat "; ;" as "/usr/bin/;"
We had a special test case that the second semicolon would be interpreted as an executable name. We would then try to find the executable and rely on ";" not being found to cause ENOEXEC to be returned. I think that's just crazy. Let's treat the second semicolon as a separator and ignore the whole thing as we would whitespace.
This commit is contained in:
@@ -721,6 +721,12 @@ int config_parse_exec(
|
||||
if (r <= 0)
|
||||
return 0;
|
||||
|
||||
/* A lone ";" is a separator. Let's make sure we don't treat it as an executable name. */
|
||||
if (streq(firstword, ";")) {
|
||||
semicolon = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
f = firstword;
|
||||
for (;;) {
|
||||
/* We accept an absolute path as first argument. If it's prefixed with - and the path doesn't
|
||||
|
||||
@@ -202,12 +202,11 @@ static void test_config_parse_exec(void) {
|
||||
"-@/RValue argv0 r1 ; ; "
|
||||
"/goo/goo boo",
|
||||
&c, u);
|
||||
assert_se(r == -ENOEXEC);
|
||||
assert_se(r >= 0);
|
||||
c1 = c1->command_next;
|
||||
check_execcommand(c1, "/RValue", "argv0", "r1", NULL, true);
|
||||
|
||||
/* second command fails because the executable name is ";" */
|
||||
assert_se(c1->command_next == NULL);
|
||||
c1 = c1->command_next;
|
||||
check_execcommand(c1, "/goo/goo", "/goo/goo", "boo", NULL, false);
|
||||
|
||||
log_info("/* trailing semicolon */");
|
||||
r = config_parse_exec(NULL, "fake", 5, "section", 1,
|
||||
|
||||
Reference in New Issue
Block a user