|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
From 87041721ccfc9472d9c4f229402e342ba6c855b0 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
From: Kay Sievers <kay@vrfy.org>
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
Date: Wed, 22 Jan 2014 10:47:48 +0100
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
Subject: [PATCH] udev: static_node - do not exit rule after first static_node
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
item
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
The nodes usually do not exist, so handle the next item instead of
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
skipping the entire rule.
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
src/udev/udev-rules.c | 21 ++++++++++-----------
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
1 file changed, 10 insertions(+), 11 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
index 6f8b127..c981773 100644
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
--- a/src/udev/udev-rules.c
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+++ b/src/udev/udev-rules.c
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
@@ -900,6 +900,7 @@ static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
case TK_A_GOTO:
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
case TK_M_TAG:
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
case TK_A_TAG:
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+ case TK_A_STATIC_NODE:
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
token->key.value_off = rules_add_string(rule_tmp->rules, value);
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
break;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
case TK_M_IMPORT_BUILTIN:
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
@@ -942,9 +943,6 @@ static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
case TK_A_MODE_ID:
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
token->key.mode = *(mode_t *)data;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
break;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- case TK_A_STATIC_NODE:
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- token->key.value_off = rules_add_string(rule_tmp->rules, value);
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- break;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
case TK_M_EVENT_TIMEOUT:
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
token->key.event_timeout = *(int *)data;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
break;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
@@ -992,7 +990,7 @@ static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
if (attr != NULL) {
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- /* check if property/attribut name has substitution chars */
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+ /* check if property/attribute name has substitution chars */
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
if (attr[0] == '[')
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
token->key.attrsubst = SB_SUBSYS;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
else if (strchr(attr, '%') != NULL || strchr(attr, '$') != NULL)
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
@@ -2576,15 +2574,11 @@ int udev_rules_apply_static_dev_perms(struct udev_rules *rules)
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
/* we assure, that the permissions tokens are sorted before the static token */
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
if (mode == 0 && uid == 0 && gid == 0 && tags == NULL)
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
goto next;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
strscpyl(device_node, sizeof(device_node), "/dev/", rules_str(rules, cur->key.value_off), NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- if (stat(device_node, &stats) != 0)
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- goto next;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode))
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- goto next;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+ /* export the tags to a directory as symlinks, allowing otherwise dead nodes to be tagged */
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
if (tags) {
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- /* Export the tags to a directory as symlinks, allowing otherwise dead nodes to be tagged */
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
STRV_FOREACH(t, tags) {
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
_cleanup_free_ char *unescaped_filename = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
@@ -2609,7 +2603,12 @@ int udev_rules_apply_static_dev_perms(struct udev_rules *rules)
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
/* don't touch the permissions if only the tags were set */
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
if (mode == 0 && uid == 0 && gid == 0)
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
- goto next;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+ break;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+ if (stat(device_node, &stats) != 0)
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+ break;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+ if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode))
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
+ break;
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
if (mode == 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
ca73a2 |
if (gid > 0)
|