Synchronize codebase with pptp v0.9.4 plugin + fix warnings

parent 1b16c522
...@@ -9,7 +9,7 @@ Build ...@@ -9,7 +9,7 @@ Build
===== =====
./autogen.sh ./autogen.sh
./configure ./configure # (optional)
make make
sudo make install sudo make install
......
...@@ -153,7 +153,7 @@ get_secrets (const char *vpn_uuid, ...@@ -153,7 +153,7 @@ get_secrets (const char *vpn_uuid,
g_key_file_set_string (keyfile, UI_KEYFILE_GROUP, "Description", prompt); g_key_file_set_string (keyfile, UI_KEYFILE_GROUP, "Description", prompt);
g_key_file_set_string (keyfile, UI_KEYFILE_GROUP, "Title", _("Authenticate VPN")); g_key_file_set_string (keyfile, UI_KEYFILE_GROUP, "Title", _("Authenticate VPN"));
keyfile_add_entry_info (keyfile, NM_PPTP_KEY_PASSWORD, pw ? pw : "", _("Password:"), TRUE, allow_interaction); keyfile_add_entry_info (keyfile, NM_L2TP_KEY_PASSWORD, pw ? pw : "", _("Password:"), TRUE, allow_interaction);
keyfile_print_stdout (keyfile); keyfile_print_stdout (keyfile);
g_key_file_unref (keyfile); g_key_file_unref (keyfile);
...@@ -278,7 +278,7 @@ main (int argc, char *argv[]) ...@@ -278,7 +278,7 @@ main (int argc, char *argv[])
if (!external_ui_mode) { if (!external_ui_mode) {
/* dump the passwords to stdout */ /* dump the passwords to stdout */
if (password) if (password)
printf ("%s\n%s\n", NM_PPTP_KEY_PASSWORD, password); printf ("%s\n%s\n", NM_L2TP_KEY_PASSWORD, password);
printf ("\n\n"); printf ("\n\n");
gnome_keyring_memory_free (password); gnome_keyring_memory_free (password);
......
#!/bin/sh #!/bin/sh
# Run this to generate all the initial makefiles, etc.
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
REQUIRED_AUTOMAKE_VERSION=1.9
PKG_NAME=NetworkManager-l2tp
(test -f $srcdir/configure.ac \
&& test -f $srcdir/auth-dialog/main.c) || {
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
echo " top-level $PKG_NAME directory"
exit 1
}
(cd $srcdir;
autoreconf --install --symlink &&
intltoolize --force &&
autoreconf &&
./configure --enable-maintainer-mode $@
)
[ ! -e m4 ] && mkdir m4
autoreconf --verbose --install --force
intltoolize --copy --force --automake
...@@ -16,22 +16,16 @@ ui_DATA = nm-l2tp-dialog.ui ...@@ -16,22 +16,16 @@ ui_DATA = nm-l2tp-dialog.ui
libnm_l2tp_properties_la_CFLAGS = \ libnm_l2tp_properties_la_CFLAGS = \
$(GTK_CFLAGS) \ $(GTK_CFLAGS) \
$(GCONF_CFLAGS) \ $(NM_CFLAGS) \
$(LIBGNOMEUI_CFLAGS) \
$(GNOMEKEYRING_CFLAGS) \
$(NM_CFLAGS) \
-DICONDIR=\""$(datadir)/pixmaps"\" \ -DICONDIR=\""$(datadir)/pixmaps"\" \
-DUIDIR=\""$(uidir)"\" \ -DUIDIR=\""$(uidir)"\" \
-DG_DISABLE_DEPRECATED \ -DG_DISABLE_DEPRECATED \
-DGDK_DISABLE_DEPRECATED \ -DGDK_DISABLE_DEPRECATED \
-DGNOME_DISABLE_DEPRECATED \ -DGTK_DISABLE_DEPRECATED \
-DGNOMELOCALEDIR=\"$(datadir)/locale\" \
-DVERSION=\"$(VERSION)\" -DVERSION=\"$(VERSION)\"
libnm_l2tp_properties_la_LIBADD = \ libnm_l2tp_properties_la_LIBADD = \
$(GTK_LIBS) \ $(GTK_LIBS) \
$(GCONF_LIBS) \
$(LIBGNOMEUI_LIBS) \
$(NM_LIBS) $(NM_LIBS)
libnm_l2tp_properties_la_LDFLAGS = \ libnm_l2tp_properties_la_LDFLAGS = \
......
...@@ -551,23 +551,23 @@ advanced_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error) ...@@ -551,23 +551,23 @@ advanced_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error)
} }
widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_allow_bsdcomp")); widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_allow_bsdcomp"));
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) /* negate */ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NOBSDCOMP), g_strdup ("yes")); g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NOBSDCOMP), g_strdup ("yes"));
widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_allow_deflate")); widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_allow_deflate"));
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) /* negate */ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NODEFLATE), g_strdup ("yes")); g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NODEFLATE), g_strdup ("yes"));
widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_usevj")); widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_usevj"));
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) /* negate */ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NO_VJ_COMP), g_strdup ("yes")); g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NO_VJ_COMP), g_strdup ("yes"));
widget = GTK_WIDGET (gtk_builder_get_object (builder,"ppp_usepcomp")); widget = GTK_WIDGET (gtk_builder_get_object (builder,"ppp_usepcomp"));
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) /* negate */ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NO_PCOMP), g_strdup ("yes")); g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NO_PCOMP), g_strdup ("yes"));
widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_useaccomp")); widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_useaccomp"));
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) /* negate */ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NO_ACCOMP), g_strdup ("yes")); g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_NO_ACCOMP), g_strdup ("yes"));
widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_send_echo_packets")); widget = GTK_WIDGET (gtk_builder_get_object (builder, "ppp_send_echo_packets"));
......
...@@ -201,7 +201,6 @@ import_ip4 (GKeyFile *keyfile, NMSettingIP4Config *s_ip4, GError **error) ...@@ -201,7 +201,6 @@ import_ip4 (GKeyFile *keyfile, NMSettingIP4Config *s_ip4, GError **error)
char **dnses; char **dnses;
gsize length; gsize length;
struct in_addr addr; struct in_addr addr;
guint32 dns;
dnses = g_key_file_get_string_list (keyfile, IP4_SECTION, NM_SETTING_IP4_CONFIG_DNS, dnses = g_key_file_get_string_list (keyfile, IP4_SECTION, NM_SETTING_IP4_CONFIG_DNS,
&length, error); &length, error);
...@@ -240,7 +239,7 @@ import_ip4 (GKeyFile *keyfile, NMSettingIP4Config *s_ip4, GError **error) ...@@ -240,7 +239,7 @@ import_ip4 (GKeyFile *keyfile, NMSettingIP4Config *s_ip4, GError **error)
&length, error); &length, error);
for (i=0; i<length; i++){ for (i=0; i<length; i++){
NMIP4Route *route; NMIP4Route *route;
guint32 dest, prefix, next_hop, metric; guint32 prefix, metric;
char *ptr, *dest_s, *prefix_s, *next_hop_s, *metric_s; char *ptr, *dest_s, *prefix_s, *next_hop_s, *metric_s;
route = nm_ip4_route_new (); route = nm_ip4_route_new ();
...@@ -489,7 +488,6 @@ static gboolean ...@@ -489,7 +488,6 @@ static gboolean
export_ip4(NMSettingIP4Config *s_ip4, GKeyFile *keyfile, GError **error) export_ip4(NMSettingIP4Config *s_ip4, GKeyFile *keyfile, GError **error)
{ {
const char *str_val; const char *str_val;
int int_val;
gboolean bool_val; gboolean bool_val;
guint32 num_dns; guint32 num_dns;
guint32 num_dns_searches; guint32 num_dns_searches;
...@@ -532,8 +530,6 @@ export_ip4(NMSettingIP4Config *s_ip4, GKeyFile *keyfile, GError **error) ...@@ -532,8 +530,6 @@ export_ip4(NMSettingIP4Config *s_ip4, GKeyFile *keyfile, GError **error)
char *routes[num_routes]; char *routes[num_routes];
NMIP4Route *route; NMIP4Route *route;
struct in_addr addr; struct in_addr addr;
char *dest_addr;
char *nhop_addr;
for (i=0; i<num_routes; i++){ for (i=0; i<num_routes; i++){
guint32 dest, prefix, nhop, metric; guint32 dest, prefix, nhop, metric;
......
...@@ -81,9 +81,6 @@ handle_enable_changed (GtkWidget *check, gboolean is_init, GtkBuilder *builder) ...@@ -81,9 +81,6 @@ handle_enable_changed (GtkWidget *check, gboolean is_init, GtkBuilder *builder)
{ {
GtkWidget *widget; GtkWidget *widget;
gboolean enabledp; gboolean enabledp;
GtkTreeModel *model;
GtkTreeIter iter;
gboolean valid;
enabledp = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)); enabledp = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check));
...@@ -172,9 +169,6 @@ ipsec_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error) ...@@ -172,9 +169,6 @@ ipsec_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error)
GHashTable *hash; GHashTable *hash;
GtkWidget *widget; GtkWidget *widget;
GtkBuilder *builder; GtkBuilder *builder;
GtkTreeModel *model;
GtkTreeIter iter;
gboolean valid;
g_return_val_if_fail (dialog != NULL, NULL); g_return_val_if_fail (dialog != NULL, NULL);
if (error) if (error)
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <errno.h> #include <errno.h>
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h>
#include <glib/gi18n-lib.h> #include <glib/gi18n-lib.h>
#include <string.h> #include <string.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
...@@ -162,7 +163,7 @@ check_validity (L2tpPluginUiWidget *self, GError **error) ...@@ -162,7 +163,7 @@ check_validity (L2tpPluginUiWidget *self, GError **error)
L2tpPluginUiWidgetPrivate *priv = L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE (self); L2tpPluginUiWidgetPrivate *priv = L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE (self);
GtkWidget *widget; GtkWidget *widget;
const char *str; const char *str;
char *s; char *s=NULL;
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "gateway_entry")); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "gateway_entry"));
str = gtk_entry_get_text (GTK_ENTRY (widget)); str = gtk_entry_get_text (GTK_ENTRY (widget));
...@@ -253,8 +254,7 @@ advanced_button_clicked_cb (GtkWidget *button, gpointer user_data) ...@@ -253,8 +254,7 @@ advanced_button_clicked_cb (GtkWidget *button, gpointer user_data)
{ {
L2tpPluginUiWidget *self = L2TP_PLUGIN_UI_WIDGET (user_data); L2tpPluginUiWidget *self = L2TP_PLUGIN_UI_WIDGET (user_data);
L2tpPluginUiWidgetPrivate *priv = L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE (self); L2tpPluginUiWidgetPrivate *priv = L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE (self);
GtkWidget *dialog; GtkWidget *dialog, *toplevel;
GtkWindow *toplevel;
toplevel = gtk_widget_get_toplevel (priv->widget); toplevel = gtk_widget_get_toplevel (priv->widget);
g_return_if_fail (gtk_widget_is_toplevel (toplevel)); g_return_if_fail (gtk_widget_is_toplevel (toplevel));
...@@ -283,8 +283,7 @@ ipsec_button_clicked_cb (GtkWidget *button, gpointer user_data) ...@@ -283,8 +283,7 @@ ipsec_button_clicked_cb (GtkWidget *button, gpointer user_data)
{ {
L2tpPluginUiWidget *self = L2TP_PLUGIN_UI_WIDGET (user_data); L2tpPluginUiWidget *self = L2TP_PLUGIN_UI_WIDGET (user_data);
L2tpPluginUiWidgetPrivate *priv = L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE (self); L2tpPluginUiWidgetPrivate *priv = L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE (self);
GtkWidget *dialog; GtkWidget *dialog, *toplevel;
GtkWindow *toplevel;
toplevel = gtk_widget_get_toplevel (priv->widget); toplevel = gtk_widget_get_toplevel (priv->widget);
g_return_if_fail (gtk_widget_is_toplevel (toplevel)); g_return_if_fail (gtk_widget_is_toplevel (toplevel));
...@@ -576,7 +575,7 @@ update_connection (NMVpnPluginUiWidgetInterface *iface, ...@@ -576,7 +575,7 @@ update_connection (NMVpnPluginUiWidgetInterface *iface,
NMSettingVPN *s_vpn; NMSettingVPN *s_vpn;
GtkWidget *widget; GtkWidget *widget;
const char *str; const char *str;
char *s; char *s=NULL;
gboolean valid = FALSE; gboolean valid = FALSE;
if (!check_validity (self, error)) if (!check_validity (self, error))
...@@ -669,7 +668,7 @@ nm_vpn_plugin_ui_widget_interface_new (NMConnection *connection, GError **error) ...@@ -669,7 +668,7 @@ nm_vpn_plugin_ui_widget_interface_new (NMConnection *connection, GError **error)
g_object_unref(object); g_object_unref(object);
return NULL; return NULL;
} }
g_free(ui_file); g_free (ui_file);
priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "l2tp-vbox")); priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "l2tp-vbox"));
if (!priv->widget) { if (!priv->widget) {
......
...@@ -230,13 +230,13 @@ nm_ip_up (void *data, int arg) ...@@ -230,13 +230,13 @@ nm_ip_up (void *data, int arg)
} }
static int static int
get_chap_check() get_chap_check(void)
{ {
return 1; return 1;
} }
static int static int
get_pap_check() get_pap_check(void)
{ {
return 1; return 1;
} }
......
...@@ -24,11 +24,11 @@ ...@@ -24,11 +24,11 @@
* (C) Copyright 2011 Geo Carncross <geocar@gmail.com> * (C) Copyright 2011 Geo Carncross <geocar@gmail.com>
* (C) Copyright 2012 Sergey Prokhorov <me@seriyps.ru> * (C) Copyright 2012 Sergey Prokhorov <me@seriyps.ru>
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -129,65 +129,102 @@ enum { ...@@ -129,65 +129,102 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 }; static guint signals[LAST_SIGNAL] = { 0 };
static gboolean static gboolean
ensure_killed (gpointer data) _service_cache_credentials (NML2tpPppService *self,
NMConnection *connection,
GError **error)
{ {
int pid = GPOINTER_TO_INT (data); NML2tpPppServicePrivate *priv = NM_L2TP_PPP_SERVICE_GET_PRIVATE (self);
NMSettingVPN *s_vpn;
const char *username, *password, *domain;
if (kill (pid, 0) == 0){ g_return_val_if_fail (self != NULL, FALSE);
g_warning("Kill process %d by SIGKILL", pid); g_return_val_if_fail (connection != NULL, FALSE);
kill (pid, SIGKILL);
s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
if (!s_vpn) {
g_set_error_literal (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
_("Could not find secrets (connection invalid, no vpn setting)."));
return FALSE;
} }
return FALSE; /* Username; try L2TP specific username first, then generic username */
} username = nm_setting_vpn_get_data_item (s_vpn, NM_L2TP_KEY_USER);
if (username && strlen (username)) {
/* FIXME: This check makes about 0 sense. */
if (!username || !strlen (username)) {
g_set_error_literal (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
_("Invalid VPN username."));
return FALSE;
}
} else {
username = nm_setting_vpn_get_user_name (s_vpn);
if (!username || !strlen (username)) {
g_set_error_literal (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
_("Missing VPN username."));
return FALSE;
}
}
password = nm_setting_vpn_get_secret (s_vpn, NM_L2TP_KEY_PASSWORD);
if (!password || !strlen (password)) {
g_set_error_literal (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
_("Missing or invalid VPN password."));
return FALSE;
}
domain = nm_setting_vpn_get_data_item (s_vpn, NM_L2TP_KEY_DOMAIN);
if (domain && strlen (domain))
priv->domain = g_strdup(domain);
priv->username = g_strdup(username);
priv->password = g_strdup(password);
return TRUE;
}
static NML2tpPppService * static NML2tpPppService *
nm_l2tp_ppp_service_new (void) nm_l2tp_ppp_service_new (NMConnection *connection,
GError **error)
{ {
DBusGConnection *connection; NML2tpPppService *self = NULL;
DBusGConnection *bus;
DBusGProxy *proxy; DBusGProxy *proxy;
GError *error = NULL;
gboolean success = FALSE; gboolean success = FALSE;
guint request_name_result; guint result;
GObject *object;
object = g_object_new (NM_TYPE_L2TP_PPP_SERVICE, NULL);
dbus_connection_set_change_sigpipe (TRUE); bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, error);
if (!bus)
connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
if (!connection) {
g_warning (_("Could not get the system bus. Make sure "
"the message bus daemon is running! Message: %s"),
error->message);
g_error_free (error);
g_object_unref (object);
return NULL; return NULL;
} dbus_connection_set_change_sigpipe (TRUE);
proxy = dbus_g_proxy_new_for_name (connection,
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
"org.freedesktop.DBus");
if (dbus_g_proxy_call (proxy, "RequestName", &error, proxy = dbus_g_proxy_new_for_name (bus,
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
"org.freedesktop.DBus");
g_assert(proxy);
if (dbus_g_proxy_call (proxy, "RequestName", error,
G_TYPE_STRING, NM_DBUS_SERVICE_L2TP_PPP, G_TYPE_STRING, NM_DBUS_SERVICE_L2TP_PPP,
G_TYPE_UINT, 0, G_TYPE_UINT, 0,
G_TYPE_INVALID, G_TYPE_INVALID,
G_TYPE_UINT, &request_name_result, G_TYPE_UINT, &result,
G_TYPE_INVALID)) { G_TYPE_INVALID)) {
dbus_g_connection_register_g_object (connection, NM_DBUS_PATH_L2TP_PPP, object); self = (NML2tpPppService *) g_object_new (NM_TYPE_L2TP_PPP_SERVICE, NULL);
g_assert(self);
dbus_g_connection_register_g_object (bus, NM_DBUS_PATH_L2TP_PPP, G_OBJECT (self));
success = TRUE; success = TRUE;
} else { } else {
g_warning (_("Could not register D-Bus service name. Message: %s"), error->message); g_warning (_("Could not register D-Bus service name. Message: %s"), (*error)->message);
g_error_free (error);
g_object_unref (object);
object = NULL;
} }
g_object_unref (proxy); g_object_unref (proxy);
return (NML2tpPppService *) object; dbus_g_connection_unref (bus);
return self;
} }
static void static void
...@@ -251,71 +288,6 @@ nm_l2tp_ppp_service_class_init (NML2tpPppServiceClass *service_class) ...@@ -251,71 +288,6 @@ nm_l2tp_ppp_service_class_init (NML2tpPppServiceClass *service_class)
&dbus_glib_nm_l2tp_pppd_service_object_info); &dbus_glib_nm_l2tp_pppd_service_object_info);
} }
static gboolean
nm_l2tp_ppp_service_cache_credentials (NML2tpPppService *self,
NMConnection *connection,
GError **error)
{
NML2tpPppServicePrivate *priv = NM_L2TP_PPP_SERVICE_GET_PRIVATE (self);
NMSettingVPN *s_vpn;
const char *username, *password, *domain;
g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (connection != NULL, FALSE);
s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
if (!s_vpn) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
"%s",
_("Could not find secrets (connection invalid, no vpn setting)."));
return FALSE;
}
/* Username; try L2TP specific username first, then generic username */
username = nm_setting_vpn_get_data_item (s_vpn, NM_L2TP_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,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
"%s",
_("Invalid VPN username."));
return FALSE;
}
} else {
username = nm_setting_vpn_get_user_name (s_vpn);
if (!username || !strlen (username)) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
"%s",
_("Missing VPN username."));
return FALSE;
}
}
password = nm_setting_vpn_get_secret (s_vpn, NM_L2TP_KEY_PASSWORD);
if (!password || !strlen (password)) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
"%s",
_("Missing or invalid VPN password."));
return FALSE;
}
domain = nm_setting_vpn_get_data_item (s_vpn, NM_L2TP_KEY_DOMAIN);
if (domain && strlen (domain))
priv->domain = g_strdup(domain);
priv->username = g_strdup(username);
priv->password = g_strdup(password);
return TRUE;
}
static gboolean static gboolean
impl_l2tp_service_need_secrets (NML2tpPppService *self, impl_l2tp_service_need_secrets (NML2tpPppService *self,
char **out_username, char **out_username,
...@@ -543,7 +515,6 @@ validate_one_property (const char *key, const char *value, gpointer user_data) ...@@ -543,7 +515,6 @@ validate_one_property (const char *key, const char *value, gpointer user_data)
_("invalid integer property '%s'"), _("invalid integer property '%s'"),
key); key);
break; break;
case G_TYPE_BOOLEAN: case G_TYPE_BOOLEAN:
if (!strcmp (value, "yes") || !strcmp (value, "no")) if (!strcmp (value, "yes") || !strcmp (value, "no"))
return; /* valid */ return; /* valid */
...@@ -569,7 +540,7 @@ validate_one_property (const char *key, const char *value, gpointer user_data) ...@@ -569,7 +540,7 @@ validate_one_property (const char *key, const char *value, gpointer user_data)
g_set_error (info->error, g_set_error (info->error,
NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
_("property '%s' invalid or not supportedx"), _("property '%s' invalid or not supported"),
key); key);
} }
} }
...@@ -758,75 +729,12 @@ pppd_timed_out (gpointer user_data) ...@@ -758,75 +729,12 @@ pppd_timed_out (gpointer user_data)
{ {
NML2tpPlugin *plugin = NM_L2TP_PLUGIN (user_data); NML2tpPlugin *plugin = NM_L2TP_PLUGIN (user_data);
g_warning (_("Looks like pppd didn't initialize our dbus module")); g_warning (_("pppd timeout. Looks like pppd didn't initialize our dbus module"));
nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin), NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT); nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin), NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT);
return FALSE; return FALSE;
} }
static void
remove_timeout_handler (NML2tpPlugin *plugin)
{
NML2tpPluginPrivate *priv = NM_L2TP_PLUGIN_GET_PRIVATE (plugin);
if (priv->ppp_timeout_handler) {
g_source_remove (priv->ppp_timeout_handler);
priv->ppp_timeout_handler = 0;
}
}
static void
service_plugin_alive_cb (NML2tpPppService *service,
NML2tpPlugin *plugin)
{
remove_timeout_handler (plugin);
}
static void
service_ppp_state_cb (NML2tpPppService *service,
guint32 ppp_state,
NML2tpPlugin *plugin)
{
NMVPNServiceState plugin_state = nm_vpn_plugin_get_state (NM_VPN_PLUGIN (plugin));
switch (ppp_state) {
case NM_PPP_STATUS_DEAD:
case NM_PPP_STATUS_DISCONNECT:
if (plugin_state == NM_VPN_SERVICE_STATE_STARTED)
nm_vpn_plugin_disconnect (NM_VPN_PLUGIN (plugin), NULL);
else if (plugin_state == NM_VPN_SERVICE_STATE_STARTING)
nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin), NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED);
break;
default:
break;
}
}
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 *value_dup;
value_dup = g_slice_new0 (GValue);
g_value_init (value_dup, G_VALUE_TYPE (value));
g_value_copy (value, value_dup);
return value_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 gboolean static gboolean
nm_l2tp_resolve_gateway (NML2tpPlugin *plugin, nm_l2tp_resolve_gateway (NML2tpPlugin *plugin,
NMSettingVPN *s_vpn, NMSettingVPN *s_vpn,
...@@ -923,31 +831,6 @@ nm_l2tp_resolve_gateway (NML2tpPlugin *plugin, ...@@ -923,31 +831,6 @@ nm_l2tp_resolve_gateway (NML2tpPlugin *plugin,
return TRUE; return TRUE;
} }
static void
service_ip4_config_cb (NML2tpPppService *service,
GHashTable *config_hash,
NMVPNPlugin *plugin)
{
NML2tpPluginPrivate *priv = NM_L2TP_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 = g_slice_new0 (GValue);
g_value_init (value, G_TYPE_UINT);
g_value_set_uint (value, priv->naddr);
g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_GATEWAY), value);
nm_vpn_plugin_set_ip4_config (plugin, hash);
g_hash_table_destroy (hash);
}
static void static void
free_args (GPtrArray *args) free_args (GPtrArray *args)
{ {
...@@ -996,12 +879,13 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin, ...@@ -996,12 +879,13 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
NMSettingVPN *s_vpn, NMSettingVPN *s_vpn,
GError **error) GError **error)
{ {
NML2tpPluginPrivate *priv = NM_L2TP_PLUGIN_GET_PRIVATE (plugin); // NML2tpPluginPrivate *priv = NM_L2TP_PLUGIN_GET_PRIVATE (plugin);
const char *ipsec_binary; const char *ipsec_binary;
const char *value; const char *value;
char tmp_secrets[128]; char tmp_secrets[128];
char cmd1[4096],cmd11[4096],cmd2[4096]; char cmd1[4096],cmd11[4096],cmd2[4096];
char session_name[128]; char session_name[128];
guint sys=0;
FILE *fp; FILE *fp;
if (!(ipsec_binary=nm_find_ipsec())) { if (!(ipsec_binary=nm_find_ipsec())) {
...@@ -1014,11 +898,11 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin, ...@@ -1014,11 +898,11 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
} }
sprintf(session_name, "nm-ipsec-l2tpd-%d", getpid()); sprintf(session_name, "nm-ipsec-l2tpd-%d", getpid());
(void)system(". /var/run/pluto/ipsec.info;" sys += system(". /var/run/pluto/ipsec.info;"
"PATH=/usr/local/sbin:/usr/sbin:/sbin; export PATH;" "PATH=/usr/local/sbin:/usr/sbin:/sbin; export PATH;"
"[ \"x$defaultrouteaddr\" = \"x\" ] && ipsec setup restart"); "[ \"x$defaultrouteaddr\" = \"x\" ] && ipsec setup restart");
(void)system("PATH=/usr/local/sbin:/usr/sbin:/sbin ipsec " sys += system("PATH=/usr/local/sbin:/usr/sbin:/sbin ipsec "
" --listen"); " --listen");
sprintf(cmd1,". /var/run/pluto/ipsec.info;" sprintf(cmd1,". /var/run/pluto/ipsec.info;"
"PATH=/usr/local/sbin:/usr/sbin:/sbin ipsec addconn " "PATH=/usr/local/sbin:/usr/sbin:/sbin ipsec addconn "
...@@ -1051,7 +935,7 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin, ...@@ -1051,7 +935,7 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
} }
if(!(fp=fopen("/etc/ipsec.secrets","w"))) { if(!(fp=fopen("/etc/ipsec.secrets","w"))) {
(void)rename(tmp_secrets, "/etc/ipsec.secrets"); rename(tmp_secrets, "/etc/ipsec.secrets");
g_set_error (error, g_set_error (error,
NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR,
NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED, NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED,
...@@ -1070,13 +954,15 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin, ...@@ -1070,13 +954,15 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
fprintf(fp, ": PSK \"%s\"\n",value); fprintf(fp, ": PSK \"%s\"\n",value);
fclose(fp); fclose(fp);
(void)system("PATH=\"/sbin:/usr/sbin:/usr/local/sbin:$PATH\" ipsec secrets"); sys += system("PATH=\"/sbin:/usr/sbin:/usr/local/sbin:$PATH\" ipsec secrets");
(void)system(cmd11); sys += system(cmd11);
(void)system(cmd1); sys += system(cmd1);
(void)system(cmd2); sys += system(cmd2);
(void)rename(tmp_secrets, "/etc/ipsec.secrets"); rename(tmp_secrets, "/etc/ipsec.secrets");
(void)system("PATH=\"/sbin:/usr/sbin:/usr/local/sbin:$PATH\" ipsec secrets"); sys += system("PATH=\"/sbin:/usr/sbin:/usr/local/sbin:$PATH\" ipsec secrets");
if (sys != 0)
g_warning("Possible error in IPSec setup.");
g_message(_("ipsec ready for action")); g_message(_("ipsec ready for action"));
return TRUE; return TRUE;
...@@ -1199,7 +1085,7 @@ is_port_free(int port) ...@@ -1199,7 +1085,7 @@ is_port_free(int port)
return TRUE; return TRUE;
} }
/* XXX: currently unused! May be useful if l2tp client doesn't accept 0 as port number */ /* XXX: currently unused! May be useful if l2tp client doesn't accept 0 as port number
static int static int
get_free_l2tp_port(void) get_free_l2tp_port(void)
{ {
...@@ -1208,11 +1094,12 @@ get_free_l2tp_port(void) ...@@ -1208,11 +1094,12 @@ get_free_l2tp_port(void)
while (!is_port_free (port) && port < 65535) while (!is_port_free (port) && port < 65535)
port++; port++;
if (port == 65535) /* oh no.. */ if (port == 65535) // oh no..
return -1; return -1;
g_message("found free port %d", port); g_message("found free port %d", port);
return port; return port;
} }
*/
static gboolean static gboolean
nm_l2tp_config_write (NML2tpPlugin *plugin, nm_l2tp_config_write (NML2tpPlugin *plugin,
...@@ -1224,7 +1111,7 @@ nm_l2tp_config_write (NML2tpPlugin *plugin, ...@@ -1224,7 +1111,7 @@ nm_l2tp_config_write (NML2tpPlugin *plugin,
char *filename; char *filename;
pid_t pid = getpid (); pid_t pid = getpid ();
const char *value; const char *value;
const char *username; // const char *username;
gint conf_fd = -1; gint conf_fd = -1;
gint ipsec_fd = -1; gint ipsec_fd = -1;
gint pppopt_fd = -1; gint pppopt_fd = -1;
...@@ -1413,6 +1300,94 @@ nm_l2tp_config_write (NML2tpPlugin *plugin, ...@@ -1413,6 +1300,94 @@ nm_l2tp_config_write (NML2tpPlugin *plugin,
return TRUE; return TRUE;
} }
static void
remove_timeout_handler (NML2tpPlugin *plugin)
{
NML2tpPluginPrivate *priv = NM_L2TP_PLUGIN_GET_PRIVATE (plugin);
if (priv->ppp_timeout_handler) {
g_source_remove (priv->ppp_timeout_handler);
priv->ppp_timeout_handler = 0;
}
}
static void
service_plugin_alive_cb (NML2tpPppService *service,
NML2tpPlugin *plugin)
{
remove_timeout_handler (plugin);
}
static void
service_ppp_state_cb (NML2tpPppService *service,
guint32 ppp_state,
NML2tpPlugin *plugin)
{
NMVPNServiceState plugin_state = nm_vpn_plugin_get_state (NM_VPN_PLUGIN (plugin));
switch (ppp_state) {
case NM_PPP_STATUS_DEAD:
case NM_PPP_STATUS_DISCONNECT:
if (plugin_state == NM_VPN_SERVICE_STATE_STARTED)
nm_vpn_plugin_disconnect (NM_VPN_PLUGIN (plugin), NULL);
else if (plugin_state == NM_VPN_SERVICE_STATE_STARTING)
nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin), NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED);
break;
default:
break;
}
}
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 *value_dup;
value_dup = g_slice_new0 (GValue);
g_value_init (value_dup, G_VALUE_TYPE (value));
g_value_copy (value, value_dup);
return value_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 void
service_ip4_config_cb (NML2tpPppService *service,
GHashTable *config_hash,
NMVPNPlugin *plugin)
{
NML2tpPluginPrivate *priv = NM_L2TP_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 = g_slice_new0 (GValue);
g_value_init (value, G_TYPE_UINT);
g_value_set_uint (value, priv->naddr);
g_hash_table_insert (hash, g_strdup (NM_L2TP_KEY_GATEWAY), value);
nm_vpn_plugin_set_ip4_config (plugin, hash);
g_hash_table_destroy (hash);
}
static gboolean static gboolean
real_connect (NMVPNPlugin *plugin, real_connect (NMVPNPlugin *plugin,
NMConnection *connection, NMConnection *connection,
...@@ -1442,7 +1417,7 @@ real_connect (NMVPNPlugin *plugin, ...@@ -1442,7 +1417,7 @@ real_connect (NMVPNPlugin *plugin,
priv->connection = NULL; priv->connection = NULL;
} }
priv->service = nm_l2tp_ppp_service_new (); priv->service = nm_l2tp_ppp_service_new (connection, error);
if (!priv->service) { if (!priv->service) {
g_set_error (error, g_set_error (error,
NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR,
...@@ -1461,7 +1436,7 @@ real_connect (NMVPNPlugin *plugin, ...@@ -1461,7 +1436,7 @@ real_connect (NMVPNPlugin *plugin,
/* Cache the username and password so we can relay the secrets to the pppd /* Cache the username and password so we can relay the secrets to the pppd
* plugin when it asks for them. * plugin when it asks for them.
*/ */
if (!nm_l2tp_ppp_service_cache_credentials (priv->service, connection, error)) if (!_service_cache_credentials (priv->service, connection, error))
return FALSE; return FALSE;
if (!nm_l2tp_resolve_gateway (NM_L2TP_PLUGIN (plugin), s_vpn, error)) if (!nm_l2tp_resolve_gateway (NM_L2TP_PLUGIN (plugin), s_vpn, error))
...@@ -1490,16 +1465,37 @@ real_need_secrets (NMVPNPlugin *plugin, ...@@ -1490,16 +1465,37 @@ real_need_secrets (NMVPNPlugin *plugin,
char **setting_name, char **setting_name,
GError **error) GError **error)
{ {
NMSettingVPN *s_vpn; NMSetting *s_vpn;
NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
g_return_val_if_fail (NM_IS_VPN_PLUGIN (plugin), FALSE); g_return_val_if_fail (NM_IS_VPN_PLUGIN (plugin), FALSE);
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE); g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
s_vpn = NM_SETTING_VPN (nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN)); s_vpn = nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
if (!nm_setting_vpn_get_secret (s_vpn, NM_L2TP_KEY_PASSWORD)) { nm_setting_get_secret_flags (NM_SETTING (s_vpn), NM_L2TP_KEY_PASSWORD, &flags, NULL);
*setting_name = NM_SETTING_VPN_SETTING_NAME;
return TRUE; /* Don't need the password if it's not required */
if (flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
return FALSE;
/* Don't need the password if we already have one */
if (nm_setting_vpn_get_secret (NM_SETTING_VPN (s_vpn), NM_L2TP_KEY_PASSWORD))
return FALSE;
/* Otherwise we need a password */
*setting_name = NM_SETTING_VPN_SETTING_NAME;
return TRUE;
}
static gboolean
ensure_killed (gpointer data)
{
int pid = GPOINTER_TO_INT (data);
if (kill (pid, 0) == 0){
g_warning("Kill process %d by SIGKILL", pid);
kill (pid, SIGKILL);
} }
return FALSE; return FALSE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment