summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2012-02-10 10:10:36 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2012-02-10 10:10:38 +0000
commit21c8094040bba43b5cc5aae016b57eb3b0cac450 (patch)
treed5ba49e1002743306f392b1f1794e9470f0bca00
parent349260f245d95a6c8bcc0f000be1f3232c616052 (diff)
parentfccb5a0fe11a2293ba5bfc09e0f3fe296d724eb2 (diff)
Merge branch 'system-search-paths-21620'
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=21620 Reviewed-by: Lennart Poettering <lennart@poettering.net>
-rw-r--r--bus/config-parser.c4
-rw-r--r--dbus/dbus-sysdeps-unix.c51
-rw-r--r--doc/dbus-specification.xml27
3 files changed, 40 insertions, 42 deletions
diff --git a/bus/config-parser.c b/bus/config-parser.c
index c636707f..a8953627 100644
--- a/bus/config-parser.c
+++ b/bus/config-parser.c
@@ -3393,8 +3393,8 @@ test_default_session_servicedirs (void)
static const char *test_system_service_dir_matches[] =
{
#ifdef DBUS_UNIX
- "/testusr/testlocal/testshare/dbus-1/system-services",
- "/testusr/testshare/dbus-1/system-services",
+ "/usr/local/share/dbus-1/system-services",
+ "/usr/share/dbus-1/system-services",
#endif
DBUS_DATADIR"/dbus-1/system-services",
#ifdef DBUS_UNIX
diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
index 22868e2e..67034a03 100644
--- a/dbus/dbus-sysdeps-unix.c
+++ b/dbus/dbus-sysdeps-unix.c
@@ -3691,54 +3691,27 @@ _dbus_get_standard_session_servicedirs (DBusList **dirs)
dbus_bool_t
_dbus_get_standard_system_servicedirs (DBusList **dirs)
{
- const char *xdg_data_dirs;
- DBusString servicedir_path;
-
- if (!_dbus_string_init (&servicedir_path))
- return FALSE;
-
- xdg_data_dirs = _dbus_getenv ("XDG_DATA_DIRS");
-
- if (xdg_data_dirs != NULL)
- {
- if (!_dbus_string_append (&servicedir_path, xdg_data_dirs))
- goto oom;
-
- if (!_dbus_string_append (&servicedir_path, ":"))
- goto oom;
- }
- else
- {
- if (!_dbus_string_append (&servicedir_path, "/usr/local/share:/usr/share:"))
- goto oom;
- }
-
/*
- * Add configured datadir to defaults. This may be the same as one
- * of the XDG directories. However, the config parser should take
- * care of the duplicates.
+ * DBUS_DATADIR may be the same as one of the standard directories. However,
+ * the config parser should take care of the duplicates.
*
* Also, append /lib as counterpart of /usr/share on the root
* directory (the root directory does not know /share), in order to
* facilitate early boot system bus activation where /usr might not
* be available.
*/
- if (!_dbus_string_append (&servicedir_path,
- DBUS_DATADIR":"
- "/lib:"))
- goto oom;
-
- if (!_dbus_split_paths_and_append (&servicedir_path,
- DBUS_UNIX_STANDARD_SYSTEM_SERVICEDIR,
- dirs))
- goto oom;
+ static const char standard_search_path[] =
+ "/usr/local/share:"
+ "/usr/share:"
+ DBUS_DATADIR ":"
+ "/lib";
+ DBusString servicedir_path;
- _dbus_string_free (&servicedir_path);
- return TRUE;
+ _dbus_string_init_const (&servicedir_path, standard_search_path);
- oom:
- _dbus_string_free (&servicedir_path);
- return FALSE;
+ return _dbus_split_paths_and_append (&servicedir_path,
+ DBUS_UNIX_STANDARD_SYSTEM_SERVICEDIR,
+ dirs);
}
/**
diff --git a/doc/dbus-specification.xml b/doc/dbus-specification.xml
index 959c4e7f..0717f7f2 100644
--- a/doc/dbus-specification.xml
+++ b/doc/dbus-specification.xml
@@ -4636,7 +4636,32 @@
</footnote>
</para>
<para>
- [FIXME specify location of system bus .service files]
+ On Unix systems, the system bus should default to searching
+ for .service files in
+ <literal>/usr/local/share/dbus-1/system-services</literal>,
+ <literal>/usr/share/dbus-1/system-services</literal> and
+ <literal>/lib/dbus-1/system-services</literal>, with that order
+ of precedence. It may also search other implementation-specific
+ locations, but should not vary these locations based on environment
+ variables.
+ <footnote>
+ <para>
+ The system bus is security-sensitive and is typically executed
+ by an init system with a clean environment. Its launch helper
+ process is particularly security-sensitive, and specifically
+ clears its own environment.
+ </para>
+ </footnote>
+ </para>
+ <para>
+ Software packages should install their system .service
+ files to their configured
+ <literal>${datadir}/dbus-1/system-services</literal>,
+ where <literal>${datadir}</literal> is as defined by the GNU
+ coding standards. System administrators can arrange
+ for these service files to be read by editing the system bus'
+ configuration file or by symlinking them into the default
+ locations.
</para>
</sect3>
</sect2>