summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Broder <evan@ebroder.net>2011-11-17 16:36:18 -0800
committerDan Williams <dcbw@redhat.com>2011-11-21 23:51:01 -0600
commit9fc134ee83ee4444517448efaee774dc9feebd65 (patch)
tree8398ca25be91c206388e645edcc525dc50c76958
parentb08e2b8932ed6aa735b4ef4ed04fc173f275b16e (diff)
keyfile: Read and write the new 8021x.password-raw field
-rw-r--r--src/settings/plugins/keyfile/reader.c20
-rw-r--r--src/settings/plugins/keyfile/writer.c28
2 files changed, 48 insertions, 0 deletions
diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c
index dd1868c95d..f973ce8b4c 100644
--- a/src/settings/plugins/keyfile/reader.c
+++ b/src/settings/plugins/keyfile/reader.c
@@ -823,6 +823,22 @@ ssid_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char
}
}
+static void
+password_raw_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
+{
+ const char *setting_name = nm_setting_get_name (setting);
+ GByteArray *array;
+
+ array = get_uchar_array (keyfile, setting_name, key, FALSE, TRUE);
+ if (array) {
+ g_object_set (setting, key, array, NULL);
+ g_byte_array_free (array, TRUE);
+ } else {
+ g_warning ("%s: ignoring invalid raw password for %s / %s",
+ __func__, setting_name, key);
+ }
+}
+
static char *
get_cert_path (const char *keyfile_path, GByteArray *cert_path)
{
@@ -1022,6 +1038,10 @@ static KeyParser key_parsers[] = {
TRUE,
ssid_parser },
{ NM_SETTING_802_1X_SETTING_NAME,
+ NM_SETTING_802_1X_PASSWORD_RAW,
+ TRUE,
+ password_raw_parser },
+ { NM_SETTING_802_1X_SETTING_NAME,
NM_SETTING_802_1X_CA_CERT,
TRUE,
cert_parser },
diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c
index 2babe2671c..3bc8260907 100644
--- a/src/settings/plugins/keyfile/writer.c
+++ b/src/settings/plugins/keyfile/writer.c
@@ -532,6 +532,31 @@ ssid_writer (GKeyFile *file,
}
}
+static void
+password_raw_writer (GKeyFile *file,
+ const char *keyfile_dir,
+ const char *uuid,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value)
+{
+ const char *setting_name = nm_setting_get_name (setting);
+ GByteArray *array;
+ int i, *tmp_array;
+
+ g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_UCHAR_ARRAY));
+
+ array = (GByteArray *) g_value_get_boxed (value);
+ if (!array || !array->len)
+ return;
+
+ tmp_array = g_new (gint, array->len);
+ for (i = 0; i < array->len; i++)
+ tmp_array[i] = (int) array->data[i];
+ g_key_file_set_integer_list (file, setting_name, key, tmp_array, array->len);
+ g_free (tmp_array);
+}
+
typedef struct ObjectType {
const char *key;
const char *suffix;
@@ -791,6 +816,9 @@ static KeyWriter key_writers[] = {
NM_SETTING_WIRELESS_SSID,
ssid_writer },
{ NM_SETTING_802_1X_SETTING_NAME,
+ NM_SETTING_802_1X_PASSWORD_RAW,
+ password_raw_writer },
+ { NM_SETTING_802_1X_SETTING_NAME,
NM_SETTING_802_1X_CA_CERT,
cert_writer },
{ NM_SETTING_802_1X_SETTING_NAME,