Commit graph

1286 commits

Author SHA1 Message Date
Simon McVittie
d60cc351fe dbus_type_is_basic etc.: it is an error to pass in bad typecodes
Previously, the comments said "this function will crash", but that's not
strictly true (checks can be disabled or made non-fatal). Their behaviour
is undefined if you do that, though.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=20496
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-03-10 18:58:37 +00:00
Simon McVittie
f04e52a2e5 Allow X11 autolaunch to be disabled even if the headers/libraries are there
In an embedded system where the D-Bus session is a core part of the
environment, like Maemo, accidentally auto-launching a second session bus
(for instance for a concurrent ssh session) is a bad idea - it can lead
to a "split brain" situation where half the applications in the GUI are
using a different bus. In these controlled environments, it'd be useful
to prevent autolaunch from ever happening.

(As a side benefit, the changes to configure.in also mean that packagers
can explicitly --enable-x11-autolaunch, to make sure that failure to find
X will make compilation fail cleanly.)

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=19997
Bug-NB: NB#219964
2011-02-24 18:58:18 +00:00
Simon McVittie
407c111672 Don't attempt Unix X11 autolaunching if DISPLAY isn't set
The known use cases for autolaunching (ssh -Y firefox,
run konqueror in legacy DE) all need $DISPLAY too.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=19997
2011-02-24 18:43:34 +00:00
Simon McVittie
3681753421 Give XDG_DATA_HOME priority over XDG_DATA_DIRS for servicedirs
According to the XDG Base Directory Specification, “the base directory
defined by $XDG_DATA_HOME is considered more important than any of the
base directories defined by $XDG_DATA_DIRS.”  This makes it easier to
override a system service file as a normal user.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34496
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-02-24 17:17:22 +00:00
Mark Brand
49d1e3fa5a sysdeps-win needs _dbus_path_is_absolute
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-02-18 13:52:36 +00:00
Simon McVittie
a4102ba51f Merge branch 'leak-fixes-33126'
Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=33126
2011-02-17 17:19:15 +00:00
Simon McVittie
2f4c7dd5ba Don't distribute dbus-arch-deps.h in the tarball
It's generated by configure and specific to a system, so there's no point.

Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34292
2011-02-17 16:18:31 +00:00
Simon McVittie
f8d0012ab1 Remove references to dbus-md5, which hasn't been used for at least 8 years
Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34292
2011-02-17 16:16:12 +00:00
Simon McVittie
2acfe412b6 DBusTransport: don't copy DBusAuth's GUID to expected_guid
There was previously a leak in _dbus_transport_get_is_authenticated, if
we hit OOM when copying the server's actual GUID. This would fail the
"SHA1 connection test" if _dbus_iterate was modified to allocate and free
one extra pointer per iteration.

Rather than adding OOM handling everywhere, if we avoid strdup'ing the
GUID, and just re-fetch the const string from the DBusAuth object on demand
instead, we go back to a situation where _dbus_transport_get_is_authenticated
can't fail.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=33126
2011-02-16 14:47:08 +00:00
Matthias Clasen
51e0e91115 Fix syslog string processing
squash_string_nonprintable didn't actually modify the string.

Reviewed-By: Colin Walters <walters@verbum.org>
2011-02-14 11:32:03 -05:00
Colin Walters
66a09fa7c3 bus: Raise file descriptor limit to match configuration
The default configuration has hardcoded 2048 complete connections,
and 64 incomplete.  We need at least that number of file descriptors,
plus some for internal use.

In the bus, attempt to call setrlimit() before we drop privileges.
Practically speaking for this means the system bus gets it, the
session bus doesn't.

http://bugs.freedesktop.org/show_bug.cgi?id=33474

Reviewed-By: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-02-03 13:25:34 -05:00
Simon McVittie
743e79d1dc dbus_bus_set_unique_name, dbus_bus_get_unique_name: remember to unlock on OOM
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=33126
Reviewed-by: Colin Walters <walters@verbum.org>
2011-02-01 11:41:02 +00:00
Simon McVittie
799cef5f9e _dbus_server_new_for_tcp_socket: fix error handling
This is one of the patches from Maemo's dbus package. It seems to do all
of:

* fix some documentation
* remove unreached code to delete/free the nonce file from
  _dbus_server_new_for_socket - doing that on failure violates
  least-astonishment anyway
* in _dbus_server_new_for_tcp_socket, never fail without setting @error
* if we fail after creating the nonce file, delete it
* if we fail after allocating the nonce file struct, free it

