dbus-marshal-byteswap: Byte-swap Unix fd indexes if needed
[platform/upstream/dbus.git] / bus / check.h
1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 /* check.h  Bus security policy runtime check
3  *
4  * Copyright (C) 2014  Intel, Inc.
5  * Copyright (c) 2014  Samsung Electronics, Ltd.
6  *
7  * Licensed under the Academic Free License version 2.1
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22  *
23  */
24
25 #ifndef BUS_CHECK_H
26 #define BUS_CHECK_H
27
28 #include "bus.h"
29 #include "policy.h"
30
31
32 typedef enum {
33   BUS_DEFERRED_MESSAGE_CHECK_SEND      = 1 << 0,
34   BUS_DEFERRED_MESSAGE_CHECK_RECEIVE   = 1 << 1,
35   BUS_DEFERRED_MESSAGE_CHECK_OWN       = 1 << 2,
36 } BusDeferredMessageStatus;
37
38 typedef void (*BusCheckResponseFunc) (BusDeferredMessage *message,
39                                       BusDeferredMessageStatus check_type,
40                                       BusResult result);
41
42 BusCheck   *bus_check_new         (BusContext *context,
43                                    DBusError *error);
44 BusCheck   *bus_check_ref         (BusCheck *check);
45 void        bus_check_unref       (BusCheck *check);
46
47 BusContext *bus_check_get_context (BusCheck *check);
48 BusCynara  *bus_check_get_cynara  (BusCheck *check);
49 BusResult   bus_check_privilege   (BusCheck *check,
50                                    DBusMessage *message,
51                                    DBusConnection *sender,
52                                    DBusConnection *addressed_recipient,
53                                    DBusConnection *proposed_recipient,
54                                    const char *privilege,
55                                    BusDeferredMessageStatus check_type,
56                                    BusDeferredMessage **deferred_message);
57
58
59 BusDeferredMessage *bus_deferred_message_new                (DBusMessage *message,
60                                                              DBusConnection *sender,
61                                                              DBusConnection *addressed_recipient,
62                                                              DBusConnection *proposed_recipient,
63                                                              BusResult response);
64
65 BusDeferredMessage *bus_deferred_message_ref                (BusDeferredMessage *deferred_message);
66 void                bus_deferred_message_unref              (BusDeferredMessage *deferred_message);
67 BusResult           bus_deferred_message_dispatch           (BusDeferredMessage *deferred_message);
68 dbus_bool_t         bus_deferred_message_waits_for_check    (BusDeferredMessage *deferred_message);
69 DBusConnection     *bus_deferred_message_get_recipient      (BusDeferredMessage *deferred_message);
70 void                bus_deferred_message_response_received  (BusDeferredMessage *deferred_message,
71                                                              BusDeferredMessageStatus check_type,
72                                                              BusResult result);
73 dbus_bool_t         bus_deferred_message_queue_at_recipient (BusDeferredMessage *deferred_message,
74                                                              BusTransaction *transaction,
75                                                              dbus_bool_t full_dispatch,
76                                                              dbus_bool_t prepend);
77 void                bus_deferred_message_disable_sender     (BusDeferredMessage *deferred_message);
78 BusResult           bus_deferred_message_get_response       (BusDeferredMessage *deferred_message);
79 void                bus_deferred_message_set_response       (BusDeferredMessage *deferred_message,
80                                                              BusResult response);
81
82 BusDeferredMessageStatus  bus_deferred_message_get_status   (BusDeferredMessage *deferred_message);
83
84
85 dbus_bool_t         bus_deferred_message_expect_method_reply (BusDeferredMessage *deferred_message,
86                                                               BusTransaction *transaction,
87                                                               DBusError *error);
88 void                bus_deferred_message_create_error        (BusDeferredMessage *deferred_message,
89                                                               const char *error_message,
90                                                               DBusError *error);
91 void                bus_deferred_message_set_policy_check_info (BusDeferredMessage *deferred_message,
92                                                                 dbus_bool_t requested_reply,
93                                                                 int matched_rules,
94                                                                 const char *privilege);
95 dbus_bool_t         bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message,
96                                                                DBusError *error);
97
98
99 #ifdef DBUS_ENABLE_EMBEDDED_TESTS
100 extern dbus_bool_t (*bus_check_test_override) (DBusConnection *connection,
101                                                const char *privilege);
102 #endif
103
104 #endif /* BUS_CHECK_H */