Commit Graph
3645 Commits
Author SHA1 Message Date
Daniel Mack 8f44e3ea3e sd-bus: implement sd_bus_get_owner_creds() for kdbus
kdbus learned a new ioctl to tell userspace about a bus creator's
credentials, which is what we need to implement sd_bus_get_owner_creds() for
kdbus.

Move the function from sd-bus.c to bus-control.c to be able to reuse
the bus_populate_creds_from_items() helper.
2014-10-22 19:45:07 +02:00
Daniel Mack 056f95d0a7 sd-bus: rename sd_bus_get_owner_uid(), sd_bus_get_owner_machine_id() and sd_bus_get_peer_creds()
Clean up the function namespace by renaming the following:

  sd_bus_get_owner_uid()        → sd_bus_get_name_creds_uid()
  sd_bus_get_owner_machine_id() → sd_bus_get_name_machine_id()
  sd_bus_get_peer_creds()       → sd_bus_get_owner_creds()
2014-10-22 19:45:07 +02:00
Daniel Mack 370d7a9c0f sd-bus: factor out creds item iterator
We will re-use the code to walk items in order to populate a creds object,
so let's factor it out first.
2014-10-22 19:45:07 +02:00
Daniel Mack a1783d61a8 sd-bus: sync kdbus.h
kdbus learned a new command to query a bus creator's credentials. Sync
kdbus.h first, which also renames some struct to more generic terms.
That is, however, not an ABI break this time.
2014-10-22 19:45:07 +02:00
Daniel Mack b680a194bf sd-bus: assert clock_gettime()'s return value
Don't handle clock_gettime() errors gracefully but use assert_se().
2014-10-22 13:39:51 +02:00
Daniel Mack 03785ad0e5 sd-bus: sync kdbus.h (API change: switch to absolute timeouts)
kdbus_msg.timeout_ns now takes an absolute value, based on CLOCK_MONOTONIC,
in order to eventually support automatically restarted syscalls.

Signed-off-by: Daniel Mack <daniel@zonque.org>
2014-10-21 22:14:03 +02:00
Daniel Mack bc75205c77 sd-bus: sync kdbus.h (ABI break)
In kdbus.h, the following details changed:

 * All commands gained a 'kernel_flags' field to report the flags supported
   by the driver. Before, this was done in the 'flags' field in a
   bidirectional way, which turned out to be a problem for the code in
   sd-bus, as many parts of it reuse the same ioctl struct more than once
   and consider them to be owned by userspace.

 * Name listings are now returned by a new struct instead of reusing struct
   kdbus_cmd_name for that matter. This way, we don't add more unneeded
   fields to it and make the API cleaner.

 * 'conn_flags' was renamed to 'flags' in struct kdbus_cmd_hello to make
   the API a bit more unified.
2014-10-21 19:19:44 +02:00
Lukasz Skalski 659b937e67 kdbus: free returned buffer when the memory is no longer needed 2014-10-20 20:09:05 +02:00
Daniel Mack a2243d5488 sd-bus: sync kdbus.h (ABI break)
kdbus.h now has KDBUS_ATTACH_COMM split into KDBUS_ATTACH_TID_COMM and
KDBUS_ATTACH_PID_COMM. The items were split already, so the change in
systemd is easy.
2014-10-20 15:26:00 +02:00
Daniel Mack 4a3e79e1b6 sd-bus: sync kdbus.h (ABI break)
In kdbus.h, the 'features' field has been dropped again. Instead of
negotiating features that way, we decided to make the kernel return the
set of supported flags in each ioctl struct's .flags field, in both the
success and error cases.
2014-10-18 20:57:53 +02:00
Kay Sievers c32195e057 Revert "sd-bus: sync kdbus.h (ABI break)"
This reverts commit 1a2409e262.

Support from the kdbus interface was removed. We require
memfds to be supported by all clients.
2014-10-17 10:12:44 +02:00
Daniel Mack 1a2409e262 sd-bus: sync kdbus.h (ABI break)
kdbus learned KDBUS_HELLO_ACCEPT_MEMFD as new connection negotiation
flag. Set it by default in systemd for now.
2014-10-14 20:03:06 +02:00
Lennart Poettering b911eb1560 bus: check allow-interactive-auhtorization flag when doing polkit 2014-10-13 17:19:31 +02:00
Lennart Poettering 53a83f4bc0 sd-bus: add support for new allow-interactive-authorization message header flag 2014-10-13 17:19:31 +02:00
Zbigniew Jędrzejewski-Szmek 8d1d1bf20a tests: fix some tests to pass in koji
FAIL: test-engine
=================
Cannot find cgroup mount point: No such file or directory
Assertion 'r >= 0' failed at ../src/test/test-engine.c:46, function main(). Aborting.

FAIL: test-sched-prio
=====================
Cannot find cgroup mount point: No such file or directory
Assertion 'r >= 0' failed at ../src/test/test-sched-prio.c:42, function main(). Aborting.

