1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24: #ifndef BUS_POLICY_H
25: #define BUS_POLICY_H
26:
27: #include <dbus/dbus.h>
28: #include <dbus/dbus-string.h>
29: #include <dbus/dbus-list.h>
30: #include <dbus/dbus-sysdeps.h>
31: #include "bus.h"
32:
33: typedef enum
34: {
35: BUS_POLICY_RULE_SEND,
36: BUS_POLICY_RULE_RECEIVE,
37: BUS_POLICY_RULE_OWN,
38: BUS_POLICY_RULE_USER,
39: BUS_POLICY_RULE_GROUP
40: } BusPolicyRuleType;
41:
42:
43: #define BUS_POLICY_RULE_IS_PER_CLIENT(rule) (!((rule)->type == BUS_POLICY_RULE_USER || \
44: (rule)->type == BUS_POLICY_RULE_GROUP))
45:
46: struct BusPolicyRule
47: {
48: int refcount;
49:
50: BusPolicyRuleType type;
51:
52: unsigned int allow : 1;
53:
54: union
55: {
56: struct
57: {
58:
59: int message_type;
60:
61: char *path;
62: char *interface;
63: char *member;
64: char *error;
65: char *destination;
66: unsigned int requested_reply : 1;
67: } send;
68:
69: struct
70: {
71:
72: int message_type;
73:
74: char *path;
75: char *interface;
76: char *member;
77: char *error;
78: char *origin;
79: unsigned int eavesdrop : 1;
80: unsigned int requested_reply : 1;
81: } receive;
82:
83: struct
84: {
85:
86: char *service_name;
87: } own;
88:
89: struct
90: {
91:
92: dbus_uid_t uid;
93: } user;
94:
95: struct
96: {
97:
98: dbus_gid_t gid;
99: } group;
100:
101: } d;
102: };
103:
104: BusPolicyRule* bus_policy_rule_new (BusPolicyRuleType type,
105: dbus_bool_t allow);
106: BusPolicyRule* bus_policy_rule_ref (BusPolicyRule *rule);
107: void bus_policy_rule_unref (BusPolicyRule *rule);
108:
109: BusPolicy* bus_policy_new (void);
110: BusPolicy* bus_policy_ref (BusPolicy *policy);
111: void bus_policy_unref (BusPolicy *policy);
112: BusClientPolicy* bus_policy_create_client_policy (BusPolicy *policy,
113: DBusConnection *connection,
114: DBusError *error);
115: dbus_bool_t bus_policy_allow_user (BusPolicy *policy,
116: DBusUserDatabase *user_database,
117: unsigned long uid);
118: dbus_bool_t bus_policy_append_default_rule (BusPolicy *policy,
119: BusPolicyRule *rule);
120: dbus_bool_t bus_policy_append_mandatory_rule (BusPolicy *policy,
121: BusPolicyRule *rule);
122: dbus_bool_t bus_policy_append_user_rule (BusPolicy *policy,
123: dbus_uid_t uid,
124: BusPolicyRule *rule);
125: dbus_bool_t bus_policy_append_group_rule (BusPolicy *policy,
126: dbus_gid_t gid,
127: BusPolicyRule *rule);
128: dbus_bool_t bus_policy_append_console_rule (BusPolicy *policy,
129: dbus_bool_t at_console,
130: BusPolicyRule *rule);
131:
132: dbus_bool_t bus_policy_merge (BusPolicy *policy,
133: BusPolicy *to_absorb);
134:
135: BusClientPolicy* bus_client_policy_new (void);
136: BusClientPolicy* bus_client_policy_ref (BusClientPolicy *policy);
137: void bus_client_policy_unref (BusClientPolicy *policy);
138: dbus_bool_t bus_client_policy_check_can_send (BusClientPolicy *policy,
139: BusRegistry *registry,
140: dbus_bool_t requested_reply,
141: DBusConnection *receiver,
142: DBusMessage *message);
143: dbus_bool_t bus_client_policy_check_can_receive (BusClientPolicy *policy,
144: BusRegistry *registry,
145: dbus_bool_t requested_reply,
146: DBusConnection *sender,
147: DBusConnection *addressed_recipient,
148: DBusConnection *proposed_recipient,
149: DBusMessage *message);
150: dbus_bool_t bus_client_policy_check_can_own (BusClientPolicy *policy,
151: DBusConnection *connection,
152: const DBusString *service_name);
153: dbus_bool_t bus_client_policy_append_rule (BusClientPolicy *policy,
154: BusPolicyRule *rule);
155: void bus_client_policy_optimize (BusClientPolicy *policy);
156:
157:
158: #endif