libnm: drop NMObject:dbus-connection

The only plausible use case for the NMObject:dbus-connection property
is for using the session bus in test programs. So just drop it and use
an environment variable to decide which bus to use instead.
This commit is contained in:
Dan Winship 2014-09-05 12:55:18 -04:00
parent a874e0beac
commit b732380d1e
8 changed files with 43 additions and 116 deletions

View file

@ -334,7 +334,6 @@ global:
nm_ip6_route_unref; nm_ip6_route_unref;
nm_object_error_get_type; nm_object_error_get_type;
nm_object_error_quark; nm_object_error_quark;
nm_object_get_dbus_connection;
nm_object_get_path; nm_object_get_path;
nm_object_get_type; nm_object_get_type;
nm_remote_connection_commit_changes; nm_remote_connection_commit_changes;

View file

@ -27,15 +27,20 @@
#include "nm-dbus-interface.h" #include "nm-dbus-interface.h"
static dbus_int32_t priv_slot = -1; static dbus_int32_t priv_slot = -1;
static DBusBusType nm_bus = DBUS_BUS_SYSTEM;
static void static void
_ensure_dbus_data_slot (void) _ensure_nm_dbus_helpers_inited (void)
{ {
static gsize init_value = 0; static gsize init_value = 0;
if (g_once_init_enter (&init_value)) { if (g_once_init_enter (&init_value)) {
dbus_connection_allocate_data_slot (&priv_slot); dbus_connection_allocate_data_slot (&priv_slot);
g_assert (priv_slot != -1); g_assert (priv_slot != -1);
if (g_getenv ("LIBNM_USE_SESSION_BUS"))
nm_bus = DBUS_BUS_SESSION;
g_once_init_leave (&init_value, 1); g_once_init_leave (&init_value, 1);
} }
} }
@ -45,11 +50,11 @@ _nm_dbus_new_connection (GError **error)
{ {
DBusGConnection *connection = NULL; DBusGConnection *connection = NULL;
_ensure_dbus_data_slot (); _ensure_nm_dbus_helpers_inited ();
#if HAVE_DBUS_GLIB_100 #if HAVE_DBUS_GLIB_100
/* If running as root try the private bus first */ /* If running as root try the private bus first */
if (0 == geteuid ()) { if (0 == geteuid () && nm_bus == DBUS_BUS_SYSTEM) {
connection = dbus_g_connection_open ("unix:path=" NMRUNDIR "/private", error); connection = dbus_g_connection_open ("unix:path=" NMRUNDIR "/private", error);
if (connection) { if (connection) {
DBusConnection *dbus_connection = dbus_g_connection_get_connection (connection); DBusConnection *dbus_connection = dbus_g_connection_get_connection (connection);
@ -65,7 +70,7 @@ _nm_dbus_new_connection (GError **error)
#endif #endif
if (connection == NULL) if (connection == NULL)
connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, error); connection = dbus_g_bus_get (nm_bus, error);
return connection; return connection;
} }

View file

@ -40,8 +40,6 @@ DBusGProxy *_nm_object_new_proxy (NMObject *self,
const char *path, const char *path,
const char *interface); const char *interface);
gboolean _nm_object_is_connection_private (NMObject *self);
void _nm_object_register_properties (NMObject *object, void _nm_object_register_properties (NMObject *object,
DBusGProxy *proxy, DBusGProxy *proxy,
const NMPropertiesInfo *info); const NMPropertiesInfo *info);

View file

@ -81,7 +81,6 @@ typedef struct {
enum { enum {
PROP_0, PROP_0,
PROP_DBUS_CONNECTION,
PROP_PATH, PROP_PATH,
PROP_NM_RUNNING, PROP_NM_RUNNING,
@ -162,7 +161,7 @@ init_dbus (NMObject *object)
priv->properties_proxy = _nm_object_new_proxy (object, NULL, "org.freedesktop.DBus.Properties"); priv->properties_proxy = _nm_object_new_proxy (object, NULL, "org.freedesktop.DBus.Properties");
if (_nm_object_is_connection_private (object)) if (_nm_dbus_is_connection_private (priv->connection))
priv->nm_running = TRUE; priv->nm_running = TRUE;
else { else {
priv->bus_proxy = dbus_g_proxy_new_for_name (priv->connection, priv->bus_proxy = dbus_g_proxy_new_for_name (priv->connection,
@ -187,11 +186,9 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
NMObject *self = NM_OBJECT (initable); NMObject *self = NM_OBJECT (initable);
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self); NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
if (!priv->connection) { priv->connection = _nm_dbus_new_connection (error);
priv->connection = _nm_dbus_new_connection (error); if (!priv->connection)
if (!priv->connection) return FALSE;
return FALSE;
}
if (!init_common (self, error)) if (!init_common (self, error))
return FALSE; return FALSE;
@ -268,14 +265,12 @@ init_async (GAsyncInitable *initable, int io_priority,
simple = g_simple_async_result_new (G_OBJECT (initable), callback, user_data, init_async); simple = g_simple_async_result_new (G_OBJECT (initable), callback, user_data, init_async);
priv->connection = _nm_dbus_new_connection (&error);
if (!priv->connection) { if (!priv->connection) {
priv->connection = _nm_dbus_new_connection (&error); g_simple_async_result_take_error (simple, error);
if (!priv->connection) { g_simple_async_result_complete_in_idle (simple);
g_simple_async_result_take_error (simple, error); g_object_unref (simple);
g_simple_async_result_complete_in_idle (simple); return;
g_object_unref (simple);
return;
}
} }
if (!init_common (self, &error)) { if (!init_common (self, &error)) {
g_simple_async_result_take_error (simple, error); g_simple_async_result_take_error (simple, error);
@ -284,16 +279,15 @@ init_async (GAsyncInitable *initable, int io_priority,
return; return;
} }
if (_nm_object_is_connection_private (self)) if (priv->bus_proxy) {
_nm_object_reload_properties_async (self, init_async_got_properties, simple);
else {
/* Check if NM is running */ /* Check if NM is running */
dbus_g_proxy_begin_call (priv->bus_proxy, "NameHasOwner", dbus_g_proxy_begin_call (priv->bus_proxy, "NameHasOwner",
init_async_got_nm_running, init_async_got_nm_running,
simple, NULL, simple, NULL,
G_TYPE_STRING, NM_DBUS_SERVICE, G_TYPE_STRING, NM_DBUS_SERVICE,
G_TYPE_INVALID); G_TYPE_INVALID);
} } else
_nm_object_reload_properties_async (self, init_async_got_properties, simple);
} }
static gboolean static gboolean
@ -352,10 +346,6 @@ set_property (GObject *object, guint prop_id,
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
switch (prop_id) { switch (prop_id) {
case PROP_DBUS_CONNECTION:
/* Construct only */
priv->connection = g_value_dup_boxed (value);
break;
case PROP_PATH: case PROP_PATH:
/* Construct only */ /* Construct only */
priv->path = g_value_dup_string (value); priv->path = g_value_dup_string (value);
@ -373,9 +363,6 @@ get_property (GObject *object, guint prop_id,
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
switch (prop_id) { switch (prop_id) {
case PROP_DBUS_CONNECTION:
g_value_set_boxed (value, priv->connection);
break;
case PROP_PATH: case PROP_PATH:
g_value_set_string (value, priv->path); g_value_set_string (value, priv->path);
break; break;
@ -405,19 +392,6 @@ nm_object_class_init (NMObjectClass *nm_object_class)
/* Properties */ /* Properties */
/**
* NMObject:connection:
*
* The #DBusGConnection of the object.
**/
g_object_class_install_property
(object_class, PROP_DBUS_CONNECTION,
g_param_spec_boxed (NM_OBJECT_DBUS_CONNECTION, "", "",
DBUS_TYPE_G_CONNECTION,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
/** /**
* NMObject:path: * NMObject:path:
* *
@ -479,22 +453,6 @@ nm_object_async_initable_iface_init (GAsyncInitableIface *iface)
iface->init_finish = init_finish; iface->init_finish = init_finish;
} }
/**
* nm_object_get_dbus_connection:
* @object: a #NMObject
*
* Gets the #NMObject's DBusGConnection.
*
* Returns: (transfer none): the connection
**/
DBusGConnection *
nm_object_get_dbus_connection (NMObject *object)
{
g_return_val_if_fail (NM_IS_OBJECT (object), NULL);
return NM_OBJECT_GET_PRIVATE (object)->connection;
}
/** /**
* nm_object_get_path: * nm_object_get_path:
* @object: a #NMObject * @object: a #NMObject
@ -594,7 +552,6 @@ _nm_object_create (GType type, DBusGConnection *connection, const char *path)
} }
object = g_object_new (type, object = g_object_new (type,
NM_OBJECT_DBUS_CONNECTION, connection,
NM_OBJECT_PATH, path, NM_OBJECT_PATH, path,
NULL); NULL);
if (NM_IS_OBJECT (object)) if (NM_IS_OBJECT (object))
@ -609,7 +566,6 @@ _nm_object_create (GType type, DBusGConnection *connection, const char *path)
typedef void (*NMObjectCreateCallbackFunc) (GObject *, const char *, gpointer); typedef void (*NMObjectCreateCallbackFunc) (GObject *, const char *, gpointer);
typedef struct { typedef struct {
DBusGConnection *connection;
char *path; char *path;
NMObjectCreateCallbackFunc callback; NMObjectCreateCallbackFunc callback;
gpointer user_data; gpointer user_data;
@ -665,7 +621,6 @@ async_got_type (GType type, gpointer user_data)
} }
object = g_object_new (type, object = g_object_new (type,
NM_OBJECT_DBUS_CONNECTION, async_data->connection,
NM_OBJECT_PATH, async_data->path, NM_OBJECT_PATH, async_data->path,
NULL); NULL);
if (NM_IS_OBJECT (object)) if (NM_IS_OBJECT (object))
@ -683,7 +638,6 @@ _nm_object_create_async (GType type, DBusGConnection *connection, const char *pa
NMObjectTypeAsyncData *async_data; NMObjectTypeAsyncData *async_data;
async_data = g_slice_new (NMObjectTypeAsyncData); async_data = g_slice_new (NMObjectTypeAsyncData);
async_data->connection = connection;
async_data->path = g_strdup (path); async_data->path = g_strdup (path);
async_data->callback = callback; async_data->callback = callback;
async_data->user_data = user_data; async_data->user_data = user_data;
@ -1442,12 +1396,6 @@ _nm_object_new_proxy (NMObject *self, const char *path, const char *interface)
return _nm_dbus_new_proxy_for_connection (priv->connection, path ? path : priv->path, interface); return _nm_dbus_new_proxy_for_connection (priv->connection, path ? path : priv->path, interface);
} }
gboolean
_nm_object_is_connection_private (NMObject *self)
{
return _nm_dbus_is_connection_private (NM_OBJECT_GET_PRIVATE (self)->connection);
}
gboolean gboolean
_nm_object_get_nm_running (NMObject *self) _nm_object_get_nm_running (NMObject *self)
{ {

View file

@ -57,8 +57,7 @@ typedef enum {
#define NM_OBJECT_ERROR nm_object_error_quark () #define NM_OBJECT_ERROR nm_object_error_quark ()
GQuark nm_object_error_quark (void); GQuark nm_object_error_quark (void);
#define NM_OBJECT_DBUS_CONNECTION "dbus-connection" #define NM_OBJECT_PATH "path"
#define NM_OBJECT_PATH "path"
typedef struct { typedef struct {
GObject parent; GObject parent;
@ -85,7 +84,6 @@ typedef struct {
GType nm_object_get_type (void); GType nm_object_get_type (void);
DBusGConnection *nm_object_get_dbus_connection (NMObject *object);
const char *nm_object_get_path (NMObject *object); const char *nm_object_get_path (NMObject *object);
G_END_DECLS G_END_DECLS

View file

@ -503,9 +503,7 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_remote_connection_parent_class)->init_dbus (object); NM_OBJECT_CLASS (nm_remote_connection_parent_class)->init_dbus (object);
priv->proxy = _nm_dbus_new_proxy_for_connection (nm_object_get_dbus_connection (object), priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_SETTINGS_CONNECTION);
nm_connection_get_path (NM_CONNECTION (object)),
NM_DBUS_INTERFACE_SETTINGS_CONNECTION);
g_assert (priv->proxy); g_assert (priv->proxy);
dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT); dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT);

View file

@ -36,32 +36,6 @@ static NMTestServiceInfo *sinfo;
/*******************************************************************/ /*******************************************************************/
static NMClient *
test_client_new (void)
{
NMClient *client;
DBusGConnection *bus;
GError *error = NULL;
bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
g_assert_no_error (error);
client = g_object_new (NM_TYPE_CLIENT,
NM_OBJECT_DBUS_CONNECTION, bus,
NM_OBJECT_PATH, NM_DBUS_PATH,
NULL);
g_assert (client != NULL);
dbus_g_connection_unref (bus);
g_initable_init (G_INITABLE (client), NULL, &error);
g_assert_no_error (error);
return client;
}
/*******************************************************************/
static gboolean static gboolean
loop_quit (gpointer user_data) loop_quit (gpointer user_data)
{ {
@ -151,9 +125,11 @@ test_device_added (void)
const GPtrArray *devices; const GPtrArray *devices;
NMDevice *device; NMDevice *device;
DeviceAddedInfo info = { loop, FALSE, FALSE, 0, 0 }; DeviceAddedInfo info = { loop, FALSE, FALSE, 0, 0 };
GError *error = NULL;
sinfo = nm_test_service_init (); sinfo = nm_test_service_init ();
client = test_client_new (); client = nm_client_new (NULL, &error);
g_assert_no_error (error);
devices = nm_client_get_devices (client); devices = nm_client_get_devices (client);
g_assert (devices->len == 0); g_assert (devices->len == 0);
@ -310,7 +286,8 @@ test_wifi_ap_added_removed (void)
char *expected_path = NULL; char *expected_path = NULL;
sinfo = nm_test_service_init (); sinfo = nm_test_service_init ();
client = test_client_new (); client = nm_client_new (NULL, &error);
g_assert_no_error (error);
/*************************************/ /*************************************/
/* Add the wifi device */ /* Add the wifi device */
@ -533,7 +510,8 @@ test_wimax_nsp_added_removed (void)
char *expected_path = NULL; char *expected_path = NULL;
sinfo = nm_test_service_init (); sinfo = nm_test_service_init ();
client = test_client_new (); client = nm_client_new (NULL, &error);
g_assert_no_error (error);
/*************************************/ /*************************************/
/* Add the wimax device */ /* Add the wimax device */
@ -717,7 +695,8 @@ test_devices_array (void)
GVariant *ret; GVariant *ret;
sinfo = nm_test_service_init (); sinfo = nm_test_service_init ();
client = test_client_new (); client = nm_client_new (NULL, &error);
g_assert_no_error (error);
/*************************************/ /*************************************/
/* Add some devices */ /* Add some devices */
@ -822,7 +801,8 @@ test_client_nm_running (void)
int running_changed = 0; int running_changed = 0;
GError *error = NULL; GError *error = NULL;
client1 = test_client_new (); client1 = nm_client_new (NULL, &error);
g_assert_no_error (error);
g_assert (!nm_client_get_nm_running (client1)); g_assert (!nm_client_get_nm_running (client1));
g_assert_cmpstr (nm_client_get_version (client1), ==, NULL); g_assert_cmpstr (nm_client_get_version (client1), ==, NULL);
@ -839,7 +819,8 @@ test_client_nm_running (void)
/* Now start the test service. */ /* Now start the test service. */
sinfo = nm_test_service_init (); sinfo = nm_test_service_init ();
client2 = test_client_new (); client2 = nm_client_new (NULL, &error);
g_assert_no_error (error);
/* client2 should know that NM is running, but the previously-created /* client2 should know that NM is running, but the previously-created
* client1 hasn't gotten the news yet. * client1 hasn't gotten the news yet.
@ -875,6 +856,8 @@ test_client_nm_running (void)
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
g_setenv ("LIBNM_USE_SESSION_BUS", "1", TRUE);
#if !GLIB_CHECK_VERSION (2, 35, 0) #if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init (); g_type_init ();
#endif #endif

View file

@ -421,11 +421,9 @@ test_nm_running (void)
/* Now kill the test service. */ /* Now kill the test service. */
nm_test_service_cleanup (sinfo); nm_test_service_cleanup (sinfo);
settings2 = g_initable_new (NM_TYPE_REMOTE_SETTINGS, NULL, &error, settings2 = nm_remote_settings_new (NULL, &error);
NM_OBJECT_DBUS_CONNECTION, bus,
NULL);
g_assert_no_error (error); g_assert_no_error (error);
g_assert (settings != NULL); g_assert (settings2 != NULL);
/* settings2 should know that NM is running, but the previously-created /* settings2 should know that NM is running, but the previously-created
* settings hasn't gotten the news yet. * settings hasn't gotten the news yet.
@ -475,6 +473,8 @@ main (int argc, char **argv)
int ret; int ret;
GError *error = NULL; GError *error = NULL;
g_setenv ("LIBNM_USE_SESSION_BUS", "1", TRUE);
#if !GLIB_CHECK_VERSION (2, 35, 0) #if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init (); g_type_init ();
#endif #endif
@ -486,9 +486,7 @@ main (int argc, char **argv)
sinfo = nm_test_service_init (); sinfo = nm_test_service_init ();
settings = g_initable_new (NM_TYPE_REMOTE_SETTINGS, NULL, &error, settings = nm_remote_settings_new (NULL, &error);
NM_OBJECT_DBUS_CONNECTION, bus,
NULL);
g_assert_no_error (error); g_assert_no_error (error);
g_assert (settings != NULL); g_assert (settings != NULL);