From fbb20362e9dcaf11c03e5bf15c41c70aba269619 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Wed, 3 Dec 2008 14:58:09 +0200 Subject: Fix agent creation checks Allow the same process (D-Bus name) to own both the default (adapter specific) as well as a device specific agent. --- src/adapter.c | 9 +++++++++ src/agent.c | 4 ---- 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/adapter.c b/src/adapter.c index b9bd74ab..865449c5 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -436,11 +436,20 @@ static struct bonding_request_info *bonding_request_new(DBusConnection *conn, device_get_address(device, &bdaddr); ba2str(&bdaddr, addr); + if (adapter->agent && + agent_matches(adapter->agent, name, agent_path)) { + error("Refusing adapter agent usage as device specific one"); + return NULL; + } + agent = agent_create(adapter, name, agent_path, capability, device_agent_removed, device); + if (!agent) + debug("agent_create failed"); + device_set_agent(device, agent); debug("Temporary agent registered for hci%d/%s at %s:%s", diff --git a/src/agent.c b/src/agent.c index 8ae43c4a..46202ac0 100644 --- a/src/agent.c +++ b/src/agent.c @@ -188,10 +188,6 @@ struct agent *agent_create(struct btd_adapter *adapter, const char *name, { struct agent *agent, *adapter_agent; - adapter_agent = adapter_get_agent(adapter); - if (adapter_agent && g_str_equal(adapter_agent->name, name)) - return NULL; - agent = g_new0(struct agent, 1); agent->adapter = adapter; -- cgit