obexd: Add system bus support for obexd

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.
This commit is contained in:
Damodar Reddy GangiReddy 2024-11-05 17:34:17 +05:30 committed by Luiz Augusto von Dentz
parent bae6c32940
commit 002ee180b1
13 changed files with 81 additions and 10 deletions

View File

@ -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 =

View File

@ -17,6 +17,8 @@
#include "gobex/gobex.h"
#include "obexd/src/log.h"
#include "obexd/src/obexd.h"
#include "transfer.h"
#include "session.h"
#include "driver.h"
@ -413,7 +415,7 @@ int bip_init(void)
DBG("");
conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
conn = obex_get_dbus_connection();
if (!conn)
return -EIO;

View File

@ -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 = obex_get_dbus_connection();
if (!conn)
return -EIO;

View File

@ -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 = obex_get_dbus_connection();
if (!conn)
return -EIO;

View File

@ -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 = obex_get_dbus_connection();
if (!conn)
return -EIO;

View File

@ -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 = obex_get_dbus_connection();
if (!conn)
return -EIO;

View File

@ -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 = obex_get_dbus_connection();
if (conn == NULL)
return NULL;

View File

@ -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 = obex_get_dbus_connection();
if (!conn)
return -EIO;

View File

@ -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 = obex_setup_dbus_connection(NULL, NULL);
if (conn == NULL)
return FALSE;

View File

@ -41,6 +41,8 @@
#define DEFAULT_CAP_FILE CONFIGDIR "/capability.xml"
static GMainLoop *main_loop = NULL;
static DBusConnection *connection;
static gboolean signal_handler(GIOChannel *channel, GIOCondition cond,
gpointer user_data)
@ -126,6 +128,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 +167,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 },
};
@ -227,6 +232,27 @@ static gboolean root_folder_setup(char *root, char *root_setup)
return is_dir(root);
}
DBusConnection *obex_get_dbus_connection(void)
{
if (connection)
return dbus_connection_ref(connection);
connection = dbus_bus_get(option_system_bus ?
DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL);
return connection;
}
DBusConnection *obex_setup_dbus_connection(const char *name,
DBusError *error)
{
connection = g_dbus_setup_bus(option_system_bus ?
DBUS_BUS_SYSTEM : DBUS_BUS_SESSION,
name, error);
return connection;
}
int main(int argc, char *argv[])
{
GOptionContext *context;

View File

@ -488,7 +488,7 @@ gboolean manager_init(void)
dbus_error_init(&err);
connection = g_dbus_setup_bus(DBUS_BUS_SESSION, OBEXD_SERVICE, &err);
connection = obex_setup_dbus_connection(OBEXD_SERVICE, &err);
if (connection == NULL) {
if (dbus_error_is_set(&err) == TRUE) {
fprintf(stderr, "%s\n", err.message);

28
obexd/src/obex.conf Normal file
View File

@ -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>

View File

@ -8,6 +8,8 @@
*
*/
#include <dbus/dbus.h>
#define OBEX_OPP (1 << 1)
#define OBEX_FTP (1 << 2)
#define OBEX_BIP (1 << 3)
@ -28,3 +30,6 @@ gboolean obex_option_auto_accept(void);
const char *obex_option_root_folder(void);
gboolean obex_option_symlinks(void);
const char *obex_option_capability(void);
DBusConnection *obex_get_dbus_connection(void);
DBusConnection *obex_setup_dbus_connection(const char *name,
DBusError *error);