summaryrefslogtreecommitdiffstats
path: root/bus
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-03-21 02:38:40 +0000
committerHavoc Pennington <hp@redhat.com>2003-03-21 02:38:40 +0000
commitb6ffea177fccb6cc4e65992da7d8b390054277f7 (patch)
tree5194ad93d495c110c88b7730f05b9265dd6ce73d /bus
parent056d76d809dc341b0dce160d3f79062604565c77 (diff)
2003-03-20 Havoc Pennington <hp@redhat.com>
* dbus/dbus-connection.c (dbus_connection_set_unix_user_function): new function (dbus_connection_get_unix_user): new function
Diffstat (limited to 'bus')
-rw-r--r--bus/bus.c47
1 files changed, 46 insertions, 1 deletions
diff --git a/bus/bus.c b/bus/bus.c
index a1bc6622..4b5b23b5 100644
--- a/bus/bus.c
+++ b/bus/bus.c
@@ -27,16 +27,23 @@
#include "connection.h"
#include "services.h"
#include "utils.h"
+#include "policy.h"
+#include <dbus/dbus-list.h>
+#include <dbus/dbus-hash.h>
#include <dbus/dbus-internals.h>
struct BusContext
{
int refcount;
- char *address;
+ char *address;
DBusServer *server;
BusConnections *connections;
BusActivation *activation;
BusRegistry *registry;
+ DBusList *default_rules; /**< Default policy rules */
+ DBusList *override_rules; /**< Override policy rules */
+ DBusHashTable *rules_by_uid; /**< per-UID policy rules */
+ DBusHashTable *rules_by_gid; /**< per-GID policy rules */
};
static dbus_bool_t
@@ -109,6 +116,14 @@ new_connection_callback (DBusServer *server,
/* on OOM, we won't have ref'd the connection so it will die. */
}
+static void
+free_rule_func (void *data)
+{
+ BusPolicyRule *rule = data;
+
+ bus_policy_rule_unref (rule);
+}
+
BusContext*
bus_context_new (const char *address,
const char **service_dirs,
@@ -164,6 +179,24 @@ bus_context_new (const char *address,
goto failed;
}
+ context->rules_by_uid = _dbus_hash_table_new (DBUS_HASH_INT,
+ NULL,
+ free_rule_func);
+ if (context->rules_by_uid == NULL)
+ {
+ BUS_SET_OOM (error);
+ goto failed;
+ }
+
+ context->rules_by_gid = _dbus_hash_table_new (DBUS_HASH_INT,
+ NULL,
+ free_rule_func);
+ if (context->rules_by_gid == NULL)
+ {
+ BUS_SET_OOM (error);
+ goto failed;
+ }
+
dbus_server_set_new_connection_function (context->server,
new_connection_callback,
context, NULL);
@@ -260,6 +293,18 @@ bus_context_unref (BusContext *context)
dbus_server_unref (context->server);
context->server = NULL;
}
+
+ if (context->rules_by_uid)
+ {
+ _dbus_hash_table_unref (context->rules_by_uid);
+ context->rules_by_uid = NULL;
+ }
+
+ if (context->rules_by_gid)
+ {
+ _dbus_hash_table_unref (context->rules_by_gid);
+ context->rules_by_gid = NULL;
+ }
dbus_free (context->address);
dbus_free (context);