From: Alexander Sack <[email protected]>

* 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 <[email protected]>
---
 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  <[email protected]>
 
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

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

Reply via email to