summaryrefslogtreecommitdiff
path: root/bus/bus.h
blob: 6382b18843e43efa8cfe38e2b138d8e242a753da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* bus.h  message bus context object
 *
 * Copyright (C) 2003 Red Hat, Inc.
 *
 * Licensed under the Academic Free License version 2.1
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifndef BUS_BUS_H
#define BUS_BUS_H

#include <dbus/dbus.h>
#include <dbus/dbus-string.h>
#include <dbus/dbus-mainloop.h>
#include <dbus/dbus-pipe.h>
#include <dbus/dbus-sysdeps.h>

typedef struct BusActivation    BusActivation;
typedef struct BusConnections   BusConnections;
typedef struct BusContext       BusContext;
typedef struct BusPolicy        BusPolicy;
typedef struct BusClientPolicy  BusClientPolicy;
typedef struct BusPolicyRule    BusPolicyRule;
typedef struct BusRegistry      BusRegistry;
typedef struct BusSELinuxID     BusSELinuxID;
typedef struct BusAppArmorConfinement BusAppArmorConfinement;
typedef struct BusService       BusService;
typedef struct BusOwner		BusOwner;
typedef struct BusTransaction   BusTransaction;
typedef struct BusMatchmaker    BusMatchmaker;
typedef struct BusMatchRule     BusMatchRule;
typedef struct BusActivationEntry BusActivationEntry;
typedef struct BusCheck           BusCheck;
typedef struct BusDeferredMessage BusDeferredMessage;
typedef struct BusCynara          BusCynara;

/**
 * This uses BUS_RESULT_TRUE = 0 != TRUE intentionally, to trigger
 * runtime failures where code uses a simple boolean check or
 * comparison with TRUE/FALSE or returns TRUE/FALSE when it should use
 * one of these enums. Such broken code unfortunately does not trigger
 * compile time errors in C.
 */
typedef enum {
  /** operation allowed or succeeded */
  BUS_RESULT_TRUE,
  /** operation denied or failed */
  BUS_RESULT_FALSE,
  /** no result yet, ask again later */
  BUS_RESULT_LATER
} BusResult;

typedef struct
{
  long max_incoming_bytes;          /**< How many incoming message bytes for a single connection */
  long max_incoming_unix_fds;       /**< How many incoming message unix fds for a single connection */
  long max_outgoing_bytes;          /**< How many outgoing bytes can be queued for a single connection */
  long max_outgoing_unix_fds;       /**< How many outgoing unix fds can be queued for a single connection */
  long max_message_size;            /**< Max size of a single message in bytes */
  long max_message_unix_fds;        /**< Max number of unix fds of a single message*/
  int activation_timeout;           /**< How long to wait for an activation to time out */
  int auth_timeout;                 /**< How long to wait for an authentication to time out */
  int pending_fd_timeout;           /**< How long to wait for a D-Bus message with a fd to time out */
  int max_completed_connections;    /**< Max number of authorized connections */
  int max_incomplete_connections;   /**< Max number of incomplete connections */
  int max_connections_per_user;     /**< Max number of connections auth'd as same user */
  int max_pending_activations;      /**< Max number of pending activations for the entire bus */
  int max_services_per_connection;  /**< Max number of owned services for a single connection */
  int max_match_rules_per_connection; /**< Max number of match rules for a single connection */
  int max_replies_per_connection;     /**< Max number of replies that can be pending for each connection */
  int reply_timeout;                  /**< How long to wait before timing out a reply */
} BusLimits;

typedef enum
{
  BUS_CONTEXT_FLAG_NONE = 0,
  BUS_CONTEXT_FLAG_FORK_ALWAYS = (1 << 1),
  BUS_CONTEXT_FLAG_FORK_NEVER = (1 << 2),
  BUS_CONTEXT_FLAG_WRITE_PID_FILE = (1 << 3),
  BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION = (1 << 4)
} BusContextFlags;

BusContext*       bus_context_new                                (const DBusString *config_file,
                                                                  BusContextFlags   flags,
                                                                  DBusPipe         *print_addr_pipe,
                                                                  DBusPipe         *print_pid_pipe,
                                                                  const DBusString *address,
                                                                  DBusError        *error);
dbus_bool_t       bus_context_reload_config                      (BusContext       *context,
								  DBusError        *error);
