Hi, On Mon, Nov 4, 2024 at 7:47 AM <quic_dgangire@xxxxxxxxxxx> wrote: > > 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. > > 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 > > diff --git a/Makefile.am b/Makefile.am > index f639f7f8b..297d0774c 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -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 = > diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h > index d7be17661..8e0d9c1ea 100644 > --- a/gdbus/gdbus.h > +++ b/gdbus/gdbus.h > @@ -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); > > diff --git a/gdbus/mainloop.c b/gdbus/mainloop.c > index a04ebb19b..7bf691191 100644 > --- a/gdbus/mainloop.c > +++ b/gdbus/mainloop.c > @@ -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; > +} Don't recall suggesting putting these helpers into gdbus, how is this going to help us in any way if it is just passing a bool instead of the type? > DBusConnection *g_dbus_setup_private(DBusBusType type, const char *name, > DBusError *error) > { > diff --git a/obexd/client/ftp.c b/obexd/client/ftp.c > index 160e0636a..31fcd42fb 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,7 @@ int ftp_init(void) > > DBG(""); > > - conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); > + conn = get_dbus_connection(obex_option_system_bus()); What I suggested is that we have something similar to btd_get_dbus_connection (e.g. obexd_get_dbus_connection) which returns a static variable so it is the same reference. > if (!conn) > return -EIO; > > diff --git a/obexd/client/map.c b/obexd/client/map.c > index 513dcaf14..2732eb7df 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,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; > > diff --git a/obexd/client/opp.c b/obexd/client/opp.c > index 90d0c0c8e..13c49d12f 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,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; > > diff --git a/obexd/client/pbap.c b/obexd/client/pbap.c > index 2d2aa9508..5280cbac5 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,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; > > diff --git a/obexd/client/session.c b/obexd/client/session.c > index 13a834e14..3460690dd 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,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; > > diff --git a/obexd/client/sync.c b/obexd/client/sync.c > index 92faf4434..0283d9729 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,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; > > diff --git a/obexd/plugins/pcsuite.c b/obexd/plugins/pcsuite.c > index 07c444ff2..06aca7366 100644 > --- a/obexd/plugins/pcsuite.c > +++ b/obexd/plugins/pcsuite.c > @@ -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; > 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..dff2e3783 100644 > --- a/obexd/src/manager.c > +++ b/obexd/src/manager.c > @@ -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); > diff --git a/obexd/src/obex.conf b/obexd/src/obex.conf > new file mode 100644 > index 000000000..114bdb882 > --- /dev/null > +++ b/obexd/src/obex.conf > @@ -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> > diff --git a/obexd/src/obexd.h b/obexd/src/obexd.h > index af5265da5..72b04b993 100644 > --- a/obexd/src/obexd.h > +++ b/obexd/src/obexd.h > @@ -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); Or better yet, do obex_get_dbus_connection directly instead of getting the option of system to only then resolve the connection in a second call. > -- > 2.34.1 > > -- Luiz Augusto von Dentz