Re: [PATCH BlueZ v3] obexd: Add system bus support for obexd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux