mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-26 12:20:09 +01:00
ifcfg-rh: fix reading/writing ASCII WEP keys
ifcfg-rh plugin didn't prepend 's:' prefix when writing out ASCII WEP keys. That rendered the keys file invalid. Moreover, the reading part was incorrect too not having recognized correct ASCII keys.
This commit is contained in:
parent
6ab5a9597a
commit
4e02c67a94
2 changed files with 21 additions and 5 deletions
|
|
@ -1622,21 +1622,27 @@ add_one_wep_key (shvarFile *ifcfg,
|
|||
p++;
|
||||
}
|
||||
key = g_strdup (value);
|
||||
} else if ( strncmp (value, "s:", 2)
|
||||
} else if ( !strncmp (value, "s:", 2)
|
||||
&& (strlen (value) == 7 || strlen (value) == 15)) {
|
||||
/* ASCII passphrase */
|
||||
/* ASCII key */
|
||||
char *p = value + 2;
|
||||
|
||||
while (*p) {
|
||||
if (!isascii ((int) (*p))) {
|
||||
g_set_error (error, ifcfg_plugin_error_quark (), 0,
|
||||
"Invalid ASCII WEP passphrase.");
|
||||
"Invalid ASCII WEP key.");
|
||||
goto out;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
||||
key = utils_bin2hexstr (value, strlen (value), strlen (value) * 2);
|
||||
/* Remove 's:' prefix.
|
||||
* Don't convert to hex string. wpa_supplicant takes 'wep_key0' option over D-Bus as byte array
|
||||
* and converts it to hex string itself. Even though we convert hex string keys into a bin string
|
||||
* before passing to wpa_supplicant, this prevents two unnecessary conversions. And mainly,
|
||||
* ASCII WEP key doesn't change to HEX WEP key in UI, which could confuse users.
|
||||
*/
|
||||
key = g_strdup (value + 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -605,6 +605,8 @@ write_wireless_security_setting (NMConnection *connection,
|
|||
|
||||
key = nm_setting_wireless_security_get_wep_key (s_wsec, i);
|
||||
if (key) {
|
||||
char *ascii_key = NULL;
|
||||
|
||||
/* Passphrase needs a different ifcfg key since with WEP, there
|
||||
* are some passphrases that are indistinguishable from WEP hex
|
||||
* keys.
|
||||
|
|
@ -612,11 +614,19 @@ write_wireless_security_setting (NMConnection *connection,
|
|||
key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
|
||||
if (key_type == NM_WEP_KEY_TYPE_PASSPHRASE)
|
||||
tmp = g_strdup_printf ("KEY_PASSPHRASE%d", i + 1);
|
||||
else
|
||||
else {
|
||||
tmp = g_strdup_printf ("KEY%d", i + 1);
|
||||
|
||||
/* Add 's:' prefix for ASCII keys */
|
||||
if (strlen (key) == 5 || strlen (key) == 13) {
|
||||
ascii_key = g_strdup_printf ("s:%s", key);
|
||||
key = ascii_key;
|
||||
}
|
||||
}
|
||||
|
||||
set_secret (ifcfg, tmp, key, FALSE);
|
||||
g_free (tmp);
|
||||
g_free (ascii_key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue