summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2015-08-24 18:06:54 +0200
committerLubomir Rintel <lkundrak@v3.sk>2015-10-13 19:46:05 +0200
commita9fad49eceb1928fb7dd5ff63f4b4b384f35c81a (patch)
tree923aeff34dccf99c717f1705a1628a67a7f9c90b
parent244d29227bebe32e104578bbc59ba8b5027b5f86 (diff)
service: port to libnm
-rw-r--r--auth-dialog/main.c2
-rw-r--r--src/Makefile.am4
-rw-r--r--src/nm-iodine-service.c195
-rw-r--r--src/nm-iodine-service.h7
4 files changed, 93 insertions, 115 deletions
diff --git a/auth-dialog/main.c b/auth-dialog/main.c
index f482cf0..d0ddc3a 100644
--- a/auth-dialog/main.c
+++ b/auth-dialog/main.c
@@ -38,7 +38,7 @@
#include <nm-vpn-plugin-utils.h>
#include <nm-vpn-password-dialog.h>
-#include "src/nm-iodine-service.h"
+#include "../src/nm-iodine-service-defines.h"
#define KEYRING_UUID_TAG "connection-uuid"
#define KEYRING_SN_TAG "setting-name"
diff --git a/src/Makefile.am b/src/Makefile.am
index 904c8b4..d412962 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,5 +1,5 @@
AM_CPPFLAGS = \
- $(LIBNM_GLIB_CFLAGS) \
+ $(LIBNM_CFLAGS) \
-DG_DISABLE_DEPRECATED \
-DBINDIR=\"$(bindir)\" \
-DPREFIX=\""$(prefix)"\" \
@@ -19,6 +19,6 @@ nm_iodine_service_SOURCES = \
nm-iodine-service-defines.h
nm_iodine_service_LDADD = \
- $(LIBNM_GLIB_LIBS)
+ $(LIBNM_LIBS)
CLEANFILES = *~
diff --git a/src/nm-iodine-service.c b/src/nm-iodine-service.c
index cd71980..89023d4 100644
--- a/src/nm-iodine-service.c
+++ b/src/nm-iodine-service.c
@@ -40,20 +40,22 @@
#include <pwd.h>
#include <grp.h>
#include <glib/gi18n.h>
+#include <arpa/inet.h>
-#include <nm-setting-vpn.h>
+#include <NetworkManager.h>
+#include <nm-vpn-service-plugin.h>
#include "nm-iodine-service.h"
#include "nm-utils.h"
#define NM_IODINE_USER "nm-iodine"
#define NM_IODINE_RUNDIR LOCALSTATEDIR "/run/" NM_IODINE_USER
-G_DEFINE_TYPE (NMIodinePlugin, nm_iodine_plugin, NM_TYPE_VPN_PLUGIN)
+G_DEFINE_TYPE (NMIodinePlugin, nm_iodine_plugin, NM_TYPE_VPN_SERVICE_PLUGIN)
typedef struct {
GPid pid;
- NMVPNPluginFailure failure;
- GHashTable *ip4config;
+ NMVpnPluginFailure failure;
+ GVariantBuilder ip4config;
} NMIodinePluginPrivate;
#define NM_IODINE_PLUGIN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IODINE_PLUGIN, NMIodinePluginPrivate))
@@ -166,7 +168,7 @@ validate_one_property (const char *key, const char *value, gpointer user_data)
}
static gboolean
-nm_iodine_properties_validate (NMSettingVPN *s_vpn, GError **error)
+nm_iodine_properties_validate (NMSettingVpn *s_vpn, GError **error)
{
ValidateInfo info = { &valid_properties[0], error, FALSE };
@@ -185,7 +187,7 @@ nm_iodine_properties_validate (NMSettingVPN *s_vpn, GError **error)
static gboolean
-nm_iodine_secrets_validate (NMSettingVPN *s_vpn, GError **error)
+nm_iodine_secrets_validate (NMSettingVpn *s_vpn, GError **error)
{
ValidateInfo info = { &valid_secrets[0], error, FALSE };
@@ -202,11 +204,9 @@ nm_iodine_secrets_validate (NMSettingVPN *s_vpn, GError **error)
return *error ? FALSE : TRUE;
}
-static GValue *
-str_to_gvalue (const char *str, gboolean try_convert)
+static GVariant *
+str_to_gvariant (const char *str, gboolean try_convert)
{
- GValue *val;
-
/* Empty */
if (!str || strlen (str) < 1)
return NULL;
@@ -225,29 +225,11 @@ str_to_gvalue (const char *str, gboolean try_convert)
return NULL;
}
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_STRING);
- g_value_set_string (val, str);
- return val;
-}
-
-static GValue *
-uint_to_gvalue (guint32 num)
-{
- GValue *val;
-
- if (num == 0)
- return NULL;
-
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_UINT);
- g_value_set_uint (val, num);
-
- return val;
+ return g_variant_new_string (str);
}
-static GValue *
-addr_to_gvalue (const char *str)
+static GVariant *
+addr4_to_gvariant (const char *str)
{
struct in_addr temp_addr;
@@ -258,26 +240,16 @@ addr_to_gvalue (const char *str)
if (inet_pton (AF_INET, str, &temp_addr) <= 0)
return NULL;
- return uint_to_gvalue (temp_addr.s_addr);
-}
-
-static void
-value_destroy (gpointer data)
-{
- GValue *val = (GValue *) data;
-
- g_value_unset (val);
- g_slice_free (GValue, val);
+ return g_variant_new_uint32 (temp_addr.s_addr);
}
static gint
-iodine_parse_stderr_line (NMVPNPlugin *plugin,
- const char* line,
- GHashTable *ip4config)
+iodine_parse_stderr_line (NMVpnServicePlugin *plugin,
+ const char* line)
{
NMIodinePluginPrivate *priv = NM_IODINE_PLUGIN_GET_PRIVATE (plugin);
gchar **split = NULL;
- GValue *val;
+ GVariant *val;
gint len;
gint ret = 1;
@@ -295,60 +267,60 @@ iodine_parse_stderr_line (NMVPNPlugin *plugin,
if (g_str_has_prefix(line, "Server tunnel IP is ")) {
g_message("PTP address: %s", split[len-1]);
- val = addr_to_gvalue (split[len-1]);
+ val = addr4_to_gvariant (split[len-1]);
if (val)
- g_hash_table_insert (ip4config,
- NM_VPN_PLUGIN_IP4_CONFIG_PTP,
- val);
- val = addr_to_gvalue (split[len-1]);
+ g_variant_builder_add (&priv->ip4config, "{sv}",
+ NM_VPN_PLUGIN_IP4_CONFIG_PTP,
+ val);
+ val = addr4_to_gvariant (split[len-1]);
if (val)
- g_hash_table_insert (ip4config,
- NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY,
- val);
+ g_variant_builder_add (&priv->ip4config, "{sv}",
+ NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY,
+ val);
} else if (g_str_has_prefix(line, "Sending DNS queries for ")) {
g_message("External gw: %s", split[len-1]);
- val = addr_to_gvalue (split[len-1]);
+ val = addr4_to_gvariant (split[len-1]);
if (val)
- g_hash_table_insert (ip4config,
- NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY,
- val);
+ g_variant_builder_add (&priv->ip4config, "{sv}",
+ NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY,
+ val);
} else if (g_str_has_prefix(line, "Sending raw traffic directly to ")) {
/* If the DNS server is directly reachable we need to set it
as external gateway overwriting the above valus */
g_message("Overwrite ext. gw. address: %s", split[len-1]);
- val = addr_to_gvalue (split[len-1]);
+ val = addr4_to_gvariant (split[len-1]);
if (val)
- g_hash_table_insert (ip4config,
- NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY,
- val);
+ g_variant_builder_add (&priv->ip4config, "{sv}",
+ NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY,
+ val);
} else if (g_str_has_prefix(line, "Setting IP of dns")) {
g_message("Address: %s", split[len-1]);
- val = addr_to_gvalue (split[len-1]);
+ val = addr4_to_gvariant (split[len-1]);
if (val)
- g_hash_table_insert (ip4config,
- NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS,
- val);
+ g_variant_builder_add (&priv->ip4config, "{sv}",
+ NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS,
+ val);
} else if (g_str_has_prefix(line, "Setting MTU of ")) {
g_message("MTU: %s", split[len-1]);
- val = addr_to_gvalue (split[len-1]);
+ val = addr4_to_gvariant (split[len-1]);
if (val)
- g_hash_table_insert (ip4config,
- NM_VPN_PLUGIN_IP4_CONFIG_MTU,
- val);
+ g_variant_builder_add (&priv->ip4config, "{sv}",
+ NM_VPN_PLUGIN_IP4_CONFIG_MTU,
+ val);
} else if (g_str_has_prefix(line, "Opened dns")) {
g_message("Interface: %s", split[len-1]);
- val = str_to_gvalue (split[len-1], FALSE);
+ val = str_to_gvariant (split[len-1], FALSE);
if (val)
- g_hash_table_insert (ip4config,
- NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV,
- val);
+ g_variant_builder_add (&priv->ip4config, "{sv}",
+ NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV,
+ val);
} else if (g_str_has_prefix(line,
"Connection setup complete, "
"transmitting data.")) {
- val = uint_to_gvalue(27);
- g_hash_table_insert (ip4config,
- NM_VPN_PLUGIN_IP4_CONFIG_PREFIX,
- val);
+ val = g_variant_new_uint32 (27);
+ g_variant_builder_add (&priv->ip4config, "{sv}",
+ NM_VPN_PLUGIN_IP4_CONFIG_PREFIX,
+ val);
ret = 0; /* success */
} else
g_message("%s", line);
@@ -378,13 +350,11 @@ iodine_stderr_cb (GIOChannel *source, GIOCondition condition, gpointer plugin)
if (l)
line[l-1] = '\0';
- ret = iodine_parse_stderr_line(plugin, line, priv->ip4config);
+ ret = iodine_parse_stderr_line(plugin, line);
if (!ret) {
g_message("Parsing done, sending IP4 config");
- nm_vpn_plugin_set_ip4_config(plugin, priv->ip4config);
-
- g_hash_table_destroy (priv->ip4config);
- priv->ip4config = NULL;
+ nm_vpn_service_plugin_set_ip4_config(plugin,
+ g_variant_builder_end (&priv->ip4config));
}
g_free (line);
return TRUE;
@@ -416,12 +386,12 @@ iodine_watch_cb (GPid pid, gint status, gpointer user_data)
priv->pid = 0;
if (priv->failure >= 0) {
- nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin), priv->failure);
+ nm_vpn_service_plugin_failure (NM_VPN_SERVICE_PLUGIN (plugin), priv->failure);
} else if (error) {
- nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin), NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED);
+ nm_vpn_service_plugin_failure (NM_VPN_SERVICE_PLUGIN (plugin), NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED);
+ } else {
+ nm_vpn_service_plugin_disconnect (NM_VPN_SERVICE_PLUGIN (plugin), NULL);
}
-
- nm_vpn_plugin_set_state (NM_VPN_PLUGIN (plugin), NM_VPN_SERVICE_STATE_STOPPED);
}
static gboolean
@@ -432,7 +402,7 @@ has_user(const char* user)
static void
-send_password(gint fd, NMSettingVPN *s_vpn)
+send_password(gint fd, NMSettingVpn *s_vpn)
{
const char *passwd;
ssize_t ret;
@@ -453,7 +423,7 @@ send_password(gint fd, NMSettingVPN *s_vpn)
static gint
nm_iodine_start_iodine_binary (NMIodinePlugin *plugin,
- NMSettingVPN *s_vpn,
+ NMSettingVpn *s_vpn,
GError **error)
{
GPid pid;
@@ -548,11 +518,11 @@ nm_iodine_start_iodine_binary (NMIodinePlugin *plugin,
}
static gboolean
-real_connect (NMVPNPlugin *plugin,
- NMConnection *connection,
- GError **error)
+real_connect (NMVpnServicePlugin *plugin,
+ NMConnection *connection,
+ GError **error)
{
- NMSettingVPN *s_vpn;
+ NMSettingVpn *s_vpn;
gint ret = -1;
s_vpn = nm_connection_get_setting_vpn (connection);
@@ -572,21 +542,21 @@ real_connect (NMVPNPlugin *plugin,
}
static gboolean
-real_need_secrets (NMVPNPlugin *plugin,
- NMConnection *connection,
- char **setting_name,
- GError **error)
+real_need_secrets (NMVpnServicePlugin *plugin,
+ NMConnection *connection,
+ const char **setting_name,
+ GError **error)
{
- NMSettingVPN *s_vpn;
+ NMSettingVpn *s_vpn;
- g_return_val_if_fail (NM_IS_VPN_PLUGIN (plugin), FALSE);
+ g_return_val_if_fail (NM_IS_VPN_SERVICE_PLUGIN (plugin), FALSE);
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
s_vpn = nm_connection_get_setting_vpn (connection);
if (!s_vpn) {
g_set_error (error,
NM_VPN_PLUGIN_ERROR,
- NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,
+ NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION,
"%s",
"Could not process the request because the VPN "
"connection settings were invalid.");
@@ -613,7 +583,7 @@ ensure_killed (gpointer data)
}
static gboolean
-real_disconnect (NMVPNPlugin *plugin, GError **err)
+real_disconnect (NMVpnServicePlugin *plugin, GError **err)
{
NMIodinePluginPrivate *priv = NM_IODINE_PLUGIN_GET_PRIVATE (plugin);
@@ -635,10 +605,7 @@ nm_iodine_plugin_init (NMIodinePlugin *plugin)
{
NMIodinePluginPrivate *priv = NM_IODINE_PLUGIN_GET_PRIVATE (plugin);
- priv->ip4config = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- NULL,
- value_destroy);
+ g_variant_builder_init (&priv->ip4config, G_VARIANT_TYPE_VARDICT);
priv->failure = -1;
}
@@ -646,7 +613,7 @@ static void
nm_iodine_plugin_class_init (NMIodinePluginClass *iodine_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (iodine_class);
- NMVPNPluginClass *parent_class = NM_VPN_PLUGIN_CLASS (iodine_class);
+ NMVpnServicePluginClass *parent_class = NM_VPN_SERVICE_PLUGIN_CLASS (iodine_class);
g_type_class_add_private (object_class, sizeof (NMIodinePluginPrivate));
@@ -659,10 +626,20 @@ nm_iodine_plugin_class_init (NMIodinePluginClass *iodine_class)
NMIodinePlugin *
nm_iodine_plugin_new (void)
{
- return (NMIodinePlugin *) g_object_new (NM_TYPE_IODINE_PLUGIN,
- NM_VPN_PLUGIN_DBUS_SERVICE_NAME,
- NM_DBUS_SERVICE_IODINE,
- NULL);
+ NMIodinePlugin *plugin;
+ GError *error = NULL;
+
+ plugin = (NMIodinePlugin *) g_initable_new (NM_TYPE_IODINE_PLUGIN, NULL, &error,
+ NM_VPN_SERVICE_PLUGIN_DBUS_SERVICE_NAME,
+ NM_DBUS_SERVICE_IODINE,
+ NULL);
+
+ if (!plugin) {
+ g_warning ("Failed to initialize a plugin instance: %s", error->message);
+ g_error_free (error);
+ }
+
+ return plugin;
}
static void
diff --git a/src/nm-iodine-service.h b/src/nm-iodine-service.h
index 4a5604c..1102cc0 100644
--- a/src/nm-iodine-service.h
+++ b/src/nm-iodine-service.h
@@ -22,7 +22,8 @@
#define NM_IODINE_PLUGIN_H
#include <glib.h>
-#include <nm-vpn-plugin.h>
+#include <NetworkManager.h>
+#include <nm-vpn-service-plugin.h>
#include "nm-iodine-service-defines.h"
@@ -34,11 +35,11 @@
#define NM_IODINE_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IODINE_PLUGIN, NMIodinePluginClass))
typedef struct {
- NMVPNPlugin parent;
+ NMVpnServicePlugin parent;
} NMIodinePlugin;
typedef struct {
- NMVPNPluginClass parent;
+ NMVpnServicePluginClass parent;
} NMIodinePluginClass;
GType nm_iodine_plugin_get_type (void);