---
 src/supplicant-manager/nm-supplicant-config.c      |    1 +
 .../nm-supplicant-settings-verify.c                |   25 ++++++++++++++++++++
 .../nm-supplicant-settings-verify.h                |    1 +
 3 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/src/supplicant-manager/nm-supplicant-config.c 
b/src/supplicant-manager/nm-supplicant-config.c
index 4860314..74455ee 100644
--- a/src/supplicant-manager/nm-supplicant-config.c
+++ b/src/supplicant-manager/nm-supplicant-config.c
@@ -293,6 +293,7 @@ get_hash_cb (gpointer key, gpointer value, gpointer 
user_data)
                g_value_set_int (variant, atoi (opt->value));
                break;
        case TYPE_BYTES:
+       case TYPE_UTF8:
                array = g_byte_array_sized_new (opt->len);
                g_byte_array_append (array, (const guint8 *) opt->value, 
opt->len);
                g_value_init (variant, DBUS_TYPE_G_UCHAR_ARRAY);
diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.c 
b/src/supplicant-manager/nm-supplicant-settings-verify.c
index aea5bfe..7c66c1c 100644
--- a/src/supplicant-manager/nm-supplicant-settings-verify.c
+++ b/src/supplicant-manager/nm-supplicant-settings-verify.c
@@ -44,6 +44,10 @@ static gboolean validate_type_bytes   (const struct Opt * 
opt,
                                        const char * value,
                                        const guint32 len);
 
+static gboolean validate_type_utf8    (const struct Opt *opt,
+                                       const char * value,
+                                       const guint32 len);
+
 static gboolean validate_type_keyword (const struct Opt * opt,
                                        const char * value,
                                        const guint32 len);
@@ -58,6 +62,7 @@ struct validate_entry {
 static const struct validate_entry validate_table[] = {
        { TYPE_INT,     validate_type_int     },
        { TYPE_BYTES,   validate_type_bytes   },
+       { TYPE_UTF8,    validate_type_utf8    },
        { TYPE_KEYWORD, validate_type_keyword },
 };
 
@@ -174,6 +179,26 @@ validate_type_bytes (const struct Opt * opt,
 }
 
 static gboolean
+validate_type_utf8 (const struct Opt *opt,
+                                       const char * value,
+                                       const guint32 len)
+{
+       guint32 check_len;
+
+       g_return_val_if_fail (opt != NULL, FALSE);
+       g_return_val_if_fail (value != NULL, FALSE);
+
+       check_len = opt->int_high ? opt->int_high : 255;
+       /* Note that we deliberately don't validate the UTF-8, because
+          some "UTF-8" fields, such as 8021x.password, do not actually
+          have to be valid UTF-8 */
+       if (g_utf8_strlen (value, len) > check_len)
+               return FALSE;
+
+       return TRUE;
+}
+
+static gboolean
 validate_type_keyword (const struct Opt * opt,
                        const char * value,
                        const guint32 len)
diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.h 
b/src/supplicant-manager/nm-supplicant-settings-verify.h
index 0939ebd..4527a9e 100644
--- a/src/supplicant-manager/nm-supplicant-settings-verify.h
+++ b/src/supplicant-manager/nm-supplicant-settings-verify.h
@@ -25,6 +25,7 @@ typedef enum OptType {
        TYPE_INVALID = 0,
        TYPE_INT,
        TYPE_BYTES,
+       TYPE_UTF8,
        TYPE_KEYWORD,
        TYPE_STRING
 } OptType;
-- 
1.7.5.4

_______________________________________________
networkmanager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to