summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2012-02-27 21:08:06 +0100
committerGuido Günther <agx@sigxcpu.org>2012-02-27 21:10:01 +0100
commite6b60dcd19fa0a31cdf1983a15ac1e2b6638b9e3 (patch)
tree10c3d5691ad5f545b558f9aa20f5f60dc025b3e5 /src
parentbb5acec8e7340168d8017b546647b1203a810dee (diff)
Distinguish login failure from other errors
Diffstat (limited to 'src')
-rw-r--r--src/nm-iodine-service.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/nm-iodine-service.c b/src/nm-iodine-service.c
index 5409c7d..03012f8 100644
--- a/src/nm-iodine-service.c
+++ b/src/nm-iodine-service.c
@@ -52,6 +52,7 @@ G_DEFINE_TYPE (NMIODINEPlugin, nm_iodine_plugin, NM_TYPE_VPN_PLUGIN)
typedef struct {
GPid pid;
+ NMVPNPluginFailure failure;
GHashTable *ip4config;
} NMIODINEPluginPrivate;
@@ -271,13 +272,23 @@ value_destroy (gpointer data)
g_slice_free (GValue, val);
}
-static gboolean
-iodine_parse_stderr_line (const char* line, GHashTable *ip4config)
+static gint
+iodine_parse_stderr_line (NMVPNPlugin *plugin,
+ const char* line,
+ GHashTable *ip4config)
{
- gchar **split;
+ NMIODINEPluginPrivate *priv = NM_IODINE_PLUGIN_GET_PRIVATE (plugin);
+ gchar **split = NULL;
GValue *val;
gint len;
- gint ret = TRUE;
+ gint ret = 1;
+
+ if (g_str_has_prefix(line, "Bad password")) {
+ g_debug ("Login failure");
+ priv->failure = NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED;
+ ret = -1;
+ goto out;
+ }
split = g_strsplit (line, " ", 0);
len = g_strv_length (split);
@@ -340,7 +351,7 @@ iodine_parse_stderr_line (const char* line, GHashTable *ip4config)
g_hash_table_insert (ip4config,
NM_VPN_PLUGIN_IP4_CONFIG_PREFIX,
val);
- ret = FALSE;
+ ret = 0; /* success */
} else
g_debug("%s", line);
@@ -369,7 +380,7 @@ iodine_stderr_cb (GIOChannel *source, GIOCondition condition, gpointer plugin)
if (l)
line[l-1] = '\0';
- ret = iodine_parse_stderr_line(line, priv->ip4config);
+ ret = iodine_parse_stderr_line(plugin, line, priv->ip4config);
if (!ret) {
g_debug("Parsing done, sending IP4 config");
nm_vpn_plugin_set_ip4_config(plugin, priv->ip4config);
@@ -406,8 +417,10 @@ iodine_watch_cb (GPid pid, gint status, gpointer user_data)
waitpid (priv->pid, NULL, WNOHANG);
priv->pid = 0;
- /* Must be after data->state is set since signals use data->state */
- if (error) {
+ if (priv->failure >= 0) {
+ nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin),
+ priv->failure);
+ } else if (error) {
nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin),
NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED);
}
@@ -634,6 +647,7 @@ nm_iodine_plugin_init (NMIODINEPlugin *plugin)
g_str_equal,
NULL,
value_destroy);
+ priv->failure = -1;
}
static void