diff options
author | Will Thompson <will.thompson@collabora.co.uk> | 2010-02-04 20:24:54 +0000 |
---|---|---|
committer | Will Thompson <will.thompson@collabora.co.uk> | 2010-03-19 17:48:00 +0000 |
commit | 6663cb5dcf6ef931e17b4104f571c59d411219d2 (patch) | |
tree | 6e552dc49f35924a6327dfbd0be10a7c843cf91b /bus/activation.c | |
parent | 3a2753e667e565f18f124b632fe720b70b018d05 (diff) | |
download | dbus-6663cb5dcf6ef931e17b4104f571c59d411219d2.tar.gz |
Dispatch post-activation messages to anyone interested
Previously, if a method call activated a service, it would only be
delivered to that service, and not to other services with match rules
which should match. This patch replaces the improperly-duplicated
dispatch code in activation.c with a call back into the normal dispatch
code, fixing this bug (fd.o#26427).
(Additionally, were one to service-activate a service that doesn't
understand file descriptors with a message containing a file descriptor,
the previous code would send it anyway, and the service's dbus library
would blow up. This is also fixed here, since the normal dispatch code
checks this correctly.)
Diffstat (limited to 'bus/activation.c')
-rw-r--r-- | bus/activation.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/bus/activation.c b/bus/activation.c index 0a28df16..2fcd85d2 100644 --- a/bus/activation.c +++ b/bus/activation.c @@ -25,6 +25,7 @@ #include "activation.h" #include "activation-exit-codes.h" #include "desktop-file.h" +#include "dispatch.h" #include "services.h" #include "test.h" #include "utils.h" @@ -1132,21 +1133,12 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation addressed_recipient = bus_service_get_primary_owners_connection (service); - /* Check the security policy, which has the side-effect of adding an - * expected pending reply. - */ - if (!bus_context_check_security_policy (activation->context, transaction, - entry->connection, - addressed_recipient, - addressed_recipient, - entry->activation_message, error)) + /* Resume dispatching where we left off in bus_dispatch() */ + if (!bus_dispatch_matches (transaction, + entry->connection, + addressed_recipient, + entry->activation_message, error)) goto error; - - if (!bus_transaction_send (transaction, addressed_recipient, entry->activation_message)) - { - BUS_SET_OOM (error); - goto error; - } } link = next; |