udev-rules: move udev_check_rule_line() invocation
Move udev_check_rule_line() invocation from udev_rule_file_get_issues() to udev_rules_parse_file(), invoke udev_check_rule_line() only when udev_rules_parse_file() is called by udevadm verify. Subsequent commits are going to perform more checks invoked from udev_rules_parse_file().
This commit is contained in:
@@ -27,7 +27,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fflush(f);
|
||||
|
||||
assert_se(rules = udev_rules_new(RESOLVE_NAME_EARLY));
|
||||
r = udev_rules_parse_file(rules, filename, NULL);
|
||||
r = udev_rules_parse_file(rules, filename, /* extra_checks = */ false, NULL);
|
||||
log_info_errno(r, "Parsing %s: %m", filename);
|
||||
assert_se(r >= 0 || /* OK */
|
||||
r == -ENOBUFS); /* line length exceeded */
|
||||
|
||||
@@ -1358,7 +1358,7 @@ static void udev_check_rule_line(UdevRuleLine *line) {
|
||||
udev_check_conflicts_duplicates(line);
|
||||
}
|
||||
|
||||
int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile **ret) {
|
||||
int udev_rules_parse_file(UdevRules *rules, const char *filename, bool extra_checks, UdevRuleFile **ret) {
|
||||
_cleanup_(udev_rule_file_freep) UdevRuleFile *rule_file = NULL;
|
||||
_cleanup_free_ char *continuation = NULL, *name = NULL;
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
@@ -1469,6 +1469,10 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile *
|
||||
|
||||
rule_resolve_goto(rule_file);
|
||||
|
||||
if (extra_checks)
|
||||
LIST_FOREACH(rule_lines, line, rule_file->rule_lines)
|
||||
udev_check_rule_line(line);
|
||||
|
||||
if (ret)
|
||||
*ret = rule_file;
|
||||
|
||||
@@ -1479,9 +1483,6 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile *
|
||||
unsigned udev_rule_file_get_issues(UdevRuleFile *rule_file) {
|
||||
assert(rule_file);
|
||||
|
||||
LIST_FOREACH(rule_lines, line, rule_file->rule_lines)
|
||||
udev_check_rule_line(line);
|
||||
|
||||
return rule_file->issues;
|
||||
}
|
||||
|
||||
@@ -1513,7 +1514,7 @@ int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing
|
||||
return log_debug_errno(r, "Failed to enumerate rules files: %m");
|
||||
|
||||
STRV_FOREACH(f, files) {
|
||||
r = udev_rules_parse_file(rules, *f, NULL);
|
||||
r = udev_rules_parse_file(rules, *f, /* extra_checks = */ false, NULL);
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to read rules file %s, ignoring: %m", *f);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ typedef enum {
|
||||
_ESCAPE_TYPE_INVALID = -EINVAL,
|
||||
} UdevRuleEscapeType;
|
||||
|
||||
int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile **ret);
|
||||
int udev_rules_parse_file(UdevRules *rules, const char *filename, bool extra_checks, UdevRuleFile **ret);
|
||||
unsigned udev_rule_file_get_issues(UdevRuleFile *rule_file);
|
||||
UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing);
|
||||
int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing);
|
||||
|
||||
@@ -104,7 +104,7 @@ static int verify_rules_file(UdevRules *rules, const char *fname) {
|
||||
UdevRuleFile *file;
|
||||
int r;
|
||||
|
||||
r = udev_rules_parse_file(rules, fname, &file);
|
||||
r = udev_rules_parse_file(rules, fname, /* extra_checks = */ true, &file);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse rules file %s: %m", fname);
|
||||
if (r == 0) /* empty file. */
|
||||
|
||||
Reference in New Issue
Block a user