@@ -39,6 +39,10 @@ if DATAFILES
dbusdir = $(DBUS_CONFDIR)/dbus-1/system.d
dbus_DATA = src/bluetooth.conf
+if OBEX
+dbus_DATA += obexd/src/obex.conf
+endif
+
conf_DATA = src/main.conf
conf_DATA += profiles/input/input.conf
conf_DATA += profiles/network/network.conf
@@ -421,7 +425,7 @@ manual_pages += doc/org.bluez.obex.Client.5 doc/org.bluez.obex.Session.5 \
EXTRA_DIST += src/genbuiltin src/bluetooth.conf \
src/main.conf profiles/network/network.conf \
- profiles/input/input.conf
+ profiles/input/input.conf obexd/src/obex.conf
test_scripts =
unit_tests =
@@ -40,6 +40,11 @@ DBusConnection *g_dbus_setup_bus(DBusBusType type, const char *name,
DBusConnection *g_dbus_setup_private(DBusBusType type, const char *name,
DBusError *error);
+DBusConnection *get_dbus_connection(gboolean bus_type);
+
+DBusConnection *setup_dbus_connection(gboolean bus_type, const char *name,
+ DBusError *error);
+
gboolean g_dbus_request_name(DBusConnection *connection, const char *name,
DBusError *error);
@@ -293,6 +293,31 @@ DBusConnection *g_dbus_setup_bus(DBusBusType type, const char *name,
return conn;
}
+DBusConnection *get_dbus_connection(gboolean bus_type)
+{
+ DBusConnection *conn = NULL;
+
+ if (bus_type)
+ conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+ else
+ conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
+
+ return conn;
+}
+
+DBusConnection *setup_dbus_connection(gboolean bus_type, const char *name,
+ DBusError *error)
+{
+ DBusConnection *conn = NULL;
+
+ if (bus_type)
+ conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, name, error);
+ else
+ conn = g_dbus_setup_bus(DBUS_BUS_SESSION, name, error);
+
+ return conn;
+}
+
DBusConnection *g_dbus_setup_private(DBusBusType type, const char *name,
DBusError *error)
{
@@ -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,7 @@ int ftp_init(void)
DBG("");
- conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
+ conn = get_dbus_connection(obex_option_system_bus());
if (!conn)
return -EIO;
@@ -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,7 @@ int map_init(void)
DBG("");
- conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
+ conn = get_dbus_connection(obex_option_system_bus());
if (!conn)
return -EIO;
@@ -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,7 @@ int opp_init(void)
DBG("");
- conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
+ conn = get_dbus_connection(obex_option_system_bus());
if (!conn)
return -EIO;
@@ -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,7 @@ int pbap_init(void)
DBG("");
- conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
+ conn = get_dbus_connection(obex_option_system_bus());
if (!conn)
return -EIO;
@@ -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,7 @@ struct obc_session *obc_session_create(const char *source,
if (driver == NULL)
return NULL;
- conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
+ conn = get_dbus_connection(obex_option_system_bus());
if (conn == NULL)
return NULL;
@@ -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,7 @@ int sync_init(void)
DBG("");
- conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
+ conn = get_dbus_connection(obex_option_system_bus());
if (!conn)
return -EIO;
@@ -322,7 +322,7 @@ static gboolean send_backup_dbus_message(const char *oper,
file_size = size ? *size : 0;
- conn = g_dbus_setup_bus(DBUS_BUS_SESSION, NULL, NULL);
+ conn = setup_dbus_connection(obex_option_system_bus(), NULL, NULL);
if (conn == NULL)
return FALSE;
@@ -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;
@@ -488,7 +488,9 @@ gboolean manager_init(void)
dbus_error_init(&err);
- connection = g_dbus_setup_bus(DBUS_BUS_SESSION, OBEXD_SERVICE, &err);
+ connection =
+ setup_dbus_connection(obex_option_system_bus(),
+ OBEXD_SERVICE, &err);
if (connection == NULL) {
if (dbus_error_is_set(&err) == TRUE) {
fprintf(stderr, "%s\n", err.message);
new file mode 100644
@@ -0,0 +1,28 @@
+<!-- This configuration file specifies the required security policies
+ for Bluetooth core daemon to work. -->
+
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+ <!-- ../system.conf have denied everything, so we just punch some holes -->
+
+ <policy user="root">
+ <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.obex"/>
+ </policy>
+
+</busconfig>
@@ -8,6 +8,8 @@
*
*/
+#include "gdbus/gdbus.h"
+
#define OBEX_OPP (1 << 1)
#define OBEX_FTP (1 << 2)
#define OBEX_BIP (1 << 3)
@@ -28,3 +30,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);
From: Damodar Reddy GangiReddy <quic_dgangire@quicinc.com> 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. An Command line option has been added to achieve it. { "system-bus", 's', 0, G_OPTION_ARG_NONE, &option_system_bus, "Use System bus "}, we can use option obexd -s to use system bus. --- Makefile.am | 6 +++++- gdbus/gdbus.h | 5 +++++ gdbus/mainloop.c | 25 +++++++++++++++++++++++++ obexd/client/ftp.c | 3 ++- obexd/client/map.c | 3 ++- obexd/client/opp.c | 3 ++- obexd/client/pbap.c | 3 ++- obexd/client/session.c | 3 ++- obexd/client/sync.c | 3 ++- obexd/plugins/pcsuite.c | 2 +- obexd/src/main.c | 8 ++++++++ obexd/src/manager.c | 4 +++- obexd/src/obex.conf | 28 ++++++++++++++++++++++++++++ obexd/src/obexd.h | 3 +++ 14 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 obexd/src/obex.conf