Use a common function for parsing cipher suites
Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
edbd2a191e
commit
a39c78be41
4 changed files with 56 additions and 82 deletions
|
@ -661,49 +661,12 @@ static int hostapd_config_parse_key_mgmt(int line, const char *value)
|
||||||
|
|
||||||
static int hostapd_config_parse_cipher(int line, const char *value)
|
static int hostapd_config_parse_cipher(int line, const char *value)
|
||||||
{
|
{
|
||||||
int val = 0, last;
|
int val = wpa_parse_cipher(value);
|
||||||
char *start, *end, *buf;
|
if (val < 0) {
|
||||||
|
wpa_printf(MSG_ERROR, "Line %d: invalid cipher '%s'.",
|
||||||
buf = os_strdup(value);
|
line, value);
|
||||||
if (buf == NULL)
|
|
||||||
return -1;
|
return -1;
|
||||||
start = buf;
|
|
||||||
|
|
||||||
while (*start != '\0') {
|
|
||||||
while (*start == ' ' || *start == '\t')
|
|
||||||
start++;
|
|
||||||
if (*start == '\0')
|
|
||||||
break;
|
|
||||||
end = start;
|
|
||||||
while (*end != ' ' && *end != '\t' && *end != '\0')
|
|
||||||
end++;
|
|
||||||
last = *end == '\0';
|
|
||||||
*end = '\0';
|
|
||||||
if (os_strcmp(start, "CCMP") == 0)
|
|
||||||
val |= WPA_CIPHER_CCMP;
|
|
||||||
else if (os_strcmp(start, "GCMP") == 0)
|
|
||||||
val |= WPA_CIPHER_GCMP;
|
|
||||||
else if (os_strcmp(start, "TKIP") == 0)
|
|
||||||
val |= WPA_CIPHER_TKIP;
|
|
||||||
else if (os_strcmp(start, "WEP104") == 0)
|
|
||||||
val |= WPA_CIPHER_WEP104;
|
|
||||||
else if (os_strcmp(start, "WEP40") == 0)
|
|
||||||
val |= WPA_CIPHER_WEP40;
|
|
||||||
else if (os_strcmp(start, "NONE") == 0)
|
|
||||||
val |= WPA_CIPHER_NONE;
|
|
||||||
else {
|
|
||||||
wpa_printf(MSG_ERROR, "Line %d: invalid cipher '%s'.",
|
|
||||||
line, start);
|
|
||||||
os_free(buf);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (last)
|
|
||||||
break;
|
|
||||||
start = end + 1;
|
|
||||||
}
|
}
|
||||||
os_free(buf);
|
|
||||||
|
|
||||||
if (val == 0) {
|
if (val == 0) {
|
||||||
wpa_printf(MSG_ERROR, "Line %d: no cipher values configured.",
|
wpa_printf(MSG_ERROR, "Line %d: no cipher values configured.",
|
||||||
line);
|
line);
|
||||||
|
|
|
@ -1244,3 +1244,50 @@ int wpa_pick_group_cipher(int ciphers)
|
||||||
return WPA_CIPHER_WEP40;
|
return WPA_CIPHER_WEP40;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int wpa_parse_cipher(const char *value)
|
||||||
|
{
|
||||||
|
int val = 0, last;
|
||||||
|
char *start, *end, *buf;
|
||||||
|
|
||||||
|
buf = os_strdup(value);
|
||||||
|
if (buf == NULL)
|
||||||
|
return -1;
|
||||||
|
start = buf;
|
||||||
|
|
||||||
|
while (*start != '\0') {
|
||||||
|
while (*start == ' ' || *start == '\t')
|
||||||
|
start++;
|
||||||
|
if (*start == '\0')
|
||||||
|
break;
|
||||||
|
end = start;
|
||||||
|
while (*end != ' ' && *end != '\t' && *end != '\0')
|
||||||
|
end++;
|
||||||
|
last = *end == '\0';
|
||||||
|
*end = '\0';
|
||||||
|
if (os_strcmp(start, "CCMP") == 0)
|
||||||
|
val |= WPA_CIPHER_CCMP;
|
||||||
|
else if (os_strcmp(start, "GCMP") == 0)
|
||||||
|
val |= WPA_CIPHER_GCMP;
|
||||||
|
else if (os_strcmp(start, "TKIP") == 0)
|
||||||
|
val |= WPA_CIPHER_TKIP;
|
||||||
|
else if (os_strcmp(start, "WEP104") == 0)
|
||||||
|
val |= WPA_CIPHER_WEP104;
|
||||||
|
else if (os_strcmp(start, "WEP40") == 0)
|
||||||
|
val |= WPA_CIPHER_WEP40;
|
||||||
|
else if (os_strcmp(start, "NONE") == 0)
|
||||||
|
val |= WPA_CIPHER_NONE;
|
||||||
|
else {
|
||||||
|
os_free(buf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (last)
|
||||||
|
break;
|
||||||
|
start = end + 1;
|
||||||
|
}
|
||||||
|
os_free(buf);
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
|
@ -392,5 +392,6 @@ int rsn_cipher_put_suites(u8 *pos, int ciphers);
|
||||||
int wpa_cipher_put_suites(u8 *pos, int ciphers);
|
int wpa_cipher_put_suites(u8 *pos, int ciphers);
|
||||||
int wpa_pick_pairwise_cipher(int ciphers, int none_allowed);
|
int wpa_pick_pairwise_cipher(int ciphers, int none_allowed);
|
||||||
int wpa_pick_group_cipher(int ciphers);
|
int wpa_pick_group_cipher(int ciphers);
|
||||||
|
int wpa_parse_cipher(const char *value);
|
||||||
|
|
||||||
#endif /* WPA_COMMON_H */
|
#endif /* WPA_COMMON_H */
|
||||||
|
|
|
@ -629,49 +629,12 @@ static char * wpa_config_write_key_mgmt(const struct parse_data *data,
|
||||||
|
|
||||||
static int wpa_config_parse_cipher(int line, const char *value)
|
static int wpa_config_parse_cipher(int line, const char *value)
|
||||||
{
|
{
|
||||||
int val = 0, last;
|
int val = wpa_parse_cipher(value);
|
||||||
char *start, *end, *buf;
|
if (val < 0) {
|
||||||
|
wpa_printf(MSG_ERROR, "Line %d: invalid cipher '%s'.",
|
||||||
buf = os_strdup(value);
|
line, value);
|
||||||
if (buf == NULL)
|
|
||||||
return -1;
|
return -1;
|
||||||
start = buf;
|
|
||||||
|
|
||||||
while (*start != '\0') {
|
|
||||||
while (*start == ' ' || *start == '\t')
|
|
||||||
start++;
|
|
||||||
if (*start == '\0')
|
|
||||||
break;
|
|
||||||
end = start;
|
|
||||||
while (*end != ' ' && *end != '\t' && *end != '\0')
|
|
||||||
end++;
|
|
||||||
last = *end == '\0';
|
|
||||||
*end = '\0';
|
|
||||||
if (os_strcmp(start, "CCMP") == 0)
|
|
||||||
val |= WPA_CIPHER_CCMP;
|
|
||||||
else if (os_strcmp(start, "GCMP") == 0)
|
|
||||||
val |= WPA_CIPHER_GCMP;
|
|
||||||
else if (os_strcmp(start, "TKIP") == 0)
|
|
||||||
val |= WPA_CIPHER_TKIP;
|
|
||||||
else if (os_strcmp(start, "WEP104") == 0)
|
|
||||||
val |= WPA_CIPHER_WEP104;
|
|
||||||
else if (os_strcmp(start, "WEP40") == 0)
|
|
||||||
val |= WPA_CIPHER_WEP40;
|
|
||||||
else if (os_strcmp(start, "NONE") == 0)
|
|
||||||
val |= WPA_CIPHER_NONE;
|
|
||||||
else {
|
|
||||||
wpa_printf(MSG_ERROR, "Line %d: invalid cipher '%s'.",
|
|
||||||
line, start);
|
|
||||||
os_free(buf);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (last)
|
|
||||||
break;
|
|
||||||
start = end + 1;
|
|
||||||
}
|
}
|
||||||
os_free(buf);
|
|
||||||
|
|
||||||
if (val == 0) {
|
if (val == 0) {
|
||||||
wpa_printf(MSG_ERROR, "Line %d: no cipher values configured.",
|
wpa_printf(MSG_ERROR, "Line %d: no cipher values configured.",
|
||||||
line);
|
line);
|
||||||
|
|
Loading…
Reference in a new issue