mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-09 08:18:03 +02:00
system-settings: clean up settings service classes
Make NMSettingsService implement most of the NMSettingsInterface API to make subclasses simpler, and consolidate exporting of NMExportedConnection subclasses in NMSettingsService instead of in 3 places. Make NMSysconfigSettings a subclass of NMSettingsService and save a ton of code.
This commit is contained in:
parent
f64354d0cc
commit
890866bef9
11 changed files with 162 additions and 283 deletions
|
|
@ -6,19 +6,6 @@
|
||||||
Implemented by the system settings service to provide additional settings to NetworkManager.
|
Implemented by the system settings service to provide additional settings to NetworkManager.
|
||||||
</tp:docstring>
|
</tp:docstring>
|
||||||
|
|
||||||
<method name="AddConnection">
|
|
||||||
<tp:docstring>
|
|
||||||
DEPRECATED. Adds new connection.
|
|
||||||
</tp:docstring>
|
|
||||||
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_add_connection"/>
|
|
||||||
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
|
|
||||||
<arg name="connection" type="a{sa{sv}}" direction="in">
|
|
||||||
<tp:docstring>
|
|
||||||
Connection properties.
|
|
||||||
</tp:docstring>
|
|
||||||
</arg>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="SaveHostname">
|
<method name="SaveHostname">
|
||||||
<tp:docstring>
|
<tp:docstring>
|
||||||
Save the hostname to persistent configuration.
|
Save the hostname to persistent configuration.
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,7 @@ global:
|
||||||
nm_settings_interface_get_type;
|
nm_settings_interface_get_type;
|
||||||
nm_settings_interface_list_connections;
|
nm_settings_interface_list_connections;
|
||||||
nm_settings_service_export;
|
nm_settings_service_export;
|
||||||
|
nm_settings_service_export_connection;
|
||||||
nm_settings_service_get_connection_by_path;
|
nm_settings_service_get_connection_by_path;
|
||||||
nm_settings_service_get_type;
|
nm_settings_service_get_type;
|
||||||
nm_settings_system_interface_get_type;
|
nm_settings_system_interface_get_type;
|
||||||
|
|
|
||||||
|
|
@ -51,41 +51,12 @@ G_DEFINE_TYPE (NMExportedConnection, nm_exported_connection, NM_TYPE_CONNECTION)
|
||||||
NMExportedConnectionPrivate))
|
NMExportedConnectionPrivate))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
DBusGConnection *bus;
|
gboolean foo;
|
||||||
gboolean disposed;
|
|
||||||
} NMExportedConnectionPrivate;
|
} NMExportedConnectionPrivate;
|
||||||
|
|
||||||
enum {
|
|
||||||
PROP_0,
|
|
||||||
PROP_BUS,
|
|
||||||
|
|
||||||
LAST_PROP
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************/
|
/**************************************************************/
|
||||||
|
|
||||||
void
|
|
||||||
nm_exported_connection_export (NMExportedConnection *self)
|
|
||||||
{
|
|
||||||
NMExportedConnectionPrivate *priv;
|
|
||||||
static guint32 ec_counter = 0;
|
|
||||||
char *path;
|
|
||||||
|
|
||||||
g_return_if_fail (self != NULL);
|
|
||||||
g_return_if_fail (NM_IS_EXPORTED_CONNECTION (self));
|
|
||||||
|
|
||||||
priv = NM_EXPORTED_CONNECTION_GET_PRIVATE (self);
|
|
||||||
|
|
||||||
/* Don't allow exporting twice */
|
|
||||||
g_return_if_fail (nm_connection_get_path (NM_CONNECTION (self)) == NULL);
|
|
||||||
|
|
||||||
path = g_strdup_printf ("%s/%u", NM_DBUS_PATH_SETTINGS, ec_counter++);
|
|
||||||
nm_connection_set_path (NM_CONNECTION (self), path);
|
|
||||||
dbus_g_connection_register_g_object (priv->bus, path, G_OBJECT (self));
|
|
||||||
g_free (path);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GHashTable *
|
static GHashTable *
|
||||||
real_get_settings (NMExportedConnection *self, GError **error)
|
real_get_settings (NMExportedConnection *self, GError **error)
|
||||||
{
|
{
|
||||||
|
|
@ -183,124 +154,35 @@ impl_exported_connection_get_secrets (NMExportedConnection *self,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nm_exported_connection_new:
|
* nm_exported_connection_new:
|
||||||
* @bus: a valid and connected D-Bus connection
|
|
||||||
* @scope: the Connection scope (either user or system)
|
* @scope: the Connection scope (either user or system)
|
||||||
* @path: the D-Bus path of the connection as exported by the settings service
|
|
||||||
* indicated by @scope
|
|
||||||
*
|
*
|
||||||
* Creates a new object representing the remote connection.
|
* Creates a new object representing the remote connection.
|
||||||
*
|
*
|
||||||
* Returns: the new exported connection object on success, or %NULL on failure
|
* Returns: the new exported connection object on success, or %NULL on failure
|
||||||
**/
|
**/
|
||||||
NMExportedConnection *
|
NMExportedConnection *
|
||||||
nm_exported_connection_new (DBusGConnection *bus,
|
nm_exported_connection_new (NMConnectionScope scope)
|
||||||
NMConnectionScope scope)
|
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (bus != NULL, NULL);
|
|
||||||
g_return_val_if_fail (scope != NM_CONNECTION_SCOPE_UNKNOWN, NULL);
|
g_return_val_if_fail (scope != NM_CONNECTION_SCOPE_UNKNOWN, NULL);
|
||||||
|
|
||||||
return (NMExportedConnection *) g_object_new (NM_TYPE_EXPORTED_CONNECTION,
|
return (NMExportedConnection *) g_object_new (NM_TYPE_EXPORTED_CONNECTION,
|
||||||
NM_EXPORTED_CONNECTION_BUS, bus,
|
|
||||||
NM_CONNECTION_SCOPE, scope,
|
NM_CONNECTION_SCOPE, scope,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GObject *
|
|
||||||
constructor (GType type,
|
|
||||||
guint n_construct_params,
|
|
||||||
GObjectConstructParam *construct_params)
|
|
||||||
{
|
|
||||||
GObject *object;
|
|
||||||
NMExportedConnectionPrivate *priv;
|
|
||||||
|
|
||||||
object = G_OBJECT_CLASS (nm_exported_connection_parent_class)->constructor (type, n_construct_params, construct_params);
|
|
||||||
if (!object)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
priv = NM_EXPORTED_CONNECTION_GET_PRIVATE (object);
|
|
||||||
g_assert (priv->bus);
|
|
||||||
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
nm_exported_connection_init (NMExportedConnection *self)
|
nm_exported_connection_init (NMExportedConnection *self)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
set_property (GObject *object, guint prop_id,
|
|
||||||
const GValue *value, GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
NMExportedConnectionPrivate *priv = NM_EXPORTED_CONNECTION_GET_PRIVATE (object);
|
|
||||||
|
|
||||||
switch (prop_id) {
|
|
||||||
case PROP_BUS:
|
|
||||||
/* Construct only */
|
|
||||||
priv->bus = dbus_g_connection_ref ((DBusGConnection *) g_value_get_boxed (value));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
get_property (GObject *object, guint prop_id,
|
|
||||||
GValue *value, GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
NMExportedConnectionPrivate *priv = NM_EXPORTED_CONNECTION_GET_PRIVATE (object);
|
|
||||||
|
|
||||||
switch (prop_id) {
|
|
||||||
case PROP_BUS:
|
|
||||||
g_value_set_boxed (value, priv->bus);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
dispose (GObject *object)
|
|
||||||
{
|
|
||||||
NMExportedConnectionPrivate *priv = NM_EXPORTED_CONNECTION_GET_PRIVATE (object);
|
|
||||||
|
|
||||||
if (!priv->disposed) {
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
dbus_g_connection_unref (priv->bus);
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_exported_connection_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
nm_exported_connection_class_init (NMExportedConnectionClass *class)
|
nm_exported_connection_class_init (NMExportedConnectionClass *class)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
|
||||||
|
|
||||||
g_type_class_add_private (class, sizeof (NMExportedConnectionPrivate));
|
g_type_class_add_private (class, sizeof (NMExportedConnectionPrivate));
|
||||||
|
|
||||||
/* Virtual methods */
|
/* Virtual methods */
|
||||||
object_class->dispose = dispose;
|
|
||||||
object_class->constructor = constructor;
|
|
||||||
object_class->get_property = get_property;
|
|
||||||
object_class->set_property = set_property;
|
|
||||||
|
|
||||||
class->get_settings = real_get_settings;
|
class->get_settings = real_get_settings;
|
||||||
|
|
||||||
/**
|
|
||||||
* NMExportedConnection:bus:
|
|
||||||
*
|
|
||||||
* The %DBusGConnection which this object is exported on
|
|
||||||
**/
|
|
||||||
g_object_class_install_property (object_class, PROP_BUS,
|
|
||||||
g_param_spec_boxed (NM_EXPORTED_CONNECTION_BUS,
|
|
||||||
"Bus",
|
|
||||||
"Bus",
|
|
||||||
DBUS_TYPE_G_CONNECTION,
|
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
||||||
|
|
||||||
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
|
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
|
||||||
&dbus_glib_nm_exported_connection_object_info);
|
&dbus_glib_nm_exported_connection_object_info);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,6 @@ G_BEGIN_DECLS
|
||||||
#define NM_IS_EXPORTED_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_EXPORTED_CONNECTION))
|
#define NM_IS_EXPORTED_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_EXPORTED_CONNECTION))
|
||||||
#define NM_EXPORTED_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_EXPORTED_CONNECTION, NMExportedConnectionClass))
|
#define NM_EXPORTED_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_EXPORTED_CONNECTION, NMExportedConnectionClass))
|
||||||
|
|
||||||
#define NM_EXPORTED_CONNECTION_BUS "bus"
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
NMConnection parent;
|
NMConnection parent;
|
||||||
} NMExportedConnection;
|
} NMExportedConnection;
|
||||||
|
|
@ -61,10 +59,7 @@ typedef struct {
|
||||||
|
|
||||||
GType nm_exported_connection_get_type (void);
|
GType nm_exported_connection_get_type (void);
|
||||||
|
|
||||||
NMExportedConnection *nm_exported_connection_new (DBusGConnection *bus,
|
NMExportedConnection *nm_exported_connection_new (NMConnectionScope scope);
|
||||||
NMConnectionScope scope);
|
|
||||||
|
|
||||||
void nm_exported_connection_export (NMExportedConnection *self);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
* (C) Copyright 2008 - 2009 Red Hat, Inc.
|
* (C) Copyright 2008 - 2009 Red Hat, Inc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
#include <NetworkManager.h>
|
#include <NetworkManager.h>
|
||||||
#include <dbus/dbus-glib-lowlevel.h>
|
#include <dbus/dbus-glib-lowlevel.h>
|
||||||
|
|
||||||
|
|
@ -115,11 +116,18 @@ impl_settings_list_connections (NMSettingsService *self,
|
||||||
static NMSettingsConnectionInterface *
|
static NMSettingsConnectionInterface *
|
||||||
get_connection_by_path (NMSettingsInterface *settings, const char *path)
|
get_connection_by_path (NMSettingsInterface *settings, const char *path)
|
||||||
{
|
{
|
||||||
NMExportedConnection *connection;
|
NMExportedConnection *connection = NULL;
|
||||||
|
GSList *list = NULL, *iter;
|
||||||
|
|
||||||
|
list = list_connections (settings);
|
||||||
|
for (iter = list; iter; iter = g_slist_next (iter)) {
|
||||||
|
if (!strcmp (nm_connection_get_path (NM_CONNECTION (iter->data)), path)) {
|
||||||
|
connection = NM_EXPORTED_CONNECTION (iter->data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_slist_free (list);
|
||||||
|
|
||||||
/* Must always be implemented */
|
|
||||||
g_assert (NM_SETTINGS_SERVICE_GET_CLASS (settings)->get_connection_by_path);
|
|
||||||
connection = NM_SETTINGS_SERVICE_GET_CLASS (settings)->get_connection_by_path (NM_SETTINGS_SERVICE (settings), path);
|
|
||||||
return (NMSettingsConnectionInterface *) connection;
|
return (NMSettingsConnectionInterface *) connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -133,6 +141,48 @@ nm_settings_service_get_connection_by_path (NMSettingsService *self,
|
||||||
return (NMExportedConnection *) get_connection_by_path (NM_SETTINGS_INTERFACE (self), path);
|
return (NMExportedConnection *) get_connection_by_path (NM_SETTINGS_INTERFACE (self), path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
add_connection (NMSettingsInterface *settings,
|
||||||
|
NMSettingsConnectionInterface *connection,
|
||||||
|
NMSettingsAddConnectionFunc callback,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
NMSettingsService *self = NM_SETTINGS_SERVICE (settings);
|
||||||
|
GError *error = NULL;
|
||||||
|
gboolean success = FALSE;
|
||||||
|
|
||||||
|
if (NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection) {
|
||||||
|
NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection (NM_SETTINGS_SERVICE (self),
|
||||||
|
connection,
|
||||||
|
NULL,
|
||||||
|
callback,
|
||||||
|
user_data);
|
||||||
|
success = TRUE;
|
||||||
|
} else {
|
||||||
|
error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
|
||||||
|
NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
|
||||||
|
"%s: %s:%d add_connection() not implemented",
|
||||||
|
__func__, __FILE__, __LINE__);
|
||||||
|
callback (settings, error, user_data);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dbus_add_connection_cb (NMSettingsInterface *settings,
|
||||||
|
GError *error,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
DBusGMethodInvocation *context = user_data;
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
dbus_g_method_return_error (context, error);
|
||||||
|
else
|
||||||
|
dbus_g_method_return (context);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
impl_settings_add_connection (NMSettingsService *self,
|
impl_settings_add_connection (NMSettingsService *self,
|
||||||
GHashTable *settings,
|
GHashTable *settings,
|
||||||
|
|
@ -149,11 +199,14 @@ impl_settings_add_connection (NMSettingsService *self,
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
g_object_unref (tmp);
|
|
||||||
|
|
||||||
if (NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection)
|
if (NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection) {
|
||||||
NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection (self, settings, context);
|
NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection (NM_SETTINGS_SERVICE (self),
|
||||||
else {
|
NM_SETTINGS_CONNECTION_INTERFACE (tmp),
|
||||||
|
context,
|
||||||
|
dbus_add_connection_cb,
|
||||||
|
context);
|
||||||
|
} else {
|
||||||
error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
|
error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
|
||||||
NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
|
NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
|
||||||
"%s: %s:%d add_connection() not implemented",
|
"%s: %s:%d add_connection() not implemented",
|
||||||
|
|
@ -161,6 +214,30 @@ impl_settings_add_connection (NMSettingsService *self,
|
||||||
dbus_g_method_return_error (context, error);
|
dbus_g_method_return_error (context, error);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_object_unref (tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nm_settings_service_export_connection (NMSettingsService *self,
|
||||||
|
NMSettingsConnectionInterface *connection)
|
||||||
|
{
|
||||||
|
NMSettingsServicePrivate *priv = NM_SETTINGS_SERVICE_GET_PRIVATE (self);
|
||||||
|
static guint32 ec_counter = 0;
|
||||||
|
char *path;
|
||||||
|
|
||||||
|
g_return_if_fail (connection != NULL);
|
||||||
|
g_return_if_fail (NM_IS_SETTINGS_CONNECTION_INTERFACE (connection));
|
||||||
|
|
||||||
|
/* Don't allow exporting twice */
|
||||||
|
g_return_if_fail (nm_connection_get_path (NM_CONNECTION (connection)) == NULL);
|
||||||
|
|
||||||
|
path = g_strdup_printf ("%s/%u", NM_DBUS_PATH_SETTINGS, ec_counter++);
|
||||||
|
nm_connection_set_path (NM_CONNECTION (connection), path);
|
||||||
|
nm_connection_set_scope (NM_CONNECTION (connection), priv->scope);
|
||||||
|
|
||||||
|
dbus_g_connection_register_g_object (priv->bus, path, G_OBJECT (connection));
|
||||||
|
g_free (path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************/
|
/**************************************************************/
|
||||||
|
|
@ -171,6 +248,10 @@ settings_interface_init (NMSettingsInterface *iface)
|
||||||
/* interface implementation */
|
/* interface implementation */
|
||||||
iface->list_connections = list_connections;
|
iface->list_connections = list_connections;
|
||||||
iface->get_connection_by_path = get_connection_by_path;
|
iface->get_connection_by_path = get_connection_by_path;
|
||||||
|
iface->add_connection = add_connection;
|
||||||
|
|
||||||
|
dbus_g_object_type_install_info (G_TYPE_FROM_INTERFACE (iface),
|
||||||
|
&dbus_glib_nm_settings_object_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GObject *
|
static GObject *
|
||||||
|
|
@ -181,8 +262,10 @@ constructor (GType type,
|
||||||
GObject *object;
|
GObject *object;
|
||||||
|
|
||||||
object = G_OBJECT_CLASS (nm_settings_service_parent_class)->constructor (type, n_construct_params, construct_params);
|
object = G_OBJECT_CLASS (nm_settings_service_parent_class)->constructor (type, n_construct_params, construct_params);
|
||||||
if (object)
|
if (object) {
|
||||||
g_assert (NM_SETTINGS_SERVICE_GET_PRIVATE (object)->scope != NM_CONNECTION_SCOPE_UNKNOWN);
|
g_assert (NM_SETTINGS_SERVICE_GET_PRIVATE (object)->scope != NM_CONNECTION_SCOPE_UNKNOWN);
|
||||||
|
g_assert (NM_SETTINGS_SERVICE_GET_PRIVATE (object)->bus != NULL);
|
||||||
|
}
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -196,11 +279,14 @@ set_property (GObject *object, guint prop_id,
|
||||||
const GValue *value, GParamSpec *pspec)
|
const GValue *value, GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
NMSettingsServicePrivate *priv = NM_SETTINGS_SERVICE_GET_PRIVATE (object);
|
NMSettingsServicePrivate *priv = NM_SETTINGS_SERVICE_GET_PRIVATE (object);
|
||||||
|
DBusGConnection *bus;
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_BUS:
|
case PROP_BUS:
|
||||||
/* Construct only */
|
/* Construct only */
|
||||||
priv->bus = dbus_g_connection_ref ((DBusGConnection *) g_value_get_boxed (value));
|
bus = g_value_get_boxed (value);
|
||||||
|
if (bus)
|
||||||
|
priv->bus = dbus_g_connection_ref (bus);
|
||||||
break;
|
break;
|
||||||
case PROP_SCOPE:
|
case PROP_SCOPE:
|
||||||
/* Construct only */
|
/* Construct only */
|
||||||
|
|
@ -277,9 +363,9 @@ nm_settings_service_class_init (NMSettingsServiceClass *class)
|
||||||
g_param_spec_uint (NM_SETTINGS_SERVICE_SCOPE,
|
g_param_spec_uint (NM_SETTINGS_SERVICE_SCOPE,
|
||||||
"Scope",
|
"Scope",
|
||||||
"Scope",
|
"Scope",
|
||||||
NM_CONNECTION_SCOPE_USER,
|
|
||||||
NM_CONNECTION_SCOPE_SYSTEM,
|
NM_CONNECTION_SCOPE_SYSTEM,
|
||||||
NM_CONNECTION_SCOPE_USER,
|
NM_CONNECTION_SCOPE_USER,
|
||||||
|
NM_CONNECTION_SCOPE_USER,
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
|
|
||||||
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
|
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
|
||||||
|
|
|
||||||
|
|
@ -51,12 +51,11 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
GSList * (*list_connections) (NMSettingsService *self);
|
GSList * (*list_connections) (NMSettingsService *self);
|
||||||
|
|
||||||
NMExportedConnection * (*get_connection_by_path) (NMSettingsService *self,
|
|
||||||
const char *path);
|
|
||||||
|
|
||||||
void (*add_connection) (NMSettingsService *self,
|
void (*add_connection) (NMSettingsService *self,
|
||||||
GHashTable *settings,
|
NMSettingsConnectionInterface *connection,
|
||||||
DBusGMethodInvocation *context);
|
DBusGMethodInvocation *context, /* Only present for D-Bus calls */
|
||||||
|
NMSettingsAddConnectionFunc callback,
|
||||||
|
gpointer user_data);
|
||||||
} NMSettingsServiceClass;
|
} NMSettingsServiceClass;
|
||||||
|
|
||||||
GType nm_settings_service_get_type (void);
|
GType nm_settings_service_get_type (void);
|
||||||
|
|
@ -66,6 +65,9 @@ NMExportedConnection *nm_settings_service_get_connection_by_path (NMSettingsServ
|
||||||
|
|
||||||
void nm_settings_service_export (NMSettingsService *self);
|
void nm_settings_service_export (NMSettingsService *self);
|
||||||
|
|
||||||
|
void nm_settings_service_export_connection (NMSettingsService *self,
|
||||||
|
NMSettingsConnectionInterface *exported);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* NM_SETTINGS_SERVICE_H */
|
#endif /* NM_SETTINGS_SERVICE_H */
|
||||||
|
|
|
||||||
|
|
@ -2508,6 +2508,7 @@ nm_manager_get (const char *config_file, const char *plugins, GError **error)
|
||||||
{
|
{
|
||||||
static NMManager *singleton = NULL;
|
static NMManager *singleton = NULL;
|
||||||
NMManagerPrivate *priv;
|
NMManagerPrivate *priv;
|
||||||
|
DBusGConnection *bus;
|
||||||
|
|
||||||
if (singleton)
|
if (singleton)
|
||||||
return g_object_ref (singleton);
|
return g_object_ref (singleton);
|
||||||
|
|
@ -2517,11 +2518,15 @@ nm_manager_get (const char *config_file, const char *plugins, GError **error)
|
||||||
|
|
||||||
priv = NM_MANAGER_GET_PRIVATE (singleton);
|
priv = NM_MANAGER_GET_PRIVATE (singleton);
|
||||||
|
|
||||||
priv->sys_settings = nm_sysconfig_settings_new (config_file, plugins, error);
|
bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
|
||||||
|
g_assert (bus);
|
||||||
|
|
||||||
|
priv->sys_settings = nm_sysconfig_settings_new (config_file, plugins, bus, error);
|
||||||
if (!priv->sys_settings) {
|
if (!priv->sys_settings) {
|
||||||
g_object_unref (singleton);
|
g_object_unref (singleton);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
nm_settings_service_export (NM_SETTINGS_SERVICE (priv->sys_settings));
|
||||||
|
|
||||||
priv->config_file = g_strdup (config_file);
|
priv->config_file = g_strdup (config_file);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ G_DEFINE_TYPE_EXTENDED (NMSysconfigConnection, nm_sysconfig_connection, NM_TYPE_
|
||||||
NMSysconfigConnectionPrivate))
|
NMSysconfigConnectionPrivate))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
DBusGConnection *bus;
|
|
||||||
PolkitAuthority *authority;
|
PolkitAuthority *authority;
|
||||||
} NMSysconfigConnectionPrivate;
|
} NMSysconfigConnectionPrivate;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@
|
||||||
#include "nm-dbus-glib-types.h"
|
#include "nm-dbus-glib-types.h"
|
||||||
#include "nm-sysconfig-settings.h"
|
#include "nm-sysconfig-settings.h"
|
||||||
#include "nm-sysconfig-connection.h"
|
#include "nm-sysconfig-connection.h"
|
||||||
#include "nm-dbus-manager.h"
|
|
||||||
#include "nm-polkit-helpers.h"
|
#include "nm-polkit-helpers.h"
|
||||||
#include "nm-system-config-error.h"
|
#include "nm-system-config-error.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
|
|
@ -67,25 +66,15 @@ static void claim_connection (NMSysconfigSettings *self,
|
||||||
NMSettingsConnectionInterface *connection,
|
NMSettingsConnectionInterface *connection,
|
||||||
gboolean do_export);
|
gboolean do_export);
|
||||||
|
|
||||||
static gboolean impl_settings_list_connections (NMSysconfigSettings *self,
|
|
||||||
GPtrArray **connections,
|
|
||||||
GError **error);
|
|
||||||
|
|
||||||
static void impl_settings_add_connection (NMSysconfigSettings *self,
|
|
||||||
GHashTable *settings,
|
|
||||||
DBusGMethodInvocation *context);
|
|
||||||
|
|
||||||
static void impl_settings_save_hostname (NMSysconfigSettings *self,
|
static void impl_settings_save_hostname (NMSysconfigSettings *self,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
DBusGMethodInvocation *context);
|
DBusGMethodInvocation *context);
|
||||||
|
|
||||||
#include "nm-settings-glue.h"
|
|
||||||
#include "nm-settings-system-glue.h"
|
#include "nm-settings-system-glue.h"
|
||||||
|
|
||||||
static void unmanaged_specs_changed (NMSystemConfigInterface *config, gpointer user_data);
|
static void unmanaged_specs_changed (NMSystemConfigInterface *config, gpointer user_data);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
NMDBusManager *dbus_mgr;
|
|
||||||
PolkitAuthority *authority;
|
PolkitAuthority *authority;
|
||||||
char *config_file;
|
char *config_file;
|
||||||
|
|
||||||
|
|
@ -96,13 +85,9 @@ typedef struct {
|
||||||
char *orig_hostname;
|
char *orig_hostname;
|
||||||
} NMSysconfigSettingsPrivate;
|
} NMSysconfigSettingsPrivate;
|
||||||
|
|
||||||
static void settings_interface_init (NMSettingsInterface *klass);
|
|
||||||
|
|
||||||
static void settings_system_interface_init (NMSettingsSystemInterface *klass);
|
static void settings_system_interface_init (NMSettingsSystemInterface *klass);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (NMSysconfigSettings, nm_sysconfig_settings, G_TYPE_OBJECT,
|
G_DEFINE_TYPE_WITH_CODE (NMSysconfigSettings, nm_sysconfig_settings, NM_TYPE_SETTINGS_SERVICE,
|
||||||
G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_INTERFACE,
|
|
||||||
settings_interface_init)
|
|
||||||
G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_SYSTEM_INTERFACE,
|
G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_SYSTEM_INTERFACE,
|
||||||
settings_system_interface_init))
|
settings_system_interface_init))
|
||||||
|
|
||||||
|
|
@ -157,50 +142,20 @@ load_connections (NMSysconfigSettings *self)
|
||||||
unmanaged_specs_changed (NULL, self);
|
unmanaged_specs_changed (NULL, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static GSList *
|
||||||
impl_settings_list_connections (NMSysconfigSettings *self,
|
list_connections (NMSettingsService *settings)
|
||||||
GPtrArray **connections,
|
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
NMSysconfigSettingsPrivate *priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
|
NMSysconfigSettingsPrivate *priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (settings);
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
gpointer key;
|
gpointer key;
|
||||||
|
GSList *list = NULL;
|
||||||
|
|
||||||
load_connections (self);
|
load_connections (NM_SYSCONFIG_SETTINGS (settings));
|
||||||
|
|
||||||
*connections = g_ptr_array_sized_new (g_hash_table_size (priv->connections));
|
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, priv->connections);
|
g_hash_table_iter_init (&iter, priv->connections);
|
||||||
while (g_hash_table_iter_next (&iter, &key, NULL)) {
|
while (g_hash_table_iter_next (&iter, &key, NULL))
|
||||||
NMSettingsConnectionInterface *connection = key;
|
list = g_slist_prepend (list, NM_EXPORTED_CONNECTION (key));
|
||||||
char *path = NULL;
|
return g_slist_reverse (list);
|
||||||
|
|
||||||
g_object_get (G_OBJECT (connection), NM_SETTINGS_CONNECTION_INTERFACE_PATH, &path, NULL);
|
|
||||||
g_assert (path);
|
|
||||||
g_ptr_array_add (*connections, path);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static NMSettingsConnectionInterface *
|
|
||||||
get_connection_by_path (NMSettingsInterface *self,
|
|
||||||
const char *path)
|
|
||||||
{
|
|
||||||
NMSysconfigSettingsPrivate *priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
|
|
||||||
GHashTableIter iter;
|
|
||||||
gpointer key;
|
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, priv->connections);
|
|
||||||
while (g_hash_table_iter_next (&iter, &key, NULL)) {
|
|
||||||
NMConnection *candidate = NM_CONNECTION (key);
|
|
||||||
const char *candidate_path;
|
|
||||||
|
|
||||||
candidate_path = nm_connection_get_path (candidate);
|
|
||||||
g_assert (candidate_path);
|
|
||||||
if (!strcmp (path, candidate_path))
|
|
||||||
return NM_SETTINGS_CONNECTION_INTERFACE (candidate);
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -514,28 +469,6 @@ connection_removed (NMSettingsConnectionInterface *connection,
|
||||||
g_hash_table_remove (priv->connections, connection);
|
g_hash_table_remove (priv->connections, connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
export_connection (NMSysconfigSettings *self,
|
|
||||||
NMSettingsConnectionInterface *connection)
|
|
||||||
{
|
|
||||||
NMSysconfigSettingsPrivate *priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
|
|
||||||
static guint32 ec_counter = 0;
|
|
||||||
char *path;
|
|
||||||
DBusGConnection *bus;
|
|
||||||
|
|
||||||
g_return_if_fail (connection != NULL);
|
|
||||||
g_return_if_fail (NM_IS_SETTINGS_CONNECTION_INTERFACE (connection));
|
|
||||||
|
|
||||||
path = g_strdup_printf ("%s/%u", NM_DBUS_PATH_SETTINGS, ec_counter++);
|
|
||||||
nm_connection_set_path (NM_CONNECTION (connection), path);
|
|
||||||
nm_connection_set_scope (NM_CONNECTION (connection), NM_CONNECTION_SCOPE_SYSTEM);
|
|
||||||
|
|
||||||
bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
|
|
||||||
dbus_g_connection_register_g_object (bus, path, G_OBJECT (connection));
|
|
||||||
|
|
||||||
g_free (path);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
claim_connection (NMSysconfigSettings *self,
|
claim_connection (NMSysconfigSettings *self,
|
||||||
NMSettingsConnectionInterface *connection,
|
NMSettingsConnectionInterface *connection,
|
||||||
|
|
@ -554,7 +487,7 @@ claim_connection (NMSysconfigSettings *self,
|
||||||
g_signal_connect (connection, "removed", G_CALLBACK (connection_removed), self);
|
g_signal_connect (connection, "removed", G_CALLBACK (connection_removed), self);
|
||||||
|
|
||||||
if (do_export) {
|
if (do_export) {
|
||||||
export_connection (self, connection);
|
nm_settings_service_export_connection (NM_SETTINGS_SERVICE (self), connection);
|
||||||
g_signal_emit_by_name (self, "new-connection", connection);
|
g_signal_emit_by_name (self, "new-connection", connection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -582,6 +515,9 @@ typedef struct {
|
||||||
GCancellable *cancellable;
|
GCancellable *cancellable;
|
||||||
|
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
|
NMSettingsAddConnectionFunc callback;
|
||||||
|
gpointer callback_data;
|
||||||
|
|
||||||
char *hostname;
|
char *hostname;
|
||||||
} PolkitCall;
|
} PolkitCall;
|
||||||
|
|
||||||
|
|
@ -589,6 +525,8 @@ static PolkitCall *
|
||||||
polkit_call_new (NMSysconfigSettings *self,
|
polkit_call_new (NMSysconfigSettings *self,
|
||||||
DBusGMethodInvocation *context,
|
DBusGMethodInvocation *context,
|
||||||
NMConnection *connection,
|
NMConnection *connection,
|
||||||
|
NMSettingsAddConnectionFunc callback,
|
||||||
|
gpointer callback_data,
|
||||||
const char *hostname)
|
const char *hostname)
|
||||||
{
|
{
|
||||||
PolkitCall *call;
|
PolkitCall *call;
|
||||||
|
|
@ -600,7 +538,12 @@ polkit_call_new (NMSysconfigSettings *self,
|
||||||
call = g_malloc0 (sizeof (PolkitCall));
|
call = g_malloc0 (sizeof (PolkitCall));
|
||||||
call->self = self;
|
call->self = self;
|
||||||
call->context = context;
|
call->context = context;
|
||||||
call->connection = connection;
|
if (connection)
|
||||||
|
call->connection = g_object_ref (connection);
|
||||||
|
if (callback) {
|
||||||
|
call->callback = callback;
|
||||||
|
call->callback_data = callback_data;
|
||||||
|
}
|
||||||
if (hostname)
|
if (hostname)
|
||||||
call->hostname = g_strdup (hostname);
|
call->hostname = g_strdup (hostname);
|
||||||
call->cancellable = g_cancellable_new ();
|
call->cancellable = g_cancellable_new ();
|
||||||
|
|
@ -668,7 +611,7 @@ pk_add_cb (GObject *object, GAsyncResult *result, gpointer user_data)
|
||||||
&error);
|
&error);
|
||||||
/* Some random error happened */
|
/* Some random error happened */
|
||||||
if (error) {
|
if (error) {
|
||||||
dbus_g_method_return_error (call->context, error);
|
call->callback (NM_SETTINGS_INTERFACE (self), error, call->callback_data);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -677,20 +620,20 @@ pk_add_cb (GObject *object, GAsyncResult *result, gpointer user_data)
|
||||||
error = g_error_new_literal (NM_SYSCONFIG_SETTINGS_ERROR,
|
error = g_error_new_literal (NM_SYSCONFIG_SETTINGS_ERROR,
|
||||||
NM_SYSCONFIG_SETTINGS_ERROR_NOT_PRIVILEGED,
|
NM_SYSCONFIG_SETTINGS_ERROR_NOT_PRIVILEGED,
|
||||||
"Insufficient privileges.");
|
"Insufficient privileges.");
|
||||||
dbus_g_method_return_error (call->context, error);
|
call->callback (NM_SETTINGS_INTERFACE (self), error, call->callback_data);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (add_new_connection (self, call->connection, &add_error)) {
|
if (add_new_connection (self, call->connection, &add_error))
|
||||||
dbus_g_method_return (call->context);
|
call->callback (NM_SETTINGS_INTERFACE (self), NULL, call->callback_data);
|
||||||
} else {
|
else {
|
||||||
error = g_error_new (NM_SYSCONFIG_SETTINGS_ERROR,
|
error = g_error_new (NM_SYSCONFIG_SETTINGS_ERROR,
|
||||||
NM_SYSCONFIG_SETTINGS_ERROR_ADD_FAILED,
|
NM_SYSCONFIG_SETTINGS_ERROR_ADD_FAILED,
|
||||||
"Saving connection failed: (%d) %s",
|
"Saving connection failed: (%d) %s",
|
||||||
add_error ? add_error->code : -1,
|
add_error ? add_error->code : -1,
|
||||||
(add_error && add_error->message) ? add_error->message : "(unknown)");
|
(add_error && add_error->message) ? add_error->message : "(unknown)");
|
||||||
g_error_free (add_error);
|
g_error_free (add_error);
|
||||||
dbus_g_method_return_error (call->context, error);
|
call->callback (NM_SETTINGS_INTERFACE (self), error, call->callback_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
@ -701,13 +644,15 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
impl_settings_add_connection (NMSysconfigSettings *self,
|
add_connection (NMSettingsService *service,
|
||||||
GHashTable *settings,
|
NMSettingsConnectionInterface *connection,
|
||||||
DBusGMethodInvocation *context)
|
DBusGMethodInvocation *context, /* Only present for D-Bus calls */
|
||||||
|
NMSettingsAddConnectionFunc callback,
|
||||||
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
NMSysconfigSettings *self = NM_SYSCONFIG_SETTINGS (service);
|
||||||
NMSysconfigSettingsPrivate *priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
|
NMSysconfigSettingsPrivate *priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
|
||||||
PolkitCall *call;
|
PolkitCall *call;
|
||||||
NMConnection *tmp;
|
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
/* Do any of the plugins support adding? */
|
/* Do any of the plugins support adding? */
|
||||||
|
|
@ -715,21 +660,12 @@ impl_settings_add_connection (NMSysconfigSettings *self,
|
||||||
error = g_error_new_literal (NM_SYSCONFIG_SETTINGS_ERROR,
|
error = g_error_new_literal (NM_SYSCONFIG_SETTINGS_ERROR,
|
||||||
NM_SYSCONFIG_SETTINGS_ERROR_ADD_NOT_SUPPORTED,
|
NM_SYSCONFIG_SETTINGS_ERROR_ADD_NOT_SUPPORTED,
|
||||||
"None of the registered plugins support add.");
|
"None of the registered plugins support add.");
|
||||||
dbus_g_method_return_error (context, error);
|
callback (NM_SETTINGS_INTERFACE (service), error, user_data);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if the settings are valid first */
|
call = polkit_call_new (self, context, NM_CONNECTION (connection), callback, user_data, NULL);
|
||||||
tmp = nm_connection_new_from_hash (settings, &error);
|
|
||||||
if (!tmp) {
|
|
||||||
g_assert (error);
|
|
||||||
dbus_g_method_return_error (context, error);
|
|
||||||
g_error_free (error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
call = polkit_call_new (self, context, tmp, NULL);
|
|
||||||
g_assert (call);
|
g_assert (call);
|
||||||
polkit_authority_check_authorization (priv->authority,
|
polkit_authority_check_authorization (priv->authority,
|
||||||
call->subject,
|
call->subject,
|
||||||
|
|
@ -816,7 +752,7 @@ impl_settings_save_hostname (NMSysconfigSettings *self,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
call = polkit_call_new (self, context, NULL, hostname);
|
call = polkit_call_new (self, context, NULL, NULL, NULL, hostname);
|
||||||
g_assert (call);
|
g_assert (call);
|
||||||
polkit_authority_check_authorization (priv->authority,
|
polkit_authority_check_authorization (priv->authority,
|
||||||
call->subject,
|
call->subject,
|
||||||
|
|
@ -1123,13 +1059,16 @@ nm_sysconfig_settings_device_removed (NMSysconfigSettings *self, NMDevice *devic
|
||||||
NMSysconfigSettings *
|
NMSysconfigSettings *
|
||||||
nm_sysconfig_settings_new (const char *config_file,
|
nm_sysconfig_settings_new (const char *config_file,
|
||||||
const char *plugins,
|
const char *plugins,
|
||||||
|
DBusGConnection *bus,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
NMSysconfigSettings *self;
|
NMSysconfigSettings *self;
|
||||||
NMSysconfigSettingsPrivate *priv;
|
NMSysconfigSettingsPrivate *priv;
|
||||||
DBusGConnection *g_connection;
|
|
||||||
|
|
||||||
self = g_object_new (NM_TYPE_SYSCONFIG_SETTINGS, NULL);
|
self = g_object_new (NM_TYPE_SYSCONFIG_SETTINGS,
|
||||||
|
NM_SETTINGS_SERVICE_BUS, bus,
|
||||||
|
NM_SETTINGS_SERVICE_SCOPE, NM_CONNECTION_SCOPE_SYSTEM,
|
||||||
|
NULL);
|
||||||
if (!self)
|
if (!self)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
@ -1137,12 +1076,6 @@ nm_sysconfig_settings_new (const char *config_file,
|
||||||
|
|
||||||
priv->config_file = g_strdup (config_file);
|
priv->config_file = g_strdup (config_file);
|
||||||
|
|
||||||
priv->dbus_mgr = nm_dbus_manager_get ();
|
|
||||||
g_assert (priv->dbus_mgr);
|
|
||||||
|
|
||||||
g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
|
|
||||||
dbus_g_connection_register_g_object (g_connection, NM_DBUS_PATH_SETTINGS, G_OBJECT (self));
|
|
||||||
|
|
||||||
if (plugins) {
|
if (plugins) {
|
||||||
/* Load the plugins; fail if a plugin is not found. */
|
/* Load the plugins; fail if a plugin is not found. */
|
||||||
if (!load_plugins (self, plugins, error)) {
|
if (!load_plugins (self, plugins, error)) {
|
||||||
|
|
@ -1172,23 +1105,12 @@ finalize (GObject *object)
|
||||||
if (priv->authority)
|
if (priv->authority)
|
||||||
g_object_unref (priv->authority);
|
g_object_unref (priv->authority);
|
||||||
|
|
||||||
g_object_unref (priv->dbus_mgr);
|
|
||||||
|
|
||||||
g_free (priv->orig_hostname);
|
g_free (priv->orig_hostname);
|
||||||
g_free (priv->config_file);
|
g_free (priv->config_file);
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_sysconfig_settings_parent_class)->finalize (object);
|
G_OBJECT_CLASS (nm_sysconfig_settings_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
settings_interface_init (NMSettingsInterface *iface)
|
|
||||||
{
|
|
||||||
iface->get_connection_by_path = get_connection_by_path;
|
|
||||||
|
|
||||||
dbus_g_object_type_install_info (G_TYPE_FROM_INTERFACE (iface),
|
|
||||||
&dbus_glib_nm_settings_object_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
settings_system_interface_init (NMSettingsSystemInterface *iface)
|
settings_system_interface_init (NMSettingsSystemInterface *iface)
|
||||||
{
|
{
|
||||||
|
|
@ -1231,6 +1153,7 @@ static void
|
||||||
nm_sysconfig_settings_class_init (NMSysconfigSettingsClass *class)
|
nm_sysconfig_settings_class_init (NMSysconfigSettingsClass *class)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
||||||
|
NMSettingsServiceClass *ss_class = NM_SETTINGS_SERVICE_CLASS (class);
|
||||||
|
|
||||||
g_type_class_add_private (class, sizeof (NMSysconfigSettingsPrivate));
|
g_type_class_add_private (class, sizeof (NMSysconfigSettingsPrivate));
|
||||||
|
|
||||||
|
|
@ -1238,6 +1161,8 @@ nm_sysconfig_settings_class_init (NMSysconfigSettingsClass *class)
|
||||||
object_class->notify = notify;
|
object_class->notify = notify;
|
||||||
object_class->get_property = get_property;
|
object_class->get_property = get_property;
|
||||||
object_class->finalize = finalize;
|
object_class->finalize = finalize;
|
||||||
|
ss_class->list_connections = list_connections;
|
||||||
|
ss_class->add_connection = add_connection;
|
||||||
|
|
||||||
/* properties */
|
/* properties */
|
||||||
g_object_class_install_property
|
g_object_class_install_property
|
||||||
|
|
@ -1266,9 +1191,6 @@ nm_sysconfig_settings_class_init (NMSysconfigSettingsClass *class)
|
||||||
g_cclosure_marshal_VOID__BOXED,
|
g_cclosure_marshal_VOID__BOXED,
|
||||||
G_TYPE_NONE, 1, DBUS_TYPE_G_MAP_OF_VARIANT);
|
G_TYPE_NONE, 1, DBUS_TYPE_G_MAP_OF_VARIANT);
|
||||||
|
|
||||||
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
|
|
||||||
&dbus_glib_nm_settings_object_info);
|
|
||||||
|
|
||||||
dbus_g_error_domain_register (NM_SYSCONFIG_SETTINGS_ERROR,
|
dbus_g_error_domain_register (NM_SYSCONFIG_SETTINGS_ERROR,
|
||||||
NM_DBUS_IFACE_SETTINGS_SYSTEM,
|
NM_DBUS_IFACE_SETTINGS_SYSTEM,
|
||||||
NM_TYPE_SYSCONFIG_SETTINGS_ERROR);
|
NM_TYPE_SYSCONFIG_SETTINGS_ERROR);
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
#define __NM_SYSCONFIG_SETTINGS_H__
|
#define __NM_SYSCONFIG_SETTINGS_H__
|
||||||
|
|
||||||
#include <nm-connection.h>
|
#include <nm-connection.h>
|
||||||
|
#include <nm-settings-service.h>
|
||||||
|
|
||||||
#include "nm-sysconfig-connection.h"
|
#include "nm-sysconfig-connection.h"
|
||||||
#include "nm-system-config-interface.h"
|
#include "nm-system-config-interface.h"
|
||||||
|
|
@ -42,11 +43,11 @@
|
||||||
#define NM_SYSCONFIG_SETTINGS_UNMANAGED_SPECS "unmanaged-specs"
|
#define NM_SYSCONFIG_SETTINGS_UNMANAGED_SPECS "unmanaged-specs"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GObject parent_instance;
|
NMSettingsService parent_instance;
|
||||||
} NMSysconfigSettings;
|
} NMSysconfigSettings;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GObjectClass parent_class;
|
NMSettingsServiceClass parent_class;
|
||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
void (*properties_changed) (NMSysconfigSettings *self, GHashTable *properties);
|
void (*properties_changed) (NMSysconfigSettings *self, GHashTable *properties);
|
||||||
|
|
@ -56,6 +57,7 @@ GType nm_sysconfig_settings_get_type (void);
|
||||||
|
|
||||||
NMSysconfigSettings *nm_sysconfig_settings_new (const char *config_file,
|
NMSysconfigSettings *nm_sysconfig_settings_new (const char *config_file,
|
||||||
const char *plugins,
|
const char *plugins,
|
||||||
|
DBusGConnection *bus,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
const GSList *nm_sysconfig_settings_get_unmanaged_specs (NMSysconfigSettings *self);
|
const GSList *nm_sysconfig_settings_get_unmanaged_specs (NMSysconfigSettings *self);
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,6 @@
|
||||||
#include <net/ethernet.h>
|
#include <net/ethernet.h>
|
||||||
#include <netinet/ether.h>
|
#include <netinet/ether.h>
|
||||||
|
|
||||||
#include <dbus/dbus-glib.h>
|
|
||||||
|
|
||||||
#include <nm-setting-connection.h>
|
#include <nm-setting-connection.h>
|
||||||
|
|
||||||
#ifndef NO_GIO
|
#ifndef NO_GIO
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue