Commit graph

1989 commits

Author SHA1 Message Date
Lennart Poettering
89f70b1949 bus: don't forward messages with unix fds on connections that don't support it
This simply verifies that we forward unix fds only on connection that
support it. We willr eturn an error if a client attempts to send a
message with unix fds to another client that cannot do it.
2009-05-21 01:21:35 +02:00
Lennart Poettering
724adb2f61 doxygen: document that we don't support reading/writing arrays of unix fds in once piece right now 2009-05-20 23:48:46 +02:00
Lennart Poettering
869291ea5a doc: document Unix FD passing in the specification 2009-05-20 03:01:37 +02:00
Lennart Poettering
64ad844967 bus: make use of new unix fd limits
Create configuration settings and enforce message unix fd limits the
same way we do for allocated message memory.
2009-05-20 02:10:17 +02:00
Lennart Poettering
bfad32422f unix-fd: add logic to count unix fds the same way as allocated memory
This make all counters count both bytes of memory and unix fds.
2009-05-20 02:09:32 +02:00
Lennart Poettering
ec901d786f byteswap: make use of glibc specific bytswap primitives
glibc knows three bswap_{16|32|64}() calls that internally make use of a
gcc extension to implement faster byteswapping. We should make use of it
if we can.
2009-05-20 02:09:32 +02:00
Lennart Poettering
9293e82376 atomic: implement atomic operations based on gcc's __sync extension
Newer gccs and intel ccs support a __sync extension for making use of
atomic operations. This patch replaces the handcrafted x86 atomic
operation support with usage of __sync.

__sync is supported by more processors and by more compilers than the
old assembler code. Also, this extension has been available on gcc for
quite a while now for x86, so replacing the old assembler code should
only be a loss when very old compiilers are used.
2009-05-20 02:09:32 +02:00
Lennart Poettering
74bff5af80 git: enable whitespace checking commit hook during in autogen.sh
Trailing whitespace sucks. This change modifies autogen.sh to activate
the example pre-commit that ships with git. It will make sure that from
then on no further commits with trailing whitespace can be made
2009-05-20 02:09:32 +02:00
Lennart Poettering
cbf0874f01 memset: replace memset() by _DBUS_ZERO where applicable 2009-05-20 02:09:31 +02:00
Lennart Poettering
c200e0304d auth: add fd passing negotiation support
This adds two new directives to the auth protocol:

NEGOTIATE_UNIX_FD is sent by the client after the authentication was
sucessful, i.e. OK was received.

AGREE_UNIX_FD is then sent by the server if it can do unix fd passing as
well.

ERROR is returned when the server cannot or is unwilling to do unix fd
passing.

This should be compatible with existing D-Bus implementations which will
naturally return ERROR on NEGOTIATE_UNIX_FD.
2009-05-20 02:09:31 +02:00
Lennart Poettering
89318bbeb4 cloexec: set all sockets that are created with SOCK_CLOEXEC
Since all socket users enable FD_CLOEXEC anyway we can just do that in
_dbus_open_socket() and be done with it for all cases. By side effect
this allows us to use SOCK_CLOEXEC and hence close the CLOEXEC race.
2009-05-20 02:09:31 +02:00
Lennart Poettering
3c319c7193 cloexec: make use of pipe2(O_CLOEXEC) when available
This should fix another CLOEXEC race.
2009-05-20 02:09:31 +02:00
Lennart Poettering
18b08180aa build-system: define _GNU_SOURCE centrally
Instead of having everyone define _GNU_SOURCE and similar macros
seperately, simply do so centrally by using AC_USE_SYSTEM_EXTENSIONS
2009-05-20 02:09:31 +02:00
Lennart Poettering
44f3a1465a cloexec: set FD_CLOEXEC for all full duplex pipes
All users of full duplex pipes enable FD_CLOEXEC later anyway so let's
just do it as part of _dbus_full_duplex_pipe. By side effect this allows
to make use of SOCK_CLOEXEC which fixes a race when forking/execing from
a different thread at the same time as we ar in this function.
2009-05-20 02:09:31 +02:00
Lennart Poettering
004f01fa45 unix-fd: add test for passing unix fds
This adds a full test for passing multiple fds across a D-Bus
connection.
2009-05-20 02:09:30 +02:00
Lennart Poettering
2eb14dbcac unix-fd: when sending a message with unix fds verify that the connection can do it
Not all of the send function flavours allow returning proper error
codes. For the cases where this is not easily possible the client should
call dbus_connection_can_send_type() first.
2009-05-20 02:09:30 +02:00
Lennart Poettering
08e49d9b53 unix-fd: introduce dbus_connection_can_send_type()
This is just a wrapper around _dbus_transport_can_pass_unix_fd() however
it is more generic.

