SUBST_PARENT,
SUBST_TEMP_NODE,
SUBST_NAME,
+ SUBST_LINKS,
SUBST_ROOT,
SUBST_SYS,
SUBST_ENV,
{ .name = "parent", .fmt = 'P', .type = SUBST_PARENT },
{ .name = "tempnode", .fmt = 'N', .type = SUBST_TEMP_NODE },
{ .name = "name", .fmt = 'D', .type = SUBST_NAME },
+ { .name = "links", .fmt = 'L', .type = SUBST_LINKS },
{ .name = "root", .fmt = 'r', .type = SUBST_ROOT },
{ .name = "sys", .fmt = 'S', .type = SUBST_SYS },
{ .name = "env", .fmt = 'E', .type = SUBST_ENV },
dbg("substitute temporary device node name '%s'\n", udev->tmp_node);
break;
case SUBST_NAME:
- strlcat(string, udev->name, maxsize);
- dbg("substitute udev->name '%s'\n", udev->name);
+ if (udev->name[0] == '\0') {
+ strlcat(string, udev->dev->kernel, maxsize);
+ dbg("substitute udev->kernel '%s'\n", udev->name);
+ } else {
+ strlcat(string, udev->name, maxsize);
+ dbg("substitute udev->name '%s'\n", udev->name);
+ }
+ break;
+ case SUBST_LINKS:
+ if (!list_empty(&udev->symlink_list)) {
+ struct name_entry *name_loop;
+ char symlinks[PATH_SIZE] = "";
+
+ list_for_each_entry(name_loop, &udev->symlink_list, node) {
+ strlcat(symlinks, name_loop->name, sizeof(symlinks));
+ strlcat(symlinks, " ", sizeof(symlinks));
+ }
+ remove_trailing_chars(symlinks, ' ');
+ strlcat(string, symlinks, maxsize);
+ }
break;
case SUBST_ROOT:
strlcat(string, udev_root, maxsize);
udev->link_priority = rule->link_priority;
info("link_priority=%i\n", udev->link_priority);
}
+ if (rule->event_timeout >= 0) {
+ udev->event_timeout = rule->event_timeout;
+ info("event_timeout=%i\n", udev->event_timeout);
+ }
/* apply all_partitions option only at a main block device */
if (rule->partitions &&
strcmp(udev->dev->subsystem, "block") == 0 && udev->dev->kernel_number[0] == '\0') {
if (!udev->mode_final && rule->mode.operation != KEY_OP_UNSET) {
if (rule->mode.operation == KEY_OP_ASSIGN_FINAL)
udev->mode_final = 1;
- udev->mode = strtol(key_val(rule, &rule->mode), NULL, 8);
+ char buf[20];
+ strlcpy(buf, key_val(rule, &rule->mode), sizeof(buf));
+ udev_rules_apply_format(udev, buf, sizeof(buf));
+ udev->mode = strtol(buf, NULL, 8);
dbg("applied mode=%#o to '%s'\n", udev->mode, udev->dev->kernel);
}
if (!udev->owner_final && rule->owner.operation != KEY_OP_UNSET) {