From 10bb8c3e504afb0113fdede1ff27b04dbe166b35 Mon Sep 17 00:00:00 2001 From: Claudio Takahasi Date: Tue, 1 Jul 2008 13:36:54 -0300 Subject: [PATCH] obexd: Making authorization and encryption mandatory for FTP --- obexd/src/bluetooth.c | 16 +++++++++++----- obexd/src/bluetooth.h | 2 +- obexd/src/main.c | 4 ++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/obexd/src/bluetooth.c b/obexd/src/bluetooth.c index 48e7936cc..bc7836af3 100644 --- a/obexd/src/bluetooth.c +++ b/obexd/src/bluetooth.c @@ -191,14 +191,14 @@ static void server_destroyed(gpointer user_data) g_free(server); } -static gint server_register(guint16 service, const gchar *name, - guint8 channel, const gchar *folder, gboolean auto_accept) +static gint server_register(guint16 service, const gchar *name, guint8 channel, + const gchar *folder, gboolean secure, gboolean auto_accept) { struct sockaddr_rc laddr; GIOChannel *io; - gint err, sk, arg; struct server *server; uint32_t *handle; + gint err, sk, arg, lm = RFCOMM_LM_SECURE; sk = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); if (sk < 0) { @@ -219,6 +219,11 @@ static gint server_register(guint16 service, const gchar *name, goto failed; } + if (setsockopt(sk, SOL_RFCOMM, RFCOMM_LM, &lm, sizeof(lm)) < 0) { + err = errno; + goto failed; + } + memset(&laddr, 0, sizeof(laddr)); laddr.rc_family = AF_BLUETOOTH; bacpy(&laddr.rc_bdaddr, BDADDR_ANY); @@ -268,7 +273,7 @@ failed: } gint bluetooth_init(guint service, const gchar *name, const gchar *folder, - guint8 channel, gboolean auto_accept) + guint8 channel, gboolean secure, gboolean auto_accept) { if (!session) { session = sdp_connect(BDADDR_ANY, BDADDR_LOCAL, SDP_RETRY_IF_BUSY); @@ -279,7 +284,8 @@ gint bluetooth_init(guint service, const gchar *name, const gchar *folder, } } - return server_register(service, name, channel, folder, auto_accept); + return server_register(service, name, channel, + folder, secure, auto_accept); } static void unregister_record(gpointer rec_handle, gpointer user_data) diff --git a/obexd/src/bluetooth.h b/obexd/src/bluetooth.h index 9e7973b2d..dec0b14a9 100644 --- a/obexd/src/bluetooth.h +++ b/obexd/src/bluetooth.h @@ -28,5 +28,5 @@ #endif gint bluetooth_init(guint service, const gchar *name, const gchar *folder, - guint8 channel, gboolean auto_accept); + guint8 channel, gboolean secure, gboolean auto_accept); void bluetooth_exit(void); diff --git a/obexd/src/main.c b/obexd/src/main.c index 1ff0a0c48..7cea10423 100644 --- a/obexd/src/main.c +++ b/obexd/src/main.c @@ -60,11 +60,11 @@ static int server_start(int service, const char *root_path, switch (service) { case OBEX_OPUSH: bluetooth_init(OBEX_OPUSH, "OBEX OPUSH server", - root_path, OPUSH_CHANNEL, auto_accept); + root_path, OPUSH_CHANNEL, FALSE, auto_accept); break; case OBEX_FTP: bluetooth_init(OBEX_FTP, "OBEX FTP server", - root_path, FTP_CHANNEL, auto_accept); + root_path, FTP_CHANNEL, TRUE, auto_accept); break; default: return -EINVAL; -- 2.47.3