FAIL: test-bus-cleanup
======================
Assertion 'sd_bus_open_system(&bus) >= 0' failed at ../src/libsystemd/sd-bus/test-bus-cleanup.c:40, function test_bus_open(). Aborting.
after new: refcount 1
2014-10-12 17:31:02 -04:00
Lukasz Skalski 82279e6966 kdbus: fix buffer overflow in bus_get_owner_kdbus() function
Commit 710fc9779b7c (kdbus repo) introduced attaching items[]
instead of name[] in kdbus_cmd_conn_info struct. Commit 581fe6c81
(systemd repo) caught up with this change, but item size was not
properly calculated.
2014-10-10 12:44:31 +02:00
Daniel Mack b1543c4c93 sd-bus: check return value of asprintf()
Check for OOM conditions of asprintf() in bus_set_address_user().
2014-10-09 11:26:09 +02:00
Zbigniew Jędrzejewski-Szmek f95387cda8 sd-event: also update signal mask when disconnecting sources 2014-10-08 19:30:22 -04:00
Zbigniew Jędrzejewski-Szmek 4807d2d068 sd-event: be more careful when enabling/disabling signals
When a child event is disabled (in order to be freed) and there is no
SIGCHLD signal event, sd_event_source_set_enabled will disable SIGCHLD
even if there are other child events.

Also remove some unneeded signalfd updates.

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

Based-on-a-patch-by: Hristo Venev <mustrumr97@gmail.com>
2014-10-08 19:30:22 -04:00
Daniel Mack 40885bb29e sd-bus: sync kdbus.h (ABI break)
Sync kdbus.h once again. Two thing have changed:

 a) KDBUS_CMD_EP_* was renamed to KDBUS_CMD_ENDPOINT_*
 b) struct kdbus_cmd_hello and struct kdbus_cmd_make gained a
    'features' bitfield (which is currently unused)
2014-10-08 17:30:49 +02:00
Daniel Mack 8bf13eb1e0 sd-bus: check return value of vasprintf
Check for OOM situations when vasprintf() returns < 0 in bus_error_setfv().

Spotted by coverity.
2014-10-07 12:10:06 +02:00
Daniel Mack 53e9dbcdfb sd-bus: fix KDBUS_CMD_FREE user
Fix a user of the KDBUS_CMD_FREE ioctl that was missed in the transition.
2014-10-07 12:02:04 +02:00
Daniel Mack ca794c8e95 sd-bus: fix use-after-free in close_kdbus_msg()
Walk the items first, then free the memory of the message.

Also, while at it, make coverity happy with an explicit (void) prefix.
We intentionally ignore the return value here.
2014-10-07 11:38:31 +02:00
Thomas Hindoe Paaboel Andersen 13303f018d sd-bus: remove unused variable
It is no longer used after d663f1b1a9
2014-10-07 00:00:21 +02:00
Daniel Mack d663f1b1a9 sd-bus: sync kdbus.h (ABI break)
The KDBUS_CMD_FREE ioctl now uses a struct rather than a direct pointer
to the offset to free.

The KDBUS_CMD_MSG_CANCEL ioctl has also changes, but there's no user of
it yet in systemd.
2014-10-06 18:36:16 +02:00
Zbigniew Jędrzejewski-Szmek 75a0da952f bus: add assert to check that we're not freeing a static structure
CID #996315.
2014-10-05 15:29:41 -04:00
Zbigniew Jędrzejewski-Szmek cef3566998 sd-id128: do stricter checking of random boot id
If we are bothering to check whether the kernel is not feeding us
bad data, we might as well do it properly.

CID #1237692.
2014-10-03 20:57:30 -04:00
Zbigniew Jędrzejewski-Szmek 125dd07483 sd-bus: split out cleanup into separate function
m is always non-null at this point. This function is too long anyway.
2014-10-03 20:42:09 -04:00
Zbigniew Jędrzejewski-Szmek 7057bd9931 sd-event: check the value of received signal
Appease coverity report #1237775.

Also rename ss to n, to make it visually different from ss.
2014-10-03 20:42:09 -04:00
Lennart Poettering 2c652b6bfe kdbus: don't clobber return values, use strjoin() instead of asprintf(), keep function invocations and variable declarations separate 2014-10-02 20:38:00 +02:00
Lennart Poettering 8e00bfc234 kdbus: make sure we never invoke free() on an uninitialized pointer on OOM 2014-10-02 20:38:00 +02:00
Daniel Mack 995a1063db sd-bus: sync kdbus.h (ABI break!)
struct kdbus_cmd_match got a flags field, which systemd currently makes no
use of.
2014-10-02 17:15:39 +02:00
Daniel Mack 581fe6c817 sd-bus: sync kdbus.h (ABI break)
struct kdbus_cmd_conn_info takes a list of items now instead of a string.

Fix the only user in SD of that ioctl.
2014-10-02 13:04:04 +02:00
Simon McVittie d20a3daaa7 sd-bus: use terms from the D-Bus Specification a bit more
D-Bus' type hierarchy as described in the spec is:

\- basic
   \- fixed type (u, i, etc.)
   \- string-like type (s, o, g)
\- container

