summaryrefslogtreecommitdiffstats
path: root/serial/manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'serial/manager.c')
-rw-r--r--serial/manager.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/serial/manager.c b/serial/manager.c
index b860659d..0cf46a3d 100644
--- a/serial/manager.c
+++ b/serial/manager.c
@@ -860,8 +860,10 @@ done:
static DBusHandlerResult remove_port(DBusConnection *conn,
DBusMessage *msg, void *data)
{
+ struct rfcomm_dev_info di;
DBusError derr;
const char *path;
+ int16_t id;
dbus_error_init(&derr);
if (!dbus_message_get_args(msg, &derr,
@@ -872,8 +874,16 @@ static DBusHandlerResult remove_port(DBusConnection *conn,
return DBUS_HANDLER_RESULT_HANDLED;
}
+ if (sscanf(path, SERIAL_MANAGER_PATH"/rfcomm%hd", &id) != 1)
+ return err_does_not_exist(conn, msg, "Invalid RFCOMM node");
+
+ di.id = id;
+ if (ioctl(rfcomm_ctl, RFCOMMGETDEVINFO, &di) < 0)
+ return err_does_not_exist(conn, msg, "Invalid RFCOMM node");
+ port_delete(&di.src, &di.dst, id);
+
if (port_unregister(path) < 0)
- return err_does_not_exist(conn, msg, "path doesn't exist");
+ return err_does_not_exist(conn, msg, "Invalid RFCOMM node");
return send_message_and_unref(conn,
dbus_message_new_method_return(msg));