Hello community,
here is the log from the commit of package NetworkManager-pptp
checked in at Fri Nov 7 16:08:54 CET 2008.
--------
--- NetworkManager-pptp/NetworkManager-pptp.changes 2008-10-25 01:47:03.000000000 +0200
+++ /mounts/work_src_done/STABLE/NetworkManager-pptp/NetworkManager-pptp.changes 2008-11-07 15:59:27.722617000 +0100
@@ -1,0 +2,5 @@
+Fri Nov 7 16:00:13 CET 2008 - bili@suse.de
+
+- Update to r4274 from SVN.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
NetworkManager-pptp-0.7.0.r4211.tar.bz2
New:
----
NetworkManager-pptp-0.7.0.r4274.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ NetworkManager-pptp.spec ++++++
--- /var/tmp/diff_new_pack.T19578/_old 2008-11-07 16:08:44.000000000 +0100
+++ /var/tmp/diff_new_pack.T19578/_new 2008-11-07 16:08:44.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package NetworkManager-pptp (Version 0.7.0.r4211)
+# spec file for package NetworkManager-pptp (Version 0.7.0.r4274)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -23,7 +23,7 @@
ExcludeArch: s390 s390x
%define pppd_plugin_dir %(rpm -ql ppp | grep -m1 pppd/[0-9]*)
Summary: NetworkManager VPN support for PPTP
-Version: 0.7.0.r4211
+Version: 0.7.0.r4274
Release: 1
License: GPL v2 or later
Group: Productivity/Networking/System
@@ -33,7 +33,8 @@
Patch0: nm-pptp-desktop.patch
#Patch1: nm-pptp-properties.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-Requires: pptp NetworkManager %{name}-frontend = %{version}
+Requires: pptp %{name}-frontend = %{version}
+Requires: NetworkManager >= 0.7.0.r4274
%description
NetworkManager-pptp provides VPN support to NetworkManager for PPTP.
@@ -115,6 +116,8 @@
%{_libdir}/NetworkManager/libnm-pptp-properties.so*
%changelog
+* Fri Nov 07 2008 bili@suse.de
+- Update to r4274 from SVN.
* Sat Oct 25 2008 bili@suse.de
- Update to r4211 from SVN.
* Fri Sep 26 2008 ro@suse.de
++++++ NetworkManager-pptp-0.7.0.r4211.tar.bz2 -> NetworkManager-pptp-0.7.0.r4274.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/NetworkManager-pptp-0.7.0/auth-dialog/main.c new/NetworkManager-pptp-0.7.0/auth-dialog/main.c
--- old/NetworkManager-pptp-0.7.0/auth-dialog/main.c 2008-10-23 12:21:58.000000000 +0200
+++ new/NetworkManager-pptp-0.7.0/auth-dialog/main.c 2008-10-30 08:50:47.000000000 +0100
@@ -171,7 +171,7 @@
if (password) {
memset (password, 0, strlen (password));
- g_free (password);
+ gnome_keyring_memory_free (password);
}
exit_status = 0;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/NetworkManager-pptp-0.7.0/ChangeLog new/NetworkManager-pptp-0.7.0/ChangeLog
--- old/NetworkManager-pptp-0.7.0/ChangeLog 2008-10-24 17:43:01.000000000 +0200
+++ new/NetworkManager-pptp-0.7.0/ChangeLog 2008-11-07 10:20:35.000000000 +0100
@@ -1,3 +1,24 @@
+2008-11-04 Dan Williams
+
+ Fix bgo #559152
+
+ * src/nm-pptp-pppd-plugin.c
+ - (nm_ip_up): remote peer's address is the PTP address, not the external
+ gateway address
+
+ * src/nm-pptp-service.c
+ - (construct_pppd_args): allow easier PPP debugging
+ - (service_ip4_config_cb): insert the VPN gateway's public IP address
+ into the IP4 config
+ - (real_connect, real_disconnect, state_changed_cb, dispose): cache
+ the connection so that the VPN gateway's public IP address can be
+ retrieved from it when the IP4 config comes back from pppd
+
+2008-10-26 Dan Williams
+
+ * properties/nm-pptp.c
+ - Update for setting accessor changes
+
2008-10-24 Dan Williams
* src/nm-pptp-service.c
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/NetworkManager-pptp-0.7.0/properties/advanced-dialog.c new/NetworkManager-pptp-0.7.0/properties/advanced-dialog.c
--- old/NetworkManager-pptp-0.7.0/properties/advanced-dialog.c 2008-10-10 14:21:25.000000000 +0200
+++ new/NetworkManager-pptp-0.7.0/properties/advanced-dialog.c 2008-11-07 10:20:35.000000000 +0100
@@ -70,16 +70,15 @@
};
static void
-copy_values (gpointer key, gpointer data, gpointer user_data)
+copy_values (const char *key, const char *value, gpointer user_data)
{
GHashTable *hash = (GHashTable *) user_data;
const char **i;
for (i = &advanced_keys[0]; *i; i++) {
- if (strcmp ((const char *) key, *i))
+ if (strcmp (key, *i))
continue;
-
- g_hash_table_insert (hash, g_strdup ((const char *) key), g_strdup ((const char *) data));
+ g_hash_table_insert (hash, g_strdup (key), g_strdup (value));
}
}
@@ -93,9 +92,7 @@
hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
- if (s_vpn && s_vpn->data)
- g_hash_table_foreach (s_vpn->data, copy_values, hash);
-
+ nm_setting_vpn_foreach_data_item (s_vpn, copy_values, hash);
return hash;
}
@@ -142,7 +139,7 @@
store = gtk_list_store_new (1, G_TYPE_STRING);
- /* Default */
+ /* Default (allow use of all encryption types that both server and client support) */
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, _("All Available (Default)"), -1);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/NetworkManager-pptp-0.7.0/properties/nm-pptp.c new/NetworkManager-pptp-0.7.0/properties/nm-pptp.c
--- old/NetworkManager-pptp-0.7.0/properties/nm-pptp.c 2008-10-23 12:21:58.000000000 +0200
+++ new/NetworkManager-pptp-0.7.0/properties/nm-pptp.c 2008-10-30 08:50:47.000000000 +0100
@@ -128,8 +128,6 @@
PptpPluginUiWidgetPrivate *priv = PPTP_PLUGIN_UI_WIDGET_GET_PRIVATE (self);
GtkWidget *widget;
const char *str;
- GtkTreeModel *model;
- GtkTreeIter iter;
widget = glade_xml_get_widget (priv->xml, "gateway_entry");
str = gtk_entry_get_text (GTK_ENTRY (widget));
@@ -153,8 +151,6 @@
static void
advanced_dialog_close_cb (GtkWidget *dialog, gpointer user_data)
{
- PptpPluginUiWidget *self = PPTP_PLUGIN_UI_WIDGET (user_data);
-
gtk_widget_hide (dialog);
/* gtk_widget_destroy() will remove the window from the window group */
gtk_widget_destroy (dialog);
@@ -189,7 +185,7 @@
{
PptpPluginUiWidget *self = PPTP_PLUGIN_UI_WIDGET (user_data);
PptpPluginUiWidgetPrivate *priv = PPTP_PLUGIN_UI_WIDGET_GET_PRIVATE (self);
- GtkWidget *dialog, *toplevel, *widget;
+ GtkWidget *dialog, *toplevel;
toplevel = gtk_widget_get_toplevel (priv->widget);
g_return_if_fail (GTK_WIDGET_TOPLEVEL (toplevel));
@@ -251,17 +247,18 @@
if (s_vpn) {
const gchar *tmp = NULL;
- tmp = g_hash_table_lookup (s_vpn->secrets, password_type);
+ tmp = nm_setting_vpn_get_secret (s_vpn, password_type);
if (tmp)
password = gnome_keyring_memory_strdup (tmp);
}
} else {
NMSettingConnection *s_con = NULL;
gboolean unused;
+ const char *uuid;
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
-
- password = keyring_helpers_lookup_secret (s_con->uuid,
+ uuid = nm_setting_connection_get_uuid (s_con);
+ password = keyring_helpers_lookup_secret (uuid,
password_type,
&unused);
}
@@ -298,9 +295,6 @@
PptpPluginUiWidgetPrivate *priv = PPTP_PLUGIN_UI_WIDGET_GET_PRIVATE (self);
NMSettingVPN *s_vpn;
GtkWidget *widget;
- GtkListStore *store;
- GtkTreeIter iter;
- int active = -1;
const char *value;
s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
@@ -312,7 +306,7 @@
return FALSE;
gtk_size_group_add_widget (priv->group, widget);
if (s_vpn) {
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_GATEWAY);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_GATEWAY);
if (value && strlen (value))
gtk_entry_set_text (GTK_ENTRY (widget), value);
}
@@ -323,7 +317,7 @@
return FALSE;
gtk_size_group_add_widget (priv->group, widget);
if (s_vpn) {
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_USER);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_USER);
if (value && strlen (value))
gtk_entry_set_text (GTK_ENTRY (widget), value);
}
@@ -334,7 +328,7 @@
return FALSE;
gtk_size_group_add_widget (priv->group, widget);
if (s_vpn) {
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_DOMAIN);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_DOMAIN);
if (value && strlen (value))
gtk_entry_set_text (GTK_ENTRY (widget), value);
}
@@ -366,9 +360,9 @@
static void
hash_copy_advanced (gpointer key, gpointer data, gpointer user_data)
{
- GHashTable *hash = (GHashTable *) user_data;
+ NMSettingVPN *s_vpn = NM_SETTING_VPN (user_data);
- g_hash_table_insert (hash, g_strdup ((const char *) key), g_strdup ((const char *) data));
+ nm_setting_vpn_add_data_item (s_vpn, (const char *) key, (const char *) data);
}
static gboolean
@@ -381,41 +375,38 @@
NMSettingVPN *s_vpn;
GtkWidget *widget;
const char *str;
- GtkTreeModel *model;
- GtkTreeIter iter;
gboolean valid = FALSE;
if (!check_validity (self, error))
return FALSE;
s_vpn = NM_SETTING_VPN (nm_setting_vpn_new ());
- s_vpn->service_type = g_strdup (NM_DBUS_SERVICE_PPTP);
+ g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, NM_DBUS_SERVICE_PPTP, NULL);
/* Gateway */
widget = glade_xml_get_widget (priv->xml, "gateway_entry");
str = gtk_entry_get_text (GTK_ENTRY (widget));
if (str && strlen (str))
- g_hash_table_insert (s_vpn->data, g_strdup (NM_PPTP_KEY_GATEWAY), g_strdup (str));
+ nm_setting_vpn_add_data_item (s_vpn, NM_PPTP_KEY_GATEWAY, str);
/* Username */
widget = glade_xml_get_widget (priv->xml, "user_entry");
str = gtk_entry_get_text (GTK_ENTRY (widget));
if (str && strlen (str))
- g_hash_table_insert (s_vpn->data, g_strdup (NM_PPTP_KEY_USER), g_strdup (str));
+ nm_setting_vpn_add_data_item (s_vpn, NM_PPTP_KEY_USER, str);
/* Domain */
widget = glade_xml_get_widget (priv->xml, "domain_entry");
str = gtk_entry_get_text (GTK_ENTRY (widget));
if (str && strlen (str))
- g_hash_table_insert (s_vpn->data, g_strdup (NM_PPTP_KEY_DOMAIN), g_strdup (str));
+ nm_setting_vpn_add_data_item (s_vpn, NM_PPTP_KEY_DOMAIN, str);
if (priv->advanced)
- g_hash_table_foreach (priv->advanced, hash_copy_advanced, s_vpn->data);
+ g_hash_table_foreach (priv->advanced, hash_copy_advanced, s_vpn);
nm_connection_add_setting (connection, NM_SETTING (s_vpn));
valid = TRUE;
-done:
return valid;
}
@@ -429,7 +420,7 @@
GnomeKeyringResult ret;
NMSettingConnection *s_con;
GtkWidget *widget;
- const char *str;
+ const char *str, *uuid, *id;
s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
if (!s_con) {
@@ -440,15 +431,18 @@
return FALSE;
}
+ id = nm_setting_connection_get_id (s_con);
+ uuid = nm_setting_connection_get_uuid (s_con);
+
widget = glade_xml_get_widget (priv->xml, "user_password_entry");
g_assert (widget);
str = gtk_entry_get_text (GTK_ENTRY (widget));
if (str && strlen (str)) {
- ret = keyring_helpers_save_secret (s_con->uuid, s_con->id, NULL, NM_PPTP_KEY_PASSWORD, str);
+ ret = keyring_helpers_save_secret (uuid, id, NULL, NM_PPTP_KEY_PASSWORD, str);
if (ret != GNOME_KEYRING_RESULT_OK)
g_warning ("%s: failed to save user password to keyring.", __func__);
} else
- keyring_helpers_delete_secret (s_con->uuid, NM_PPTP_KEY_PASSWORD);
+ keyring_helpers_delete_secret (uuid, NM_PPTP_KEY_PASSWORD);
return TRUE;
}
@@ -560,6 +554,7 @@
GError **error)
{
NMSettingConnection *s_con = NULL;
+ const char *uuid;
/* Remove any secrets in the keyring associated with this connection's UUID */
s_con = (NMSettingConnection *) nm_connection_get_setting (connection,
@@ -572,7 +567,8 @@
return FALSE;
}
- keyring_helpers_delete_secret (s_con->uuid, NM_PPTP_KEY_PASSWORD);
+ uuid = nm_setting_connection_get_uuid (s_con);
+ keyring_helpers_delete_secret (uuid, NM_PPTP_KEY_PASSWORD);
return TRUE;
}
@@ -636,14 +632,17 @@
get_suggested_name (NMVpnPluginUiInterface *iface, NMConnection *connection)
{
NMSettingConnection *s_con;
+ const char *id;
g_return_val_if_fail (connection != NULL, NULL);
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
g_return_val_if_fail (s_con != NULL, NULL);
- g_return_val_if_fail (s_con->id != NULL, NULL);
- return g_strdup_printf ("%s (pptp).conf", s_con->id);
+ id = nm_setting_connection_get_id (s_con);
+ g_return_val_if_fail (id != NULL, NULL);
+
+ return g_strdup_printf ("%s (pptp).conf", id);
}
static guint32
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/NetworkManager-pptp-0.7.0/src/nm-pptp-pppd-plugin.c new/NetworkManager-pptp-0.7.0/src/nm-pptp-pppd-plugin.c
--- old/NetworkManager-pptp-0.7.0/src/nm-pptp-pppd-plugin.c 2008-10-23 12:21:01.000000000 +0200
+++ new/NetworkManager-pptp-0.7.0/src/nm-pptp-pppd-plugin.c 2008-11-07 10:20:35.000000000 +0100
@@ -179,14 +179,14 @@
* and if that's not right, use the made-up address as a last resort.
*/
if (peer_opts.hisaddr && (peer_opts.hisaddr != pppd_made_up_address)) {
- g_hash_table_insert (hash, NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY,
+ g_hash_table_insert (hash, NM_VPN_PLUGIN_IP4_CONFIG_PTP,
uint_to_gvalue (peer_opts.hisaddr));
} else if (opts.hisaddr) {
- g_hash_table_insert (hash, NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY,
+ g_hash_table_insert (hash, NM_VPN_PLUGIN_IP4_CONFIG_PTP,
uint_to_gvalue (opts.hisaddr));
} else if (peer_opts.hisaddr == pppd_made_up_address) {
/* As a last resort, use the made-up address */
- g_hash_table_insert (hash, NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY,
+ g_hash_table_insert (hash, NM_VPN_PLUGIN_IP4_CONFIG_PTP,
uint_to_gvalue (peer_opts.hisaddr));
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/NetworkManager-pptp-0.7.0/src/nm-pptp-service.c new/NetworkManager-pptp-0.7.0/src/nm-pptp-service.c
--- old/NetworkManager-pptp-0.7.0/src/nm-pptp-service.c 2008-10-24 17:43:01.000000000 +0200
+++ new/NetworkManager-pptp-0.7.0/src/nm-pptp-service.c 2008-11-07 10:20:35.000000000 +0100
@@ -35,6 +35,7 @@
#include
#include
#include
+#include
#include
#include
@@ -239,7 +240,7 @@
memset (priv->password, 0, sizeof (priv->password));
s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
- if (!s_vpn || !s_vpn->secrets || !s_vpn->data) {
+ if (!s_vpn) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
@@ -249,8 +250,9 @@
}
/* Username; try PPTP specific username first, then generic username */
- username = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_USER);
+ username = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_USER);
if (username && strlen (username)) {
+ /* FIXME: This check makes about 0 sense. */
if (!username || !strlen (username)) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
@@ -260,7 +262,7 @@
return FALSE;
}
} else {
- username = s_vpn->user_name;
+ username = nm_setting_vpn_get_user_name (s_vpn);
if (!username || !strlen (username)) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
@@ -271,7 +273,7 @@
}
}
- password = g_hash_table_lookup (s_vpn->secrets, NM_PPTP_KEY_PASSWORD);
+ password = nm_setting_vpn_get_secret (s_vpn, NM_PPTP_KEY_PASSWORD);
if (!password || !strlen (password)) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
@@ -281,7 +283,7 @@
return FALSE;
}
- domain = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_DOMAIN);
+ domain = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_DOMAIN);
if (domain && strlen (domain))
memcpy (priv->domain, domain, strlen (domain));
@@ -356,6 +358,7 @@
GPid pid;
guint32 ppp_timeout_handler;
NMPptpPppService *service;
+ NMConnection *connection;
} NMPptpPluginPrivate;
#define NM_PPTP_PLUGIN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_PPTP_PLUGIN, NMPptpPluginPrivate))
@@ -373,7 +376,6 @@
static ValidProperty valid_properties[] = {
{ NM_PPTP_KEY_GATEWAY, G_TYPE_STRING, TRUE },
{ NM_PPTP_KEY_USER, G_TYPE_STRING, FALSE },
- { NM_PPTP_KEY_PASSWORD, G_TYPE_STRING, FALSE },
{ NM_PPTP_KEY_DOMAIN, G_TYPE_STRING, FALSE },
{ NM_PPTP_KEY_REFUSE_EAP, G_TYPE_BOOLEAN, FALSE },
{ NM_PPTP_KEY_REFUSE_PAP, G_TYPE_BOOLEAN, FALSE },
@@ -392,6 +394,11 @@
{ NULL, G_TYPE_NONE, FALSE }
};
+static ValidProperty valid_secrets[] = {
+ { NM_PPTP_KEY_PASSWORD, G_TYPE_STRING, FALSE },
+ { NULL, G_TYPE_NONE, FALSE }
+};
+
static gboolean
validate_gateway (const char *gateway)
{
@@ -410,88 +417,97 @@
return TRUE;
}
+typedef struct ValidateInfo {
+ ValidProperty *table;
+ GError **error;
+ gboolean have_items;
+} ValidateInfo;
+
static void
-validate_one_property (gpointer key, gpointer value, gpointer user_data)
+validate_one_property (const char *key, const char *value, gpointer user_data)
{
- GError **error = (GError **) user_data;
+ ValidateInfo *info = (ValidateInfo *) user_data;
int i;
- if (*error)
+ if (*(info->error))
return;
+ info->have_items = TRUE;
+
/* 'name' is the setting name; always allowed but unused */
- if (!strcmp ((char *) key, NM_SETTING_NAME))
+ if (!strcmp (key, NM_SETTING_NAME))
return;
- for (i = 0; valid_properties[i].name; i++) {
- ValidProperty prop = valid_properties[i];
+ for (i = 0; info->table[i].name; i++) {
+ ValidProperty prop = info->table[i];
long int tmp;
- if (strcmp (prop.name, (char *) key))
+ if (strcmp (prop.name, key))
continue;
switch (prop.type) {
case G_TYPE_STRING:
if ( !strcmp (prop.name, NM_PPTP_KEY_GATEWAY)
&& !validate_gateway (value)) {
- g_set_error (error,
+ g_set_error (info->error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
"invalid gateway '%s'",
- (const char *) key);
+ key);
return;
}
return; /* valid */
case G_TYPE_UINT:
errno = 0;
- tmp = strtol ((char *) value, NULL, 10);
+ tmp = strtol (value, NULL, 10);
if (errno == 0)
return; /* valid */
- g_set_error (error,
+ g_set_error (info->error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
"invalid integer property '%s'",
- (const char *) key);
+ key);
break;
case G_TYPE_BOOLEAN:
- if (!strcmp ((char *) value, "yes") || !strcmp ((char *) value, "no"))
+ if (!strcmp (value, "yes") || !strcmp (value, "no"))
return; /* valid */
- g_set_error (error,
+ g_set_error (info->error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
"invalid boolean property '%s' (not yes or no)",
- (const char *) key);
+ key);
break;
default:
- g_set_error (error,
+ g_set_error (info->error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
"unhandled property '%s' type %s",
- (const char *) key, g_type_name (prop.type));
+ key, g_type_name (prop.type));
break;
}
}
/* Did not find the property from valid_properties or the type did not match */
- if (!valid_properties[i].name) {
- g_set_error (error,
+ if (!info->table[i].name) {
+ g_set_error (info->error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
"property '%s' invalid or not supported",
- (const char *) key);
+ key);
}
}
static gboolean
-nm_pptp_properties_validate (GHashTable *properties,
- gboolean check_required,
+nm_pptp_properties_validate (NMSettingVPN *s_vpn,
GError **error)
{
+ ValidateInfo info = { &valid_properties[0], error, FALSE };
int i;
- if (g_hash_table_size (properties) < 1) {
+ nm_setting_vpn_foreach_data_item (s_vpn, validate_one_property, &info);
+ if (!info.have_items) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
@@ -500,34 +516,49 @@
return FALSE;
}
- g_hash_table_foreach (properties, validate_one_property, error);
if (*error)
return FALSE;
- if (check_required) {
- /* Ensure required properties exist */
- for (i = 0; valid_properties[i].name; i++) {
- ValidProperty prop = valid_properties[i];
- const char *value;
-
- if (!prop.required)
- continue;
-
- value = g_hash_table_lookup (properties, prop.name);
- if (!value || !strlen (value)) {
- g_set_error (error,
- NM_VPN_PLUGIN_ERROR,
- NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
- "Missing required option '%s'.",
- prop.name);
- return FALSE;
- }
+ /* Ensure required properties exist */
+ for (i = 0; valid_properties[i].name; i++) {
+ ValidProperty prop = valid_properties[i];
+ const char *value;
+
+ if (!prop.required)
+ continue;
+
+ value = nm_setting_vpn_get_data_item (s_vpn, prop.name);
+ if (!value || !strlen (value)) {
+ g_set_error (error,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ "Missing required option '%s'.",
+ prop.name);
+ return FALSE;
}
}
return TRUE;
}
+static gboolean
+nm_pptp_secrets_validate (NMSettingVPN *s_vpn, GError **error)
+{
+ ValidateInfo info = { &valid_secrets[0], error, FALSE };
+
+ nm_setting_vpn_foreach_secret (s_vpn, validate_one_property, &info);
+ if (!info.have_items) {
+ g_set_error (error,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ "%s",
+ "No VPN secrets!");
+ return FALSE;
+ }
+
+ return *error ? FALSE : TRUE;
+}
+
static void
pppd_watch_cb (GPid pid, gint status, gpointer user_data)
{
@@ -650,7 +681,6 @@
GPtrArray *args = NULL;
const char *value, *pptp_binary;
char *ipparam, *tmp;
- gboolean set = FALSE;
pptp_binary = nm_find_pptp ();
if (!pptp_binary) {
@@ -666,7 +696,7 @@
g_ptr_array_add (args, (gpointer) g_strdup (pppd));
/* PPTP options */
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_GATEWAY);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_GATEWAY);
if (!value || !strlen (value)) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
@@ -682,6 +712,9 @@
tmp = g_strdup_printf ("%s %s --nolaunchpppd --logstring %s", pptp_binary, value, ipparam);
g_ptr_array_add (args, (gpointer) tmp);
+ if (getenv ("NM_PPP_DEBUG"))
+ g_ptr_array_add (args, (gpointer) g_strdup ("debug"));
+
/* PPP options */
g_ptr_array_add (args, (gpointer) g_strdup ("ipparam"));
g_ptr_array_add (args, (gpointer) ipparam);
@@ -692,55 +725,55 @@
g_ptr_array_add (args, (gpointer) g_strdup ("noipdefault"));
g_ptr_array_add (args, (gpointer) g_strdup ("nodefaultroute"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_REFUSE_EAP);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_REFUSE_EAP);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("refuse-eap"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_REFUSE_PAP);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_REFUSE_PAP);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("refuse-pap"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_REFUSE_CHAP);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_REFUSE_CHAP);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("refuse-chap"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_REFUSE_MSCHAP);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_REFUSE_MSCHAP);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("refuse-mschap"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_REFUSE_MSCHAPV2);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_REFUSE_MSCHAPV2);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("refuse-mschap-v2"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_REQUIRE_MPPE);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_REQUIRE_MPPE);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("require-mppe"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_REQUIRE_MPPE_40);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_REQUIRE_MPPE_40);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("require-mppe-40"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_REQUIRE_MPPE_128);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_REQUIRE_MPPE_128);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("require-mppe-128"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_MPPE_STATEFUL);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_MPPE_STATEFUL);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("mppe-stateful"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_NOBSDCOMP);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_NOBSDCOMP);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("nobsdcomp"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_NODEFLATE);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_NODEFLATE);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("nodeflate"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_NO_VJ_COMP);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_NO_VJ_COMP);
if (value && !strcmp (value, "yes"))
g_ptr_array_add (args, (gpointer) g_strdup ("novj"));
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_LCP_ECHO_FAILURE);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_LCP_ECHO_FAILURE);
if (value && strlen (value)) {
long int tmp_int;
@@ -760,7 +793,7 @@
g_ptr_array_add (args, (gpointer) g_strdup ("0"));
}
- value = g_hash_table_lookup (s_vpn->data, NM_PPTP_KEY_LCP_ECHO_INTERVAL);
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_LCP_ECHO_INTERVAL);
if (value && strlen (value)) {
long int tmp_int;
@@ -872,11 +905,85 @@
}
static void
+nm_gvalue_destroy (gpointer data)
+{
+ g_value_unset ((GValue *) data);
+ g_slice_free (GValue, data);
+}
+
+static GValue *
+nm_gvalue_dup (const GValue *value)
+{
+ GValue *dup;
+
+ dup = g_slice_new0 (GValue);
+ g_value_init (dup, G_VALUE_TYPE (value));
+ g_value_copy (value, dup);
+
+ return dup;
+}
+
+static void
+copy_hash (gpointer key, gpointer value, gpointer user_data)
+{
+ g_hash_table_insert ((GHashTable *) user_data, g_strdup (key), nm_gvalue_dup ((GValue *) value));
+}
+
+static GValue *
+get_pptp_gw_address_as_gvalue (NMConnection *connection)
+{
+ NMSettingVPN *s_vpn;
+ const char *tmp;
+ GValue *value;
+ struct in_addr addr;
+
+ s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
+ if (!s_vpn) {
+ nm_warning ("couldn't get VPN setting");
+ return NULL;
+ }
+
+ tmp = nm_setting_vpn_get_data_item (s_vpn, NM_PPTP_KEY_GATEWAY);
+ if (!tmp || !strlen (tmp)) {
+ nm_warning ("couldn't get PPTP VPN gateway IP address");
+ return NULL;
+ }
+
+ errno = 0;
+ if (inet_pton (AF_INET, tmp, &addr) <= 0) {
+ nm_warning ("couldn't convert PPTP VPN gateway IP address '%s' (%d)", tmp, errno);
+ return NULL;
+ }
+
+ value = g_slice_new0 (GValue);
+ g_value_init (value, G_TYPE_UINT);
+ g_value_set_uint (value, (guint32) addr.s_addr);
+
+ return value;
+}
+
+static void
service_ip4_config_cb (NMPptpPppService *service,
GHashTable *config_hash,
NMPptpPlugin *plugin)
{
- nm_vpn_plugin_set_ip4_config (NM_VPN_PLUGIN (plugin), config_hash);
+ NMPptpPluginPrivate *priv = NM_PPTP_PLUGIN_GET_PRIVATE (plugin);
+ GHashTable *hash;
+ GValue *value;
+
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, nm_gvalue_destroy);
+ g_hash_table_foreach (config_hash, copy_hash, hash);
+
+ /* Insert the external VPN gateway into the table, which the pppd plugin
+ * simply doesn't know about.
+ */
+ value = get_pptp_gw_address_as_gvalue (priv->connection);
+ if (value)
+ g_hash_table_insert (hash, g_strdup (NM_PPTP_KEY_GATEWAY), value);
+
+ nm_vpn_plugin_set_ip4_config (NM_VPN_PLUGIN (plugin), hash);
+
+ g_hash_table_destroy (hash);
}
static gboolean
@@ -890,15 +997,19 @@
s_vpn = NM_SETTING_VPN (nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN));
g_assert (s_vpn);
- if (!nm_pptp_properties_validate (s_vpn->data, TRUE, error))
+ if (!nm_pptp_properties_validate (s_vpn, error))
return FALSE;
- if (!nm_pptp_properties_validate (s_vpn->secrets, FALSE, error))
+ if (!nm_pptp_secrets_validate (s_vpn, error))
return FALSE;
/* Start our pppd plugin helper service */
if (priv->service)
g_object_unref (priv->service);
+ if (priv->connection) {
+ g_object_unref (priv->connection);
+ priv->connection = NULL;
+ }
priv->service = nm_pptp_ppp_service_new ();
if (!priv->service) {
@@ -909,6 +1020,9 @@
"Could not start pppd plugin helper service.");
return FALSE;
}
+
+ priv->connection = g_object_ref (connection);
+
g_signal_connect (G_OBJECT (priv->service), "plugin-alive", G_CALLBACK (service_plugin_alive_cb), plugin);
g_signal_connect (G_OBJECT (priv->service), "ppp-state", G_CALLBACK (service_ppp_state_cb), plugin);
g_signal_connect (G_OBJECT (priv->service), "ip4-config", G_CALLBACK (service_ip4_config_cb), plugin);
@@ -937,16 +1051,8 @@
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
s_vpn = NM_SETTING_VPN (nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN));
- if (!s_vpn || !s_vpn->secrets) {
- g_set_error (error,
- NM_VPN_PLUGIN_ERROR,
- NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
- "%s",
- "Could not process the request because the VPN connection settings were invalid.");
- return FALSE;
- }
- if (!g_hash_table_lookup (s_vpn->secrets, NM_PPTP_KEY_PASSWORD)) {
+ if (!nm_setting_vpn_get_secret (s_vpn, NM_PPTP_KEY_PASSWORD)) {
*setting_name = NM_SETTING_VPN_SETTING_NAME;
return TRUE;
}
@@ -981,6 +1087,11 @@
priv->pid = 0;
}
+ if (priv->connection) {
+ g_object_unref (priv->connection);
+ priv->connection = NULL;
+ }
+
if (priv->service) {
g_object_unref (priv->service);
priv->service = NULL;
@@ -995,13 +1106,19 @@
NMPptpPluginPrivate *priv = NM_PPTP_PLUGIN_GET_PRIVATE (object);
switch (state) {
+ case NM_VPN_SERVICE_STATE_STARTED:
+ remove_timeout_handler (NM_PPTP_PLUGIN (object));
+ break;
case NM_VPN_SERVICE_STATE_UNKNOWN:
case NM_VPN_SERVICE_STATE_INIT:
case NM_VPN_SERVICE_STATE_SHUTDOWN:
- case NM_VPN_SERVICE_STATE_STARTED:
case NM_VPN_SERVICE_STATE_STOPPING:
case NM_VPN_SERVICE_STATE_STOPPED:
remove_timeout_handler (NM_PPTP_PLUGIN (object));
+ if (priv->connection) {
+ g_object_unref (priv->connection);
+ priv->connection = NULL;
+ }
if (priv->service) {
g_object_unref (priv->service);
priv->service = NULL;
@@ -1017,6 +1134,9 @@
{
NMPptpPluginPrivate *priv = NM_PPTP_PLUGIN_GET_PRIVATE (object);
+ if (priv->connection)
+ g_object_unref (priv->connection);
+
if (priv->service)
g_object_unref (priv->service);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org