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 | |
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.)
-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; |