Index: hcid/dbus-api.txt =================================================================== RCS file: /cvsroot/bluez/utils/hcid/dbus-api.txt,v retrieving revision 1.87 diff -u -r1.87 dbus-api.txt --- hcid/dbus-api.txt 23 Nov 2006 19:50:25 -0000 1.87 +++ hcid/dbus-api.txt 28 Nov 2006 21:35:10 -0000 @@ -1163,16 +1163,24 @@ Marks the user as trusted. + Possible errors: org.bluez.Error.InvalidArguments + org.bluez.Error.AlreadyExists + boolean IsTrusted(string address) Returns true if the user is trusted or false otherwise. The address parameter must match one of the current users of the service. + Possible errors: org.bluez.Error.InvalidArguments + void RemoveTrust(string address) Marks the user as not trusted. + Possible errors: org.bluez.Error.InvalidArguments + org.bluez.Error.DoesNotExist + Signals void Started() The object path of this signal contains which service Index: hcid/dbus-error.c =================================================================== RCS file: /cvsroot/bluez/utils/hcid/dbus-error.c,v retrieving revision 1.32 diff -u -r1.32 dbus-error.c --- hcid/dbus-error.c 1 Nov 2006 17:13:17 -0000 1.32 +++ hcid/dbus-error.c 28 Nov 2006 21:35:10 -0000 @@ -268,6 +268,17 @@ return error_already_exists(conn, msg, "Audit already performed"); } +DBusHandlerResult error_trusted_device_already_exists(DBusConnection *conn, DBusMessage *msg) +{ + return error_already_exists(conn, msg, "Trusted device already exists"); +} + +DBusHandlerResult error_trusted_device_does_not_exists(DBusConnection *conn, DBusMessage *msg) +{ + return error_does_not_exist(conn, msg, "Trusted device does not exist"); +} + + static const char *strsdperror(int err) { switch (err) { Index: hcid/dbus-error.h =================================================================== RCS file: /cvsroot/bluez/utils/hcid/dbus-error.h,v retrieving revision 1.2 diff -u -r1.2 dbus-error.h --- hcid/dbus-error.h 1 Nov 2006 17:13:17 -0000 1.2 +++ hcid/dbus-error.h 28 Nov 2006 21:35:10 -0000 @@ -63,5 +63,7 @@ DBusHandlerResult error_connect_canceled(DBusConnection *conn, DBusMessage *msg); DBusHandlerResult error_sdp_failed(DBusConnection *conn, DBusMessage *msg, int err); DBusHandlerResult error_audit_already_exists(DBusConnection *conn, DBusMessage *msg); +DBusHandlerResult error_trusted_device_already_exists(DBusConnection *conn, DBusMessage *msg); +DBusHandlerResult error_trusted_device_does_not_exists(DBusConnection *conn, DBusMessage *msg); #endif /* __BLUEZ_DBUS_ERROR_H */ Index: hcid/dbus-security.c =================================================================== RCS file: /cvsroot/bluez/utils/hcid/dbus-security.c,v retrieving revision 1.57 diff -u -r1.57 dbus-security.c --- hcid/dbus-security.c 20 Nov 2006 18:46:28 -0000 1.57 +++ hcid/dbus-security.c 28 Nov 2006 21:35:11 -0000 @@ -761,6 +761,7 @@ { const char *service_path, *adapter_path, *address, *action; struct service_agent *sagent; + struct slist *l; if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &service_path, @@ -783,6 +784,12 @@ if (strcmp(dbus_message_get_sender(msg), sagent->id)) return error_rejected(conn, msg); + /* Check it is a trusted device */ + l = slist_find(sagent->trusted_devices, address, (cmp_func_t) strcasecmp); + if (l) + return send_message_and_unref(conn, + dbus_message_new_method_return(msg)); + if (!default_auth_agent) return error_auth_agent_does_not_exist(conn, msg); Index: hcid/dbus-service.c =================================================================== RCS file: /cvsroot/bluez/utils/hcid/dbus-service.c,v retrieving revision 1.53 diff -u -r1.53 dbus-service.c --- hcid/dbus-service.c 17 Nov 2006 22:36:47 -0000 1.53 +++ hcid/dbus-service.c 28 Nov 2006 21:35:11 -0000 @@ -561,8 +561,6 @@ DBusMessage *reply; const char *address; - /* FIXME: Missing define security policy */ - if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID)) @@ -571,9 +569,9 @@ if (check_address(address) < 0) return error_invalid_arguments(conn, msg); - l = slist_find(agent->trusted_devices, address, (cmp_func_t) strcmp); + l = slist_find(agent->trusted_devices, address, (cmp_func_t) strcasecmp); if (l) - return error_failed(conn, msg, EINVAL); + return error_trusted_device_already_exists(conn, msg); reply = dbus_message_new_method_return(msg); if (!reply) @@ -598,7 +596,7 @@ DBUS_TYPE_INVALID)) return error_invalid_arguments(conn, msg); - l = slist_find(agent->trusted_devices, address, (cmp_func_t) strcmp); + l = slist_find(agent->trusted_devices, address, (cmp_func_t) strcasecmp); trusted = (l? TRUE : FALSE); reply = dbus_message_new_method_return(msg); @@ -621,16 +619,14 @@ const char *address; void *paddress; - /* FIXME: Missing define security policy */ - if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID)) return error_invalid_arguments(conn, msg); - l = slist_find(agent->trusted_devices, address, (cmp_func_t) strcmp); + l = slist_find(agent->trusted_devices, address, (cmp_func_t) strcasecmp); if (!l) - return error_invalid_arguments(conn, msg); /* FIXME: find a better error name */ + return error_trusted_device_does_not_exists(conn, msg); reply = dbus_message_new_method_return(msg); if (!reply)