[PATCH 2/3] fix crash for unsupported wireless- key format
- From: Alexander Sack <asac ubuntu com>
- To: networkmanager-list gnome org
- Cc: Alexander Sack <asac ubuntu com>
- Subject: [PATCH 2/3] fix crash for unsupported wireless- key format
- Date: Tue, 3 Mar 2009 10:33:52 +0100
From: Alexander Sack <asac jwsdot com>
* system-settings/plugins/ifupdown/parser.c
- (normalize_dupe_wireless_key,
update_wireless_security_setting_from_if_block): fix
ifupdown crash caused by previously not support key
format for 'key', 'wep-key0', 'wep-key1', 'wep-key2',
'wep-key3' (debbugs: #513874)
Signed-off-by: Alexander Sack <asac ubuntu com>
---
ChangeLog | 5 ++++
system-settings/plugins/ifupdown/parser.c | 36 +++++++++++++++++++++++++----
2 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0e03d80..a5542b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,11 @@
* system-settings/plugins/ifupdown/parser.c
- (update_wireless_setting_from_if_block): fix ifupdown
crash for wireless-ssid setting (debbugs: #513852)
+ - (normalize_dupe_wireless_key,
+ update_wireless_security_setting_from_if_block): fix
+ ifupdown crash caused by previously not support key
+ format for 'key', 'wep-key0', 'wep-key1', 'wep-key2',
+ 'wep-key3' (debbugs: #513874)
2008-12-11 Dan Williams <dcbw redhat com>
diff --git a/system-settings/plugins/ifupdown/parser.c b/system-settings/plugins/ifupdown/parser.c
index 25e866a..451ce8a 100644
--- a/system-settings/plugins/ifupdown/parser.c
+++ b/system-settings/plugins/ifupdown/parser.c
@@ -197,6 +197,32 @@ typedef gchar* (*IfupdownStrDupeFunc) (gpointer value, gpointer data);
typedef gpointer (*IfupdownStrToTypeFunc) (const gchar* value);
static char*
+normalize_dupe_wireless_key (gpointer value, gpointer data) {
+ char* valuec = value;
+ char* endc = valuec + strlen (valuec);
+ char* delim = valuec;
+ char* next = delim;
+ char* result = malloc (strlen (valuec) + 1);
+ char* result_cur = result;
+
+ while (*delim && (next = strchr (delim, '-')) != NULL) {
+ if (next == delim) {
+ delim++;
+ continue;
+ }
+ strncpy (result_cur, delim, next - delim);
+ result_cur += next - delim;
+ delim = next + 1;
+ }
+ if (*delim && strlen (valuec) > GPOINTER_TO_UINT(delim - valuec)) {
+ strncpy (result_cur, delim, endc - delim);
+ result_cur += endc - delim;
+ }
+ *result_cur = '\0';
+ return result;
+}
+
+static char*
normalize_dupe (gpointer value, gpointer data) {
return g_strdup(value);
}
@@ -295,16 +321,16 @@ update_wireless_security_setting_from_if_block(NMConnection *connection,
{"psk", normalize_psk},
{"identity", normalize_dupe},
{"password", normalize_dupe},
- {"key", normalize_dupe},
+ {"key", normalize_dupe_wireless_key},
{"key-mgmt", normalize_tolower},
{"group", normalize_tolower},
{"pairwise", normalize_tolower},
{"proto", normalize_tolower},
{"pin", normalize_dupe},
- {"wep-key0", normalize_dupe},
- {"wep-key1", normalize_dupe},
- {"wep-key2", normalize_dupe},
- {"wep-key3", normalize_dupe},
+ {"wep-key0", normalize_dupe_wireless_key},
+ {"wep-key1", normalize_dupe_wireless_key},
+ {"wep-key2", normalize_dupe_wireless_key},
+ {"wep-key3", normalize_dupe_wireless_key},
{"wep-tx-keyidx", normalize_dupe},
{ NULL, NULL}
};
--
1.6.0.4
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]