]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev_rules_parse_file: issue diagnostics about duplicate LABEL tokens 26739/head
authorDmitry V. Levin <ldv@strace.io>
Fri, 10 Mar 2023 08:00:00 +0000 (08:00 +0000)
committerDmitry V. Levin <ldv@strace.io>
Fri, 10 Mar 2023 17:10:41 +0000 (17:10 +0000)
When a rules contains several LABEL tokens, the parser used to silently
discard all of them besides the last one without any diagnostics at all.
It's time to break the vow of silence and let the parser issue a warning.

src/udev/udev-rules.c
test/units/testsuite-17.11.sh

index 9d831a60047a29db9b1732a82890e0f2702239bf..5e7d8d390e46430d5ebad5ced303209ffc289fa0 100644 (file)
@@ -1014,6 +1014,9 @@ static int parse_token(UdevRules *rules, const char *key, char *attr, UdevRuleOp
                         return log_token_invalid_attr(rules, key);
                 if (op != OP_ASSIGN)
                         return log_token_invalid_op(rules, key);
+                if (FLAGS_SET(rule_line->type, LINE_HAS_LABEL))
+                        log_token_warning(rules, "Contains multiple LABEL keys, ignoring LABEL=\"%s\".",
+                                          rule_line->label);
 
                 rule_line->label = value;
                 SET_FLAG(rule_line->type, LINE_HAS_LABEL, true);
index 9a404781e7dda695b0721f223522b7a0d89db8f7..363040c28c92f63377b89bebe22d9e70b3ab945e 100755 (executable)
@@ -262,6 +262,19 @@ ${rules}: udev rules check failed
 EOF
 assert_1 "${rules}"
 
+cat >"${rules}" <<'EOF'
+GOTO="a"
+LABEL="a", LABEL="b"
+EOF
+cat >"${exp}" <<EOF
+${rules}:2 Contains multiple LABEL keys, ignoring LABEL="a".
+${rules}:1 GOTO="a" has no matching label, ignoring
+${rules}:1 The line takes no effect any more, dropping
+${rules}:2 LABEL="b" is unused.
+${rules}: udev rules check failed
+EOF
+assert_1 "${rules}"
+
 # udevadm verify --root
 sed "s|sample-[0-9]*.rules|${workdir}/${rules_dir}/&|" sample-*.exp >"${workdir}/${exp}"
 cd -