summaryrefslogtreecommitdiff
path: root/bus/activation.c
diff options
context:
space:
mode:
authorWill Thompson <will.thompson@collabora.co.uk>2010-02-04 20:24:54 +0000
committerWill Thompson <will.thompson@collabora.co.uk>2010-03-19 17:48:00 +0000
commit6663cb5dcf6ef931e17b4104f571c59d411219d2 (patch)
tree6e552dc49f35924a6327dfbd0be10a7c843cf91b /bus/activation.c
parent3a2753e667e565f18f124b632fe720b70b018d05 (diff)
downloaddbus-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.c20
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;