summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Broder <evan@ebroder.net>2011-11-17 16:36:14 -0800
committerDan Williams <dcbw@redhat.com>2011-11-21 23:50:43 -0600
commitef9551bcf3627b9f1f57f78fdb394c194f6e9a43 (patch)
tree9de09030d4365da44556c084742c182c047bf903
parent6346bd60bedc68ba88356b1b3bf7b6e0f9037f3a (diff)
supplicant: Add a new validation type for UTF-8 strings
-rw-r--r--src/supplicant-manager/nm-supplicant-config.c1
-rw-r--r--src/supplicant-manager/nm-supplicant-settings-verify.c25
-rw-r--r--src/supplicant-manager/nm-supplicant-settings-verify.h1
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 4860314b0a..74455ee8ac 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 aea5bfece6..044495e50c 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 0939ebdb09..4527a9e558 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;