summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-12-03 14:58:09 +0200
committerJohan Hedberg <johan.hedberg@nokia.com>2008-12-03 14:58:09 +0200
commitfbb20362e9dcaf11c03e5bf15c41c70aba269619 (patch)
treed5feaacf265fc3f10b44cf06c2f38478cca3ea0d /src
parent75feaf48401c04fb68e78c41213e26fdefa71ab9 (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/adapter.c9
-rw-r--r--src/agent.c4
2 files changed, 9 insertions, 4 deletions
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;