mirror of
https://github.com/systemd/systemd.git
synced 2024-10-31 07:51:21 +03:00
shared/conf-parser: allow sections to be silently ignored with new -Section syntax
If we ignore any uknown section, we will not be able to show any warning if a typo in a section name is made. Let's reverse our approach, and explicitly list sections to ignore instead. I opted to make use the same section list for this, instead of adding a second list, because this list is passed through to many functions and adding yet another parameter to the long signature would be very noisy.
This commit is contained in:
parent
94a404cb03
commit
ddeb3f5d4b
@ -221,8 +221,19 @@ static int parse_line(
|
||||
return -ENOMEM;
|
||||
|
||||
if (sections && !nulstr_contains(sections, n)) {
|
||||
bool ignore = flags & CONFIG_PARSE_RELAXED;
|
||||
const char *t;
|
||||
|
||||
if (!(flags & CONFIG_PARSE_RELAXED) && !startswith(n, "X-"))
|
||||
ignore = ignore || startswith(n, "X-");
|
||||
|
||||
if (!ignore)
|
||||
NULSTR_FOREACH(t, sections)
|
||||
if (streq_ptr(n, startswith(t, "-"))) {
|
||||
ignore = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ignore)
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown section '%s'. Ignoring.", n);
|
||||
|
||||
free(n);
|
||||
|
@ -299,6 +299,15 @@ static const char* const config_file[] = {
|
||||
"[Section]\n"
|
||||
"setting1=" /* many continuation lines, together above the limit */
|
||||
x1000(x1000("x") x10("abcde") "\\\n") "xxx",
|
||||
|
||||
"[Section]\n"
|
||||
"setting1=2\n"
|
||||
"[NoWarnSection]\n"
|
||||
"setting1=3\n"
|
||||
"[WarnSection]\n"
|
||||
"setting1=3\n"
|
||||
"[X-Section]\n"
|
||||
"setting1=3\n",
|
||||
};
|
||||
|
||||
static void test_config_parse(unsigned i, const char *s) {
|
||||
@ -325,14 +334,12 @@ static void test_config_parse(unsigned i, const char *s) {
|
||||
const char *sections,
|
||||
ConfigItemLookup lookup,
|
||||
const void *table,
|
||||
bool relaxed,
|
||||
bool allow_include,
|
||||
bool warn,
|
||||
ConfigParseFlags flags,
|
||||
void *userdata)
|
||||
*/
|
||||
|
||||
r = config_parse(NULL, name, f,
|
||||
"Section\0",
|
||||
"Section\0-NoWarnSection\0",
|
||||
config_item_table_lookup, items,
|
||||
CONFIG_PARSE_WARN, NULL);
|
||||
|
||||
@ -366,6 +373,11 @@ static void test_config_parse(unsigned i, const char *s) {
|
||||
assert_se(r == -ENOBUFS);
|
||||
assert_se(setting1 == NULL);
|
||||
break;
|
||||
|
||||
case 17:
|
||||
assert_se(r == 0);
|
||||
assert_se(streq(setting1, "2"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user