From: Damodar Reddy GangiReddy <quic_dgangire@xxxxxxxxxxx> Currently obexd uses session bus. Distros where session bus is not supported and still obex profiles are required in that case use system bus instead of session bus which can be configured at run time. --- obexd/client/ftp.c | 7 ++++++- obexd/client/map.c | 7 ++++++- obexd/client/opp.c | 7 ++++++- obexd/client/pbap.c | 7 ++++++- obexd/client/session.c | 7 ++++++- obexd/client/sync.c | 7 ++++++- obexd/plugins/pcsuite.c | 5 ++++- obexd/src/main.c | 8 ++++++++ obexd/src/manager.c | 8 +++++++- obexd/src/obexd.h | 1 + src/bluetooth.conf | 12 ++++++++++++ 11 files changed, 68 insertions(+), 8 deletions(-) diff --git a/obexd/client/ftp.c b/obexd/client/ftp.c index 160e0636a..83ddb51cc 100644 --- a/obexd/client/ftp.c +++ b/obexd/client/ftp.c @@ -19,6 +19,7 @@ #include "gdbus/gdbus.h" #include "obexd/src/log.h" +#include "obexd/src/obexd.h" #include "transfer.h" #include "session.h" #include "driver.h" @@ -463,7 +464,11 @@ int ftp_init(void) DBG(""); - conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (obex_option_system_bus()) + conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + else + conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (!conn) return -EIO; diff --git a/obexd/client/map.c b/obexd/client/map.c index 513dcaf14..c81e9c524 100644 --- a/obexd/client/map.c +++ b/obexd/client/map.c @@ -27,6 +27,7 @@ #include "gdbus/gdbus.h" #include "obexd/src/log.h" +#include "obexd/src/obexd.h" #include "obexd/src/map_ap.h" #include "map-event.h" @@ -2063,7 +2064,11 @@ int map_init(void) DBG(""); - conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (obex_option_system_bus()) + conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + else + conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (!conn) return -EIO; diff --git a/obexd/client/opp.c b/obexd/client/opp.c index 90d0c0c8e..2d402d77e 100644 --- a/obexd/client/opp.c +++ b/obexd/client/opp.c @@ -17,6 +17,7 @@ #include "gdbus/gdbus.h" #include "obexd/src/log.h" +#include "obexd/src/obexd.h" #include "transfer.h" #include "session.h" @@ -178,7 +179,11 @@ int opp_init(void) DBG(""); - conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (obex_option_system_bus()) + conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + else + conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (!conn) return -EIO; diff --git a/obexd/client/pbap.c b/obexd/client/pbap.c index 2d2aa9508..fe5da5c80 100644 --- a/obexd/client/pbap.c +++ b/obexd/client/pbap.c @@ -27,6 +27,7 @@ #include "gdbus/gdbus.h" #include "obexd/src/log.h" +#include "obexd/src/obexd.h" #include "transfer.h" #include "session.h" @@ -1303,7 +1304,11 @@ int pbap_init(void) DBG(""); - conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (obex_option_system_bus()) + conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + else + conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (!conn) return -EIO; diff --git a/obexd/client/session.c b/obexd/client/session.c index 13a834e14..889c43936 100644 --- a/obexd/client/session.c +++ b/obexd/client/session.c @@ -27,6 +27,7 @@ #include "gobex/gobex.h" #include "obexd/src/log.h" +#include "obexd/src/obexd.h" #include "transfer.h" #include "session.h" #include "driver.h" @@ -591,7 +592,11 @@ struct obc_session *obc_session_create(const char *source, if (driver == NULL) return NULL; - conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (obex_option_system_bus()) + conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + else + conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (conn == NULL) return NULL; diff --git a/obexd/client/sync.c b/obexd/client/sync.c index 92faf4434..ef2c338c0 100644 --- a/obexd/client/sync.c +++ b/obexd/client/sync.c @@ -21,6 +21,7 @@ #include "gdbus/gdbus.h" #include "obexd/src/log.h" +#include "obexd/src/obexd.h" #include "transfer.h" #include "session.h" @@ -224,7 +225,11 @@ int sync_init(void) DBG(""); - conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (obex_option_system_bus()) + conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + else + conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); + if (!conn) return -EIO; diff --git a/obexd/plugins/pcsuite.c b/obexd/plugins/pcsuite.c index 07c444ff2..70e67e5d3 100644 --- a/obexd/plugins/pcsuite.c +++ b/obexd/plugins/pcsuite.c @@ -322,7 +322,10 @@ static gboolean send_backup_dbus_message(const char *oper, file_size = size ? *size : 0; - conn = g_dbus_setup_bus(DBUS_BUS_SESSION, NULL, NULL); + if (obex_option_system_bus()) + conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, NULL); + else + conn = g_dbus_setup_bus(DBUS_BUS_SESSION, NULL, NULL); if (conn == NULL) return FALSE; diff --git a/obexd/src/main.c b/obexd/src/main.c index 151574afa..aee86ebd1 100644 --- a/obexd/src/main.c +++ b/obexd/src/main.c @@ -126,6 +126,7 @@ static char *option_noplugin = NULL; static gboolean option_autoaccept = FALSE; static gboolean option_symlinks = FALSE; +static gboolean option_system_bus = FALSE; static gboolean parse_debug(const char *key, const char *value, gpointer user_data, GError **error) @@ -164,6 +165,8 @@ static const GOptionEntry options[] = { "scripts", "FILE" }, { "auto-accept", 'a', 0, G_OPTION_ARG_NONE, &option_autoaccept, "Automatically accept push requests" }, + { "system-bus", 's', 0, G_OPTION_ARG_NONE, &option_system_bus, + "Use System bus "}, { NULL }, }; @@ -172,6 +175,11 @@ gboolean obex_option_auto_accept(void) return option_autoaccept; } +gboolean obex_option_system_bus(void) +{ + return option_system_bus; +} + const char *obex_option_root_folder(void) { return option_root; diff --git a/obexd/src/manager.c b/obexd/src/manager.c index 3c0c2a7cc..f85e0e9bb 100644 --- a/obexd/src/manager.c +++ b/obexd/src/manager.c @@ -488,7 +488,13 @@ gboolean manager_init(void) dbus_error_init(&err); - connection = g_dbus_setup_bus(DBUS_BUS_SESSION, OBEXD_SERVICE, &err); + if (obex_option_system_bus()) + connection = + g_dbus_setup_bus(DBUS_BUS_SYSTEM, OBEXD_SERVICE, &err); + else + connection = + g_dbus_setup_bus(DBUS_BUS_SESSION, OBEXD_SERVICE, &err); + if (connection == NULL) { if (dbus_error_is_set(&err) == TRUE) { fprintf(stderr, "%s\n", err.message); diff --git a/obexd/src/obexd.h b/obexd/src/obexd.h index af5265da5..54f91545b 100644 --- a/obexd/src/obexd.h +++ b/obexd/src/obexd.h @@ -28,3 +28,4 @@ gboolean obex_option_auto_accept(void); const char *obex_option_root_folder(void); gboolean obex_option_symlinks(void); const char *obex_option_capability(void); +gboolean obex_option_system_bus(void); diff --git a/src/bluetooth.conf b/src/bluetooth.conf index b6c614908..f8879c8bb 100644 --- a/src/bluetooth.conf +++ b/src/bluetooth.conf @@ -21,10 +21,22 @@ <allow send_interface="org.freedesktop.DBus.ObjectManager"/> <allow send_interface="org.freedesktop.DBus.Properties"/> <allow send_interface="org.mpris.MediaPlayer2.Player"/> + <allow own="org.bluez.obex"/> + <allow send_destination="org.bluez.obex"/> + <allow send_interface="org.bluez.obex.Agent1"/> + <allow send_interface="org.bluez.obex.Client1"/> + <allow send_interface="org.bluez.obex.Session1"/> + <allow send_interface="org.bluez.obex.Transfer1"/> + <allow send_interface="org.bluez.obex.ObjectPush1"/> + <allow send_interface="org.bluez.obex.PhonebookAccess1"/> + <allow send_interface="org.bluez.obex.Synchronization1"/> + <allow send_interface="org.bluez.obex.MessageAccess1"/> + <allow send_interface="org.bluez.obex.Message1"/> </policy> <policy context="default"> <allow send_destination="org.bluez"/> + <allow send_destination="org.bluez.obex"/> </policy> </busconfig> -- 2.34.1