chiark / gitweb /
OWNER/GROUP: fix if logic
[elogind.git] / udev / udev-rules.c
index fac418e526a625099d8b96adec4711b50fd2b3fb..39fe55aac14d556b864f5d219226b694665bf0b8 100644 (file)
@@ -1431,7 +1431,7 @@ static int add_rule(struct udev_rules *rules, char *line,
                        } else if ((rules->resolve_names > 0) && strchr("$%", value[0]) == NULL) {
                                uid = add_uid(rules, value);
                                rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid);
-                       } else if (rules->resolve_names == 0) {
+                       } else if (rules->resolve_names >= 0) {
                                rule_add_key(&rule_tmp, TK_A_OWNER, op, value, NULL);
                        }
                        rule_tmp.rule.rule.flags = 1;
@@ -1448,7 +1448,7 @@ static int add_rule(struct udev_rules *rules, char *line,
                        } else if ((rules->resolve_names > 0) && strchr("$%", value[0]) == NULL) {
                                gid = add_gid(rules, value);
                                rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid);
-                       } else if (rules->resolve_names == 0) {
+                       } else if (rules->resolve_names >= 0) {
                                rule_add_key(&rule_tmp, TK_A_GROUP, op, value, NULL);
                        }
                        rule_tmp.rule.rule.flags = 1;
@@ -1610,6 +1610,7 @@ static int parse_file(struct udev_rules *rules, const char *filename, unsigned s
                                if (strcmp(label, &rules->buf[rules->tokens[j].rule.label_off]) != 0)
                                        continue;
                                rules->tokens[i].key.rule_goto = j;
+                               break;
                        }
                        if (rules->tokens[i].key.rule_goto == 0)
                                err(rules->udev, "GOTO '%s' has no matching label in: '%s'\n", label, filename);
@@ -2504,6 +2505,8 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
                                break;
                        }
                case TK_A_GOTO:
+                       if (cur->key.rule_goto == 0)
+                               break;
                        cur = &rules->tokens[cur->key.rule_goto];
                        continue;
                case TK_A_LAST_RULE: