summary refs log tree commit diff
path: root/libnm-core/nm-vpn-plugin-info.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnm-core/nm-vpn-plugin-info.c')
-rw-r--r--libnm-core/nm-vpn-plugin-info.c1535
1 files changed, 778 insertions, 757 deletions
diff --git a/libnm-core/nm-vpn-plugin-info.c b/libnm-core/nm-vpn-plugin-info.c
index 7fbd8954..977be284 100644
--- a/libnm-core/nm-vpn-plugin-info.c
+++ b/libnm-core/nm-vpn-plugin-info.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: LGPL-2.1+
+/* SPDX-License-Identifier: LGPL-2.1+ */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
@@ -12,61 +12,62 @@
 #include "nm-errors.h"
 #include "nm-core-internal.h"
 
-#define DEFAULT_DIR_ETC     NMCONFDIR"/VPN"
-#define DEFAULT_DIR_LIB     NMLIBDIR"/VPN"
+#define DEFAULT_DIR_ETC NMCONFDIR "/VPN"
+#define DEFAULT_DIR_LIB NMLIBDIR "/VPN"
 
 enum {
-	PROP_0,
-	PROP_NAME,
-	PROP_FILENAME,
-	PROP_KEYFILE,
+    PROP_0,
+    PROP_NAME,
+    PROP_FILENAME,
+    PROP_KEYFILE,
 
-	LAST_PROP,
+    LAST_PROP,
 };
 
 typedef struct {
-	char *filename;
-	char *name;
-	char *service;
-	char *auth_dialog;
-	char **aliases;
-	GKeyFile *keyfile;
-
-	/* It is convenient for nm_vpn_plugin_info_lookup_property() to return a const char *,
-	 * contrary to what g_key_file_get_string() does. Hence we must cache the returned
-	 * value somewhere... let's put it in an internal hash table.
-	 * This contains a clone of all the strings in keyfile. */
-	GHashTable *keys;
-
-	gboolean editor_plugin_loaded;
-	NMVpnEditorPlugin *editor_plugin;
+    char *    filename;
+    char *    name;
+    char *    service;
+    char *    auth_dialog;
+    char **   aliases;
+    GKeyFile *keyfile;
+
+    /* It is convenient for nm_vpn_plugin_info_lookup_property() to return a const char *,
+     * contrary to what g_key_file_get_string() does. Hence we must cache the returned
+     * value somewhere... let's put it in an internal hash table.
+     * This contains a clone of all the strings in keyfile. */
+    GHashTable *keys;
+
+    gboolean           editor_plugin_loaded;
+    NMVpnEditorPlugin *editor_plugin;
 } NMVpnPluginInfoPrivate;
 
 /**
  * NMVpnPluginInfo:
  */
 struct _NMVpnPluginInfo {
-	GObject parent;
-	NMVpnPluginInfoPrivate _priv;
+    GObject                parent;
+    NMVpnPluginInfoPrivate _priv;
 };
 
 struct _NMVpnPluginInfoClass {
-	GObjectClass parent;
+    GObjectClass parent;
 };
 
-#define NM_VPN_PLUGIN_INFO_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMVpnPluginInfo, NM_IS_VPN_PLUGIN_INFO)
+#define NM_VPN_PLUGIN_INFO_GET_PRIVATE(self) \
+    _NM_GET_PRIVATE(self, NMVpnPluginInfo, NM_IS_VPN_PLUGIN_INFO)
 
-static void nm_vpn_plugin_info_initable_iface_init (GInitableIface *iface);
+static void nm_vpn_plugin_info_initable_iface_init(GInitableIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (NMVpnPluginInfo, nm_vpn_plugin_info, G_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_vpn_plugin_info_initable_iface_init);
-                         )
+G_DEFINE_TYPE_WITH_CODE(NMVpnPluginInfo,
+                        nm_vpn_plugin_info,
+                        G_TYPE_OBJECT,
+                        G_IMPLEMENT_INTERFACE(G_TYPE_INITABLE,
+                                              nm_vpn_plugin_info_initable_iface_init);)
 
 /*****************************************************************************/
 
-static NMVpnPluginInfo *_list_find_by_service (GSList *list,
-                                               const char *name,
-                                               const char *service);
+static NMVpnPluginInfo *_list_find_by_service(GSList *list, const char *name, const char *service);
 
 /*****************************************************************************/
 
