bus: initialize can_send_result
[platform/upstream/dbus.git] / bus / bus.c
index eb932f6..96b51de 100644 (file)
--- a/bus/bus.c
+++ b/bus/bus.c
@@ -1563,6 +1563,7 @@ bus_context_check_security_policy (BusContext          *context,
   dbus_bool_t requested_reply;
   const char *privilege;
   char *out_rule = NULL;
+  BusResult can_send_result = BUS_RESULT_TRUE;
 
   type = dbus_message_get_type (message);
   src = dbus_message_get_sender (message);
@@ -1748,18 +1749,16 @@ bus_context_check_security_policy (BusContext          *context,
 
   log = FALSE;
   if (sender_policy) {
-    switch (bus_client_policy_check_can_send (sender,
-                                              sender_policy,
-                                              context->registry,
-                                              requested_reply,
-                                              addressed_recipient,
-                                              proposed_recipient,
-                                              message, &toggles, &log, &privilege,
-                                              deferred_message, &out_rule))
+    can_send_result = bus_client_policy_check_can_send (sender,
+                                                        sender_policy,
+                                                        context->registry,
+                                                        requested_reply,
+                                                        addressed_recipient,
+                                                        proposed_recipient,
+                                                        message, &toggles, &log, &privilege,
+                                                        deferred_message, &out_rule);
+    if (can_send_result == BUS_RESULT_FALSE)
       {
-      case BUS_RESULT_TRUE:
-        break;
-      case BUS_RESULT_FALSE:
         complain_about_message (context, DBUS_ERROR_ACCESS_DENIED,
                                 "Rejected send message", toggles,
                                 message, sender, proposed_recipient, requested_reply,
@@ -1770,10 +1769,6 @@ bus_context_check_security_policy (BusContext          *context,
         if (out_rule)
           free (out_rule);
         return BUS_RESULT_FALSE;
-        break;
-      case BUS_RESULT_LATER:
-        return BUS_RESULT_LATER;
-        break;
       }
   }
 
@@ -1807,12 +1802,17 @@ bus_context_check_security_policy (BusContext          *context,
             "security policy disallowing message due to recipient policy\n");
         if (out_rule)
           free (out_rule);
+        if (deferred_message && *deferred_message)
+          bus_deferred_message_set_response (*deferred_message, BUS_RESULT_FALSE);
         return BUS_RESULT_FALSE;
       case BUS_RESULT_LATER:
         return BUS_RESULT_LATER;
       }
   }
 
+  if (can_send_result == BUS_RESULT_LATER)
+    return BUS_RESULT_LATER;
+
   /* See if limits on size have been exceeded */
   if (!bus_context_check_recipient_message_limits(context, proposed_recipient, sender, message,
       requested_reply, error))