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