summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac4
-rw-r--r--src/udev/Makefile.am1
-rw-r--r--src/udev/udev-event.c3
-rw-r--r--src/udev/udev-rules.c19
4 files changed, 24 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index a994a5c1c9..1106b33016 100644
--- a/configure.ac
+++ b/configure.ac
@@ -127,7 +127,7 @@ AC_ARG_ENABLE(
[split-usr],
[AS_HELP_STRING(
[--enable-split-usr],
- [Assume that /bin, /sbin are not symlinks into /usr])],
+ [Include hard-coded default search paths in / and /usr])],
[],
[AS_IF(
[test "x${ac_default_prefix}" != "x${with_rootprefix}"],
@@ -137,7 +137,7 @@ AC_ARG_ENABLE(
AS_IF(
[test "x${enable_split_usr}" = "xyes"],
- [AC_DEFINE(HAVE_SPLIT_USR, 1, [Define if /bin, /sbin are not symlinks into /usr])]
+ [AC_DEFINE(HAVE_SPLIT_USR, 1, [Define to include hard-coded default search paths in / and /usr])]
)
# Configured paths
diff --git a/src/udev/Makefile.am b/src/udev/Makefile.am
index b65048bf91..ea3b15f5b1 100644
--- a/src/udev/Makefile.am
+++ b/src/udev/Makefile.am
@@ -6,6 +6,7 @@ AM_CPPFLAGS = \
-DROOTPREFIX=\"$(rootprefix)\" \
-DUDEV_HWDB_DIR=\"$(udevhwdbdir)\" \
-DUDEV_HWDB_BIN=\"$(udevhwdbbin)\" \
+ -DUDEV_CONF_DIR=\"$(udevconfdir)\" \
-DUDEV_RULES_DIR=\"$(udevrulesdir)\" \
-DUDEV_LIBEXEC_DIR=\"$(udevlibexecdir)\" \
-I $(top_srcdir)/src/libudev
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
index 46e7578d0d..cbcb3f5ab2 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
@@ -687,10 +687,13 @@ int udev_event_spawn(struct udev_event *event,
}
/* allow programs in /usr/lib/udev/ to be called without the path */
+ /* NOTE - paths need reworking, see note in udev-rules.c */
if (argv[0][0] != '/') {
util_strscpyl(program, sizeof(program), UDEV_LIBEXEC_DIR "/", argv[0], NULL);
#ifdef HAVE_SPLIT_USR
if(access(program, X_OK))
+ util_strscpyl(program, sizeof(program), "/usr/lib/udev/", argv[0], NULL);
+ if(access(program, X_OK))
util_strscpyl(program, sizeof(program), "/lib/udev/", argv[0], NULL);
#endif
argv[0] = program;
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 0611c1d6fa..55d9ba9a8a 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -1600,11 +1600,28 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
if (!rules->strbuf)
return udev_rules_unref(rules);
- rules->dirs = strv_new(UDEV_RULES_DIR,
+ /* Note - need a better way to manage these paths:
+ * ie, should have a list of paths we always support, and
+ * do not include the #define vars if they are duplicates
+ *
+ * original - UDEV_RULES_DIR should be /etc/udev/rules.d
+ * ..but we have it set to UDEV_LIBEXEC_DIR "/rules.d" so that
+ * ..the default rules are installed there instead of in /etc
+ *
+ * original2 - UDEV_LIBEXEC_DIR used to be forced to /usr/lib/udev
+ * ..by default, we have it as /lib/udev (or whatever rootlibdir is)
+ * ..therefore we did not include /usr/lib/udev/rules.d.
+ *
+ * Reworked code; there are duplicate paths here but at least
+ * everyting is listed.
+ */
+ rules->dirs = strv_new(UDEV_CONF_DIR "/rules.d",
+ UDEV_RULES_DIR,
"/run/udev/rules.d",
UDEV_LIBEXEC_DIR "/rules.d",
#ifdef HAVE_SPLIT_USR
"/lib/udev/rules.d",
+ "/usr/lib/udev/rules.d",
#endif
NULL);
if (!rules->dirs) {