From 3ff738b4f25770cc512c61fe46dffa2c6ffe7dc2 Mon Sep 17 00:00:00 2001 From: Aaron_shen Date: Wed, 15 Mar 2023 18:04:35 +0800 Subject: [PATCH] obexd: reject to accept file when replying reject message It will accept file when obex agent replied any message event though the message is org.bluez.obex.Error.Rejected. The patch helps to reject a Bluetooth object push request if user replied "org.bluez.obex.Error.Rejected" message according to the doc/obex-agent-api.txt. --- obexd/src/manager.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/obexd/src/manager.c b/obexd/src/manager.c index 846b02d..3efb498 100755 --- a/obexd/src/manager.c +++ b/obexd/src/manager.c @@ -38,6 +38,7 @@ #define TRANSFER_INTERFACE OBEXD_SERVICE ".Transfer1" #define SESSION_INTERFACE OBEXD_SERVICE ".Session1" #define AGENT_INTERFACE OBEXD_SERVICE ".Agent1" +#define OBEX_ERROR_REJECT "org.bluez.obex.Error.Rejected" #define TIMEOUT 60*1000 /* Timeout for user response (miliseconds) */ @@ -45,6 +46,7 @@ struct agent { char *bus_name; char *path; gboolean auth_pending; + gboolean auth_reject; char *new_name; char *new_folder; unsigned int watch_id; @@ -764,6 +766,9 @@ static void agent_reply(DBusPendingCall *call, void *user_data) if (dbus_error_has_name(&derr, DBUS_ERROR_NO_REPLY)) agent_cancel(); + if (dbus_error_has_name(&derr, OBEX_ERROR_REJECT)) + agent->auth_reject = TRUE; + dbus_error_free(&derr); dbus_message_unref(reply); return; @@ -827,6 +832,7 @@ int manager_request_authorization(struct obex_transfer *transfer, dbus_message_unref(msg); agent->auth_pending = TRUE; + agent->auth_reject = FALSE; got_reply = FALSE; /* Catches errors before authorization response comes */ @@ -849,7 +855,7 @@ int manager_request_authorization(struct obex_transfer *transfer, dbus_pending_call_unref(call); - if (!agent || !agent->new_name) + if (!agent || !agent->new_name || agent->auth_reject) return -EPERM; *new_folder = agent->new_folder; -- 2.7.4