chiark / gitweb /
print warning for invalid TEST operations
[elogind.git] / udev_rules_parse.c
index 124410a3402d8b7a36f9c4b5ed9274529f9ceb2b..9e435819f0893e2969cbeb05f976f3ed21eb2ec2 100644 (file)
@@ -469,6 +469,11 @@ static int add_to_rules(struct udev_rules *rules, char *line, const char *filena
                }
 
                if (strncasecmp(key, "TEST", sizeof("TEST")-1) == 0) {
+                       if (operation != KEY_OP_MATCH &&
+                           operation != KEY_OP_NOMATCH) {
+                               err("invalid TEST operation");
+                               goto invalid;
+                       }
                        attr = get_key_attribute(key + sizeof("TEST")-1);
                        if (attr != NULL)
                                rule->test_mode_mask = strtol(attr, NULL, 8);
@@ -525,7 +530,11 @@ static int add_to_rules(struct udev_rules *rules, char *line, const char *filena
                }
 
                if (strcasecmp(key, "SYMLINK") == 0) {
-                       add_rule_key(rule, &rule->symlink, operation, value);
+                       if (operation == KEY_OP_MATCH ||
+                           operation == KEY_OP_NOMATCH)
+                               add_rule_key(rule, &rule->symlink_match, operation, value);
+                       else
+                               add_rule_key(rule, &rule->symlink, operation, value);
                        valid = 1;
                        continue;
                }
@@ -753,11 +762,10 @@ int udev_rules_init(struct udev_rules *rules, int resolve_names)
                        if (name_base == NULL)
                                continue;
 
-                       if (strcmp(name_base, dyn_base) > 0) {
-                               list_move_tail(&dyn_loop->node, &name_loop->node);
+                       if (strcmp(name_base, dyn_base) > 0)
                                break;
-                       }
                }
+               list_move_tail(&dyn_loop->node, &name_loop->node);
        }
 
        /* parse list of files */
@@ -783,3 +791,4 @@ void udev_rules_cleanup(struct udev_rules *rules)
                rules->buf = NULL;
        }
 }
+