diff options
author | Havoc Pennington <hp@redhat.com> | 2003-03-21 02:38:40 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2003-03-21 02:38:40 +0000 |
commit | b6ffea177fccb6cc4e65992da7d8b390054277f7 (patch) | |
tree | 5194ad93d495c110c88b7730f05b9265dd6ce73d /bus/bus.c | |
parent | 056d76d809dc341b0dce160d3f79062604565c77 (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/bus.c')
-rw-r--r-- | bus/bus.c | 47 |
1 files changed, 46 insertions, 1 deletions
@@ -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); |