From a4305b3cbe1dccb492fe1de84c01833226eb9b18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Thu, 29 Sep 2011 16:09:17 +0200 Subject: [PATCH] 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. --- src/nm-manager.c | 1 + src/vpn-manager/nm-vpn-connection-base.c | 14 ++++++++++++-- src/vpn-manager/nm-vpn-connection-base.h | 5 ++++- src/vpn-manager/nm-vpn-connection.c | 3 ++- src/vpn-manager/nm-vpn-connection.h | 2 ++ src/vpn-manager/nm-vpn-manager.c | 3 ++- src/vpn-manager/nm-vpn-manager.h | 1 + src/vpn-manager/nm-vpn-service.c | 5 +++-- src/vpn-manager/nm-vpn-service.h | 3 ++- 9 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/nm-manager.c b/src/nm-manager.c index d347dd02d2..b09ccebb6f 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1992,6 +1992,7 @@ nm_manager_activate_connection (NMManager *manager, vpn_connection = nm_vpn_manager_activate_connection (priv->vpn_manager, connection, device, + specific_object, TRUE, sender_uid, error); diff --git a/src/vpn-manager/nm-vpn-connection-base.c b/src/vpn-manager/nm-vpn-connection-base.c index c73736277a..75361bf27d 100644 --- a/src/vpn-manager/nm-vpn-connection-base.c +++ b/src/vpn-manager/nm-vpn-connection-base.c @@ -36,6 +36,7 @@ typedef struct { NMConnection *connection; char *ac_path; + char *specific_object; gboolean is_default; gboolean is_default6; NMActiveConnectionState state; @@ -91,9 +92,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; @@ -101,6 +109,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), @@ -128,6 +137,7 @@ dispose (GObject *object) priv->disposed = TRUE; g_free (priv->ac_path); + g_free (priv->specific_object); g_object_unref (priv->connection); } @@ -148,7 +158,7 @@ get_property (GObject *object, guint prop_id, g_value_set_boxed (value, nm_connection_get_uuid (priv->connection)); 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 75ba645128..4f1e0ab4bf 100644 --- a/src/vpn-manager/nm-vpn-connection.c +++ b/src/vpn-manager/nm-vpn-connection.c @@ -221,6 +221,7 @@ device_ip4_config_changed (NMDevice *device, NMVPNConnection * nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device, + const char *specific_object, gboolean user_requested, gulong user_uid) { @@ -249,7 +250,7 @@ nm_vpn_connection_new (NMConnection *connection, 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 daf9483c6b..c0d15f8af9 100644 --- a/src/vpn-manager/nm-vpn-connection.h +++ b/src/vpn-manager/nm-vpn-connection.h @@ -57,12 +57,14 @@ GType nm_vpn_connection_get_type (void); NMVPNConnection * nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device, + const char *specific_object, gboolean user_requested, gulong user_uid); 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 da2cf25fcf..41e96c0bef 100644 --- a/src/vpn-manager/nm-vpn-manager.c +++ b/src/vpn-manager/nm-vpn-manager.c @@ -162,6 +162,7 @@ NMVPNConnection * nm_vpn_manager_activate_connection (NMVPNManager *manager, NMConnection *connection, NMDevice *device, + const char *specific_object, gboolean user_requested, gulong user_uid, GError **error) @@ -209,7 +210,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager, return NULL; } - vpn = nm_vpn_service_activate (service, connection, device, user_requested, user_uid, error); + vpn = nm_vpn_service_activate (service, connection, device, specific_object, user_requested, user_uid, 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 4101032383..78a5220b9d 100644 --- a/src/vpn-manager/nm-vpn-manager.h +++ b/src/vpn-manager/nm-vpn-manager.h @@ -69,6 +69,7 @@ NMVPNManager *nm_vpn_manager_get (void); NMVPNConnection *nm_vpn_manager_activate_connection (NMVPNManager *manager, NMConnection *connection, NMDevice *device, + const char *specific_object, gboolean user_requested, gulong user_uid, GError **error); diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c index ed08a40a43..95e4f2b178 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, gboolean user_requested, gulong user_uid, GError **error) @@ -341,7 +342,7 @@ nm_vpn_service_activate (NMVPNService *service, clear_quit_timeout (service); - vpn = nm_vpn_connection_new (connection, device, user_requested, user_uid); + vpn = nm_vpn_connection_new (connection, device, specific_object, user_requested, user_uid); 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 cbe394ca13..e8b1cfc492 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, gboolean user_requested, gulong user_uid, GError **error);