diff options
author | Evan Broder <evan@ebroder.net> | 2011-11-17 16:36:14 -0800 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2011-11-21 23:50:43 -0600 |
commit | ef9551bcf3627b9f1f57f78fdb394c194f6e9a43 (patch) | |
tree | 9de09030d4365da44556c084742c182c047bf903 | |
parent | 6346bd60bedc68ba88356b1b3bf7b6e0f9037f3a (diff) |
supplicant: Add a new validation type for UTF-8 strings
-rw-r--r-- | src/supplicant-manager/nm-supplicant-config.c | 1 | ||||
-rw-r--r-- | src/supplicant-manager/nm-supplicant-settings-verify.c | 25 | ||||
-rw-r--r-- | src/supplicant-manager/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 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; |