[PATCH]Trusted verification for service authorization

"Claudio Takahasi" <[email protected]>
Newsgroups gmane.linux.bluez.devel
Message-ID <[email protected]>
Hi Marcel,

here is the patch to check global and service trust before request for
authorization.

The code was basically copied from RequestAuthorization method. Any
idea why BDADDR_ANY is being used?

"read_trust(BDADDR_ANY, ..."
Using this adapter address, service based "trust" will be applied to
all adapters. Do you want this behavior?

ps: tested using network service only, I don't have headsets or input
devices at home.

Regards,
Claudio.

-- 
--
Claudio Takahasi
Instituto Nokia de Tecnologia
Recife - Pernambuco - Brasil
+55 81 30879999

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone

_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
trust01.patch (text/x-diff, 1.8 KB)
Index: hcid/dbus-service.c
===================================================================
RCS file: /cvsroot/bluez/utils/hcid/dbus-service.c,v
retrieving revision 1.148
diff -u -r1.148 dbus-service.c
--- hcid/dbus-service.c	1 May 2008 13:52:27 -0000	1.148
+++ hcid/dbus-service.c	1 May 2008 22:31:57 -0000
@@ -1236,6 +1236,7 @@
 
 	g_free(auth);
 }
+
 int service_req_auth(bdaddr_t *src, bdaddr_t *dst,
 		const char *uuid, service_auth_cb cb, void *user_data)
 {
@@ -1243,7 +1244,9 @@
 	struct adapter *adapter;
 	struct device *device;
 	struct agent *agent;
+	struct service *service;
 	char address[18];
+	gboolean trusted;
 
 	adapter = ba2adapter(src);
 	if (!adapter)
@@ -1259,10 +1262,18 @@
 	if (!device)
 		return -EPERM;
 
-	if (!search_service_by_uuid(uuid))
+	service = search_service_by_uuid(uuid);
+	if (!service)
 		return -EPERM;
 
-	/* FIXME: Missing check trusted file entries */
+	trusted = read_trust(src, address, GLOBAL_TRUST);
+	if (!trusted)
+		trusted = read_trust(BDADDR_ANY, address, service->ident);
+
+	if (trusted) {
+		cb(NULL, user_data);
+		return 0;
+	}
 
 	agent = (device->agent ? : adapter->agent);
 	if (!agent)
Index: network/server.c
===================================================================
RCS file: /cvsroot/bluez/utils/network/server.c,v
retrieving revision 1.93
diff -u -r1.93 server.c
--- network/server.c	1 May 2008 13:52:28 -0000	1.93
+++ network/server.c	1 May 2008 22:31:58 -0000
@@ -592,14 +592,16 @@
 		goto reply;
 	}
 
+	setup = setup_session_new(address, dst_role, src_role, sk, to->watch);
+
 	/* Wait authorization before reply success */
 	if (authorize_connection(ns, address) < 0) {
+		setup_session_free(setup);
+		setup = NULL;
 		rsp = BNEP_CONN_NOT_ALLOWED;
 		goto reply;
 	}
 
-	setup = setup_session_new(address, dst_role, src_role, sk, to->watch);
-
 	g_source_remove(to->id);
 	to->id = 0;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.