summaryrefslogtreecommitdiff
path: root/system-settings/plugins/keyfile/reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'system-settings/plugins/keyfile/reader.c')
-rw-r--r--system-settings/plugins/keyfile/reader.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/system-settings/plugins/keyfile/reader.c b/system-settings/plugins/keyfile/reader.c
index 14b974ea7c..e43486a209 100644
--- a/system-settings/plugins/keyfile/reader.c
+++ b/system-settings/plugins/keyfile/reader.c
@@ -8,6 +8,7 @@
#include <dbus/dbus-glib.h>
#include <nm-setting.h>
#include <nm-setting-ip4-config.h>
+#include <nm-setting-vpn.h>
#include <arpa/inet.h>
#include <string.h>
@@ -289,6 +290,32 @@ read_array_of_array_of_uint (GKeyFile *file,
}
static void
+read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key)
+{
+ char **keys, **iter;
+ char *value;
+
+ keys = g_key_file_get_keys (file, setting->name, NULL, NULL);
+ if (!keys || !*keys)
+ return;
+
+ for (iter = keys; *iter; iter++) {
+ value = g_key_file_get_string (file, setting->name, *iter, NULL);
+ if (!value)
+ continue;
+
+ if (NM_IS_SETTING_VPN (setting)) {
+ NMSettingVPN *s_vpn = NM_SETTING_VPN (setting);
+
+ if (strcmp (*iter, NM_SETTING_VPN_SERVICE_TYPE))
+ g_hash_table_insert (s_vpn->data, g_strdup (*iter), g_strdup (value));
+ }
+ g_free (value);
+ }
+ g_strfreev (keys);
+}
+
+static void
read_one_setting_value (NMSetting *setting,
const char *key,
const GValue *value,
@@ -395,9 +422,8 @@ read_one_setting_value (NMSetting *setting,
g_slist_free (list);
g_strfreev (sa);
- } else if (type == dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE)) {
- /* FIXME */
- g_warning ("Implement me");
+ } else if (type == dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING)) {
+ read_hash_of_string (file, setting, key);
} else if (type == DBUS_TYPE_G_UINT_ARRAY) {
if (!read_array_of_uint (file, setting, key)) {
g_warning ("Unhandled setting property type (read): '%s/%s' : '%s'",