@@ -81,60 +82,53 @@ static NMVpnPluginInfo *_list_find_by_service (GSList *list,
  * Since: 1.2
  */
 gboolean
-nm_vpn_plugin_info_validate_filename (const char *filename)
+nm_vpn_plugin_info_validate_filename(const char *filename)
 {
-	if (!filename || !g_str_has_suffix (filename, ".name"))
-		return FALSE;
-
-	/* originally, we didn't do further checks... but here we go. */
-	if (filename[0] == '.') {
-		/* this also rejects name ".name" alone. */
-		return FALSE;
-	}
-	return TRUE;
+    if (!filename || !g_str_has_suffix(filename, ".name"))
+        return FALSE;
+
+    /* originally, we didn't do further checks... but here we go. */
+    if (filename[0] == '.') {
+        /* this also rejects name ".name" alone. */
+        return FALSE;
+    }
+    return TRUE;
 }
 
 static gboolean
-nm_vpn_plugin_info_check_file_full (const char *filename,
-                                    gboolean check_absolute,
-                                    gboolean do_validate_filename,
-                                    gint64 check_owner,
-                                    NMUtilsCheckFilePredicate check_file,
-                                    gpointer user_data,
-                                    struct stat *out_st,
-                                    GError **error)
+nm_vpn_plugin_info_check_file_full(const char *              filename,
+                                   gboolean                  check_absolute,
+                                   gboolean                  do_validate_filename,
+                                   gint64                    check_owner,
+                                   NMUtilsCheckFilePredicate check_file,
+                                   gpointer                  user_data,
+                                   struct stat *             out_st,
+                                   GError **                 error)
 {
-	if (!filename || !*filename) {
-		g_set_error (error,
-		             NM_VPN_PLUGIN_ERROR,
-		             NM_VPN_PLUGIN_ERROR_FAILED,
-		             _("missing filename"));
-		return FALSE;
-	}
-
-	if (check_absolute && !g_path_is_absolute (filename)) {
-		g_set_error (error,
-		             NM_VPN_PLUGIN_ERROR,
-		             NM_VPN_PLUGIN_ERROR_FAILED,
-		             _("filename must be an absolute path (%s)"), filename);
-		return FALSE;
-	}
-
-	if (   do_validate_filename
-	    && !nm_vpn_plugin_info_validate_filename (filename)) {
-		g_set_error (error,
-		             NM_VPN_PLUGIN_ERROR,
-		             NM_VPN_PLUGIN_ERROR_FAILED,
-		             _("filename has invalid format (%s)"), filename);
-		return FALSE;
-	}
-
-	return _nm_utils_check_file (filename,
-	                             check_owner,
-	                             check_file,
-	                             user_data,
-	                             out_st,
-	                             error);
+    if (!filename || !*filename) {
+        g_set_error(error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_FAILED, _("missing filename"));
+        return FALSE;
+    }
+
+    if (check_absolute && !g_path_is_absolute(filename)) {
+        g_set_error(error,
+                    NM_VPN_PLUGIN_ERROR,
+                    NM_VPN_PLUGIN_ERROR_FAILED,
+                    _("filename must be an absolute path (%s)"),
+                    filename);
+        return FALSE;
+    }
+
+    if (do_validate_filename && !nm_vpn_plugin_info_validate_filename(filename)) {
+        g_set_error(error,
+                    NM_VPN_PLUGIN_ERROR,
+                    NM_VPN_PLUGIN_ERROR_FAILED,
+                    _("filename has invalid format (%s)"),
+                    filename);
+        return FALSE;
+    }
+
+    return _nm_utils_check_file(filename, check_owner, check_file, user_data, out_st, error);
 }
 
 /**
@@ -159,35 +153,42 @@ nm_vpn_plugin_info_check_file_full (const char *filename,
  * Since: 1.2
  */
 gboolean
-_nm_vpn_plugin_info_check_file (const char *filename,
-                                gboolean check_absolute,
-                                gboolean do_validate_filename,
-                                gint64 check_owner,
-                                NMUtilsCheckFilePredicate check_file,
-                                gpointer user_data,
-                                GError **error)
+_nm_vpn_plugin_info_check_file(const char *              filename,
+                               gboolean                  check_absolute,
+                               gboolean                  do_validate_filename,
+                               gint64                    check_owner,
+                               NMUtilsCheckFilePredicate check_file,
+                               gpointer                  user_data,
+                               GError **                 error)
 {
-	return nm_vpn_plugin_info_check_file_full (filename, check_absolute, do_validate_filename, check_owner, check_file, user_data, NULL, error);
+    return nm_vpn_plugin_info_check_file_full(filename,
+                                              check_absolute,
+                                              do_validate_filename,
+                                              check_owner,
+                                              check_file,
+                                              user_data,
+                                              NULL,
+                                              error);
 }
 
 typedef struct {
-	NMVpnPluginInfo *plugin_info;
-	struct stat stat;
+    NMVpnPluginInfo *plugin_info;
+    struct stat      stat;
 } LoadDirInfo;
 
 static int
-_sort_files (LoadDirInfo *a, LoadDirInfo *b)
+_sort_files(LoadDirInfo *a, LoadDirInfo *b)
 {
-	time_t ta, tb;
-
-	ta = MAX (a->stat.st_mtime, a->stat.st_ctime);
-	tb = MAX (b->stat.st_mtime, b->stat.st_ctime);
-	if (ta < tb)
-		return 1;
-	if (ta > tb)
-		return -1;
-	return g_strcmp0 (nm_vpn_plugin_info_get_filename (a->plugin_info),
-	                  nm_vpn_plugin_info_get_filename (b->plugin_info));
+    time_t ta, tb;
+
+    ta = MAX(a->stat.st_mtime, a->stat.st_ctime);
+    tb = MAX(b->stat.st_mtime, b->stat.st_ctime);
+    if (ta < tb)
+        return 1;
+    if (ta > tb)
+        return -1;
+    return g_strcmp0(nm_vpn_plugin_info_get_filename(a->plugin_info),
+                     nm_vpn_plugin_info_get_filename(b->plugin_info));
 }
 
 /**
@@ -197,9 +198,9 @@ _sort_files (LoadDirInfo *a, LoadDirInfo *b)
  *   VPN plugin directory.
  */
 const char *
-_nm_vpn_plugin_info_get_default_dir_etc ()
+_nm_vpn_plugin_info_get_default_dir_etc()
 {
-	return DEFAULT_DIR_ETC;
+    return DEFAULT_DIR_ETC;
 }
 
 /**
@@ -209,9 +210,9 @@ _nm_vpn_plugin_info_get_default_dir_etc ()
  *   VPN plugin directory.
  */
 const char *
-_nm_vpn_plugin_info_get_default_dir_lib ()
+_nm_vpn_plugin_info_get_default_dir_lib()
 {
-	return DEFAULT_DIR_LIB;
+    return DEFAULT_DIR_LIB;
 }
 
 /**
@@ -222,9 +223,9 @@ _nm_vpn_plugin_info_get_default_dir_lib ()
  * that directory.
  */
 const char *
-_nm_vpn_plugin_info_get_default_dir_user ()
+_nm_vpn_plugin_info_get_default_dir_user()
 {
-	return nm_str_not_empty (g_getenv ("NM_VPN_PLUGIN_DIR"));
+    return nm_str_not_empty(g_getenv("NM_VPN_PLUGIN_DIR"));
 }
 
 /**
@@ -243,63 +244,63 @@ _nm_vpn_plugin_info_get_default_dir_user ()
  * Returns: (transfer full) (element-type NMVpnPluginInfo): list of loaded plugin infos.
  */
 GSList *
-_nm_vpn_plugin_info_list_load_dir (const char *dirname,
-                                   gboolean do_validate_filename,
-                                   gint64 check_owner,
-                                   NMUtilsCheckFilePredicate check_file,
-                                   gpointer user_data)
+_nm_vpn_plugin_info_list_load_dir(const char *              dirname,
+                                  gboolean                  do_validate_filename,
+                                  gint64                    check_owner,
+                                  NMUtilsCheckFilePredicate check_file,
+                                  gpointer                  user_data)
 {
-	GDir *dir;
-	const char *fn;
-	GArray *array;
-	GSList *res = NULL;
-	guint i;
-
-	g_return_val_if_fail (dirname, NULL);
-
-	if (!dirname[0])
-		return NULL;
-
-	dir = g_dir_open (dirname, 0, NULL);
-	if (!dir)
-		return NULL;
-
-	array = g_array_new (FALSE, FALSE, sizeof (LoadDirInfo));
-
-	while ((fn = g_dir_read_name (dir))) {
-		gs_free char *filename = NULL;
-		LoadDirInfo info = { 0 };
-
-		filename = g_build_filename (dirname, fn, NULL);
-		if (nm_vpn_plugin_info_check_file_full (filename,
-		                                        FALSE,
-		                                        do_validate_filename,
-		                                        check_owner,
-		                                        check_file,
-		                                        user_data,
-		                                        &info.stat,
-		                                        NULL)) {
-			info.plugin_info = nm_vpn_plugin_info_new_from_file (filename, NULL);
-			if (info.plugin_info) {
-				g_array_append_val (array, info);
-				continue;
-			}
-		}
-	}
-	g_dir_close (dir);
-
-	/* sort the files so that we have a stable behavior. The directory might contain
-	 * duplicate VPNs, so while nm_vpn_plugin_info_list_load() would load them all, the
-	 * caller probably wants to reject duplicates. Having a stable order means we always
-	 * reject the same files in face of duplicates. */
-	g_array_sort (array, (GCompareFunc) _sort_files);
-
-	for (i = 0; i < array->len; i++)
-		res = g_slist_prepend (res, g_array_index (array, LoadDirInfo, i).plugin_info);
-
-	g_array_unref (array);
-
-	return g_slist_reverse (res);
+    GDir *      dir;
+    const char *fn;
+    GArray *    array;
+    GSList *    res = NULL;
+    guint       i;
+
+    g_return_val_if_fail(dirname, NULL);
+
+    if (!dirname[0])
+        return NULL;
+
+    dir = g_dir_open(dirname, 0, NULL);
+    if (!dir)
+        return NULL;
+
+    array = g_array_new(FALSE, FALSE, sizeof(LoadDirInfo));
+
+    while ((fn = g_dir_read_name(dir))) {
+        gs_free char *filename = NULL;
+        LoadDirInfo   info     = {0};
+
+        filename = g_build_filename(dirname, fn, NULL);
+        if (nm_vpn_plugin_info_check_file_full(filename,
+                                               FALSE,
+                                               do_validate_filename,
+                                               check_owner,
+                                               check_file,
+                                               user_data,
+                                               &info.stat,
+                                               NULL)) {
+            info.plugin_info = nm_vpn_plugin_info_new_from_file(filename, NULL);
+            if (info.plugin_info) {
+                g_array_append_val(array, info);
+                continue;
+            }
+        }
+    }
+    g_dir_close(dir);
+
+    /* sort the files so that we have a stable behavior. The directory might contain
+     * duplicate VPNs, so while nm_vpn_plugin_info_list_load() would load them all, the
+     * caller probably wants to reject duplicates. Having a stable order means we always
+     * reject the same files in face of duplicates. */
+    g_array_sort(array, (GCompareFunc) _sort_files);
+
+    for (i = 0; i < array->len; i++)
+        res = g_slist_prepend(res, g_array_index(array, LoadDirInfo, i).plugin_info);
+
+    g_array_unref(array);
+
+    return g_slist_reverse(res);
 }
 
 /**
@@ -311,43 +312,42 @@ _nm_vpn_plugin_info_list_load_dir (const char *dirname,
  * Since: 1.2
  */
 GSList *
-nm_vpn_plugin_info_list_load ()
+nm_vpn_plugin_info_list_load()
 {
-	int i;
-	gint64 uid;
-	GSList *list = NULL;
-	GSList *infos, *info;
-	const char *const dir[] = {
-		/* We load plugins from NM_VPN_PLUGIN_DIR *and* DEFAULT_DIR*, with
-		 * preference to the former.
-		 *
-		 * load user directory with highest priority. */
-		_nm_vpn_plugin_info_get_default_dir_user (),
-
-		/* lib directory has higher priority then etc. The reason is that
-		 * etc is deprecated and used by old plugins. We expect newer plugins
-		 * to install their file in lib, where they have higher priority.
-		 *
-		 * Optimally, there are no duplicates anyway, so it doesn't really matter. */
-		_nm_vpn_plugin_info_get_default_dir_lib (),
-		_nm_vpn_plugin_info_get_default_dir_etc (),
-	};
-
-	uid = getuid ();
-
-	for (i = 0; i < G_N_ELEMENTS (dir); i++) {
-		if (   !dir[i]
-		    || nm_utils_strv_find_first ((char **) dir, i, dir[i]) >= 0)
-			continue;
-
-		infos = _nm_vpn_plugin_info_list_load_dir (dir[i], TRUE, uid, NULL, NULL);
-
-		for (info = infos; info; info = info->next)
-			nm_vpn_plugin_info_list_add (&list, info->data, NULL);
-
-		g_slist_free_full (infos, g_object_unref);
-	}
-	return list;
+    int               i;
+    gint64            uid;
+    GSList *          list = NULL;
+    GSList *          infos, *info;
+    const char *const dir[] = {
+        /* We load plugins from NM_VPN_PLUGIN_DIR *and* DEFAULT_DIR*, with
+         * preference to the former.
+         *
+         * load user directory with highest priority. */
+        _nm_vpn_plugin_info_get_default_dir_user(),
+
+        /* lib directory has higher priority then etc. The reason is that
+         * etc is deprecated and used by old plugins. We expect newer plugins
+         * to install their file in lib, where they have higher priority.
+         *
+         * Optimally, there are no duplicates anyway, so it doesn't really matter. */
+        _nm_vpn_plugin_info_get_default_dir_lib(),
+        _nm_vpn_plugin_info_get_default_dir_etc(),
+    };
+
+    uid = getuid();
+
+    for (i = 0; i < G_N_ELEMENTS(dir); i++) {
+        if (!dir[i] || nm_utils_strv_find_first((char **) dir, i, dir[i]) >= 0)
+            continue;
+
+        infos = _nm_vpn_plugin_info_list_load_dir(dir[i], TRUE, uid, NULL, NULL);
+
+        for (info = infos; info; info = info->next)
+            nm_vpn_plugin_info_list_add(&list, info->data, NULL);
+
+        g_slist_free_full(infos, g_object_unref);
+    }
+    return list;
 }
 
 /**
@@ -367,62 +367,63 @@ nm_vpn_plugin_info_list_load ()
  * Since: 1.4
  */
 NMVpnPluginInfo *
-nm_vpn_plugin_info_new_search_file (const char *name, const char *service)
+nm_vpn_plugin_info_new_search_file(const char *name, const char *service)
 {
-	NMVpnPluginInfo *info;
-	GSList *infos;
+    NMVpnPluginInfo *info;
+    GSList *         infos;
 
-	if (!name && !service)
-		g_return_val_if_reached (NULL);
+    if (!name && !service)
+        g_return_val_if_reached(NULL);
 
-	infos = nm_vpn_plugin_info_list_load ();
-	info = nm_g_object_ref (_list_find_by_service (infos, name, service));
-	g_slist_free_full (infos, g_object_unref);
-	return info;
+    infos = nm_vpn_plugin_info_list_load();
+    info  = nm_g_object_ref(_list_find_by_service(infos, name, service));
+    g_slist_free_full(infos, g_object_unref);
+    return info;
 }
 
 /*****************************************************************************/
 
 static gboolean
-_check_no_conflict (NMVpnPluginInfo *i1, NMVpnPluginInfo *i2, GError **error)
+_check_no_conflict(NMVpnPluginInfo *i1, NMVpnPluginInfo *i2, GError **error)
 {
-	NMVpnPluginInfoPrivate *priv1, *priv2;
-	uint i;
-	struct {
-		const char *group;
-		const char *key;
-	} check_list[] = {
-		{ NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "service" },
-		{ NM_VPN_PLUGIN_INFO_KF_GROUP_LIBNM,      "plugin" },
-		{ NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME,      "properties" },
-	};
-
-	priv1 = NM_VPN_PLUGIN_INFO_GET_PRIVATE (i1);
-	priv2 = NM_VPN_PLUGIN_INFO_GET_PRIVATE (i2);
-
-	for (i = 0; i < G_N_ELEMENTS (check_list); i++) {
-		gs_free NMUtilsStrStrDictKey *k = NULL;
-		const char *s1, *s2;
-
-		k = _nm_utils_strstrdictkey_create (check_list[i].group, check_list[i].key);
-		s1 = g_hash_table_lookup (priv1->keys, k);
-		if (!s1)
-			continue;
-		s2 = g_hash_table_lookup (priv2->keys, k);
-		if (!s2)
-			continue;
-
-		if (strcmp (s1, s2) == 0) {
-			g_set_error (error,
-			             NM_VPN_PLUGIN_ERROR,
-			             NM_VPN_PLUGIN_ERROR_FAILED,
-			             _("there exists a conflicting plugin (%s) that has the same %s.%s value"),
-			             priv2->name,
-			             check_list[i].group, check_list[i].key);
-			return FALSE;
-		}
-	}
-	return TRUE;
+    NMVpnPluginInfoPrivate *priv1, *priv2;
+    uint                    i;
+    struct {
+        const char *group;
+        const char *key;
+    } check_list[] = {
+        {NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "service"},
+        {NM_VPN_PLUGIN_INFO_KF_GROUP_LIBNM, "plugin"},
+        {NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME, "properties"},
+    };
+
+    priv1 = NM_VPN_PLUGIN_INFO_GET_PRIVATE(i1);
+    priv2 = NM_VPN_PLUGIN_INFO_GET_PRIVATE(i2);
+
+    for (i = 0; i < G_N_ELEMENTS(check_list); i++) {
+        gs_free NMUtilsStrStrDictKey *k = NULL;
+        const char *                  s1, *s2;
+
+        k  = _nm_utils_strstrdictkey_create(check_list[i].group, check_list[i].key);
+        s1 = g_hash_table_lookup(priv1->keys, k);
+        if (!s1)
+            continue;
+        s2 = g_hash_table_lookup(priv2->keys, k);
+        if (!s2)
+            continue;
+
+        if (strcmp(s1, s2) == 0) {
+            g_set_error(error,
+                        NM_VPN_PLUGIN_ERROR,
+                        NM_VPN_PLUGIN_ERROR_FAILED,
+                        _("there exists a conflicting plugin (%s) that has the same %s.%s value"),
+                        priv2->name,
+                        check_list[i].group,
+                        check_list[i].key);
+            return FALSE;
+        }
+    }
+    return TRUE;
 }
 
 /**
@@ -437,36 +438,36 @@ _check_no_conflict (NMVpnPluginInfo *i1, NMVpnPluginInfo *i2, GError **error)
  * Since: 1.2
  */
 gboolean
-nm_vpn_plugin_info_list_add (GSList **list, NMVpnPluginInfo *plugin_info, GError **error)
+nm_vpn_plugin_info_list_add(GSList **list, NMVpnPluginInfo *plugin_info, GError **error)
 {
-	GSList *iter;
-	const char *name;
-
-	g_return_val_if_fail (list, FALSE);
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (plugin_info), FALSE);
-
-	name = nm_vpn_plugin_info_get_name (plugin_info);
-	for (iter = *list; iter; iter = iter->next) {
-		if (iter->data == plugin_info)
-			return TRUE;
-
-		if (strcmp (nm_vpn_plugin_info_get_name (iter->data), name) == 0) {
-			g_set_error (error,
-			             NM_VPN_PLUGIN_ERROR,
-			             NM_VPN_PLUGIN_ERROR_FAILED,
-			             _("there exists a conflicting plugin with the same name (%s)"),
-			             name);
-			return FALSE;
-		}
-
-		/* the plugin must have unique values for certain properties. E.g. two different
-		 * plugins cannot share the same service type. */
-		if (!_check_no_conflict (plugin_info, iter->data, error))
-			return FALSE;
-	}
-
-	*list = g_slist_append (*list, g_object_ref (plugin_info));
-	return TRUE;
+    GSList *    iter;
+    const char *name;
+
+    g_return_val_if_fail(list, FALSE);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(plugin_info), FALSE);
+
+    name = nm_vpn_plugin_info_get_name(plugin_info);
+    for (iter = *list; iter; iter = iter->next) {
+        if (iter->data == plugin_info)
+            return TRUE;
+
+        if (strcmp(nm_vpn_plugin_info_get_name(iter->data), name) == 0) {
+            g_set_error(error,
+                        NM_VPN_PLUGIN_ERROR,
+                        NM_VPN_PLUGIN_ERROR_FAILED,
+                        _("there exists a conflicting plugin with the same name (%s)"),
+                        name);
+            return FALSE;
+        }
+
+        /* the plugin must have unique values for certain properties. E.g. two different
+         * plugins cannot share the same service type. */
+        if (!_check_no_conflict(plugin_info, iter->data, error))
+            return FALSE;
+    }
+
+    *list = g_slist_append(*list, g_object_ref(plugin_info));
+    return TRUE;
 }
 
 /**
@@ -481,17 +482,17 @@ nm_vpn_plugin_info_list_add (GSList **list, NMVpnPluginInfo *plugin_info, GError
  * Since: 1.2
  */
 gboolean
-nm_vpn_plugin_info_list_remove (GSList **list, NMVpnPluginInfo *plugin_info)
+nm_vpn_plugin_info_list_remove(GSList **list, NMVpnPluginInfo *plugin_info)
 {
-	g_return_val_if_fail (list, FALSE);
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (plugin_info), FALSE);
+    g_return_val_if_fail(list, FALSE);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(plugin_info), FALSE);
 
-	if (!g_slist_find (*list, plugin_info))
-		return FALSE;
+    if (!g_slist_find(*list, plugin_info))
+        return FALSE;
 
-	*list = g_slist_remove (*list, plugin_info);
-	g_object_unref (plugin_info);
-	return TRUE;
+    *list = g_slist_remove(*list, plugin_info);
+    g_object_unref(plugin_info);
+    return TRUE;
 }
 
 /**
@@ -504,18 +505,18 @@ nm_vpn_plugin_info_list_remove (GSList **list, NMVpnPluginInfo *plugin_info)
  * Since: 1.2
  */
 NMVpnPluginInfo *
-nm_vpn_plugin_info_list_find_by_name (GSList *list, const char *name)
+nm_vpn_plugin_info_list_find_by_name(GSList *list, const char *name)
 {
-	GSList *iter;
+    GSList *iter;
 
-	if (!name)
-		g_return_val_if_reached (NULL);
+    if (!name)
+        g_return_val_if_reached(NULL);
 
-	for (iter = list; iter; iter = iter->next) {
-		if (strcmp (nm_vpn_plugin_info_get_name (iter->data), name) == 0)
-			return iter->data;
-	}
-	return NULL;
+    for (iter = list; iter; iter = iter->next) {
+        if (strcmp(nm_vpn_plugin_info_get_name(iter->data), name) == 0)
+            return iter->data;
+    }
+    return NULL;
 }
 
 /**
@@ -528,39 +529,35 @@ nm_vpn_plugin_info_list_find_by_name (GSList *list, const char *name)
  * Since: 1.2
  */
 NMVpnPluginInfo *
-nm_vpn_plugin_info_list_find_by_filename (GSList *list, const char *filename)
+nm_vpn_plugin_info_list_find_by_filename(GSList *list, const char *filename)
 {
-	GSList *iter;
+    GSList *iter;
 
-	if (!filename)
-		g_return_val_if_reached (NULL);
+    if (!filename)
+        g_return_val_if_reached(NULL);
 
-	for (iter = list; iter; iter = iter->next) {
-		if (g_strcmp0 (nm_vpn_plugin_info_get_filename (iter->data), filename) == 0)
-			return iter->data;
-	}
-	return NULL;
+    for (iter = list; iter; iter = iter->next) {
+        if (g_strcmp0(nm_vpn_plugin_info_get_filename(iter->data), filename) == 0)
+            return iter->data;
+    }
+    return NULL;
 }
 
 static NMVpnPluginInfo *
-_list_find_by_service (GSList *list,
-                       const char *name,
-                       const char *service)
+_list_find_by_service(GSList *list, const char *name, const char *service)
 {
-	for (; list; list = list->next) {
-		NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (list->data);
-
-		if (   name
-		    && !nm_streq (name, priv->name))
-			continue;
-		if (   service
-		    && !nm_streq (priv->service, service)
-		    && (nm_utils_strv_find_first (priv->aliases, -1, service) < 0))
-			continue;
-
-		return list->data;
-	}
-	return NULL;
+    for (; list; list = list->next) {
+        NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(list->data);
+
+        if (name && !nm_streq(name, priv->name))
+            continue;
+        if (service && !nm_streq(priv->service, service)
+            && (nm_utils_strv_find_first(priv->aliases, -1, service) < 0))
+            continue;
+
+        return list->data;
+    }
+    return NULL;
 }
 
 /**
@@ -574,27 +571,27 @@ _list_find_by_service (GSList *list,
  * Since: 1.2
  */
 NMVpnPluginInfo *
-nm_vpn_plugin_info_list_find_by_service (GSList *list, const char *service)
+nm_vpn_plugin_info_list_find_by_service(GSList *list, const char *service)
 {
-	if (!service)
-		g_return_val_if_reached (NULL);
-	return _list_find_by_service (list, NULL, service);
+    if (!service)
+        g_return_val_if_reached(NULL);
+    return _list_find_by_service(list, NULL, service);
 }
 
 /* known_names are well known short names for the service-type. They all implicitly
  * have a prefix "org.freedesktop.NetworkManager." + known_name. */
 static const char *known_names[] = {
-	"openvpn",
-	"vpnc",
-	"pptp",
-	"openconnect",
-	"openswan",
-	"libreswan",
-	"strongswan",
-	"ssh",
-	"l2tp",
-	"iodine",
-	"fortisslvpn",
+    "openvpn",
+    "vpnc",
+    "pptp",
+    "openconnect",
+    "openswan",
+    "libreswan",
+    "strongswan",
+    "ssh",
+    "l2tp",
+    "iodine",
+    "fortisslvpn",
 };
 
 /**
@@ -619,57 +616,57 @@ static const char *known_names[] = {
  * Since: 1.4
  */
 char *
-nm_vpn_plugin_info_list_find_service_type (GSList *list, const char *name)
+nm_vpn_plugin_info_list_find_service_type(GSList *list, const char *name)
 {
-	NMVpnPluginInfo *info;
-	char *n;
-
-	if (!name)
-		g_return_val_if_reached (NULL);
-	if (!*name)
-		return NULL;
-
-	/* First, try to interpret @name as a full service-type (or alias). */
-	info = _list_find_by_service (list, NULL, name);
-	if (info)
-		return g_strdup (name);
-
-	/* try to interpret @name as plugin name, in which case we return
-	 * the main service-type (not an alias). */
-	info = _list_find_by_service (list, name, NULL);
-	if (info)
-		return g_strdup (NM_VPN_PLUGIN_INFO_GET_PRIVATE (info)->service);
-
-	/* check the hard-coded list of short-names. They all have have the same
-	 * well-known prefix org.freedesktop.NetworkManager and the name. */
-	if (nm_utils_strv_find_first ((char **) known_names, G_N_ELEMENTS (known_names), name) >= 0)
-		return g_strdup_printf ("%s.%s", NM_DBUS_INTERFACE, name);
-
-	/* try, if there exists a plugin with @name under org.freedesktop.NetworkManager.
-	 * Allow this to be a valid abbreviation. */
-	n = g_strdup_printf ("%s.%s", NM_DBUS_INTERFACE, name);
-	if (_list_find_by_service (list, NULL, n))
-		return n;
-	g_free (n);
-
-	/* currently, VPN plugins have no way to define a short-name for their
-	 * alias name, unless the alias name is prefixed by org.freedesktop.NetworkManager. */
-
-	return NULL;
+    NMVpnPluginInfo *info;
+    char *           n;
+
+    if (!name)
+        g_return_val_if_reached(NULL);
+    if (!*name)
+        return NULL;
+
+    /* First, try to interpret @name as a full service-type (or alias). */
+    info = _list_find_by_service(list, NULL, name);
+    if (info)
+        return g_strdup(name);
+
+    /* try to interpret @name as plugin name, in which case we return
+     * the main service-type (not an alias). */
+    info = _list_find_by_service(list, name, NULL);
+    if (info)
+        return g_strdup(NM_VPN_PLUGIN_INFO_GET_PRIVATE(info)->service);
+
+    /* check the hard-coded list of short-names. They all have the same
+     * well-known prefix org.freedesktop.NetworkManager and the name. */
+    if (nm_utils_strv_find_first((char **) known_names, G_N_ELEMENTS(known_names), name) >= 0)
+        return g_strdup_printf("%s.%s", NM_DBUS_INTERFACE, name);
+
+    /* try, if there exists a plugin with @name under org.freedesktop.NetworkManager.
+     * Allow this to be a valid abbreviation. */
+    n = g_strdup_printf("%s.%s", NM_DBUS_INTERFACE, name);
+    if (_list_find_by_service(list, NULL, n))
+        return n;
+    g_free(n);
+
+    /* currently, VPN plugins have no way to define a short-name for their
+     * alias name, unless the alias name is prefixed by org.freedesktop.NetworkManager. */
+
+    return NULL;
 }
 
 static const char *
-_service_type_get_default_abbreviation (const char *service_type)
+_service_type_get_default_abbreviation(const char *service_type)
 {
-	if (!g_str_has_prefix (service_type, NM_DBUS_INTERFACE))
-		return NULL;
-	service_type += NM_STRLEN (NM_DBUS_INTERFACE);
-	if (service_type[0] != '.')
-		return NULL;
-	service_type++;
-	if (!service_type[0])
-		return NULL;
-	return service_type;
+    if (!g_str_has_prefix(service_type, NM_DBUS_INTERFACE))
+        return NULL;
+    service_type += NM_STRLEN(NM_DBUS_INTERFACE);
+    if (service_type[0] != '.')
+        return NULL;
+    service_type++;
+    if (!service_type[0])
+        return NULL;
+    return service_type;
 }
 
 /**
@@ -688,66 +685,66 @@ _service_type_get_default_abbreviation (const char *service_type)
  * Since: 1.4
  */
 char **
