os_free(buf);
return -1;
}
+ if (*len && *len != 5 && *len != 13 && *len != 16) {
+ wpa_printf(MSG_ERROR, "Line %d: Invalid WEP key length %u - "
+ "this network block will be ignored",
+ line, (unsigned int) *len);
+ }
os_memcpy(key, buf, *len);
os_free(buf);
res = os_snprintf(title, sizeof(title), "wep_key%d", idx);
return ret;
}
+
+
+int wpas_network_disabled(struct wpa_ssid *ssid)
+{
+ int i;
+
+ if (ssid == NULL)
+ return 1;
+
+ if (ssid->disabled)
+ return 1;
+
+ for (i = 0; i < NUM_WEP_KEYS; i++) {
+ size_t len = ssid->wep_key_len[i];
+ if (len && len != 5 && len != 13 && len != 16)
+ return 1; /* invalid WEP key */
+ }
+
+ return 0;
+}
char ** wpa_config_get_all(struct wpa_ssid *ssid, int get_keys);
char * wpa_config_get(struct wpa_ssid *ssid, const char *var);
char * wpa_config_get_no_key(struct wpa_ssid *ssid, const char *var);
+int wpas_network_disabled(struct wpa_ssid *ssid);
void wpa_config_update_psk(struct wpa_ssid *ssid);
int wpa_config_add_prio_network(struct wpa_config *config,
struct wpa_ssid *ssid);
num_ssid = 0;
ssid = wpa_s->conf->ssid;
while (ssid) {
- if (!ssid->disabled)
+ if (!wpas_network_disabled(ssid))
num_ssid++;
ssid = ssid->next;
}
i = 0;
ssid = wpa_s->conf->ssid;
while (ssid) {
- if (!ssid->disabled) {
+ if (!wpas_network_disabled(ssid)) {
params.ssids[i].ssid = ssid->ssid;
params.ssids[i].ssid_len = ssid->ssid_len;
params.num_ssids++;
return -1;
}
- if (ssid->disabled) {
+ if (wpas_network_disabled(ssid)) {
wpa_dbg(wpa_s, MSG_DEBUG, "Selected network is disabled");
return -1;
}
for (ssid = group; ssid; ssid = ssid->pnext) {
int check_ssid = wpa ? 1 : (ssid->ssid_len != 0);
- if (ssid->disabled) {
+ if (wpas_network_disabled(ssid)) {
wpa_dbg(wpa_s, MSG_DEBUG, " skip - disabled");
continue;
}
for (prio = 0; prio < wpa_s->conf->num_prio; prio++) {
for (ssid = wpa_s->conf->pssid[prio]; ssid; ssid = ssid->pnext)
{
- if (ssid->disabled)
+ if (wpas_network_disabled(ssid))
continue;
if (ssid->mode == IEEE80211_MODE_IBSS ||
ssid->mode == IEEE80211_MODE_AP)
dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) {
for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) {
- if (ssid->disabled || ssid->mode != WPAS_MODE_INFRA)
+ if (wpas_network_disabled(ssid) ||
+ ssid->mode != WPAS_MODE_INFRA)
continue;
if (ssid->ssid_len != bss->ssid_len ||
os_memcmp(ssid->ssid, bss->ssid, ssid->ssid_len) !=
struct wpa_ssid *ssid = conf->ssid;
int count = 0;
while (ssid) {
- if (!ssid->disabled)
+ if (!wpas_network_disabled(ssid))
count++;
ssid = ssid->next;
}
struct wpa_ssid *ssid)
{
while (ssid) {
- if (!ssid->disabled)
+ if (!wpas_network_disabled(ssid))
break;
ssid = ssid->next;
}
if (ssid == NULL && max_ssids > 1)
ssid = wpa_s->conf->ssid;
while (ssid) {
- if (!ssid->disabled && ssid->scan_ssid) {
+ if (!wpas_network_disabled(ssid) && ssid->scan_ssid) {
wpa_hexdump_ascii(MSG_DEBUG, "Scan SSID",
ssid->ssid, ssid->ssid_len);
params.ssids[params.num_ssids].ssid =
}
for (tssid = wpa_s->conf->ssid; tssid; tssid = tssid->next) {
- if (tssid->disabled)
+ if (wpas_network_disabled(tssid))
continue;
if ((params.freqs || !freqs_set) && tssid->scan_freq) {
int_array_concat(¶ms.freqs,
struct wpa_ssid *ssid = wpa_s->conf->ssid;
while (ssid) {
- if (!ssid->disabled && ssid->scan_ssid)
+ if (!wpas_network_disabled(ssid) && ssid->scan_ssid)
break;
ssid = ssid->next;
}
need_ssids = 0;
for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) {
- if (!ssid->disabled && !ssid->scan_ssid) {
+ if (!wpas_network_disabled(ssid) && !ssid->scan_ssid) {
/* Use wildcard SSID to find this network */
wildcard = 1;
- } else if (!ssid->disabled && ssid->ssid_len)
+ } else if (!wpas_network_disabled(ssid) && ssid->ssid_len)
need_ssids++;
#ifdef CONFIG_WPS
- if (!ssid->disabled && ssid->key_mgmt == WPA_KEY_MGMT_WPS) {
+ if (!wpas_network_disabled(ssid) &&
+ ssid->key_mgmt == WPA_KEY_MGMT_WPS) {
/*
* Normal scan is more reliable and faster for WPS
* operations and since these are for short periods of
}
while (ssid) {
- if (ssid->disabled)
+ if (wpas_network_disabled(ssid))
goto next;
if (params.num_filter_ssids < wpa_s->max_match_sets &&
do {
ssid = ssid->next;
} while (ssid &&
- (ssid->disabled || !ssid->scan_ssid));
+ (wpas_network_disabled(ssid) ||
+ !ssid->scan_ssid));
break;
}
}
entry = wpa_s->conf->ssid;
while (entry) {
- if (!entry->disabled &&
+ if (!wpas_network_disabled(entry) &&
((ssid_len == entry->ssid_len &&
os_memcmp(ssid, entry->ssid, ssid_len) == 0) || wired) &&
(!entry->bssid_set ||
os_memcmp(bssid, entry->bssid, ETH_ALEN) == 0))
return entry;
#ifdef CONFIG_WPS
- if (!entry->disabled &&
+ if (!wpas_network_disabled(entry) &&
(entry->key_mgmt & WPA_KEY_MGMT_WPS) &&
(entry->ssid == NULL || entry->ssid_len == 0) &&
(!entry->bssid_set ||
return entry;
#endif /* CONFIG_WPS */
- if (!entry->disabled && entry->bssid_set &&
+ if (!wpas_network_disabled(entry) && entry->bssid_set &&
entry->ssid_len == 0 &&
os_memcmp(bssid, entry->bssid, ETH_ALEN) == 0)
return entry;