void              bus_context_shutdown                           (BusContext       *context);
BusContext*       bus_context_ref                                (BusContext       *context);
void              bus_context_unref                              (BusContext       *context);
dbus_bool_t       bus_context_get_id                             (BusContext       *context,
                                                                  DBusString       *uuid);
const char*       bus_context_get_type                           (BusContext       *context);
const char*       bus_context_get_address                        (BusContext       *context);
const char*       bus_context_get_servicehelper                  (BusContext       *context);
dbus_bool_t       bus_context_get_systemd_activation             (BusContext       *context);
BusRegistry*      bus_context_get_registry                       (BusContext       *context);
BusConnections*   bus_context_get_connections                    (BusContext       *context);
BusActivation*    bus_context_get_activation                     (BusContext       *context);
BusMatchmaker*    bus_context_get_matchmaker                     (BusContext       *context);
DBusLoop*         bus_context_get_loop                           (BusContext       *context);
BusCheck *        bus_context_get_check                          (BusContext       *context);
dbus_bool_t       bus_context_allow_unix_user                    (BusContext       *context,
                                                                  unsigned long     uid);
dbus_bool_t       bus_context_allow_windows_user                 (BusContext       *context,
                                                                  const char       *windows_sid);
BusPolicy*        bus_context_get_policy                         (BusContext       *context);

BusClientPolicy*  bus_context_create_client_policy               (BusContext       *context,
                                                                  DBusConnection   *connection,
                                                                  DBusError        *error);
int               bus_context_get_activation_timeout             (BusContext       *context);
int               bus_context_get_auth_timeout                   (BusContext       *context);
int               bus_context_get_pending_fd_timeout             (BusContext       *context);
int               bus_context_get_max_completed_connections      (BusContext       *context);
int               bus_context_get_max_incomplete_connections     (BusContext       *context);
int               bus_context_get_max_connections_per_user       (BusContext       *context);
int               bus_context_get_max_pending_activations        (BusContext       *context);
int               bus_context_get_max_services_per_connection    (BusContext       *context);
int               bus_context_get_max_match_rules_per_connection (BusContext       *context);
int               bus_context_get_max_replies_per_connection     (BusContext       *context);
int               bus_context_get_reply_timeout                  (BusContext       *context);
DBusRLimit *      bus_context_get_initial_fd_limit               (BusContext       *context);
void              bus_context_log                                (BusContext       *context,
                                                                  DBusSystemLogSeverity severity,
                                                                  const char       *msg,
                                                                  ...) _DBUS_GNUC_PRINTF (3, 4);
void              bus_context_log_literal                        (BusContext       *context,
                                                                  DBusSystemLogSeverity severity,
                                                                  const char       *msg);
void              bus_context_log_and_set_error                  (BusContext       *context,
                                                                  DBusSystemLogSeverity severity,
                                                                  DBusError        *error,
                                                                  const char       *name,
                                                                  const char       *msg,
                                                                  ...) _DBUS_GNUC_PRINTF (5, 6);
void              bus_context_check_all_watches                  (BusContext       *context);
BusResult         bus_context_check_security_policy              (BusContext          *context,
                                                                  BusTransaction      *transaction,
                                                                  DBusConnection      *sender,
                                                                  DBusConnection      *addressed_recipient,
                                                                  DBusConnection      *proposed_recipient,
                                                                  DBusMessage         *message,
                                                                  BusActivationEntry  *activation_entry,
                                                                  DBusError           *error,
                                                                  BusDeferredMessage **deferred_message);

dbus_bool_t       bus_context_check_recipient_message_limits     (BusContext *context,
                                                                  DBusConnection *recipient,
                                                                  DBusConnection *sender,
                                                                  DBusMessage *message,
                                                                  dbus_bool_t requested_reply,
                                                                  DBusError *error);
void              bus_context_complain_about_message             (BusContext     *context,
                                                                  const char     *error_name,
                                                                  const char     *complaint,
                                                                  int             matched_rules,
                                                                  DBusMessage    *message,
                                                                  DBusConnection *sender,
                                                                  DBusConnection *proposed_recipient,
                                                                  dbus_bool_t     requested_reply,
                                                                  dbus_bool_t     log,
                                                                  const char     *privilege,
                                                                  DBusError      *error);


#endif /* BUS_BUS_H */