-nm_vpn_plugin_info_list_get_service_types (GSList *list,
-                                           gboolean only_existing,
-                                           gboolean with_abbreviations)
+nm_vpn_plugin_info_list_get_service_types(GSList * list,
+                                          gboolean only_existing,
+                                          gboolean with_abbreviations)
 {
-	GSList *iter;
-	GPtrArray *l;
-	guint i, j;
-	const char *n;
-
-	l = g_ptr_array_sized_new (20);
-
-	for (iter = list; iter; iter = iter->next) {
-		NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (iter->data);
-
-		g_ptr_array_add (l, g_strdup (priv->service));
-		if (priv->aliases) {
-			for (i = 0; priv->aliases[i]; i++)
-				g_ptr_array_add (l, g_strdup (priv->aliases[i]));
-		}
-
-		if (with_abbreviations) {
-			g_ptr_array_add (l, g_strdup (priv->name));
-			n = _service_type_get_default_abbreviation (priv->service);
-			if (n)
-				g_ptr_array_add (l, g_strdup (n));
-			for (i = 0; priv->aliases && priv->aliases[i]; i++) {
-				n = _service_type_get_default_abbreviation (priv->aliases[i]);
-				if (n)
-					g_ptr_array_add (l, g_strdup (n));
-			}
-		}
-	}
-
-	if (!only_existing) {
-		for (i = 0; i < G_N_ELEMENTS (known_names); i++) {
-			g_ptr_array_add (l, g_strdup_printf ("%s.%s", NM_DBUS_INTERFACE, known_names[i]));
-			if (with_abbreviations)
-				g_ptr_array_add (l, g_strdup (known_names[i]));
-		}
-	}
-
-	if (l->len <= 0) {
-		g_ptr_array_free (l, TRUE);
-		return g_new0 (char *, 1);
-	}
-
-	/* sort the result and remove duplicates. */
-	g_ptr_array_sort (l, nm_strcmp_p);
-	for (i = 1, j = 1; i < l->len; i++) {
-		if (nm_streq (l->pdata[j-1], l->pdata[i]))
-			g_free (l->pdata[i]);
-		else
-			l->pdata[j++] = l->pdata[i];
-	}
-
-	if (j == l->len)
-		g_ptr_array_add (l, NULL);
-	else
-		l->pdata[j] = NULL;
-	return (char **) g_ptr_array_free (l, FALSE);
+    GSList *    iter;
+    GPtrArray * l;
+    guint       i, j;
+    const char *n;
+
+    l = g_ptr_array_sized_new(20);
+
+    for (iter = list; iter; iter = iter->next) {
+        NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(iter->data);
+
+        g_ptr_array_add(l, g_strdup(priv->service));
+        if (priv->aliases) {
+            for (i = 0; priv->aliases[i]; i++)
+                g_ptr_array_add(l, g_strdup(priv->aliases[i]));
+        }
+
+        if (with_abbreviations) {
+            g_ptr_array_add(l, g_strdup(priv->name));
+            n = _service_type_get_default_abbreviation(priv->service);
+            if (n)
+                g_ptr_array_add(l, g_strdup(n));
+            for (i = 0; priv->aliases && priv->aliases[i]; i++) {
+                n = _service_type_get_default_abbreviation(priv->aliases[i]);
+                if (n)
+                    g_ptr_array_add(l, g_strdup(n));
+            }
+        }
+    }
+
+    if (!only_existing) {
+        for (i = 0; i < G_N_ELEMENTS(known_names); i++) {
+            g_ptr_array_add(l, g_strdup_printf("%s.%s", NM_DBUS_INTERFACE, known_names[i]));
+            if (with_abbreviations)
+                g_ptr_array_add(l, g_strdup(known_names[i]));
+        }
+    }
+
+    if (l->len <= 0) {
+        g_ptr_array_free(l, TRUE);
+        return g_new0(char *, 1);
+    }
+
+    /* sort the result and remove duplicates. */
+    g_ptr_array_sort(l, nm_strcmp_p);
+    for (i = 1, j = 1; i < l->len; i++) {
+        if (nm_streq(l->pdata[j - 1], l->pdata[i]))
+            g_free(l->pdata[i]);
+        else
+            l->pdata[j++] = l->pdata[i];
+    }
+
+    if (j == l->len)
+        g_ptr_array_add(l, NULL);
+    else
+        l->pdata[j] = NULL;
+    return (char **) g_ptr_array_free(l, FALSE);
 }
 
 /*****************************************************************************/
