udev-rules: modernize syntax a bit

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2016-02-20 20:40:41 -05:00
parent 4fd6af76c4
commit 99f16bb8d9

View file

@ -1058,55 +1058,43 @@ static void add_rule(struct udev_rules *rules, char *line,
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_ACTION, op, value, NULL);
continue;
}
if (streq(key, "DEVPATH")) {
} else if (streq(key, "DEVPATH")) {
if (op > OP_MATCH_MAX) {
log_error("invalid DEVPATH operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_DEVPATH, op, value, NULL);
continue;
}
if (streq(key, "KERNEL")) {
} else if (streq(key, "KERNEL")) {
if (op > OP_MATCH_MAX) {
log_error("invalid KERNEL operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_KERNEL, op, value, NULL);
continue;
}
if (streq(key, "SUBSYSTEM")) {
} else if (streq(key, "SUBSYSTEM")) {
if (op > OP_MATCH_MAX) {
log_error("invalid SUBSYSTEM operation");
goto invalid;
}
/* bus, class, subsystem events should all be the same */
if (streq(value, "subsystem") ||
streq(value, "bus") ||
streq(value, "class")) {
if (streq(value, "bus") || streq(value, "class"))
log_error("'%s' must be specified as 'subsystem' "
"please fix it in %s:%u", value, filename, lineno);
if (STR_IN_SET(value, "subsystem", "bus", "class")) {
if (!streq(value, "subsystem"))
log_error("'%s' must be specified as 'subsystem'; please fix it in %s:%u",
value, filename, lineno);
rule_add_key(&rule_tmp, TK_M_SUBSYSTEM, op, "subsystem|class|bus", NULL);
} else
rule_add_key(&rule_tmp, TK_M_SUBSYSTEM, op, value, NULL);
continue;
}
if (streq(key, "DRIVER")) {
} else if (streq(key, "DRIVER")) {
if (op > OP_MATCH_MAX) {
log_error("invalid DRIVER operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_DRIVER, op, value, NULL);
continue;
}
if (startswith(key, "ATTR{")) {
} else if (startswith(key, "ATTR{")) {
attr = get_key_attribute(rules->udev, key + strlen("ATTR"));
if (attr == NULL) {
log_error("error parsing ATTR attribute");
@ -1120,10 +1108,8 @@ static void add_rule(struct udev_rules *rules, char *line,
rule_add_key(&rule_tmp, TK_M_ATTR, op, value, attr);
else
rule_add_key(&rule_tmp, TK_A_ATTR, op, value, attr);
continue;
}
if (startswith(key, "SYSCTL{")) {
} else if (startswith(key, "SYSCTL{")) {
attr = get_key_attribute(rules->udev, key + strlen("SYSCTL"));
if (attr == NULL) {
log_error("error parsing SYSCTL attribute");
@ -1137,10 +1123,8 @@ static void add_rule(struct udev_rules *rules, char *line,
rule_add_key(&rule_tmp, TK_M_SYSCTL, op, value, attr);
else
rule_add_key(&rule_tmp, TK_A_SYSCTL, op, value, attr);
continue;
}
if (startswith(key, "SECLABEL{")) {
} else if (startswith(key, "SECLABEL{")) {
attr = get_key_attribute(rules->udev, key + strlen("SECLABEL"));
if (!attr) {
log_error("error parsing SECLABEL attribute");
@ -1152,37 +1136,29 @@ static void add_rule(struct udev_rules *rules, char *line,
}
rule_add_key(&rule_tmp, TK_A_SECLABEL, op, value, attr);
continue;
}
if (streq(key, "KERNELS")) {
} else if (streq(key, "KERNELS")) {
if (op > OP_MATCH_MAX) {
log_error("invalid KERNELS operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_KERNELS, op, value, NULL);
continue;
}
if (streq(key, "SUBSYSTEMS")) {
} else if (streq(key, "SUBSYSTEMS")) {
if (op > OP_MATCH_MAX) {
log_error("invalid SUBSYSTEMS operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_SUBSYSTEMS, op, value, NULL);
continue;
}
if (streq(key, "DRIVERS")) {
} else if (streq(key, "DRIVERS")) {
if (op > OP_MATCH_MAX) {
log_error("invalid DRIVERS operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_DRIVERS, op, value, NULL);
continue;
}
if (startswith(key, "ATTRS{")) {
} else if (startswith(key, "ATTRS{")) {
if (op > OP_MATCH_MAX) {
log_error("invalid ATTRS operation");
goto invalid;
@ -1199,19 +1175,15 @@ static void add_rule(struct udev_rules *rules, char *line,
log_error("do not reference parent sysfs directories directly, "
"it may break with a future kernel, please fix it in %s:%u", filename, lineno);
rule_add_key(&rule_tmp, TK_M_ATTRS, op, value, attr);
continue;
}
if (streq(key, "TAGS")) {
} else if (streq(key, "TAGS")) {
if (op > OP_MATCH_MAX) {
log_error("invalid TAGS operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_TAGS, op, value, NULL);
continue;
}
if (startswith(key, "ENV{")) {
} else if (startswith(key, "ENV{")) {
attr = get_key_attribute(rules->udev, key + strlen("ENV"));
if (attr == NULL) {
log_error("error parsing ENV attribute");
@ -1225,60 +1197,46 @@ static void add_rule(struct udev_rules *rules, char *line,
if (rule_add_key(&rule_tmp, TK_M_ENV, op, value, attr) != 0)
goto invalid;
} else {
static const char *blacklist[] = {
"ACTION",
"SUBSYSTEM",
"DEVTYPE",
"MAJOR",
"MINOR",
"DRIVER",
"IFINDEX",
"DEVNAME",
"DEVLINKS",
"DEVPATH",
"TAGS",
};
unsigned int i;
for (i = 0; i < ELEMENTSOF(blacklist); i++) {
if (!streq(attr, blacklist[i]))
continue;
if (STR_IN_SET(attr,
"ACTION",
"SUBSYSTEM",
"DEVTYPE",
"MAJOR",
"MINOR",
"DRIVER",
"IFINDEX",
"DEVNAME",
"DEVLINKS",
"DEVPATH",
"TAGS")) {
log_error("invalid ENV attribute, '%s' can not be set %s:%u", attr, filename, lineno);
goto invalid;
}
if (rule_add_key(&rule_tmp, TK_A_ENV, op, value, attr) != 0)
goto invalid;
}
continue;
}
if (streq(key, "TAG")) {
} else if (streq(key, "TAG")) {
if (op < OP_MATCH_MAX)
rule_add_key(&rule_tmp, TK_M_TAG, op, value, NULL);
else
rule_add_key(&rule_tmp, TK_A_TAG, op, value, NULL);
continue;
}
if (streq(key, "PROGRAM")) {
} else if (streq(key, "PROGRAM")) {
if (op == OP_REMOVE) {
log_error("invalid PROGRAM operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_PROGRAM, op, value, NULL);
continue;
}
if (streq(key, "RESULT")) {
} else if (streq(key, "RESULT")) {
if (op > OP_MATCH_MAX) {
log_error("invalid RESULT operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_M_RESULT, op, value, NULL);
continue;
}
if (startswith(key, "IMPORT")) {
} else if (startswith(key, "IMPORT")) {
attr = get_key_attribute(rules->udev, key + strlen("IMPORT"));
if (attr == NULL) {
log_error("IMPORT{} type missing, ignoring IMPORT %s:%u", filename, lineno);
@ -1319,10 +1277,8 @@ static void add_rule(struct udev_rules *rules, char *line,
rule_add_key(&rule_tmp, TK_M_IMPORT_PARENT, op, value, NULL);
} else
log_error("IMPORT{} unknown type, ignoring IMPORT %s:%u", filename, lineno);
continue;
}
if (startswith(key, "TEST")) {
} else if (startswith(key, "TEST")) {
mode_t mode = 0;
if (op > OP_MATCH_MAX) {
@ -1333,13 +1289,10 @@ static void add_rule(struct udev_rules *rules, char *line,
if (attr != NULL) {
mode = strtol(attr, NULL, 8);
rule_add_key(&rule_tmp, TK_M_TEST, op, value, &mode);
} else {
} else
rule_add_key(&rule_tmp, TK_M_TEST, op, value, NULL);
}
continue;
}
if (startswith(key, "RUN")) {
} else if (startswith(key, "RUN")) {
attr = get_key_attribute(rules->udev, key + strlen("RUN"));
if (attr == NULL)
attr = "program";
@ -1356,35 +1309,27 @@ static void add_rule(struct udev_rules *rules, char *line,
else
log_error("RUN{builtin}: '%s' unknown %s:%u", value, filename, lineno);
} else if (streq(attr, "program")) {
enum udev_builtin_cmd cmd = UDEV_BUILTIN_MAX;
const enum udev_builtin_cmd cmd = UDEV_BUILTIN_MAX;
rule_add_key(&rule_tmp, TK_A_RUN_PROGRAM, op, value, &cmd);
} else {
} else
log_error("RUN{} unknown type, ignoring RUN %s:%u", filename, lineno);
}
continue;
}
if (streq(key, "LABEL")) {
} else if (streq(key, "LABEL")) {
if (op == OP_REMOVE) {
log_error("invalid LABEL operation");
goto invalid;
}
rule_tmp.rule.rule.label_off = rules_add_string(rules, value);
continue;
}
if (streq(key, "GOTO")) {
} else if (streq(key, "GOTO")) {
if (op == OP_REMOVE) {
log_error("invalid GOTO operation");
goto invalid;
}
rule_add_key(&rule_tmp, TK_A_GOTO, 0, value, NULL);
continue;
}
if (startswith(key, "NAME")) {
} else if (startswith(key, "NAME")) {
if (op == OP_REMOVE) {
log_error("invalid NAME operation");
goto invalid;
@ -1405,10 +1350,8 @@ static void add_rule(struct udev_rules *rules, char *line,
rule_add_key(&rule_tmp, TK_A_NAME, op, value, NULL);
}
rule_tmp.rule.rule.can_set_name = true;
continue;
}
if (streq(key, "SYMLINK")) {
} else if (streq(key, "SYMLINK")) {
if (op == OP_REMOVE) {
log_error("invalid SYMLINK operation");
goto invalid;
@ -1418,10 +1361,8 @@ static void add_rule(struct udev_rules *rules, char *line,
else
rule_add_key(&rule_tmp, TK_A_DEVLINK, op, value, NULL);
rule_tmp.rule.rule.can_set_name = true;
continue;
}
if (streq(key, "OWNER")) {
} else if (streq(key, "OWNER")) {
uid_t uid;
char *endptr;
@ -1440,10 +1381,8 @@ static void add_rule(struct udev_rules *rules, char *line,
rule_add_key(&rule_tmp, TK_A_OWNER, op, value, NULL);
rule_tmp.rule.rule.can_set_name = true;
continue;
}
if (streq(key, "GROUP")) {
} else if (streq(key, "GROUP")) {
gid_t gid;
char *endptr;
@ -1462,10 +1401,8 @@ static void add_rule(struct udev_rules *rules, char *line,
rule_add_key(&rule_tmp, TK_A_GROUP, op, value, NULL);
rule_tmp.rule.rule.can_set_name = true;
continue;
}
if (streq(key, "MODE")) {
} else if (streq(key, "MODE")) {
mode_t mode;
char *endptr;
@ -1480,10 +1417,8 @@ static void add_rule(struct udev_rules *rules, char *line,
else
rule_add_key(&rule_tmp, TK_A_MODE, op, value, NULL);
rule_tmp.rule.rule.can_set_name = true;
continue;
}
if (streq(key, "OPTIONS")) {
} else if (streq(key, "OPTIONS")) {
const char *pos;
if (op == OP_REMOVE) {
@ -1531,11 +1466,10 @@ static void add_rule(struct udev_rules *rules, char *line,
rule_tmp.rule.rule.has_static_node = true;
}
continue;
} else {
log_error("unknown key '%s' in %s:%u", key, filename, lineno);
goto invalid;
}
log_error("unknown key '%s' in %s:%u", key, filename, lineno);
goto invalid;
}
/* add rule token */
@ -2427,10 +2361,11 @@ void udev_rules_apply_to_event(struct udev_rules *rules,
log_debug("%i character(s) replaced", count);
}
if (major(udev_device_get_devnum(event->dev)) &&
(!streq(name_str, udev_device_get_devnode(event->dev) + strlen("/dev/")))) {
log_error("NAME=\"%s\" ignored, kernel device nodes "
"can not be renamed; please fix it in %s:%u\n", name,
rules_str(rules, rule->rule.filename_off), rule->rule.filename_line);
!streq(name_str, udev_device_get_devnode(event->dev) + strlen("/dev/"))) {
log_error("NAME=\"%s\" ignored, kernel device nodes cannot be renamed; please fix it in %s:%u\n",
name,
rules_str(rules, rule->rule.filename_off),
rule->rule.filename_line);
break;
}
if (free_and_strdup(&event->name, name_str) < 0) {