mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-28 18:28:23 -05:00
Use a shared helper function for parsing hostapd.conf IEs
wpabuf_parse_bin() can be used to take care of parsing a hexstring to a wpabuf and a shared helper function can take care of clearing the previous value when empty string is used. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
a911227061
commit
4ac33989a6
@ -1962,6 +1962,31 @@ fail:
|
|||||||
#endif /* CONFIG_ACS */
|
#endif /* CONFIG_ACS */
|
||||||
|
|
||||||
|
|
||||||
|
static int parse_wpabuf_hex(int line, const char *name, struct wpabuf **buf,
|
||||||
|
const char *val)
|
||||||
|
{
|
||||||
|
struct wpabuf *elems;
|
||||||
|
|
||||||
|
if (val[0] == '\0') {
|
||||||
|
wpabuf_free(*buf);
|
||||||
|
*buf = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
elems = wpabuf_parse_bin(val);
|
||||||
|
if (!elems) {
|
||||||
|
wpa_printf(MSG_ERROR, "Line %d: Invalid %s '%s'",
|
||||||
|
line, name, val);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
wpabuf_free(*buf);
|
||||||
|
*buf = elems;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int hostapd_config_fill(struct hostapd_config *conf,
|
static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
struct hostapd_bss_config *bss,
|
struct hostapd_bss_config *bss,
|
||||||
const char *buf, char *pos, int line)
|
const char *buf, char *pos, int line)
|
||||||
@ -3350,65 +3375,11 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
|||||||
bss->own_ie_override = tmp;
|
bss->own_ie_override = tmp;
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
} else if (os_strcmp(buf, "vendor_elements") == 0) {
|
} else if (os_strcmp(buf, "vendor_elements") == 0) {
|
||||||
struct wpabuf *elems;
|
if (parse_wpabuf_hex(line, buf, &bss->vendor_elements, pos))
|
||||||
size_t len = os_strlen(pos);
|
|
||||||
if (len & 0x01) {
|
|
||||||
wpa_printf(MSG_ERROR,
|
|
||||||
"Line %d: Invalid vendor_elements '%s'",
|
|
||||||
line, pos);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
len /= 2;
|
|
||||||
if (len == 0) {
|
|
||||||
wpabuf_free(bss->vendor_elements);
|
|
||||||
bss->vendor_elements = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
elems = wpabuf_alloc(len);
|
|
||||||
if (elems == NULL)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
if (hexstr2bin(pos, wpabuf_put(elems, len), len)) {
|
|
||||||
wpabuf_free(elems);
|
|
||||||
wpa_printf(MSG_ERROR,
|
|
||||||
"Line %d: Invalid vendor_elements '%s'",
|
|
||||||
line, pos);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
wpabuf_free(bss->vendor_elements);
|
|
||||||
bss->vendor_elements = elems;
|
|
||||||
} else if (os_strcmp(buf, "assocresp_elements") == 0) {
|
} else if (os_strcmp(buf, "assocresp_elements") == 0) {
|
||||||
struct wpabuf *elems;
|
if (parse_wpabuf_hex(line, buf, &bss->assocresp_elements, pos))
|
||||||
size_t len = os_strlen(pos);
|
|
||||||
if (len & 0x01) {
|
|
||||||
wpa_printf(MSG_ERROR,
|
|
||||||
"Line %d: Invalid assocresp_elements '%s'",
|
|
||||||
line, pos);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
len /= 2;
|
|
||||||
if (len == 0) {
|
|
||||||
wpabuf_free(bss->assocresp_elements);
|
|
||||||
bss->assocresp_elements = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
elems = wpabuf_alloc(len);
|
|
||||||
if (elems == NULL)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
if (hexstr2bin(pos, wpabuf_put(elems, len), len)) {
|
|
||||||
wpabuf_free(elems);
|
|
||||||
wpa_printf(MSG_ERROR,
|
|
||||||
"Line %d: Invalid assocresp_elements '%s'",
|
|
||||||
line, pos);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
wpabuf_free(bss->assocresp_elements);
|
|
||||||
bss->assocresp_elements = elems;
|
|
||||||
} else if (os_strcmp(buf, "sae_anti_clogging_threshold") == 0) {
|
} else if (os_strcmp(buf, "sae_anti_clogging_threshold") == 0) {
|
||||||
bss->sae_anti_clogging_threshold = atoi(pos);
|
bss->sae_anti_clogging_threshold = atoi(pos);
|
||||||
} else if (os_strcmp(buf, "sae_groups") == 0) {
|
} else if (os_strcmp(buf, "sae_groups") == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user