cmake: Make DBUS_SESSION_SOCKET_DIR in CMakeCache.txt consistent with config.h
It's unexpected to have DBUS_SESSION_SOCKET_DIR take different values in
CMakeCache.txt, which lists the variables that are available to be set
by the caller, and in config.h, which makes their final values available
to the C code. If DBUS_SESSION_SOCKET_DIR is empty and we are running
on Unix, set it to its dynamically-chosen fallback before storing it in
the cache.
[smcv: Add commit message] Co-authored-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Mon, 28 Apr 2025 13:06:39 +0000 (14:06 +0100)]
build: Don't use build-time TMPDIR, TEMP, TMP as socket directory
When the ancestor of this code was introduced in 2003 (commit e45e4382),
it was presumably most common to have these variables either unset, or
set to a value that is system-wide and remains valid in the long term,
such as /tmp or /var/tmp.
However, on modern systems they are sometimes set to a value that is
itself temporary, for example /var/folders/${some_long_path}/T on macOS,
or user-specific, for example /tmp/user/$(id -u) on Linux with
libpam-tmpdir. These values are certainly not useful to hard-code into
libdbus and dbus-daemon during installation: they will not be usable
when running dbus-related programs after a reboot or as a different user.
So, instead of assuming TMPDIR, TEMP and TMP remain valid long-term,
we now hard-code /tmp as our default.
As before, system integrators can override this default with
`-Dsession_socket_dir=...` (Meson) or `-DDBUS_SESSION_SOCKET_DIR=...`
(CMake) if a different directory is more appropriate than /tmp.
However, system integrators should note that because AF_UNIX paths have
a relatively short length limit (typically 108 bytes), a short path is
better than a long path in this context.
Resolves: dbus/dbus#551 Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Mon, 28 Apr 2025 12:43:56 +0000 (13:43 +0100)]
meson: Make default directory for test sockets follow session
This makes it a bit easier to override both temporary directories used
for sockets to the same place. If a directory is suitable for production
use for the session bus' temporary sockets, the same directory is very
likely to be suitable for build-time tests as well, and using that
directory for both purposes makes the tests more realistic.
The non-default CMake build system already did the equivalent of this:
it doesn't have an equivalent of test_socket_dir, and setting its
equivalent of session_socket_dir affects both.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Mon, 28 Apr 2025 12:35:08 +0000 (13:35 +0100)]
build: Only define DBUS_SESSION_SOCKET_DIR on Unix
This is not used on Windows (in fact it's only used in the
dbus-cleanup-sockets(1) tool) so it's OK for it to have a value like /tmp
that would be inappropriate on Windows. Make that more obvious.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Fri, 7 Mar 2025 15:10:00 +0000 (15:10 +0000)]
bus: Correct commented-out default auth_timeout in system.conf
Commit 54d26df5 "config: change default auth_timeout to 5 seconds"
reduced the hard-coded default from 30 to 5 seconds, and the
commented-out informational copy of this information in system.conf
reflected that.
Commit 02e1ddf9 'Revert "config: change default auth_timeout to 5 seconds"'
subsequently increased hard-coded default back to 30 seconds, but did
not update the commented-out version in this file.
See also CVE-2014-3639, fd.o #80919, fd.o #86431.
Fixes: 1a36f983 "Document default limits in system.conf.in" Fixes: 02e1ddf9 'Revert "config: change default auth_timeout to 5 seconds"' Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Fri, 28 Feb 2025 14:44:19 +0000 (14:44 +0000)]
CI: Don't build on FreeBSD with CMake by default
We recommend the Meson build system for all target operating systems
other than Windows. We do try to keep CMake builds operational on Linux
to make life easier for developers, but the `opensuse cmake debug` job,
which runs by default, is sufficient for that.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Fri, 28 Feb 2025 14:42:50 +0000 (14:42 +0000)]
CI: Enable Windows build with Meson, gcc and UCRT64
This was broken for a while (see dbus#462, dbus!426, dbus!429, dbus!512)
but now it works again. Let's not allow it to regress without someone
noticing.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Fri, 28 Feb 2025 12:31:01 +0000 (12:31 +0000)]
build: Link subprojects statically if built as a subproject
If we're building a dependency as a fallback subproject, we don't want
to be responsible for installing it as a shared library. Anyone wanting
shared libraries should install the dependencies separately.
Ideally we'd do this with MSVC too, but that doesn't currently link
successfully (dbus#549).
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Fri, 28 Feb 2025 12:03:55 +0000 (12:03 +0000)]
build: If expat is a submodule, explicitly disable its unit tests
If we're falling back to building a local copy of expat, running or
debugging its unit tests is out-of-scope for maintenance of dbus.
In fact this is the default in the meson_options.txt provided by
WrapDB[1], but explicit is better than implicit.
Simon McVittie [Thu, 27 Feb 2025 19:26:50 +0000 (19:26 +0000)]
CI: Install meson from bookworm-backports when using GLib subproject
Debian 12 'bookworm' has Meson 1.0.1, which is too old for the current
stable branch of GLib. Use the version from bookworm-backports when
running on Debian and building with a mingw-w64 compiler.
We can stop doing this and put meson back in the normal list of
packages when we update to the Debian 13 stable release, expected to be
released in mid 2025.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Mon, 14 Aug 2023 16:17:27 +0000 (17:17 +0100)]
subprojects: Update fallback expat subproject
Updated with:
meson wrap update
expat 2.6.4 contains security fixes. In practice these don't affect
dbus, because we only use expat to parse trusted message bus
configuration, but we might as well use the newest available version.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Thu, 27 Feb 2025 16:35:16 +0000 (16:35 +0000)]
CI: Use a separate tagged Docker image for each dbus branch
The image contains build-dependencies from tools/ci-install.sh, so it
can be different for 1.16.x vs. main. Include the upstream branch name
in the tag name, like we already did for the Windows image, so that
an image with the same timestamp but different content can be different.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Thu, 27 Feb 2025 15:10:18 +0000 (15:10 +0000)]
CI: Fetch a different URL on sourceforge.net
Commit a56de468 "CI: Avoid using a no-op download location that gives
a 403 error" changed this, but now the direct URL to the file *also*
gives a 403 error. According to the comments in this file, the only
reason we're fetching these URLs is in an effort to pre-seed the
cache of intermediate certificates, so the specific URL that we're
requesting is uninteresting: we just need to fetch *something*.
dbus#546
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Tue, 18 Feb 2025 10:37:28 +0000 (10:37 +0000)]
selinux: Don't include unused reference count in verbose logging
libselinux 3.8 includes an API break in which the `refcnt` field of
struct security_id_t (originally intended to be a reference count, but
in practice always initialized to 1 and never modified) was renamed and
repurposed as an `id` field. This caused a build failure if dbus was
compiled with both SELinux support and verbose mode, for example in the
instrumented debug build that Debian includes in the `dbus-tests` package.
This particular piece of debug logging has little value, so just
remove it.
Reference: https://github.com/SELinuxProject/selinux/commit/e5fd7b078fb8eb0b15eb5beaccd0e6a07ec26758
Bug-Debian: https://bugs.debian.org/1096212 Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Tue, 17 Dec 2024 12:48:00 +0000 (12:48 +0000)]
README: Stop describing odd/even as Linux kernel versioning
The Linux kernel hasn't used this versioning scheme for years
(the last odd-numbered development branch was 2.5).
We are still using the odd/even versioning scheme, and so are some other
library projects. Cite GLib and SDL as better examples of projects that
still use it.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Tue, 17 Dec 2024 12:44:57 +0000 (12:44 +0000)]
README.win, README.cygwin: Describe dbus4win, etc. as historical
The merge of Windows-specific dbus ports into the same git repository
as the original Unix-only implementation was a long time ago now,
and exists on several stable-branches, not just master.
This also avoids explicitly mentioning the name of the master branch,
which is likely to be renamed to main in future.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Tue, 17 Dec 2024 12:42:36 +0000 (12:42 +0000)]
INSTALL, README: Simplify Meson vs. CMake recommendation
Now that 1.16.0 has been released and 1.15.x is EOL, it's misleading
to say that Meson is the recommended build system for Unix only on the
master branch: it's the recommended build system for Unix on the
dbus-1.16 branch, too.
This also avoids explicitly naming the master branch, which is likely
to get renamed to main.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Fri, 13 Dec 2024 10:53:23 +0000 (10:53 +0000)]
meson: Don't interpolate the result of configure_file() into a format()
configure_file() returns a file object, which was not intended to be a
valid parameter for format() (even though in practice it works the way
we wanted it to), causing newer Meson versions to report deprecation
warnings.
If the version of Meson is new enough, we can use the full_path()
method. Otherwise, we'll have to re-compute the output filename.
Simon McVittie [Fri, 13 Dec 2024 10:53:23 +0000 (10:53 +0000)]
meson: Don't interpolate the result of configure_file() into a format()
configure_file() returns a file object, which was not intended to be a
valid parameter for format() (even though in practice it works the way
we wanted it to), causing newer Meson versions to report deprecation
warnings.
If the version of Meson is new enough, we can use the full_path()
method. Otherwise, we'll have to re-compute the output filename.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie [Fri, 13 Dec 2024 10:54:56 +0000 (10:54 +0000)]
CI: Use Debian 12 as default container
I don't think we use this for anything any more, because all build
targets run in some more specific container; but just in case it's
used, we should select the current stable release of Debian and not a
previous, EOL version.
Simon McVittie [Fri, 13 Dec 2024 10:54:56 +0000 (10:54 +0000)]
CI: Use Debian 12 as default container
I don't think we use this for anything any more, because all build
targets run in some more specific container; but just in case it's
used, we should select the current stable release of Debian and not a
previous, EOL version.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Ralf Habacker [Wed, 11 Dec 2024 14:33:44 +0000 (15:33 +0100)]
cmake: add missing environment variables for running tests
To achieve comparable results with Meson, the test environment should
provide the same set of environment variables when used in the source
code or the test environment.
Ralf Habacker [Wed, 11 Dec 2024 14:33:44 +0000 (15:33 +0100)]
cmake: add missing environment variables for running tests
To achieve comparable results with Meson, the test environment should
provide the same set of environment variables when used in the source
code or the test environment.
Simon McVittie [Tue, 10 Dec 2024 11:00:28 +0000 (11:00 +0000)]
bus: Update a build system cross-reference
We no longer have an Autotools build system, but Meson sets the same
environment variables that Autotools used to set. CMake does not, yet,
but ideally should.
Resolves: https://gitlab.freedesktop.org/dbus/dbus/-/issues/538 Signed-off-by: Simon McVittie <smcv@collabora.com>
(cherry picked from commit 229e48f549dfb1af891545fd978974dd462777da)
Mohamed Akram [Tue, 10 Dec 2024 13:30:19 +0000 (17:30 +0400)]
sysdeps-unix: Report missing launchd session bus as non-fatal
init_connections_unlocked() is called when connecting to any of the
well-known buses, and it initializes all of the well-known addresses:
session, system and starter. This means that a failure here causes
failure to connect to any one of the well-known buses, even if the
failure is actually only relevant to a different well-known bus.
As such, it should only fail on genuinely fatal errors, for example
an out-of-memory condition. It calls init_session_address() and
indirectly _dbus_lookup_session_address(), which therefore need to
have similar behaviour.
Previously, _dbus_lookup_session_address() would fail with a
fatal error whenever the macOS session bus was not correctly set up,
but that breaks the ability to connect to the system bus on macOS,
even though the system bus is not directly related to the session bus.
Instead, we should report a missing session bus as "not supported",
reserving an unsuccessful result for fatal situations like
out-of-memory. This brings _dbus_lookup_session_address_launchd()
into line with the error behaviour of _dbus_lookup_user_bus().
Simon McVittie [Tue, 10 Dec 2024 11:00:28 +0000 (11:00 +0000)]
bus: Update a build system cross-reference
We no longer have an Autotools build system, but Meson sets the same
environment variables that Autotools used to set. CMake does not, yet,
but ideally should.
Resolves: https://gitlab.freedesktop.org/dbus/dbus/-/issues/538 Signed-off-by: Simon McVittie <smcv@collabora.com>
Mohamed Akram [Tue, 10 Dec 2024 13:30:19 +0000 (17:30 +0400)]
sysdeps-unix: Report missing launchd session bus as non-fatal
init_connections_unlocked() is called when connecting to any of the
well-known buses, and it initializes all of the well-known addresses:
session, system and starter. This means that a failure here causes
failure to connect to any one of the well-known buses, even if the
failure is actually only relevant to a different well-known bus.
As such, it should only fail on genuinely fatal errors, for example
an out-of-memory condition. It calls init_session_address() and
indirectly _dbus_lookup_session_address(), which therefore need to
have similar behaviour.
Previously, _dbus_lookup_session_address() would fail with a
fatal error whenever the macOS session bus was not correctly set up,
but that breaks the ability to connect to the system bus on macOS,
even though the system bus is not directly related to the session bus.
Instead, we should report a missing session bus as "not supported",
reserving an unsuccessful result for fatal situations like
out-of-memory. This brings _dbus_lookup_session_address_launchd()
into line with the error behaviour of _dbus_lookup_user_bus().