The reason for keeping this generic is to ease later addition of more
types without having to add a new API for that.
2009-05-20 02:09:30 +02:00
Lennart Poettering
a0cc21f8bb unix-fd: add message encoding/decoding for unix fds
When appending unix fds to the message a new entry in the fd array will
be allocated and the index to it will be written to the message payload.

When parsing unix fds from the message the index will be read from the
payload and then looked up in the fd array.

When we read fds we put them in a queue first. Since each message knows
how many fds are attached to it we will then pop enough fds from this
queue each time we decode a message from the stream.

This should make sending and receiving more portable since we don't make
any strong requirements on the exact semantics of the SCM_RIGHTS
implementation: as long as fds are recieved in order, none or lost and
the arrive at the same time as at least one byte from the actual message
dat we should be able to handle them correctly.
2009-05-20 02:09:03 +02:00
Lennart Poettering
ba7daa606c unix-fd: add basic marshalling code for unix fds
This is actually pretty boring since we store our fds as indexes that
are stored as uint32_t's.
2009-05-20 01:36:44 +02:00
Lennart Poettering
faac66e3ea unix-fd: introduce basic protocol definitions
We introduce a new type code for the unix fds. The data stored in unix
fd fields will be an integer index into the array of fds that are
attached to a specific message. We also introduce a new header field
that stores how many fds belong to the message. And finally we introduce
a new error for messages where the payload and the meta data (i.e. unix
fds read for it) don't match up.
2009-05-20 01:36:37 +02:00
Lennart Poettering
4c4db7f9da sysdeps-unix: add basic IO primitives for unix fd passing
This introduces three new functions:

_dbus_read_socket_with_unix_fds
_dbus_write_socket_with_unix_fds
_dbus_read_socket_with_unix_fds_two

These work exactly like their counterpart sans 'with_unix_fds' except
that they also send/recieve file descriptors along with the actual
payload data.
2009-05-20 01:36:27 +02:00
Lennart Poettering
64c63db21e sysdeps-unix: introduce _dbus_socket_can_pass_unix_fd()
This function can be used to check if a socket can be used to pass file
descriptors. On platforms that don't support this at all this is
hardcoded to return FALSE.
2009-05-20 01:36:26 +02:00
Lennart Poettering
18f7259a43 sysdeps-unix: introduce _dbus_dup()
This is a simple wrapper around dup()-like functionality.

Also handles CLOEXEC and makes sure we don't interfere with the standard
I/O file descriptors 0, 1 and 2.
2009-05-20 01:36:19 +02:00
Lennart Poettering
03d50fbd77 sysdeps-unix: if MSG_NOSIGNAL is available don't touch SIGPIPE by default
If we can use MSG_NOSIGNAL we don't have to play games with SIGPIPE
2009-05-15 20:30:15 +02:00
Lennart Poettering
ff0a8993d4 sysdeps-unix: Use MSG_NOSIGNAL when available
On Linux send()/sendmsg() know the special flag MSG_NOSIGNAL which if
set makes sure that no SIGPIPE signal is raised when we write to a
socket that has been disconnected.

By using this flag we don't have to play games with SIGPIPE which is
pretty ugly stuff since it touches the global process context.
2009-05-15 20:30:15 +02:00
Lennart Poettering
6d2eacba89 memory: remove semicolons from macros
Due to some unknown reasons the dbus_new() macros had a semicolon at the
end which makes it impossible to use them in some situations.
2009-05-15 20:30:15 +02:00
Lennart Poettering
3801b6de78 build-system: get rid of config.h inclusion checks
These header files include config.h explicitly anyway. These checks are
hence pointless.

Of course one could argue that including config.h from header files
sucks, but D-Bus generally seems not to have a problem with that, so
let's unify this.
2009-05-15 20:30:15 +02:00
Thiago Macieira
f322112b84 Merge branch 'dbus-1.2' 2009-05-13 15:52:26 +02:00
Thiago Macieira
e21d06cba4 Merge branch 'dbus-1.2'
Conflicts:
	dbus/dbus-sysdeps-util-unix.c
2009-05-13 15:52:18 +02:00
Marc Mutz
6eddb6e122 configure.in: fail abstract socket test gracefully when cross-compiling
* configure.in: only run AC_CACHE_CHECK if enable_abstract_sockets=auto
 * configure.in: warn that, when cross-compiling, we're unable to detect
                 abstract sockets availability automatically

