- if (strcasecmp(key, "WAIT_FOR") == 0 || strcasecmp(key, "WAIT_FOR_SYSFS") == 0) {
- add_rule_key(rule, &rule->wait_for, operation, value);
- valid = 1;
- continue;
- }
-
- if (strcasecmp(key, "LABEL") == 0) {
- add_rule_key(rule, &rule->label, operation, value);
- valid = 1;
- continue;
- }
-
- if (strcasecmp(key, "GOTO") == 0) {
- add_rule_key(rule, &rule->goto_label, operation, value);
- valid = 1;
- continue;
- }
-
- if (strncasecmp(key, "NAME", sizeof("NAME")-1) == 0) {
- attr = get_key_attribute(rules, key + sizeof("NAME")-1);
- if (attr != NULL) {
- if (strstr(attr, "all_partitions") != NULL) {
- dbg(rules->udev, "creation of partition nodes requested\n");
- rule->partitions = DEFAULT_FAKE_PARTITIONS_COUNT;
- }
- if (strstr(attr, "ignore_remove") != NULL) {
- dbg(rules->udev, "remove event should be ignored\n");
- rule->ignore_remove = 1;
- }
- }
- if (value[0] == '\0')
- dbg(rules->udev, "name empty, node creation supressed\n");
- add_rule_key(rule, &rule->name, operation, value);
- continue;
- }
-
- if (strcasecmp(key, "SYMLINK") == 0) {
- 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;
- }
-
- if (strcasecmp(key, "OWNER") == 0) {
- valid = 1;
- if (rules->resolve_names && (!strchr(value, '$') && !strchr(value, '%'))) {
- char *endptr;
- strtoul(value, &endptr, 10);
- if (endptr[0] != '\0') {
- char owner[32];
- uid_t uid = lookup_user(rules->udev, value);
- dbg(rules->udev, "replacing username='%s' by id=%i\n", value, uid);
- sprintf(owner, "%u", (unsigned int) uid);
- add_rule_key(rule, &rule->owner, operation, owner);
- continue;
- }
- }
-
- add_rule_key(rule, &rule->owner, operation, value);
- continue;
- }
-
- if (strcasecmp(key, "GROUP") == 0) {
- valid = 1;
- if (rules->resolve_names && (!strchr(value, '$') && !strchr(value, '%'))) {
- char *endptr;
- strtoul(value, &endptr, 10);
- if (endptr[0] != '\0') {
- char group[32];
- gid_t gid = lookup_group(rules->udev, value);
- dbg(rules->udev, "replacing groupname='%s' by id=%i\n", value, gid);
- sprintf(group, "%u", (unsigned int) gid);
- add_rule_key(rule, &rule->group, operation, group);
- continue;
- }
- }
-
- add_rule_key(rule, &rule->group, operation, value);
- continue;
- }
-
- if (strcasecmp(key, "MODE") == 0) {
- add_rule_key(rule, &rule->mode, operation, value);
- valid = 1;
- continue;
- }
-
- if (strcasecmp(key, "OPTIONS") == 0) {
- const char *pos;
-
- if (strstr(value, "last_rule") != NULL) {
- dbg(rules->udev, "last rule to be applied\n");
- rule->last_rule = 1;
- }
- if (strstr(value, "ignore_device") != NULL) {
- dbg(rules->udev, "device should be ignored\n");
- rule->ignore_device = 1;
- }
- if (strstr(value, "ignore_remove") != NULL) {
- dbg(rules->udev, "remove event should be ignored\n");
- rule->ignore_remove = 1;
- }
- pos = strstr(value, "link_priority=");
- if (pos != NULL) {
- rule->link_priority = atoi(&pos[strlen("link_priority=")]);
- dbg(rules->udev, "link priority=%i\n", rule->link_priority);
- }
- pos = strstr(value, "event_timeout=");
- if (pos != NULL) {
- rule->event_timeout = atoi(&pos[strlen("event_timeout=")]);
- dbg(rules->udev, "event timout=%i\n", rule->event_timeout);
- }
- pos = strstr(value, "string_escape=");
- if (pos != NULL) {
- pos = &pos[strlen("string_escape=")];
- if (strncmp(pos, "none", strlen("none")) == 0)
- rule->string_escape = ESCAPE_NONE;
- else if (strncmp(pos, "replace", strlen("replace")) == 0)
- rule->string_escape = ESCAPE_REPLACE;
- }
- if (strstr(value, "all_partitions") != NULL) {
- dbg(rules->udev, "creation of partition nodes requested\n");
- rule->partitions = DEFAULT_FAKE_PARTITIONS_COUNT;
- }
- valid = 1;
- continue;
- }
-
- err(rules->udev, "unknown key '%s' in %s:%u\n", key, filename, lineno);