chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
063 release
[elogind.git]
/
udev_rules_parse.c
diff --git
a/udev_rules_parse.c
b/udev_rules_parse.c
index 2ec9348b01c55e342c1e8b20f11cdd3f32b23e90..7c3c2e7fc252698aed9bb4be6c3d0c551a588b14 100644
(file)
--- a/
udev_rules_parse.c
+++ b/
udev_rules_parse.c
@@
-284,6
+284,12
@@
static int add_to_rules(struct udev_rules *rules, char *line)
continue;
}
continue;
}
+ if (strcasecmp(key, "WAIT_FOR_SYSFS") == 0) {
+ add_rule_key(rule, &rule->wait_for_sysfs, operation, value);
+ valid = 1;
+ continue;
+ }
+
if (strncasecmp(key, "ENV", sizeof("ENV")-1) == 0) {
attr = get_key_attribute(key + sizeof("ENV")-1);
if (attr == NULL) {
if (strncasecmp(key, "ENV", sizeof("ENV")-1) == 0) {
attr = get_key_attribute(key + sizeof("ENV")-1);
if (attr == NULL) {
@@
-305,9
+311,13
@@
static int add_to_rules(struct udev_rules *rules, char *line)
attr = get_key_attribute(key + sizeof("IMPORT")-1);
if (attr && strstr(attr, "program")) {
dbg("IMPORT will be executed");
attr = get_key_attribute(key + sizeof("IMPORT")-1);
if (attr && strstr(attr, "program")) {
dbg("IMPORT will be executed");
- rule->import_
exec = 1
;
+ rule->import_
type = IMPORT_PROGRAM
;
} else if (attr && strstr(attr, "file")) {
dbg("IMPORT will be included as file");
} else if (attr && strstr(attr, "file")) {
dbg("IMPORT will be included as file");
+ rule->import_type = IMPORT_FILE;
+ } else if (attr && strstr(attr, "parent")) {
+ dbg("IMPORT will include the parent values");
+ rule->import_type = IMPORT_PARENT;
} else {
/* figure it out if it is executable */
char file[PATH_SIZE];
} else {
/* figure it out if it is executable */
char file[PATH_SIZE];
@@
-320,8
+330,11
@@
static int add_to_rules(struct udev_rules *rules, char *line)
pos[0] = '\0';
dbg("IMPORT auto mode for '%s'", file);
if (!lstat(file, &stats) && (stats.st_mode & S_IXUSR)) {
pos[0] = '\0';
dbg("IMPORT auto mode for '%s'", file);
if (!lstat(file, &stats) && (stats.st_mode & S_IXUSR)) {
- dbg("IMPORT is executable, will be executed");
- rule->import_exec = 1;
+ dbg("IMPORT is executable, will be executed (autotype)");
+ rule->import_type = IMPORT_PROGRAM;
+ } else {
+ dbg("IMPORT is not executable, will be included as file (autotype)");
+ rule->import_type = IMPORT_FILE;
}
}
add_rule_key(rule, &rule->import, operation, value);
}
}
add_rule_key(rule, &rule->import, operation, value);
@@
-359,7
+372,12
@@
static int add_to_rules(struct udev_rules *rules, char *line)
rule->ignore_remove = 1;
}
}
rule->ignore_remove = 1;
}
}
- add_rule_key(rule, &rule->name, operation, value);
+ if (value[0] == '\0') {
+ dbg("name empty device should be ignored");
+ rule->name.operation = operation;
+ rule->ignore_device = 1;
+ } else
+ add_rule_key(rule, &rule->name, operation, value);
continue;
}
continue;
}
@@
-371,7
+389,7
@@
static int add_to_rules(struct udev_rules *rules, char *line)
if (strcasecmp(key, "OWNER") == 0) {
valid = 1;
if (strcasecmp(key, "OWNER") == 0) {
valid = 1;
- if (rules->resolve_names) {
+ if (rules->resolve_names
&& (!strchr(value, '$') && !strchr(value, '%'))
) {
char *endptr;
strtoul(value, &endptr, 10);
if (endptr[0] != '\0') {
char *endptr;
strtoul(value, &endptr, 10);
if (endptr[0] != '\0') {
@@
-390,7
+408,7
@@
static int add_to_rules(struct udev_rules *rules, char *line)
if (strcasecmp(key, "GROUP") == 0) {
valid = 1;
if (strcasecmp(key, "GROUP") == 0) {
valid = 1;
- if (rules->resolve_names) {
+ if (rules->resolve_names
&& (!strchr(value, '$') && !strchr(value, '%'))
) {
char *endptr;
strtoul(value, &endptr, 10);
if (endptr[0] != '\0') {
char *endptr;
strtoul(value, &endptr, 10);
if (endptr[0] != '\0') {
@@
-398,7
+416,7
@@
static int add_to_rules(struct udev_rules *rules, char *line)
gid_t gid = lookup_group(value);
dbg("replacing groupname='%s' by id=%i", value, gid);
sprintf(group, "%li", gid);
gid_t gid = lookup_group(value);
dbg("replacing groupname='%s' by id=%i", value, gid);
sprintf(group, "%li", gid);
- add_rule_key(rule, &rule->
owner
, operation, group);
+ add_rule_key(rule, &rule->
group
, operation, group);
continue;
}
}
continue;
}
}
@@
-537,6
+555,7
@@
static int rules_map(struct udev_rules *rules, const char *filename)
rules->buf = NULL;
return -1;
}
rules->buf = NULL;
return -1;
}
+ rules->mapped = 1;
return 0;
}
return 0;
}