Origin: vendor, Maemo
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=33128
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-01-26 18:55:00 +00:00
Simon McVittie
96a6d14376 Make _dbus_directory_get_next_file use readdir, not readdir_r
This isn't thread-safe or reentrant, but it turns out we don't need
either of those properties, and readdir_r is a real pain to use correctly,
particularly in the presence of FUSE filesystems that might implement
statfs() wrong.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=8284
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=15922
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-01-25 13:18:15 +00:00
Simon McVittie
460e6282d6 _dbus_loop_iterate: if the kernel says a fd is bad, stop watching it
Again, this shouldn't happen - modules are responsible for cleaning up
their watches - but the failure mode here is really bad: if we leave an
invalid fd in the set, every poll() call will instantly return, marking
it as POLLNVAL. The result is that dbus-daemon busy-loops on poll()
without responding to I/O, so the bad watch will probably never be
cleared up.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=32992
Bug-NB: NB#200248
Reviewed-by: Colin Walters <walters@verbum.org>
2011-01-21 15:01:37 +00:00
Simon McVittie
f3ed53a30f _dbus_loop_iterate: cleanup: make more use of a temporary variable
It was added by the previous commit.

Reviewed-by: Colin Walters <walters@verbum.org>
2011-01-21 15:01:24 +00:00
Simon McVittie
f740396874 _dbus_loop_iterate: if a watch has been invalidated, skip it
This shouldn't happen - other modules are responsible for cleaning up
their watches - but the bug fixed in my last commit has been present for
several years and I'm sure it's not the only one, so for robustness,
let's refuse to watch obviously-wrong file descriptors.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=32992
Bug-NB: NB#200248
Reviewed-by: Colin Walters <walters@verbum.org>
2011-01-21 15:01:16 +00:00
Simon McVittie
ca18baf83a dbus-spawn: don't leave bad file descriptors being watched
The code called from handle_watch() might close either or both of the
sockets we're watching, without cleaning up the DBusWatch. This results
in invalid file descriptors being passed to _dbus_poll(), which could
end up busy-looping on a POLLNVAL condition until the babysitter loses
its last ref (which automatically clears up both watches).

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=32992
Bug-NB: NB#200248
Reviewed-by: Colin Walters <walters@verbum.org>
2011-01-21 15:00:25 +00:00
Simon McVittie
edaa6fe253 _dbus_read_credentials_socket: support OpenBSD
OpenBSD SO_PEERCRED is nearly the same as Linux SO_PEERCRED, but the
struct is named differently. Sigh.

Based on a patch from 'ajacoutot'.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=32542
2011-01-21 13:27:18 +00:00
Richard A. Hankins
57fab1c219 fix bad DBusMessageIter doc example
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=11190
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-01-19 16:01:49 +00:00
Simon McVittie
16cc54d958 _dbus_listen_tcp_socket: unify cleanup for EADDRINUSE and other failures
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=29881
2011-01-18 16:07:24 +00:00
Christian Dywan
40b1fc5fff _dbus_listen_tcp_socket: free listen_fd in the error case
Origin: vendor, Maemo
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=29881
Bug-NB: NB#180486
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-01-18 16:00:05 +00:00
Christian Dywan
6520ecde58 dbus-nonce: check results of _dbus_string_init for OOM
Origin: vendor, Maemo
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=33128
Bug-NB: NB#180486
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-01-17 11:54:08 +00:00
Christian Dywan
68b1d6ad5f Verify that getsockname succeeded in _dbus_listen_tcp_socket
Bug: https://bugs.freedesktop.org//show_bug.cgi?id=29881
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-01-05 14:51:03 +00:00
Christian Dywan
14be9f738b Handle failure to allocate error message in _read_subprocess_line_argv
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=29881
2011-01-05 14:47:12 +00:00
Cristian Rodríguez
e2be7b92a6 Annotate dbus_malloc*() functions with __attribute__ malloc and __attribute__ alloc_size
This improves optimization as well catches buffer overflows at compile time.

code like:

foo = dbus_malloc(2);
strcpy(foo, "epicfail");

will emit:

"warning ... will always overflow the destination buffer..."

Signed-off-by: Cristian Rodríguez <cristian.rodriguez@opensuse.org>
Reviewed-by: Thiago Macieira <thiago@kde.org>
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=32710
2011-01-05 13:13:48 +00:00
Will Thompson
56d8d4f58e connection: correct HAVE_DECL_MSG_NOSIGNAL guard
Helpfully, AC_CHECK_DECLS (which configure.in uses to define
HAVE_DECL_MSG_NOSIGNAL) behaves differently to every similar AC_CHECK_*
macro and, rather than producing #undef HAVE_DECL_MSG_NOSIGNAL if the
given symbol is not found, instead produces #define
HAVE_DECL_MSG_NOSIGNAL 0.

