From b6ffea177fccb6cc4e65992da7d8b390054277f7 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Fri, 21 Mar 2003 02:38:40 +0000 Subject: 2003-03-20 Havoc Pennington * dbus/dbus-connection.c (dbus_connection_set_unix_user_function): new function (dbus_connection_get_unix_user): new function --- bus/bus.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'bus') 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 +#include #include 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); -- cgit