chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
selinux: more context settings
[elogind.git]
/
udev_rules_parse.c
diff --git
a/udev_rules_parse.c
b/udev_rules_parse.c
index 124410a3402d8b7a36f9c4b5ed9274529f9ceb2b..d2392c36e054b144907e0c9b080e2cbc36b05ba9 100644
(file)
--- a/
udev_rules_parse.c
+++ b/
udev_rules_parse.c
@@
-469,6
+469,11
@@
static int add_to_rules(struct udev_rules *rules, char *line, const char *filena
}
if (strncasecmp(key, "TEST", sizeof("TEST")-1) == 0) {
}
if (strncasecmp(key, "TEST", sizeof("TEST")-1) == 0) {
+ if (operation != KEY_OP_MATCH &&
+ operation != KEY_OP_NOMATCH) {
+ err("invalid TEST operation");
+ goto invalid;
+ }
attr = get_key_attribute(key + sizeof("TEST")-1);
if (attr != NULL)
rule->test_mode_mask = strtol(attr, NULL, 8);
attr = get_key_attribute(key + sizeof("TEST")-1);
if (attr != NULL)
rule->test_mode_mask = strtol(attr, NULL, 8);
@@
-525,7
+530,11
@@
static int add_to_rules(struct udev_rules *rules, char *line, const char *filena
}
if (strcasecmp(key, "SYMLINK") == 0) {
}
if (strcasecmp(key, "SYMLINK") == 0) {
- add_rule_key(rule, &rule->symlink, operation, value);
+ 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;
}
valid = 1;
continue;
}
@@
-736,7
+745,9
@@
int udev_rules_init(struct udev_rules *rules, int resolve_names)
strlcat(filename, "/"RULES_DYN_DIR, sizeof(filename));
if (stat(filename, &statbuf) != 0) {
create_path(filename);
strlcat(filename, "/"RULES_DYN_DIR, sizeof(filename));
if (stat(filename, &statbuf) != 0) {
create_path(filename);
+ selinux_setfscreatecon(filename, NULL, S_IFDIR|0755);
mkdir(filename, 0755);
mkdir(filename, 0755);
+ selinux_resetfscreatecon();
}
add_matching_files(&dyn_list, filename, RULESFILE_SUFFIX);
}
add_matching_files(&dyn_list, filename, RULESFILE_SUFFIX);
@@
-753,11
+764,10
@@
int udev_rules_init(struct udev_rules *rules, int resolve_names)
if (name_base == NULL)
continue;
if (name_base == NULL)
continue;
- if (strcmp(name_base, dyn_base) > 0) {
- list_move_tail(&dyn_loop->node, &name_loop->node);
+ if (strcmp(name_base, dyn_base) > 0)
break;
break;
- }
}
}
+ list_move_tail(&dyn_loop->node, &name_loop->node);
}
/* parse list of files */
}
/* parse list of files */
@@
-783,3
+793,4
@@
void udev_rules_cleanup(struct udev_rules *rules)
rules->buf = NULL;
}
}
rules->buf = NULL;
}
}
+