Mike McQuaid's patch fixes the uses of this constant in sysdeps-unix;
with this patch, all code is guarded consistently and correctly.
2011-01-05 12:08:57 +00:00
Christian Dywan
11b71e901c Fix error condition in _dbus_pipe_close
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=32264
Reviewed-by: Colin Walters <walters@verbum.org>
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-01-04 19:37:19 +00:00
Christian Dywan
7fa27f7d09 Make _dbus_system_logv actually exit with DBUS_SYSTEM_LOG_FATAL
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=32262
Bug-NB: NB#180486
Reviewed-by: Thiago Macieira <thiago@kde.org>
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-01-04 19:27:33 +00:00
Pau Garcia i Quiles
b46b4cf3c4 Windows fix: MSVC 2010 has errno.h. 2010-12-31 16:12:18 +01:00
Marcus Brinkmann
93f98dc3d8 Avoid live lock in Windows (CE) under some situations due to unfair condition variables. 2010-12-29 22:44:27 +01:00
Ralf Habacker
02d973686a Use absolute session service dir path in bus-test on windows. 2010-12-29 14:43:24 +01:00
Mike McQuaid
88004d6b66 sysdeps-unix: use #if for HAVE_DECL_MSG_NOSIGNAL
Signed-off-by: Will Thompson <will.thompson@collabora.co.uk>
2010-12-24 14:34:46 +00:00
Havoc Pennington
7d65a3a6ed CVE 2010-4352: Reject deeply nested variants
Add DBUS_INVALID_NESTED_TOO_DEEPLY validity problem and a test that
should generate it.

Previously, we rejected deep nesting in the signature, but
variants allow dynamic message nesting, conditional only
on the depth of the message body.

The nesting limit is 64, which was also the limit in static
signatures.  Empirically, dynamic nesting depth observed on my
Fedora 14 system doesn't exceed 2; 64 is really a huge limit.

https://bugs.freedesktop.org/show_bug.cgi?id=32321

Signed-Off-By: Colin Walters <walters@verbum.org>
Signed-off-by: Will Thompson <will.thompson@collabora.co.uk>
2010-12-20 21:39:00 +00:00
Will Thompson
48a16845d6 sysdeps-unix: check for HAVE_DECL_MSG_NOSIGNAL
MSG_NOSIGNAL could theoretically be an enum member or something rather
than an #define, so it's better to check for the flag defined by the
configure check (as is done in dbus-connection.c already).

Reviewed-by: Colin Walters <walters@verbum.org>
Reviewed-by: Scott James Remnant <scott@netsplit.com>
2010-12-16 19:49:04 +00:00
Scott James Remnant
c5d0998295 sysdeps-unix: use MSG_NOSIGNAL when sending creds
Since SIGPIPE is no longer touched by default when MSG_NOSIGNAL is
available, it's extra-critical that all socket writes actually pass
that flag.

Signed-off-by: Will Thompson <will.thompson@collabora.co.uk>
2010-12-16 11:12:44 +00:00
Ralf Habacker
4bf509b6fd Handle case when autolaunched daemon address is already pulished on windows. 2010-12-14 08:12:59 +01:00
Ralf Habacker
3bacc897c7 Windows fix: In install path scope case add hashed install path to mutex/shm name. 2010-12-13 23:13:56 +01:00
Ralf Habacker
72515ae754 Be more verbose when publishing or requesting session bus address on Windows. 2010-12-13 15:06:43 +01:00
Ralf Habacker
c29637ac6b Implements user limited session bus on Windows.
This feature is enabled by using the session bus address
"autolaunch:scope=*user" for the client and the server.

Reviewed-by: Romain Pokrzywka
2010-12-10 08:43:43 +01:00
Ralf Habacker
9b79817148 Fixed bug not freeing mutex handle on Windows.
Reviewed-by: Romain Pokrzywka
2010-12-10 08:43:02 +01:00
Ralf Habacker
d808e529bd Variables and functions name cleanup on Windows.
Reviewed-by: Romain Pokrzywka
2010-12-10 08:42:57 +01:00
Benjamin Reed
f1b9aac417 Enable launchd.
This patch enables support for Mac OS X's launch daemon
for startup as well as sharing of the DBus session bus
environment.  It includes a LaunchAgent plist for automatic
start of the session bus.
2010-12-06 21:33:14 +01:00
Benjamin Reed
eb66c0a9c0 Look up DISPLAY from launchd if not initialized. 2010-12-06 21:33:10 +01:00
Benjamin Reed
5125fc1654 Add launchd implementation. 2010-12-06 21:33:06 +01:00
Ralf Habacker
a8810a7940 Service dir related bug fix on windows.
The code for accessing services requires absolute pathes, which are based
on DBUS_DATADIR. DBUS_DATADIR on windows is defined relative. This patch
makes sure that those pathes are absolute.
2010-10-29 11:55:27 +02:00
Romain Pokrzywka
fc276c340e Restore the close_on_exec flag on windows. 2010-10-29 11:24:38 +02:00
Will Thompson
75ef1d2ed4 Merge branch 'documentation-build-system' 2010-10-26 17:11:10 +01:00
Romain Pokrzywka
d6824bc618 tentative workaround for the random hangs on windows 2010-10-07 20:03:03 +02:00
Christian Dywan
2e134dd74c Only use signature directly inside _dbus_verbose 2010-10-05 14:50:22 +01:00