Signed-off-by: Thiago Macieira <thiago@kde.org>
2009-05-13 15:50:52 +02:00
Marc Mutz
f719d45432 configure.in: not all gccs support -Wno-pointer-sign
Signed-off-by: Thiago Macieira <thiago@kde.org>
2009-05-13 15:50:51 +02:00
Colin Walters
f76d17437e Release 1.2.14 2009-05-06 12:51:19 -04:00
Eamon Walsh
b38c433bf7 libselinux behavior in permissive mode wrt invalid domains
Stephen Smalley wrote:
> On Tue, 2009-04-21 at 16:32 -0400, Joshua Brindle wrote:
>
>> Stephen Smalley wrote:
>>
>>> On Thu, 2009-04-16 at 20:47 -0400, Eamon Walsh wrote:
>>>
>>>> Stephen Smalley wrote:
>>>>
>> <snip>
>>
>>
>>> No, I don't want to change the behavior upon context_to_sid calls in
>>> general, as we otherwise lose all context validity checking in
>>> permissive mode.
>>>
>>> I think I'd rather change compute_sid behavior to preclude the situation
>>> from arising in the first place, possibly altering the behavior in
>>> permissive mode upon an invalid context to fall back on the ssid
>>> (process) or the tsid (object).  But I'm not entirely convinced any
>>> change is required here.
>>>
>>>
>> I just want to follow up to make sure we are all on the same page here. Was the
>> suggestion to change avc_has_perm in libselinux or context_to_sid in the kernel
>> or leave the code as is and fix the callers of avc_has_perm to correctly handle
>> error codes?
>>
>> I prefer the last approach because of Eamon's explanation, EINVAL is already
>> passed in errno to specify the context was invalid (and if object managers
>> aren't handling that correctly now there is a good chance they aren't handling
>> the ENOMEM case either).
>>
>
> I'd be inclined to change compute_sid (not context_to_sid) in the kernel
> to prevent invalid contexts from being formed even in permissive mode
> (scenario is a type transition where role is not authorized for the new
> type).  That was originally to allow the system to boot in permissive
> mode.  But an alternative would be to just stay in the caller's context
> (ssid) in that situation.
>
> Changing the callers of avc_has_perm() to handle EINVAL and/or ENOMEM
> may make sense, but that logic should not depend on enforcing vs.
> permissive mode.
>
>

FWIW, the following patch to D-Bus should help:

bfo21072 - Log SELinux denials better by checking errno for the cause

    Note that this does not fully address the bug report since
    EINVAL can still be returned in permissive mode.  However the log
    messages will now reflect the proper cause of the denial.

Signed-off-by: Eamon Walsh <ewalsh@tycho.nsa.gov>
Signed-off-by: Colin Walters <walters@verbum.org>
2009-05-06 12:51:19 -04:00
Federico Mena Quintero
73ec6964d7 bfo20738 - Return a useful error message from dbus_signature_validate()
Signed-off-by: Federico Mena Quintero <federico@novell.com>
2009-05-06 12:51:18 -04:00
Federico Mena Quintero
0f19140b52 bfo20738 - Translate DBusValidity into error message
Signed-off-by: Federico Mena Quintero <federico@novell.com>
2009-05-06 12:51:18 -04:00
William Lachance
0cf4583b5a Bug 19567 - Make marshaling code usable without DBusConnection
Some projects want to reuse the DBus message format, without
actually going through a DBusConnection.  This set of changes
makes a few functions from DBusMessage public, and adds a new
function to determine the number of bytes needed to demarshal
a message.

Signed-off-by: Colin Walters <walters@verbum.org>
2009-05-06 12:51:18 -04:00
Colin Walters
86df8ad592 Followup Bug 19502 - Don't attempt to init va_list, not portable 2009-05-06 12:51:18 -04:00
Kjartan Maraas
eb3b99e7c6 Bug 19502 - Sparse warning cleanups
This patch makes various things that should be static static,
corrects some "return FALSE" where it should be NULL, etc.

Signed-off-by: Colin Walters <walters@verbum.org>
2009-05-06 12:51:18 -04:00
Eamon Walsh
da75989b39 dbus-launch: use InputOnly X window
Working on SELinux policy for X, and came across this issue in dbus-launch:

Windows created for use as property/selection placeholders should be of
class InputOnly, since no drawing is ever done to them.

Signed-off-by: Eamon Walsh <ewalsh@tycho.nsa.gov>
Signed-off-by: Thiago Macieira <thiago@kde.org>
2009-05-06 12:51:17 -04:00
Johan Gyllenspetz
5b4ee5fb40 Bug 20494 - Fix signed confusion for dbus_message_get_reply_serial return
We were incorrectly converting the serial to a signed integer
and comparing it to -1.

Signed-off-by: Colin Walters <walters@verbum.org>
2009-05-06 12:51:17 -04:00
Colin Walters
15f5183016 Bug 20137 - Fix alignment usage when demarshaling basics
We can't safely type-pun from e.g. char * to DBusBasicValue *, because
the latter has higher alignment requirements.  Instead, create an
explicit pointer for each case.

Also, we mark each one volatile to sidestep strict aliasing issues, for
the future when we turn on strict aliasing support.

