summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2011-10-12 09:54:10 -0500
committerDan Williams <dcbw@redhat.com>2011-10-12 09:54:10 -0500
commitf1a111d20c4d807fa2956ae853d264b8204e2a45 (patch)
tree21ae79b22af950e04af8af3eb916855ddbc61b36
parent9d83332002778444be4c2ca26493cc752b71c3e1 (diff)
downloadNetworkManager-f1a111d20c4d807fa2956ae853d264b8204e2a45.tar.gz
vpn: fix 'SpecificObject' path for active VPN connections on D-Bus
Active VPN connections exported their own active path instead of active path of base connection in 'SpecificObject' property. It's a regression caused by commit bc6fc7b910435aae00ef54db972a3e8359700d09 that split VPN connections to NMVPNConnectionBase and NMVPNConnection. Previously, specific object used to be obtained from NMActRequest of parent connection. The NMActRequest object served also for getting secrets. Commits 0e6a5365d4f3991f6b10b5db1fb211d2d0696f2c and 832e64f8bc36bd4ab5ab6b8e9f6a1582d2e5ded5 removed NMActRequest from VPN connection because it's not necessary any more. This commit fixes the issue by passing specific object path explicitly.
-rw-r--r--src/nm-manager.c1
-rw-r--r--src/vpn-manager/nm-vpn-connection-base.c14
-rw-r--r--src/vpn-manager/nm-vpn-connection-base.h5
-rw-r--r--src/vpn-manager/nm-vpn-connection.c6
-rw-r--r--src/vpn-manager/nm-vpn-connection.h5
-rw-r--r--src/vpn-manager/nm-vpn-manager.c3
-rw-r--r--src/vpn-manager/nm-vpn-manager.h1
-rw-r--r--src/vpn-manager/nm-vpn-service.c5
-rw-r--r--src/vpn-manager/nm-vpn-service.h3
9 files changed, 33 insertions, 10 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 1afade19e1..1927e08e92 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -3042,6 +3042,7 @@ nm_manager_activate_connection (NMManager *manager,
vpn_connection = nm_vpn_manager_activate_connection (priv->vpn_manager,
connection,
device,
+ specific_object,
error);
if (vpn_connection) {
g_signal_connect (vpn_connection, "manager-get-secrets",
diff --git a/src/vpn-manager/nm-vpn-connection-base.c b/src/vpn-manager/nm-vpn-connection-base.c
index 0d976d6a71..4439fa5f5d 100644
--- a/src/vpn-manager/nm-vpn-connection-base.c
+++ b/src/vpn-manager/nm-vpn-connection-base.c
@@ -37,6 +37,7 @@ typedef struct {
NMConnection *connection;
char *ac_path;
+ char *specific_object;
gboolean is_default;
gboolean is_default6;
NMActiveConnectionState state;
@@ -93,9 +94,16 @@ nm_vpn_connection_base_get_ac_path (NMVpnConnectionBase *self)
return NM_VPN_CONNECTION_BASE_GET_PRIVATE (self)->ac_path;
}
+const char *
+nm_vpn_connection_base_get_specific_object (NMVpnConnectionBase *self)
+{
+ return NM_VPN_CONNECTION_BASE_GET_PRIVATE (self)->specific_object;
+}
+
void
nm_vpn_connection_base_export (NMVpnConnectionBase *self,
- NMConnection *connection)
+ NMConnection *connection,
+ const char *specific_object)
{
NMVpnConnectionBasePrivate *priv = NM_VPN_CONNECTION_BASE_GET_PRIVATE (self);
NMDBusManager *dbus_mgr;
@@ -103,6 +111,7 @@ nm_vpn_connection_base_export (NMVpnConnectionBase *self,
g_return_if_fail (priv->connection == NULL);
priv->connection = g_object_ref (connection);
+ priv->specific_object = g_strdup (specific_object);
dbus_mgr = nm_dbus_manager_get ();
dbus_g_connection_register_g_object (nm_dbus_manager_get_connection (dbus_mgr),
@@ -130,6 +139,7 @@ dispose (GObject *object)
priv->disposed = TRUE;
g_free (priv->ac_path);
+ g_free (priv->specific_object);
g_object_unref (priv->connection);
}
@@ -156,7 +166,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_string (value, nm_setting_connection_get_uuid (s_con));
break;
case PROP_SPECIFIC_OBJECT:
- g_value_set_boxed (value, priv->ac_path);
+ g_value_set_boxed (value, priv->specific_object);
break;
case PROP_DEVICES:
g_value_take_boxed (value, g_ptr_array_new ());
diff --git a/src/vpn-manager/nm-vpn-connection-base.h b/src/vpn-manager/nm-vpn-connection-base.h
index 0c17d9e851..6f19e7c53c 100644
--- a/src/vpn-manager/nm-vpn-connection-base.h
+++ b/src/vpn-manager/nm-vpn-connection-base.h
@@ -44,8 +44,11 @@ GType nm_vpn_connection_base_get_type (void);
const char *nm_vpn_connection_base_get_ac_path (NMVpnConnectionBase *self);
+const char *nm_vpn_connection_base_get_specific_object (NMVpnConnectionBase *self);
+
void nm_vpn_connection_base_export (NMVpnConnectionBase *self,
- NMConnection *connection);
+ NMConnection *connection,
+ const char *specific_object);
void nm_vpn_connection_base_set_state (NMVpnConnectionBase *self,
NMVPNConnectionState vpn_state);
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index 823b6149b3..5776416cd8 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -197,7 +197,9 @@ device_ip4_config_changed (NMDevice *device,
}
NMVPNConnection *
-nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device)
+nm_vpn_connection_new (NMConnection *connection,
+ NMDevice *parent_device,
+ const char *specific_object)
{
NMVPNConnection *self;
NMVPNConnectionPrivate *priv;
@@ -222,7 +224,7 @@ nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device)
G_CALLBACK (device_ip4_config_changed),
self);
- nm_vpn_connection_base_export (NM_VPN_CONNECTION_BASE (self), connection);
+ nm_vpn_connection_base_export (NM_VPN_CONNECTION_BASE (self), connection, specific_object);
return self;
}
diff --git a/src/vpn-manager/nm-vpn-connection.h b/src/vpn-manager/nm-vpn-connection.h
index 8da7d5125e..2af6d30c24 100644
--- a/src/vpn-manager/nm-vpn-connection.h
+++ b/src/vpn-manager/nm-vpn-connection.h
@@ -56,11 +56,14 @@ typedef struct {
GType nm_vpn_connection_get_type (void);
-NMVPNConnection * nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device);
+NMVPNConnection * nm_vpn_connection_new (NMConnection *connection,
+ NMDevice *parent_device,
+ const char *specific_object);
void nm_vpn_connection_activate (NMVPNConnection *connection);
NMConnection * nm_vpn_connection_get_connection (NMVPNConnection *connection);
const char * nm_vpn_connection_get_active_connection_path (NMVPNConnection *connection);
+const char * nm_vpn_connection_get_specific_object_path (NMVPNConnection *connection);
const char * nm_vpn_connection_get_name (NMVPNConnection *connection);
NMVPNConnectionState nm_vpn_connection_get_vpn_state (NMVPNConnection *connection);
const char * nm_vpn_connection_get_banner (NMVPNConnection *connection);
diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c
index 38b06b19c4..9f225de254 100644
--- a/src/vpn-manager/nm-vpn-manager.c
+++ b/src/vpn-manager/nm-vpn-manager.c
@@ -158,6 +158,7 @@ NMVPNConnection *
nm_vpn_manager_activate_connection (NMVPNManager *manager,
NMConnection *connection,
NMDevice *device,
+ const char *specific_object,
GError **error)
{
NMSettingVPN *vpn_setting;
@@ -203,7 +204,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
return NULL;
}
- vpn = nm_vpn_service_activate (service, connection, device, error);
+ vpn = nm_vpn_service_activate (service, connection, device, specific_object, error);
if (vpn) {
g_signal_connect (vpn, "vpn-state-changed",
G_CALLBACK (connection_vpn_state_changed),
diff --git a/src/vpn-manager/nm-vpn-manager.h b/src/vpn-manager/nm-vpn-manager.h
index b9cf7daf5c..dbda8a45ad 100644
--- a/src/vpn-manager/nm-vpn-manager.h
+++ b/src/vpn-manager/nm-vpn-manager.h
@@ -68,6 +68,7 @@ NMVPNManager *nm_vpn_manager_get (void);
NMVPNConnection *nm_vpn_manager_activate_connection (NMVPNManager *manager,
NMConnection *connection,
NMDevice *device,
+ const char *specific_object,
GError **error);
gboolean nm_vpn_manager_deactivate_connection (NMVPNManager *manager,
diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c
index 68cfadb726..fa89f16d5f 100644
--- a/src/vpn-manager/nm-vpn-service.c
+++ b/src/vpn-manager/nm-vpn-service.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2010 Red Hat, Inc.
+ * Copyright (C) 2005 - 2011 Red Hat, Inc.
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
@@ -324,6 +324,7 @@ NMVPNConnection *
nm_vpn_service_activate (NMVPNService *service,
NMConnection *connection,
NMDevice *device,
+ const char *specific_object,
GError **error)
{
NMVPNConnection *vpn;
@@ -339,7 +340,7 @@ nm_vpn_service_activate (NMVPNService *service,
clear_quit_timeout (service);
- vpn = nm_vpn_connection_new (connection, device);
+ vpn = nm_vpn_connection_new (connection, device, specific_object);
g_signal_connect (vpn, "vpn-state-changed",
G_CALLBACK (connection_vpn_state_changed),
service);
diff --git a/src/vpn-manager/nm-vpn-service.h b/src/vpn-manager/nm-vpn-service.h
index 0c7030e41c..9ed47f10a9 100644
--- a/src/vpn-manager/nm-vpn-service.h
+++ b/src/vpn-manager/nm-vpn-service.h
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2008 Red Hat, Inc.
+ * Copyright (C) 2005 - 2011 Red Hat, Inc.
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
@@ -57,6 +57,7 @@ const char *nm_vpn_service_get_name_file (NMVPNService *service);
NMVPNConnection * nm_vpn_service_activate (NMVPNService *service,
NMConnection *connection,
NMDevice *device,
+ const char *specific_object,
GError **error);
GSList * nm_vpn_service_get_active_connections (NMVPNService *service);