From a284a148e40551a2e6e5d0e54c2e04d2b679aaad Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Wed, 19 Mar 2003 23:48:17 +0000 Subject: 2003-03-19 Havoc Pennington * bus/policy.c: start sketching code for policy restrictions on what connections can do. --- bus/policy.h | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 bus/policy.h (limited to 'bus/policy.h') diff --git a/bus/policy.h b/bus/policy.h new file mode 100644 index 00000000..f146c528 --- /dev/null +++ b/bus/policy.h @@ -0,0 +1,93 @@ +/* -*- mode: C; c-file-style: "gnu" -*- */ +/* policy.h Policies for what a connection can do + * + * Copyright (C) 2003 Red Hat, Inc. + * + * Licensed under the Academic Free License version 1.2 + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef BUS_POLICY_H +#define BUS_POLICY_H + +#include +#include "bus.h" + +typedef struct BusPolicy BusPolicy; +typedef struct BusPolicyRule BusPolicyRule; + +typedef enum +{ + DBUS_POLICY_RULE_SEND, + DBUS_POLICY_RULE_RECEIVE, + DBUS_POLICY_RULE_OWN +} BusPolicyRuleType; + +struct BusPolicyRule +{ + int refcount; + + BusPolicyRuleType type; + + unsigned int allow : 1; /**< #TRUE if this allows, #FALSE if it denies */ + + union + { + struct + { + /* either can be NULL meaning "any" */ + char *message_name; + char *destination; + } send; + + struct + { + /* either can be NULL meaning "any" */ + char *message_name; + char *origin; + } receive; + + struct + { + /* can be NULL meaning "any" */ + char *service_name; + } own; + + } d; +}; + +BusPolicyRule* bus_policy_rule_new (BusPolicyRuleType type, + dbus_bool_t allow); +void bus_policy_rule_ref (BusPolicyRule *rule); +void bus_policy_rule_unref (BusPolicyRule *rule); + +BusPolicy* bus_policy_new (void); +void bus_policy_ref (BusPolicy *policy); +void bus_policy_unref (BusPolicy *policy); +dbus_bool_t bus_policy_check_can_send (BusPolicy *policy, + DBusConnection *sender, + DBusMessage *message); +dbus_bool_t bus_policy_check_can_receive (BusPolicy *policy, + DBusConnection *receiver, + DBusMessage *message); +dbus_bool_t bus_policy_check_can_own (BusPolicy *policy, + DBusConnection *connection, + const char *service_name); + + + +#endif /* BUS_POLICY_H */ -- cgit