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

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

 



Hi,

On Tue, Jul 23, 2024 at 7:25 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 with new optional feature

Well system bus is normally used by daemon that require root(like)
access, having obexd running as a system service is sort of dangerous
since it means remote access as root to part of the filesystem
(similar to allowing FTP access as root user).

> Additional optional feature has been added to achieve this
> with name --enable-use-systembus-for-obexd
>
> steps to configure system bus
> ./configure --enable-use-systembus-for-obexd

If we allow such a thing I'd like to have it as a runtime option, not
just as a build-time one, since we might want to be able to run obexd
under test-runner for testing automation, but for example the
test-runner environment currently doesn't start any session bus.

Btw, if you guys are after a stable environment for test
automation/qualification I highly recommend looking into the
test-runner:

https://github.com/bluez/bluez/blob/master/doc/test-runner.rst

> ---
>  Makefile.obexd          | 14 ++++++++++++++
>  configure.ac            |  9 +++++++++
>  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 |  3 ++-
>  obexd/src/manager.c     |  3 ++-
>  src/bluetooth.conf      | 12 ++++++++++++
>  tools/obexctl.c         |  3 ++-
>  12 files changed, 53 insertions(+), 9 deletions(-)
>
> diff --git a/Makefile.obexd b/Makefile.obexd
> index b7e9f2d33..87432cc37 100644
> --- a/Makefile.obexd
> +++ b/Makefile.obexd
> @@ -2,6 +2,19 @@
>  if OBEX
>
>  if SYSTEMD
> +
> +if USE_SYSTEMBUS_FOR_OBEXD
> +
> +systemdsystemunit_DATA += obexd/src/obex.service
> +dbussystembus_DATA += obexd/src/org.bluez.obex.service
> +
> +obexd-add-service-symlink:
> +       $(LN_S) -f obex.service $(DESTDIR)$(SYSTEMD_SYSTEMUNITDIR)/dbus-org.bluez.obex.service
> +
> +obexd-remove-service-symlink:
> +       rm -f $(DESTDIR)$(SYSTEMD_SYSTEMUNITDIR)/dbus-org.bluez.obex.service
> +else
> +
>  systemduserunitdir = $(SYSTEMD_USERUNITDIR)
>  systemduserunit_DATA = obexd/src/obex.service
>
> @@ -13,6 +26,7 @@ obexd-add-service-symlink:
>
>  obexd-remove-service-symlink:
>         rm -f $(DESTDIR)$(SYSTEMD_USERUNITDIR)/dbus-org.bluez.obex.service
> +endif
>  else
>  obexd-add-service-symlink:
>  obexd-remove-service-symlink:
> diff --git a/configure.ac b/configure.ac
> index d31eb1656..cc9a55f4c 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -283,6 +283,15 @@ if (test "${enable_obex}" != "no"); then
>  fi
>  AM_CONDITIONAL(OBEX, test "${enable_obex}" != "no")
>
> +AC_ARG_ENABLE(use-systembus-for-obexd, AS_HELP_STRING([--enable-use-systembus-for-obexd],
> +               [enable systembus for obexd]), [enable_use_systembus_for_obexd=${enableval}])
> +AM_CONDITIONAL(USE_SYSTEMBUS_FOR_OBEXD, test "${enable_use_systembus_for_obexd}" = "yes")
> +if (test "${enable_use_systembus_for_obexd}" = "yes"); then
> +       AC_DEFINE(USE_SYSTEMBUS_FOR_OBEXD, 1, [Define to 1 if you want to use system bus for obexd.])
> +else
> +       AC_DEFINE(USE_SYSTEMBUS_FOR_OBEXD, 0, [Define to 0 if you want to use session bus for obexd.])
> +fi
> +
>  AC_ARG_ENABLE(btpclient, AS_HELP_STRING([--enable-btpclient],
>                 [enable BTP client]), [enable_btpclient=${enableval}])
>  AM_CONDITIONAL(BTPCLIENT, test "${enable_btpclient}" = "yes")
> diff --git a/obexd/client/ftp.c b/obexd/client/ftp.c
> index 160e0636a..e3cef32f6 100644
> --- a/obexd/client/ftp.c
> +++ b/obexd/client/ftp.c
> @@ -463,7 +463,8 @@ int ftp_init(void)
>
>         DBG("");
>
> -       conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
> +       conn = dbus_bus_get(USE_SYSTEMBUS_FOR_OBEXD ?
> +                       DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL);
>         if (!conn)
>                 return -EIO;
>
> diff --git a/obexd/client/map.c b/obexd/client/map.c
> index 513dcaf14..815806f52 100644
> --- a/obexd/client/map.c
> +++ b/obexd/client/map.c
> @@ -2063,7 +2063,8 @@ int map_init(void)
>
>         DBG("");
>
> -       conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
> +       conn = dbus_bus_get(USE_SYSTEMBUS_FOR_OBEXD ?
> +                       DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL);
>         if (!conn)
>                 return -EIO;
>
> diff --git a/obexd/client/opp.c b/obexd/client/opp.c
> index 90d0c0c8e..4889a3a0f 100644
> --- a/obexd/client/opp.c
> +++ b/obexd/client/opp.c
> @@ -178,7 +178,8 @@ int opp_init(void)
>
>         DBG("");
>
> -       conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
> +       conn = dbus_bus_get(USE_SYSTEMBUS_FOR_OBEXD ?
> +                       DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL);
>         if (!conn)
>                 return -EIO;
>
> diff --git a/obexd/client/pbap.c b/obexd/client/pbap.c
> index 2d2aa9508..1658c853a 100644
> --- a/obexd/client/pbap.c
> +++ b/obexd/client/pbap.c
> @@ -1303,7 +1303,8 @@ int pbap_init(void)
>
>         DBG("");
>
> -       conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
> +       conn = dbus_bus_get(USE_SYSTEMBUS_FOR_OBEXD ?
> +                       DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL);
>         if (!conn)
>                 return -EIO;
>
> diff --git a/obexd/client/session.c b/obexd/client/session.c
> index 7d8ebb04e..4e447e8eb 100644
> --- a/obexd/client/session.c
> +++ b/obexd/client/session.c
> @@ -583,7 +583,8 @@ struct obc_session *obc_session_create(const char *source,
>         if (driver == NULL)
>                 return NULL;
>
> -       conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
> +       conn = dbus_bus_get(USE_SYSTEMBUS_FOR_OBEXD ?
> +                       DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL);
>         if (conn == NULL)
>                 return NULL;
>
> diff --git a/obexd/client/sync.c b/obexd/client/sync.c
> index 92faf4434..bd339adfa 100644
> --- a/obexd/client/sync.c
> +++ b/obexd/client/sync.c
> @@ -224,7 +224,8 @@ int sync_init(void)
>
>         DBG("");
>
> -       conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
> +       conn = dbus_bus_get(USE_SYSTEMBUS_FOR_OBEXD ?
> +                       DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL);
>         if (!conn)
>                 return -EIO;
>
> diff --git a/obexd/plugins/pcsuite.c b/obexd/plugins/pcsuite.c
> index 07c444ff2..5daed2abb 100644
> --- a/obexd/plugins/pcsuite.c
> +++ b/obexd/plugins/pcsuite.c
> @@ -322,7 +322,8 @@ 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 = g_dbus_setup_bus(USE_SYSTEMBUS_FOR_OBEXD ?
> +                       DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL, NULL);
>
>         if (conn == NULL)
>                 return FALSE;
> diff --git a/obexd/src/manager.c b/obexd/src/manager.c
> index 3c0c2a7cc..dd83f056d 100644
> --- a/obexd/src/manager.c
> +++ b/obexd/src/manager.c
> @@ -488,7 +488,8 @@ gboolean manager_init(void)
>
>         dbus_error_init(&err);
>
> -       connection = g_dbus_setup_bus(DBUS_BUS_SESSION, OBEXD_SERVICE, &err);
> +       connection = g_dbus_setup_bus(USE_SYSTEMBUS_FOR_OBEXD ?
> +               DBUS_BUS_SYSTEM : 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/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>
> diff --git a/tools/obexctl.c b/tools/obexctl.c
> index 56a76915c..07dc1ae6b 100644
> --- a/tools/obexctl.c
> +++ b/tools/obexctl.c
> @@ -2154,7 +2154,8 @@ int main(int argc, char *argv[])
>         bt_shell_set_menu(&main_menu);
>         bt_shell_set_prompt(PROMPT_OFF);
>
> -       dbus_conn = g_dbus_setup_bus(DBUS_BUS_SESSION, NULL, NULL);
> +       dbus_conn = g_dbus_setup_bus(USE_SYSTEMBUS_FOR_OBEXD ?
> +                               DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL, NULL);
>
>         client = g_dbus_client_new(dbus_conn, "org.bluez.obex",
>                                                         "/org/bluez/obex");
> --
> 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