@@ -761,11 +758,11 @@ nm_vpn_plugin_info_list_get_service_types (GSList *list,
  * Since: 1.2
  */
 const char *
-nm_vpn_plugin_info_get_filename (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_get_filename(NMVpnPluginInfo *self)
 {
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
 
-	return NM_VPN_PLUGIN_INFO_GET_PRIVATE (self)->filename;
+    return NM_VPN_PLUGIN_INFO_GET_PRIVATE(self)->filename;
 }
 
 /**
@@ -777,11 +774,11 @@ nm_vpn_plugin_info_get_filename (NMVpnPluginInfo *self)
  * Since: 1.2
  */
 const char *
-nm_vpn_plugin_info_get_name (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_get_name(NMVpnPluginInfo *self)
 {
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
 
-	return NM_VPN_PLUGIN_INFO_GET_PRIVATE (self)->name;
+    return NM_VPN_PLUGIN_INFO_GET_PRIVATE(self)->name;
 }
 
 /**
@@ -793,11 +790,11 @@ nm_vpn_plugin_info_get_name (NMVpnPluginInfo *self)
  * Since: 1.4
  */
 const char *
-nm_vpn_plugin_info_get_service (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_get_service(NMVpnPluginInfo *self)
 {
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
 
-	return NM_VPN_PLUGIN_INFO_GET_PRIVATE (self)->service;
+    return NM_VPN_PLUGIN_INFO_GET_PRIVATE(self)->service;
 }
 
 /**
@@ -809,31 +806,33 @@ nm_vpn_plugin_info_get_service (NMVpnPluginInfo *self)
  * Since: 1.4
  **/
 const char *
-nm_vpn_plugin_info_get_auth_dialog (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_get_auth_dialog(NMVpnPluginInfo *self)
 {
-	NMVpnPluginInfoPrivate *priv;
+    NMVpnPluginInfoPrivate *priv;
 
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
 
-	priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (self);
+    priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(self);
 
-	if (G_UNLIKELY (priv->auth_dialog == NULL)) {
-		const char *s;
+    if (G_UNLIKELY(priv->auth_dialog == NULL)) {
+        const char *s;
 
-		s = g_hash_table_lookup (priv->keys, _nm_utils_strstrdictkey_static (NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME, "auth-dialog"));
-		if (!s || !s[0])
-			priv->auth_dialog = g_strdup ("");
-		else if (g_path_is_absolute (s))
-			priv->auth_dialog = g_strdup (s);
-		else {
-			/* for relative paths, we take the basename and assume it's in LIBEXECDIR. */
-			gs_free char *prog_basename = g_path_get_basename (s);
+        s = g_hash_table_lookup(
+            priv->keys,
+            _nm_utils_strstrdictkey_static(NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME, "auth-dialog"));
+        if (!s || !s[0])
+            priv->auth_dialog = g_strdup("");
+        else if (g_path_is_absolute(s))
+            priv->auth_dialog = g_strdup(s);
+        else {
+            /* for relative paths, we take the basename and assume it's in LIBEXECDIR. */
+            gs_free char *prog_basename = g_path_get_basename(s);
 
-			priv->auth_dialog = g_build_filename (LIBEXECDIR, prog_basename, NULL);
-		}
-	}
+            priv->auth_dialog = g_build_filename(LIBEXECDIR, prog_basename, NULL);
+        }
+    }
 
-	return priv->auth_dialog[0] ? priv->auth_dialog : NULL;
+    return priv->auth_dialog[0] ? priv->auth_dialog : NULL;
 }
 
 /**
@@ -845,14 +844,16 @@ nm_vpn_plugin_info_get_auth_dialog (NMVpnPluginInfo *self)
  * Since: 1.4
  */
 gboolean
-nm_vpn_plugin_info_supports_hints (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_supports_hints(NMVpnPluginInfo *self)
 {
-	const char *s;
+    const char *s;
 
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), FALSE);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), FALSE);
 
-	s = nm_vpn_plugin_info_lookup_property (self, NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME, "supports-hints");
-	return _nm_utils_ascii_str_to_bool (s, FALSE);
+    s = nm_vpn_plugin_info_lookup_property(self,
+                                           NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME,
+                                           "supports-hints");
+    return _nm_utils_ascii_str_to_bool(s, FALSE);
 }
 
 /**
@@ -864,12 +865,13 @@ nm_vpn_plugin_info_supports_hints (NMVpnPluginInfo *self)
  * Since: 1.2
  */
 const char *
-nm_vpn_plugin_info_get_plugin (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_get_plugin(NMVpnPluginInfo *self)
 {
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
 
-	return g_hash_table_lookup (NM_VPN_PLUGIN_INFO_GET_PRIVATE (self)->keys,
-	                            _nm_utils_strstrdictkey_static (NM_VPN_PLUGIN_INFO_KF_GROUP_LIBNM, "plugin"));
+    return g_hash_table_lookup(
+        NM_VPN_PLUGIN_INFO_GET_PRIVATE(self)->keys,
+        _nm_utils_strstrdictkey_static(NM_VPN_PLUGIN_INFO_KF_GROUP_LIBNM, "plugin"));
 }
 
 /**
@@ -881,12 +883,13 @@ nm_vpn_plugin_info_get_plugin (NMVpnPluginInfo *self)
  * Since: 1.2
  */
 const char *
-nm_vpn_plugin_info_get_program (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_get_program(NMVpnPluginInfo *self)
 {
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
 
-	return g_hash_table_lookup (NM_VPN_PLUGIN_INFO_GET_PRIVATE (self)->keys,
-	                            _nm_utils_strstrdictkey_static (NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "program"));
+    return g_hash_table_lookup(
+        NM_VPN_PLUGIN_INFO_GET_PRIVATE(self)->keys,
+        _nm_utils_strstrdictkey_static(NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "program"));
 }
 
 /**
@@ -898,14 +901,16 @@ nm_vpn_plugin_info_get_program (NMVpnPluginInfo *self)
  * Since: 1.2
  */
 gboolean
-nm_vpn_plugin_info_supports_multiple (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_supports_multiple(NMVpnPluginInfo *self)
 {
-	const char *s;
+    const char *s;
 
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), FALSE);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), FALSE);
 
-	s = nm_vpn_plugin_info_lookup_property (self, NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "supports-multiple-connections");
-	return _nm_utils_ascii_str_to_bool (s, FALSE);
+    s = nm_vpn_plugin_info_lookup_property(self,
+                                           NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION,
+                                           "supports-multiple-connections");
+    return _nm_utils_ascii_str_to_bool(s, FALSE);
 }
 
 /**
@@ -917,21 +922,21 @@ nm_vpn_plugin_info_supports_multiple (NMVpnPluginInfo *self)
  *
  * Since: 1.4
  */
-const char *const*
-nm_vpn_plugin_info_get_aliases (NMVpnPluginInfo *self)
+const char *const *
+nm_vpn_plugin_info_get_aliases(NMVpnPluginInfo *self)
 {
-	NMVpnPluginInfoPrivate *priv;
+    NMVpnPluginInfoPrivate *priv;
 
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
 
-	priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (self);
-	if (priv->aliases)
-		return (const char *const*) priv->aliases;
+    priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(self);
+    if (priv->aliases)
+        return (const char *const *) priv->aliases;
 
-	/* For convenience, we always want to return non-NULL, even for empty
-	 * aliases. Hack around that, by making a NULL terminated array using
-	 * the NULL of priv->aliases. */
-	return (const char *const*) &priv->aliases;
+    /* For convenience, we always want to return non-NULL, even for empty
+     * aliases. Hack around that, by making a NULL terminated array using
+     * the NULL of priv->aliases. */
+    return (const char *const *) &priv->aliases;
 }
 
 /**
@@ -946,19 +951,19 @@ nm_vpn_plugin_info_get_aliases (NMVpnPluginInfo *self)
  * Since: 1.2
  */
 const char *
-nm_vpn_plugin_info_lookup_property (NMVpnPluginInfo *self, const char *group, const char *key)
+nm_vpn_plugin_info_lookup_property(NMVpnPluginInfo *self, const char *group, const char *key)
 {
-	NMVpnPluginInfoPrivate *priv;
-	gs_free NMUtilsStrStrDictKey *k = NULL;
+    NMVpnPluginInfoPrivate *priv;
+    gs_free NMUtilsStrStrDictKey *k = NULL;
 
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
-	g_return_val_if_fail (group, NULL);
-	g_return_val_if_fail (key, NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
+    g_return_val_if_fail(group, NULL);
+    g_return_val_if_fail(key, NULL);
 
-	priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (self);
+    priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(self);
 
-	k = _nm_utils_strstrdictkey_create (group, key);
-	return g_hash_table_lookup (priv->keys, k);
+    k = _nm_utils_strstrdictkey_create(group, key);
+    return g_hash_table_lookup(priv->keys, k);
 }
 
 /*****************************************************************************/
@@ -972,11 +977,11 @@ nm_vpn_plugin_info_lookup_property (NMVpnPluginInfo *self, const char *group, co
  * Since: 1.2
  */
 NMVpnEditorPlugin *
-nm_vpn_plugin_info_get_editor_plugin (NMVpnPluginInfo *self)
+nm_vpn_plugin_info_get_editor_plugin(NMVpnPluginInfo *self)
 {
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
 
-	return NM_VPN_PLUGIN_INFO_GET_PRIVATE (self)->editor_plugin;
+    return NM_VPN_PLUGIN_INFO_GET_PRIVATE(self)->editor_plugin;
 }
 
 /**
@@ -989,26 +994,26 @@ nm_vpn_plugin_info_get_editor_plugin (NMVpnPluginInfo *self)
  * Since: 1.2
  */
 void
-nm_vpn_plugin_info_set_editor_plugin (NMVpnPluginInfo *self, NMVpnEditorPlugin *plugin)
+nm_vpn_plugin_info_set_editor_plugin(NMVpnPluginInfo *self, NMVpnEditorPlugin *plugin)
 {
-	NMVpnPluginInfoPrivate *priv;
-	NMVpnEditorPlugin *old;
-
-	g_return_if_fail (NM_IS_VPN_PLUGIN_INFO (self));
-	g_return_if_fail (!plugin || G_IS_OBJECT (plugin));
-
-	priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (self);
-
-	if (!plugin) {
-		priv->editor_plugin_loaded = FALSE;
-		g_clear_object (&priv->editor_plugin);
-	} else {
-		old = priv->editor_plugin;
-		priv->editor_plugin = g_object_ref (plugin);
-		priv->editor_plugin_loaded = TRUE;
-		if (old)
-			g_object_unref (old);
-	}
+    NMVpnPluginInfoPrivate *priv;
+    NMVpnEditorPlugin *     old;
+
+    g_return_if_fail(NM_IS_VPN_PLUGIN_INFO(self));
+    g_return_if_fail(!plugin || G_IS_OBJECT(plugin));
+
+    priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(self);
+
+    if (!plugin) {
+        priv->editor_plugin_loaded = FALSE;
+        g_clear_object(&priv->editor_plugin);
+    } else {
+        old                        = priv->editor_plugin;
+        priv->editor_plugin        = g_object_ref(plugin);
+        priv->editor_plugin_loaded = TRUE;
+        if (old)
+            g_object_unref(old);
+    }
 }
 
 /**
@@ -1025,160 +1030,173 @@ nm_vpn_plugin_info_set_editor_plugin (NMVpnPluginInfo *self, NMVpnEditorPlugin *
  * Since: 1.2
  */
 NMVpnEditorPlugin *
-nm_vpn_plugin_info_load_editor_plugin (NMVpnPluginInfo *self, GError **error)
+nm_vpn_plugin_info_load_editor_plugin(NMVpnPluginInfo *self, GError **error)
 {
-	NMVpnPluginInfoPrivate *priv;
-	const char *plugin_filename;
-
-	g_return_val_if_fail (NM_IS_VPN_PLUGIN_INFO (self), NULL);
-
-	priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (self);
-
-	if (priv->editor_plugin)
-		return priv->editor_plugin;
-
-	plugin_filename = nm_vpn_plugin_info_get_plugin (self);
-	if (!plugin_filename || !*plugin_filename) {
-		g_set_error (error,
-		             NM_VPN_PLUGIN_ERROR,
-		             NM_VPN_PLUGIN_ERROR_FAILED,
-		             _("missing \"plugin\" setting"));
-		return NULL;
-	}
-
-	/* We only try once to load the plugin. If we previously tried and it was
-	 * unsuccessful, error out immediately. */
-	if (priv->editor_plugin_loaded) {
-		g_set_error (error,
-		             NM_VPN_PLUGIN_ERROR,
-		             NM_VPN_PLUGIN_ERROR_FAILED,
-		             _("%s: don't retry loading plugin which already failed previously"), priv->name);
-		return NULL;
-	}
-
-	priv->editor_plugin_loaded = TRUE;
-	priv->editor_plugin = nm_vpn_editor_plugin_load_from_file (plugin_filename,
-	                                                           nm_vpn_plugin_info_get_service (self),
-	                                                           getuid (),
-	                                                           NULL,
-	                                                           NULL,
-	                                                           error);
-	if (priv->editor_plugin)
-		nm_vpn_editor_plugin_set_plugin_info (priv->editor_plugin, self);
-	return priv->editor_plugin;
+    NMVpnPluginInfoPrivate *priv;
+    const char *            plugin_filename;
+
+    g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), NULL);
+
+    priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(self);
+
+    if (priv->editor_plugin)
+        return priv->editor_plugin;
+
+    plugin_filename = nm_vpn_plugin_info_get_plugin(self);
+    if (!plugin_filename || !*plugin_filename) {
+        g_set_error(error,
+                    NM_VPN_PLUGIN_ERROR,
+                    NM_VPN_PLUGIN_ERROR_FAILED,
+                    _("missing \"plugin\" setting"));
+        return NULL;
+    }
+
+    /* We only try once to load the plugin. If we previously tried and it was
+     * unsuccessful, error out immediately. */
+    if (priv->editor_plugin_loaded) {
+        g_set_error(error,
+                    NM_VPN_PLUGIN_ERROR,
+                    NM_VPN_PLUGIN_ERROR_FAILED,
+                    _("%s: don't retry loading plugin which already failed previously"),
+                    priv->name);
+        return NULL;
+    }
+
+    priv->editor_plugin_loaded = TRUE;
+    priv->editor_plugin        = nm_vpn_editor_plugin_load_from_file(plugin_filename,
+                                                              nm_vpn_plugin_info_get_service(self),
+                                                              getuid(),
+                                                              NULL,
+                                                              NULL,
+                                                              error);
+    if (priv->editor_plugin)
+        nm_vpn_editor_plugin_set_plugin_info(priv->editor_plugin, self);
+    return priv->editor_plugin;
 }
 
 /*****************************************************************************/
 
 static void
-get_property (GObject *object, guint prop_id,
-              GValue *value, GParamSpec *pspec)
+get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
-	NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (object);
-
-	switch (prop_id) {
-	case PROP_NAME:
-		g_value_set_string (value, priv->name);
-		break;
-	case PROP_FILENAME:
-		g_value_set_string (value, priv->filename);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
+    NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(object);
+
+    switch (prop_id) {
+    case PROP_NAME:
+        g_value_set_string(value, priv->name);
+        break;
+    case PROP_FILENAME:
+        g_value_set_string(value, priv->filename);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+        break;
+    }
 }
 
 static void
-set_property (GObject *object, guint prop_id,
-              const GValue *value, GParamSpec *pspec)
+set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
-	NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (object);
-
-	switch (prop_id) {
-	case PROP_FILENAME:
-		priv->filename = g_value_dup_string (value);
-		break;
-	case PROP_KEYFILE:
-		priv->keyfile = g_value_dup_boxed (value);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
+    NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(object);
+
+    switch (prop_id) {
+    case PROP_FILENAME:
+        priv->filename = g_value_dup_string(value);
+        break;
+    case PROP_KEYFILE:
+        priv->keyfile = g_value_dup_boxed(value);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+        break;
+    }
 }
 
 /*****************************************************************************/
 
 static void
-nm_vpn_plugin_info_init (NMVpnPluginInfo *plugin)
-{
-}
+nm_vpn_plugin_info_init(NMVpnPluginInfo *plugin)
+{}
 
 static gboolean
-init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
+init_sync(GInitable *initable, GCancellable *cancellable, GError **error)
 {
-	NMVpnPluginInfo *self = NM_VPN_PLUGIN_INFO (initable);
-	NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (self);
-	gs_strfreev char **groups = NULL;
-	guint i, j;
-
-	if (!priv->keyfile) {
-		if (!priv->filename) {
-			g_set_error_literal (error,
-			                     NM_VPN_PLUGIN_ERROR,
-			                     NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
-			                     _("missing filename to load VPN plugin info"));
-			return FALSE;
-		}
-		priv->keyfile = g_key_file_new ();
-		if (!g_key_file_load_from_file (priv->keyfile, priv->filename, G_KEY_FILE_NONE, error))
-			return FALSE;
-	}
-
-	/* we reqire at least a "name" */
-	priv->name = g_key_file_get_string (priv->keyfile, NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "name", NULL);
-	if (!priv->name || !priv->name[0]) {
-		g_set_error_literal (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
-		                     _("missing name for VPN plugin info"));
-		return FALSE;
-	}
-
-	/* we also require "service", because that how we associate NMSettingVpn:service-type with the
-	 * NMVpnPluginInfo. */
-	priv->service = g_key_file_get_string (priv->keyfile, NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "service", NULL);
-	if (!priv->service || !*priv->service) {
-		g_set_error_literal (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
-		                     _("missing service for VPN plugin info"));
-		return FALSE;
-	}
-
-	priv->aliases = g_key_file_get_string_list (priv->keyfile, NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "aliases", NULL, NULL);
-	if (priv->aliases && !priv->aliases[0])
-		nm_clear_g_free (&priv->aliases);
-
-	priv->keys = g_hash_table_new_full (_nm_utils_strstrdictkey_hash,
-	                                    _nm_utils_strstrdictkey_equal,
-	                                    g_free, g_free);
-	groups = g_key_file_get_groups (priv->keyfile, NULL);
-	for (i = 0; groups && groups[i]; i++) {
-		gs_strfreev char **keys = NULL;
-
-		keys = g_key_file_get_keys (priv->keyfile, groups[i], NULL, NULL);
-		for (j = 0; keys && keys[j]; j++) {
-			char *s;
-
-			/* Lookup the value via get_string(). We want that behavior for all our
-			 * values. */
-			s = g_key_file_get_string (priv->keyfile, groups[i], keys[j], NULL);
-			if (s)
-				g_hash_table_insert (priv->keys, _nm_utils_strstrdictkey_create (groups[i], keys[j]), s);
-		}
-	}
-
-	nm_clear_pointer (&priv->keyfile, g_key_file_unref);
-
-	return TRUE;
+    NMVpnPluginInfo *       self   = NM_VPN_PLUGIN_INFO(initable);
+    NMVpnPluginInfoPrivate *priv   = NM_VPN_PLUGIN_INFO_GET_PRIVATE(self);
+    gs_strfreev char **     groups = NULL;
+    guint                   i, j;
+
+    if (!priv->keyfile) {
+        if (!priv->filename) {
+            g_set_error_literal(error,
+                                NM_VPN_PLUGIN_ERROR,
+                                NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+                                _("missing filename to load VPN plugin info"));
+            return FALSE;
+        }
+        priv->keyfile = g_key_file_new();
+        if (!g_key_file_load_from_file(priv->keyfile, priv->filename, G_KEY_FILE_NONE, error))
+            return FALSE;
+    }
+
+    /* we reqire at least a "name" */
+    priv->name =
+        g_key_file_get_string(priv->keyfile, NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, "name", NULL);
+    if (!priv->name || !priv->name[0]) {
+        g_set_error_literal(error,
+                            NM_VPN_PLUGIN_ERROR,
+                            NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+                            _("missing name for VPN plugin info"));
+        return FALSE;
+    }
+
+    /* we also require "service", because that how we associate NMSettingVpn:service-type with the
+     * NMVpnPluginInfo. */
+    priv->service = g_key_file_get_string(priv->keyfile,
+                                          NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION,
+                                          "service",
+                                          NULL);
+    if (!priv->service || !*priv->service) {
+        g_set_error_literal(error,
+                            NM_VPN_PLUGIN_ERROR,
+                            NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+                            _("missing service for VPN plugin info"));
+        return FALSE;
+    }
+
+    priv->aliases = g_key_file_get_string_list(priv->keyfile,
+                                               NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION,
+                                               "aliases",
+                                               NULL,
+                                               NULL);
+    if (priv->aliases && !priv->aliases[0])
+        nm_clear_g_free(&priv->aliases);
+
+    priv->keys = g_hash_table_new_full(_nm_utils_strstrdictkey_hash,
+                                       _nm_utils_strstrdictkey_equal,
+                                       g_free,
+                                       g_free);
+    groups     = g_key_file_get_groups(priv->keyfile, NULL);
+    for (i = 0; groups && groups[i]; i++) {
+        gs_strfreev char **keys = NULL;
+
+        keys = g_key_file_get_keys(priv->keyfile, groups[i], NULL, NULL);
+        for (j = 0; keys && keys[j]; j++) {
+            char *s;
+
+            /* Lookup the value via get_string(). We want that behavior for all our
+             * values. */
+            s = g_key_file_get_string(priv->keyfile, groups[i], keys[j], NULL);
+            if (s)
+                g_hash_table_insert(priv->keys,
+                                    _nm_utils_strstrdictkey_create(groups[i], keys[j]),
+                                    s);
+        }
+    }
+
+    nm_clear_pointer(&priv->keyfile, g_key_file_unref);
+
+    return TRUE;
 }
 
 /**
@@ -1196,16 +1214,16 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
  * Since: 1.2
  */
 NMVpnPluginInfo *
-nm_vpn_plugin_info_new_from_file (const char *filename,
-                                  GError **error)
+nm_vpn_plugin_info_new_from_file(const char *filename, GError **error)
 {
-	g_return_val_if_fail (filename, NULL);
-
-	return NM_VPN_PLUGIN_INFO (g_initable_new (NM_TYPE_VPN_PLUGIN_INFO,
-	                                           NULL,
-	                                           error,
-	                                           NM_VPN_PLUGIN_INFO_FILENAME, filename,
-	                                           NULL));
+    g_return_val_if_fail(filename, NULL);
+
+    return NM_VPN_PLUGIN_INFO(g_initable_new(NM_TYPE_VPN_PLUGIN_INFO,
+                                             NULL,
+                                             error,
+                                             NM_VPN_PLUGIN_INFO_FILENAME,
+                                             filename,
+                                             NULL));
 }
 
 /**
@@ -1223,111 +1241,114 @@ nm_vpn_plugin_info_new_from_file (const char *filename,
  * Since: 1.2
  */
 NMVpnPluginInfo *
-nm_vpn_plugin_info_new_with_data (const char *filename,
-                                  GKeyFile *keyfile,
-                                  GError **error)
+nm_vpn_plugin_info_new_with_data(const char *filename, GKeyFile *keyfile, GError **error)
 {
-	g_return_val_if_fail (keyfile, NULL);
-
-	return NM_VPN_PLUGIN_INFO (g_initable_new (NM_TYPE_VPN_PLUGIN_INFO,
-	                                           NULL,
-	                                           error,
-	                                           NM_VPN_PLUGIN_INFO_FILENAME, filename,
-	                                           NM_VPN_PLUGIN_INFO_KEYFILE, keyfile,
-	                                           NULL));
+    g_return_val_if_fail(keyfile, NULL);
+
+    return NM_VPN_PLUGIN_INFO(g_initable_new(NM_TYPE_VPN_PLUGIN_INFO,
+                                             NULL,
+                                             error,
+                                             NM_VPN_PLUGIN_INFO_FILENAME,
+                                             filename,
+                                             NM_VPN_PLUGIN_INFO_KEYFILE,
+                                             keyfile,
+                                             NULL));
 }
 
 static void
-dispose (GObject *object)
+dispose(GObject *object)
 {
-	NMVpnPluginInfo *self = NM_VPN_PLUGIN_INFO (object);
-	NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (self);
+    NMVpnPluginInfo *       self = NM_VPN_PLUGIN_INFO(object);
+    NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(self);
 
-	g_clear_object (&priv->editor_plugin);
+    g_clear_object(&priv->editor_plugin);
 
-	G_OBJECT_CLASS (nm_vpn_plugin_info_parent_class)->dispose (object);
+    G_OBJECT_CLASS(nm_vpn_plugin_info_parent_class)->dispose(object);
 }
 
 static void
-finalize (GObject *object)
+finalize(GObject *object)
 {
-	NMVpnPluginInfo *self = NM_VPN_PLUGIN_INFO (object);
-	NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (self);
+    NMVpnPluginInfo *       self = NM_VPN_PLUGIN_INFO(object);
+    NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE(self);
 
-	g_free (priv->name);
-	g_free (priv->service);
-	g_free (priv->auth_dialog);
-	g_strfreev (priv->aliases);
-	g_free (priv->filename);
-	g_hash_table_unref (priv->keys);
+    g_free(priv->name);
+    g_free(priv->service);
+    g_free(priv->auth_dialog);
+    g_strfreev(priv->aliases);
+    g_free(priv->filename);
+    g_hash_table_unref(priv->keys);
 
-	nm_clear_pointer (&priv->keyfile, g_key_file_unref);
+    nm_clear_pointer(&priv->keyfile, g_key_file_unref);
 
-	G_OBJECT_CLASS (nm_vpn_plugin_info_parent_class)->finalize (object);
+    G_OBJECT_CLASS(nm_vpn_plugin_info_parent_class)->finalize(object);
 }
 
 static void
-nm_vpn_plugin_info_class_init (NMVpnPluginInfoClass *plugin_class)
+nm_vpn_plugin_info_class_init(NMVpnPluginInfoClass *plugin_class)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS (plugin_class);
-
-	object_class->set_property = set_property;
-	object_class->get_property = get_property;
-	object_class->dispose      = dispose;
-	object_class->finalize     = finalize;
-
-	/**
-	 * NMVpnPluginInfo:name:
-	 *
-	 * The name of the VPN plugin.
-	 *
-	 * Since: 1.2
-	 */
-	g_object_class_install_property
-	    (object_class, PROP_NAME,
-	     g_param_spec_string (NM_VPN_PLUGIN_INFO_NAME, "", "",
-	                          NULL,
-	                          G_PARAM_READABLE |
-	                          G_PARAM_STATIC_STRINGS));
-
-	/**
-	 * NMVpnPluginInfo:filename:
-	 *
-	 * The filename from which the info was loaded.
-	 * Can be %NULL if the instance was not loaded from
-	 * a file (i.e. the keyfile instance was passed to the
-	 * constructor).
-	 *
-	 * Since: 1.2
-	 */
-	g_object_class_install_property
-	    (object_class, PROP_FILENAME,
-	     g_param_spec_string (NM_VPN_PLUGIN_INFO_FILENAME, "", "",
-	                          NULL,
-	                          G_PARAM_READWRITE |
-	                          G_PARAM_CONSTRUCT_ONLY |
-	                          G_PARAM_STATIC_STRINGS));
-
-	/**
-	 * NMVpnPluginInfo:keyfile:
-	 *
-	 * Initialize the instance with a different keyfile instance.
-	 * When passing a keyfile instance, the constructor will not
-	 * try to read from filename.
-	 *
-	 * Since: 1.2
-	 */
-	g_object_class_install_property
-	    (object_class, PROP_KEYFILE,
-	     g_param_spec_boxed (NM_VPN_PLUGIN_INFO_KEYFILE, "", "",
-	                         G_TYPE_KEY_FILE,
-	                         G_PARAM_WRITABLE |
-	                         G_PARAM_CONSTRUCT_ONLY |
-	                         G_PARAM_STATIC_STRINGS));
+    GObjectClass *object_class = G_OBJECT_CLASS(plugin_class);
+
+    object_class->set_property = set_property;
+    object_class->get_property = get_property;
+    object_class->dispose      = dispose;
+    object_class->finalize     = finalize;
+
+    /**
+     * NMVpnPluginInfo:name:
+     *
+     * The name of the VPN plugin.
+     *
+     * Since: 1.2
+     */
+    g_object_class_install_property(object_class,
+                                    PROP_NAME,
+                                    g_param_spec_string(NM_VPN_PLUGIN_INFO_NAME,
+                                                        "",
+                                                        "",
+                                                        NULL,
+                                                        G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+    /**
+     * NMVpnPluginInfo:filename:
+     *
+     * The filename from which the info was loaded.
+     * Can be %NULL if the instance was not loaded from
+     * a file (i.e. the keyfile instance was passed to the
+     * constructor).
+     *
+     * Since: 1.2
+     */
+    g_object_class_install_property(
+        object_class,
+        PROP_FILENAME,
+        g_param_spec_string(NM_VPN_PLUGIN_INFO_FILENAME,
+                            "",
+                            "",
+                            NULL,
+                            G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+    /**
+     * NMVpnPluginInfo:keyfile:
+     *
+     * Initialize the instance with a different keyfile instance.
+     * When passing a keyfile instance, the constructor will not
+     * try to read from filename.
+     *
+     * Since: 1.2
+     */
+    g_object_class_install_property(
+        object_class,
+        PROP_KEYFILE,
+        g_param_spec_boxed(NM_VPN_PLUGIN_INFO_KEYFILE,
+                           "",
+                           "",
+                           G_TYPE_KEY_FILE,
+                           G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
 }
 
 static void
-nm_vpn_plugin_info_initable_iface_init (GInitableIface *iface)
+nm_vpn_plugin_info_initable_iface_init(GInitableIface *iface)
 {
-	iface->init = init_sync;
+    iface->init = init_sync;
 }