Original patch and review from Jay Estabrook <jay.estabrook@hp.com>.
2009-05-06 12:51:17 -04:00
Colin Walters
a709566edd Always append closing quote in log command
Patch suggested by Tomas Hoger <thoger@redhat.com>
2009-05-06 12:51:17 -04:00
Colin Walters
b5a1f3c54a Bug 17803 - Fix both test case and validation logic
The previous commit had errors in both the test case and
the validation logic.  The test case was missing a trailing
comma before the previous one, so we weren't testing the
signature we thought we were.

The validation logic was wrong because if the type was not valid,
we'd drop through the entire if clause, and thus skip returning
an error code, and accept the signature.
2009-05-06 12:51:16 -04:00
Thiago Macieira
63196f69c4 Merge branch 'dbus-1.2'
Conflicts:
	bus/bus.c
	bus/config-parser-common.c
	bus/config-parser-common.h
	bus/config-parser.c
	bus/connection.c
	bus/dbus-daemon.1.in
	dbus/dbus-marshal-validate-util.c
	dbus/dbus-marshal-validate.c
	dbus/dbus-sysdeps-util-unix.c
	test/name-test/tmp-session-like-system.conf
2009-04-28 15:16:36 +02:00
Marc Mutz
b2f943e9c0 configure.in: fix help string alignment
* AC_ARG_ENABLE(libaudit: use AS_HELP_STRING for aligned help messages

Signed-off-by: Thiago Macieira <thiago@kde.org>
(cherry picked from commit 660073925b)
2009-04-28 14:42:20 +02:00
Eamon Walsh
705b34f0a6 libselinux behavior in permissive mode wrt invalid domains
Stephen Smalley wrote:
> On Tue, 2009-04-21 at 16:32 -0400, Joshua Brindle wrote:
>
>> Stephen Smalley wrote:
>>
>>> On Thu, 2009-04-16 at 20:47 -0400, Eamon Walsh wrote:
>>>
>>>> Stephen Smalley wrote:
>>>>
>> <snip>
>>
>>
>>> No, I don't want to change the behavior upon context_to_sid calls in
>>> general, as we otherwise lose all context validity checking in
>>> permissive mode.
>>>
>>> I think I'd rather change compute_sid behavior to preclude the situation
>>> from arising in the first place, possibly altering the behavior in
>>> permissive mode upon an invalid context to fall back on the ssid
>>> (process) or the tsid (object).  But I'm not entirely convinced any
>>> change is required here.
>>>
>>>
>> I just want to follow up to make sure we are all on the same page here. Was the
>> suggestion to change avc_has_perm in libselinux or context_to_sid in the kernel
>> or leave the code as is and fix the callers of avc_has_perm to correctly handle
>> error codes?
>>
>> I prefer the last approach because of Eamon's explanation, EINVAL is already
>> passed in errno to specify the context was invalid (and if object managers
>> aren't handling that correctly now there is a good chance they aren't handling
>> the ENOMEM case either).
>>
>
> I'd be inclined to change compute_sid (not context_to_sid) in the kernel
> to prevent invalid contexts from being formed even in permissive mode
> (scenario is a type transition where role is not authorized for the new
> type).  That was originally to allow the system to boot in permissive
> mode.  But an alternative would be to just stay in the caller's context
> (ssid) in that situation.
>
> Changing the callers of avc_has_perm() to handle EINVAL and/or ENOMEM
> may make sense, but that logic should not depend on enforcing vs.
> permissive mode.
>
>

FWIW, the following patch to D-Bus should help:

bfo21072 - Log SELinux denials better by checking errno for the cause

    Note that this does not fully address the bug report since
    EINVAL can still be returned in permissive mode.  However the log
    messages will now reflect the proper cause of the denial.

Signed-off-by: Eamon Walsh <ewalsh@tycho.nsa.gov>
Signed-off-by: Colin Walters <walters@verbum.org>
2009-04-22 11:18:39 -04:00
Federico Mena Quintero
27f8a31fe6 bfo20738 - Return a useful error message from dbus_signature_validate()
Signed-off-by: Federico Mena Quintero <federico@novell.com>
2009-04-21 14:09:54 -04:00
Federico Mena Quintero
099b5e59ea bfo20738 - Translate DBusValidity into error message
Signed-off-by: Federico Mena Quintero <federico@novell.com>
2009-04-21 14:09:54 -04:00
William Lachance
16a947eedb Bug 19567 - Make marshaling code usable without DBusConnection
Some projects want to reuse the DBus message format, without
actually going through a DBusConnection.  This set of changes
makes a few functions from DBusMessage public, and adds a new
function to determine the number of bytes needed to demarshal
a message.

Signed-off-by: Colin Walters <walters@verbum.org>
2009-04-21 13:51:46 -04:00
Colin Walters
ce09b82ec2 Followup Bug 19502 - Don't attempt to init va_list, not portable 2009-04-21 13:11:54 -04:00