Age | Commit message (Collapse) | Author |
|
We shouldn export what isn't necessary or useful to clients, so let's
add the protocol definitions we only need internally into a private
header.
|
|
expected return signature generate an error if the response message doesn't match it
|
|
require deep copies
This should fix issues with incorrectly copying bus error messages out
of sd_bus_message objects.
Original bug found by: Djalal Harouni
|
|
|
|
The name list and query functions now work differently in kdbus, as the
result is stored in the connection's pool, rather than being copied back
through the ioctl buffer. That also safes us some logic, as we don't
have to resize the communication buffer in a loop with growing buffer
sizes.
Due to this, KDBUS_CMD_MSG_RELEASE was renamed to KDBUS_CMD_FREE, as it
is now used outside the message logic as well.
|
|
parts
|
|
This way we can unify handling of credentials that are attached to
messages, or can be queried for bus name owners or connection peers.
This also adds the ability to extend incomplete credential information
with data from /proc,
Also, provide a convenience call that will automatically determine the
most appropriate credential object for an incoming message, by using the
the attached information if possible, the sending name information if
available and otherwise the peer's credentials.
|
|
All calls that set a sd_bus_error structure will now return the same
error converted to a negative errno. This may be used as syntactic sugar
to return from a function and setting a bus_error structure in one go.
Also, translate all Linux Exyz (EIO, EINVAL, EUCLEAN, EPIPE, ...)
automatically into counterparts in the (new) "Posix.Error." namespace.
If we fail to allocate memory for the components of a sd_bus_error
automatically reset it to an OOM error which we always can write.
|
|
|
|
Message handler callbacks can be simplified drastically if the
dispatcher automatically replies to method calls if errors are returned.
Thus: add an sd_bus_error argument to all message handlers. When we
dispatch a message handler and it returns negative or a set sd_bus_error
we send this as message error back to the client. This means errors
returned by handlers by default are given back to clients instead of
rippling all the way up to the event loop, which is desirable to make
things robust.
As a side-effect we can now easily turn the SELinux checks into normal
function calls, since the method call dispatcher will generate the right
error replies automatically now.
Also, make sure we always pass the error structure to all property and
method handlers as last argument to follow the usual style of passing
variables for return values as last argument.
|
|
require this anymore
|
|
|
|
This patch converts PID 1 to libsystemd-bus and thus drops the
dependency on libdbus. The only remaining code using libdbus is a test
case that validates our bus marshalling against libdbus' marshalling,
and this dependency can be turned off.
This patch also adds a couple of things to libsystem-bus, that are
necessary to make the port work:
- Synthesizing of "Disconnected" messages when bus connections are
severed.
- Support for attaching multiple vtables for the same interface on the
same path.
This patch also fixes the SetDefaultTarget() and GetDefaultTarget() bus
calls which used an inappropriate signature.
As a side effect we will now generate PropertiesChanged messages which
carry property contents, rather than just invalidation information.
|
|
|
|
|
|
|
|
are not in any
So far we used ENXIO whenever the user tried to read something from a
function that didn't carry the right type, and hence use the same error
here to indicate that what the user expected and what was in the message
didn't match up.
|
|
Also change sd_bus_message_exit_container to return -ENOENT
when not in a container, to make it easier to distinguish different
errors.
|
|
|
|
|
|
Like all other message read calls bus_message_read_strv_extend() needs
to return 1 on sucess, and 0 on end of array.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Old static libsystemd-bus.la becomes libsystemd-bus-internal.la.
memfd functions are also exported in the same library.
(Best viewed with --color-words -U0).
|
|
Instead of simply crashing be somewhat nicer and serialize a NULL string
into the empty string and generate an error on signature and object path
strings.
|
|
This may be used to determine whether we are at the end of a container
ot the entire message.
|
|
|
|
It will be useful to have that in the public API.
|
|
On request om Tom Gundersen...
|
|
|
|
NULL we skip over a field
|
|
|
|
|
|
|
|
handle this as EOF
|
|
Just use an unsigned int as a bool type to avoid issues in the public
message reading API; sizeof(bool) == 1, but the code copies 4 bytes at
the pointers destination.
|
|
reading it
|
|
Among other things this also adds a few things necessary for the change:
- Considerably more powerful error returning APIs in libsystemd-bus
- Adapter for connecting an sd_bus to an sd_event
- As I reworked the PolicyKit logic to the new library I also made it
asynchronous, so that PolicyKit requests of one user cannot block out
another user anymore.
- We always use the macro names for common bus error. That way it is
harder to mistype them since the compiler will notice
|
|
|
|
src/machine/machined-dbus.c:237:13: warning: Branch condition evaluates to a garbage value
if (m)
^
|
|
array to a message
|
|
|
|
objects on the bus
This adds a lightweight scheme how to define interfaces in static fixed
arrays which then can be easily registered on a bus connection. This
makes it much easier to write bus services.
This automatically handles implementation of the Properties,
ObjectManager, and Introspection bus interfaces.
|
|
|
|
- for now, comment out munmap() check to enable memfd passing
- print tab-separated values and header
- add memcpy() to fill the memfd, to produce real-world results
$ ./test-bus-kernel-benchmark
SIZE COPY MEMFD
4194304 370 370
2097152 810 810
1048576 2130 2130
524288 4090 4090
262144 7080 7080
131072 11380 11380
65536 17140 17140
98304 13930 13930
114688 12890 12890
122880 12350 12350
126976 12150 12150
129024 12170 12170
130048 12040 12040
130560 12080 12080
130816 12010 12010
130944 12020 12020
131008 12040 12040
131040 12050 12050
131056 12010 12010
131064 12060 12060
131068 12040 12040
131070 11310 11310
131069 11420 11420
Copying/memfd are equally fast at 131068 bytes
$ ./test-bus-kernel-benchmark chart
SIZE COPY MEMFD
1 35570 23690
2 36470 23680
4 36160 23520
8 36600 22220
16 33900 20830
32 33990 21360
64 33480 21280
128 34050 20910
256 32950 21750
512 34730 21900
1024 33810 22890
2048 36280 23110
4096 30790 21610
8192 29380 21100
16384 26880 19820
32768 22510 17980
65536 17270 15180
131072 11400 11420
262144 7140 8270
524288 4090 5050
1048576 2110 2780
2097152 800 1140
4194304 350 580
|
|
|