Someone seems to have referred to basic types as "simple types" at
some point, but that term isn't defined in the D-Bus Specification,
and seems redundant.

So far I haven't renamed functions that use "trivial" in their names
to mean "fixed type", to avoid confusion about whether a struct of
constant length, like (iu), is a fixed type. The answer is that it is
fixed-length, but is not a "fixed type", so I can see that something
like bus_type_is_fixed() might be ambiguous.
2014-10-02 08:25:21 +02:00
Simon McVittie e1ffdb90d9 PORTING-DBUS1: we use :1.%llu not :0.%llu for D-Bus unique bus names 2014-10-02 08:25:21 +02:00
David Herrmann 1679ddc460 bus: use 2M as maximum message size in benchmark
The kdbus limit is 2M and we removed the bus-owner override. Therefore,
use at most 2M as message size.
2014-09-29 15:44:44 +02:00
David Herrmann 8bf4a42a2e bus: sync kdbus.h (ABI break!) 2014-09-29 15:37:31 +02:00
Daniel Mack f0c5e28e58 sd-bus: clean up string length calculation
Move the +1 calculus onto the definition of the variable, just to make
the code a little easier to read. No functional change.
2014-09-28 21:22:51 +02:00
Thomas Hindoe Paaboel Andersen 04c553e322 bus: remove unused check
strerror_r does not return null here and even if it did we would have
problems already at the preceding strlen call.

Found by coverity. Fixes: CID#1237770
2014-09-23 21:39:36 +02:00
Daniel Mack 590889ac53 sd-bus: sync kdbus.h 2014-09-23 17:37:44 +02:00
Daniel Mack 619d7a039f sd-bus: sync kdbus.h (API break)
Just a rename of two struct members to make the header file c++ compatible.
2014-09-23 16:16:04 +02:00
Daniel Mack f8c2425287 sd-bus: sync kdbus.h (API+ABI break)
The kdbus logic name registry logic was changed to transport the actual
name to acquire, release or report in a kdbus item.

This brings the name API a little more in line with other calls, and allows
for later augmentation.

Follow that change on the systemd side.
2014-09-22 18:22:53 +02:00
David Herrmann c72d5456e2 login: add public sd_session_get_desktop() API
The desktop brand is stored as DESKTOP variable for sessions. It can be
set arbitrarily by the session owner and identifies the desktop
environment that is running on that session.
2014-09-22 14:27:02 +02:00
David Herrmann 7f3d3ba1a6 bus: align kdbus ioctl parameters to 8byte
All kdbus ioctl arguments must be 8byte aligned. Make sure we use
alloca_align() and _alignas_(8) in all situations where gcc doesn't
guarantee 8-byte alignment.

Note that objects on the stack are always 8byte aligned as we put
_alignas_(8) into the structure definition in kdbus.h.
2014-09-22 14:27:02 +02:00
Emil Renner Berthing 1ed96046cb sd-rtnl: rtnl-message: remove unneeded linux includes 2014-09-18 17:37:55 +02:00
David Herrmann c2fa048c4a bus: fix bus_print_property() to use "int" for booleans
We always use "int" if we retrieve boolean values from sd-bus, as "bool"
is only a single byte, but full int on va-args.

Thanks to Werner Fink for the report!
2014-09-18 13:57:13 +02:00
Daniel Mack 913b6d70cb sd-bus: sync kdbus.h
(no API/ABI break this time)
2014-09-18 10:25:38 +02:00
Cristian Rodríguez 4edf33d1e3 Fix resource leak (coverity CID 1237760) 2014-09-18 10:13:09 +02:00
David Herrmann ff02f101cb bus: fix error leak in bus_node_exists()
If we call into user callbacks, we must always propagate possible errors.
Fix bus_node_exists() to do that and adjust the callers (which already
partially propagated the error).

Also speed up that function by first checking for registered enumerators
and/or object-managers.
2014-09-17 11:01:56 +02:00
David Herrmann 943c3f94e2 bus: never respond to GetManagedObjects() on sub-paths
The dbus-spec clearly specifies that GetManagedObjects() should only work
on the root-path of an object-tree. But on that path, it works regardless
whether there are any objects available or not.

We could, technically, define all sub-paths as a root-path of its own
sub-tree. However, if we do that, we enter undefined territory:

    Imagine only a fallback vtable is registered. We want
    GetManagedObjects() to *NOT* fail with UNKNOWN_METHOD if it is called
    on a valid sub-tree of the fallback. On the other hand, we don't want
    it to work on arbitrary sub-tree. Something like:
        /path/to/fallback/foobar/foobar/foobar/invalid/foobar
    should not work.
    However, there is no way to know which paths on a fallback are valid
    without looking at there registered objects. If no objects are
    registered, we have no way to figure it out.

Therefore, we now try to follow the dbus spec by only returning valid data
on registered root-paths. We treat each path as root which was registered
an object-manager on via add_object_manager(). So applications can now
directly control which paths to place an object-manager on.

We also fix the introspection to not return object-manager interfaces on
non-root paths.

Also fixes some dead-code paths initially reported by Philippe De Swert.
2014-09-17 11:01:52 +02:00