1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| | Add $EUDEV_RULES_DIRECTORY to the list of rules directories.
The old udev 182 supported $UDEV_CONFIG_FILE, which in turn allowed
the search path to be customized, but eudev no longer has this, hence
this hack.
Index: eudev/src/udev/udev-rules.c
===================================================================
--- eudev.orig/src/udev/udev-rules.c
+++ eudev/src/udev/udev-rules.c
@@ -48,15 +48,11 @@ struct uid_gid {
};
};
-static const char* const rules_dirs[] = {
+static const char* rules_dirs[] = {
+ NULL, /* placeholder for $EUDEV_RULES_DIRECTORY */
UDEV_CONF_DIR "/rules.d",
UDEV_RULES_DIR,
- UDEV_ROOT_RUN "/udev/rules.d",
UDEV_LIBEXEC_DIR "/rules.d",
-#ifdef HAVE_SPLIT_USR
- "/lib/udev/rules.d",
- "/usr/lib/udev/rules.d",
-#endif
NULL};
struct udev_rules {
@@ -1691,6 +1687,14 @@ static int parse_file(struct udev_rules
return 0;
}
+static const char** rules_dirs_real()
+{
+ if (rules_dirs[0])
+ return rules_dirs;
+ else
+ return rules_dirs + 1;
+}
+
struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names) {
struct udev_rules *rules;
struct udev_list file_list;
@@ -1717,7 +1721,10 @@ struct udev_rules *udev_rules_new(struct
udev_rules_check_timestamp(rules);
- r = conf_files_list_strv(&files, ".rules", NULL, rules_dirs);
+ /* Allow the user to specify an additional rules directory. */
+ rules_dirs[0] = getenv("EUDEV_RULES_DIRECTORY");
+
+ r = conf_files_list_strv(&files, ".rules", NULL, rules_dirs_real ());
if (r < 0) {
log_error_errno(r, "failed to enumerate rules files: %m");
return udev_rules_unref(rules);
@@ -1776,7 +1783,9 @@ bool udev_rules_check_timestamp(struct u
if (!rules)
return false;
- return paths_check_timestamp(rules_dirs, &rules->dirs_ts_usec, true);
+ return paths_check_timestamp(rules_dirs_real (),
+ &rules->dirs_ts_usec,
+ true);
}
static int match_key(struct udev_rules *rules, struct token *token, const char *val) {
|