now fix the build for the tests; turns out we need another set of exports, since some tests are compiled in the client lib and some are in the internal lib...
refactor the cmake build to match with autotools: only export client symbols in dbus-1 and use and internal library for the rest. Currently this library is statically linked to the apps but it can be made dynamic if wanted
Colin Walters [Tue, 2 Feb 2010 17:37:17 +0000 (12:37 -0500)]
Fix inotify shutdown
We were incorrectly passing NULL for a DBusList when the usage expected
is a pointer to a NULL DBusList pointer. Also during dbus_shutdown
we need to actually close the inotify fd, and remove our watch.
Move the shutdown handler out of bus.c and into inotify where we
can do all of this cleanly.
(cherry picked from commit 90fe96b1875350f86a4a773d4a0a22009950dd4d)
Colin Walters [Wed, 3 Feb 2010 07:36:38 +0000 (08:36 +0100)]
Fix compilation in --disable-selinux case
_dbus_change_to_daemon_user moved into selinux.c for the --with-selinux
(and audit) case because that's where all of the relevant libcap headers
were being used. However in the --disable-selinux case this didn't
compile and wasn't very clean.
If we don't have libaudit, use the legacy direct setgid/setuid bits
we had before in dbus-sysdeps-util-unix.c.
Tom Hughes [Sun, 13 Dec 2009 21:30:09 +0000 (13:30 -0800)]
Use monotonic clock for _dbus_get_current_time() if it's available.
_dbus_get_current_time() is used for timeouts, but uses gettimeofday(), which
relies on the wall clock time, which can change. If the time is changed forwards
or backwards, the timeouts are no longer valid, so the monotonic clock must be used.
Colin Walters [Thu, 28 Jan 2010 21:26:39 +0000 (16:26 -0500)]
Clean up inotify watch handling
Substantially based on a patch by Matthias Clasen <mclasen@redhat.com>
kqueue implementation by Joe Marcus Clarke <marcus@freebsd.org>
Previously, when we detected a configuration change (which included
the set of config directories to monitor for changes), we would
simply drop all watches, then readd them.
The problem with this is that it introduced a race condition where
we might not be watching one of the config directories for changes.
Rather than dropping and readding, change the OS-dependent monitoring
API to simply take a new set of directories to monitor. Implicit
in this is that the OS-specific layer needs to keep track of the
previously monitored set.
Colin Walters [Thu, 28 Jan 2010 20:04:14 +0000 (15:04 -0500)]
Don't drop pending activations when reloading configuration
The reload handling for activation simply dropped all knowledge
of pending activations, which was clearly wrong. Refactor things
so that reload only reloads directories, server address etc.
Based on a patch originally from Matthias Clasen <mclasen@redhat.com>
Colin Walters [Thu, 28 Jan 2010 00:38:44 +0000 (19:38 -0500)]
Switch to libcap-ng, avoid linking libdbus against libcap[-ng]
(Commit message written by Colin Walters <walters@verbum.org>)
A current Fedora goal is to convert projects to libcap-ng which
more easily allows dropping Linux capabilities. For software
which also links to libdbus, it's problematic to link against
libcap as well.
Though really, libdbus should have never linked against libcap
in the first place, which is another thing this patch changes
by moving the libcap-using bits out of dbus/ and into bus/.
Colin Walters [Mon, 14 Dec 2009 23:12:24 +0000 (18:12 -0500)]
Ignore exit code zero from activated services
A variety of system components have migrated from legacy init into DBus
service activation. Many of these system components "daemonize", which
involves forking. The DBus activation system treated an exit as an
activation failure, assuming that the child process which grabbed the
DBus name didn't run first.
While we're in here, also differentiate in this code path between the
servicehelper (system) versus direct activation (session) paths. In
the session activation path our error message mentioned a helper
process which was confusing, since none was involved.
Based on a patch and debugging research from Ray Strode <rstrode@redhat.com>
Will Thompson [Wed, 28 Oct 2009 19:40:38 +0000 (19:40 +0000)]
Print all-printable-ASCII byte arrays as strings
In practice, ay seems to be used mostly for binary data (in which case,
hex output is fine) or for Unix file paths (because they may be
non-UTF-8) and similar human-readable strings. So let's print the latter
similarly to strings.
Will Thompson [Wed, 9 Sep 2009 19:35:13 +0000 (20:35 +0100)]
Make array-printing code easier to follow
Previously dbus_message_iter_get_arg_type() was called twice: once in
the loop condition to update 'current_type', and once to check if the
loop will run again. This patch moves updating current_type to the end
of the loop body.
James Westby [Thu, 1 Oct 2009 14:09:54 +0000 (15:09 +0100)]
Correct timeout handling
The timeout handling code subtracts the elapsed time from the timeout
each time a message is received, which drastically reduces the timeout
in circumstances such as service activation.
Correct so that the timeout is never modified, and the elapsed time
instead subtracted where necessary.
Signed-off-by: James Westby <jw+debian@jameswestby.net> Signed-off-by: Scott James Remnant <scott@ubuntu.com>
Romain Pokrzywka [Thu, 14 Jan 2010 07:59:22 +0000 (08:59 +0100)]
fixes bug where sometimes objects were not unregistered from dbus
although their app had exited. As it turns out it was a missing
implementation of the method _dbus_fd_set_close_on_exec() for windows.
It's been tested with msvc2005, msvc2008, and mingw, and solves
all the unregistering issues on many kde apps.
Will Thompson [Thu, 30 Jul 2009 09:49:33 +0000 (10:49 +0100)]
Group match rules by their interface.
In my informal studies of "normal" sets of match rules, only checking
match rules with the appropriate interface for the message reduces the
number that need to be checked by almost 100x on average (ranging from
halving for messages from the bus daemon, to a >200x reduction in many
cases). This reduces the overhead added to dispatching each message by
having lots of irrelevant match rules.
Will Thompson [Wed, 29 Jul 2009 16:53:37 +0000 (17:53 +0100)]
Don't bother re-matching features we've checked.
This is currently not a big deal, but will make more of a difference
once the set of match rules is partitioned by more features than just
the message type.
Colin Walters [Mon, 14 Dec 2009 23:12:24 +0000 (18:12 -0500)]
Ignore exit code zero from activated services
A variety of system components have migrated from legacy init into DBus
service activation. Many of these system components "daemonize", which
involves forking. The DBus activation system treated an exit as an
activation failure, assuming that the child process which grabbed the
DBus name didn't run first.
While we're in here, also differentiate in this code path between the
servicehelper (system) versus direct activation (session) paths. In
the session activation path our error message mentioned a helper
process which was confusing, since none was involved.
Based on a patch and debugging research from Ray Strode <rstrode@redhat.com>
Tor Lillqvist [Thu, 22 Oct 2009 10:19:23 +0000 (13:19 +0300)]
Handle also WinSock errors in _dbus_error_from_errno
Handle those WinSock errors that match the errno values handled. Don't
bother handling those errors that are mapped to DBUS_ERROR_FAILED in
the switch as that is the default return value anyway.
Frank Osterfeld [Thu, 22 Oct 2009 10:03:11 +0000 (13:03 +0300)]
Windows fixes
Replace dbus_daemon_init() by dbus_publish_session_bus_address(),
publishing the full address. Omit username from mutexes (not necessary
as mutex names are local to session). Don't exit if publishing the
address failed (allow multiple session bus instances per
session). Based on 00ee92ae314 by Tor Lillqvist.
Cherry-picked from commit 23945513e9a4da61d286ebfbce3897aa061ddbfe in
the dbus4win repository by tml@iki.fi. Remove claim of that commit not
being merged from README.dbus4win.
Tor Lillqvist [Thu, 22 Oct 2009 00:22:54 +0000 (03:22 +0300)]
Avoid warnings on Windows
Remove unused functions, or put in #if 0 if potentially useful. Make
internal functions used just in one file static. Use -Werror after all
also on Windows. Construct the installation root from the location of
the dbus DLL, not from the location of the program .exe of the
process.
Tor Lillqvist [Wed, 21 Oct 2009 18:52:59 +0000 (21:52 +0300)]
Don't use DBUS_DIR_SEPARATOR
I didn't cherry-pick the commit from dbus4win that introduced
DBUS_DIR_SEPARATOR, as I think it just uglifies the code with little
gain. (Forward) slashes work fine on Windows.
Tor Lillqvist [Wed, 21 Oct 2009 12:31:34 +0000 (15:31 +0300)]
Use multi-byte string functions on Windows
Don't walk through char arrays that contain strings in the system
codepage char by char looking for '\\'. There are double-byte
characters in East Asian codepages where the second byte is a '\\'.
(cherry picked from commit 61316262da466993abbcba010c6bac90bb0b1d43)