📄 config.c
字号:
bss->dtim_period = atoi(pos); if (bss->dtim_period < 1 || bss->dtim_period > 255) { wpa_printf(MSG_ERROR, "Line %d: invalid " "dtim_period %d", line, bss->dtim_period); errors++; } } else if (os_strcmp(buf, "rts_threshold") == 0) { conf->rts_threshold = atoi(pos); if (conf->rts_threshold < 0 || conf->rts_threshold > 2347) { wpa_printf(MSG_ERROR, "Line %d: invalid " "rts_threshold %d", line, conf->rts_threshold); errors++; } } else if (os_strcmp(buf, "fragm_threshold") == 0) { conf->fragm_threshold = atoi(pos); if (conf->fragm_threshold < 256 || conf->fragm_threshold > 2346) { wpa_printf(MSG_ERROR, "Line %d: invalid " "fragm_threshold %d", line, conf->fragm_threshold); errors++; } } else if (os_strcmp(buf, "send_probe_response") == 0) { int val = atoi(pos); if (val != 0 && val != 1) { wpa_printf(MSG_ERROR, "Line %d: invalid " "send_probe_response %d (expected " "0 or 1)", line, val); } else conf->send_probe_response = val; } else if (os_strcmp(buf, "supported_rates") == 0) { if (hostapd_parse_rates(&conf->supported_rates, pos)) { wpa_printf(MSG_ERROR, "Line %d: invalid rate " "list", line); errors++; } } else if (os_strcmp(buf, "basic_rates") == 0) { if (hostapd_parse_rates(&conf->basic_rates, pos)) { wpa_printf(MSG_ERROR, "Line %d: invalid rate " "list", line); errors++; } } else if (os_strcmp(buf, "preamble") == 0) { if (atoi(pos)) conf->preamble = SHORT_PREAMBLE; else conf->preamble = LONG_PREAMBLE; } else if (os_strcmp(buf, "ignore_broadcast_ssid") == 0) { bss->ignore_broadcast_ssid = atoi(pos); } else if (os_strcmp(buf, "bridge_packets") == 0) { conf->bridge_packets = atoi(pos); } else if (os_strcmp(buf, "wep_default_key") == 0) { bss->ssid.wep.idx = atoi(pos); if (bss->ssid.wep.idx > 3) { wpa_printf(MSG_ERROR, "Invalid " "wep_default_key index %d", bss->ssid.wep.idx); errors++; } } else if (os_strcmp(buf, "wep_key0") == 0 || os_strcmp(buf, "wep_key1") == 0 || os_strcmp(buf, "wep_key2") == 0 || os_strcmp(buf, "wep_key3") == 0) { if (hostapd_config_read_wep(&bss->ssid.wep, buf[7] - '0', pos)) { wpa_printf(MSG_ERROR, "Line %d: invalid WEP " "key '%s'", line, buf); errors++; } } else if (os_strcmp(buf, "dynamic_vlan") == 0) { bss->ssid.dynamic_vlan = atoi(pos); } else if (os_strcmp(buf, "vlan_file") == 0) { if (hostapd_config_read_vlan_file(bss, pos)) { wpa_printf(MSG_ERROR, "Line %d: failed to " "read VLAN file '%s'", line, pos); errors++; }#ifdef CONFIG_FULL_DYNAMIC_VLAN } else if (os_strcmp(buf, "vlan_tagged_interface") == 0) { bss->ssid.vlan_tagged_interface = os_strdup(pos);#endif /* CONFIG_FULL_DYNAMIC_VLAN */ } else if (os_strcmp(buf, "passive_scan_interval") == 0) { conf->passive_scan_interval = atoi(pos); } else if (os_strcmp(buf, "passive_scan_listen") == 0) { conf->passive_scan_listen = atoi(pos); } else if (os_strcmp(buf, "passive_scan_mode") == 0) { conf->passive_scan_mode = atoi(pos); } else if (os_strcmp(buf, "ap_table_max_size") == 0) { conf->ap_table_max_size = atoi(pos); } else if (os_strcmp(buf, "ap_table_expiration_time") == 0) { conf->ap_table_expiration_time = atoi(pos); } else if (os_strncmp(buf, "tx_queue_", 9) == 0) { if (hostapd_config_tx_queue(conf, buf, pos)) { wpa_printf(MSG_ERROR, "Line %d: invalid TX " "queue item", line); errors++; } } else if (os_strcmp(buf, "wme_enabled") == 0) { bss->wme_enabled = atoi(pos); } else if (os_strncmp(buf, "wme_ac_", 7) == 0) { if (hostapd_config_wme_ac(conf, buf, pos)) { wpa_printf(MSG_ERROR, "Line %d: invalid wme " "ac item", line); errors++; } } else if (os_strcmp(buf, "bss") == 0) { if (hostapd_config_bss(conf, pos)) { wpa_printf(MSG_ERROR, "Line %d: invalid bss " "item", line); errors++; } } else if (os_strcmp(buf, "bssid") == 0) { if (bss == conf->bss && (!conf->driver || !conf->driver->init_bssid)) { wpa_printf(MSG_ERROR, "Line %d: bssid item " "not allowed for the default " "interface and this driver", line); errors++; } else if (hwaddr_aton(pos, bss->bssid)) { wpa_printf(MSG_ERROR, "Line %d: invalid bssid " "item", line); errors++; }#ifdef CONFIG_IEEE80211W } else if (os_strcmp(buf, "ieee80211w") == 0) { bss->ieee80211w = atoi(pos); } else if (os_strcmp(buf, "assoc_sa_query_max_timeout") == 0) { bss->assoc_sa_query_max_timeout = atoi(pos); if (bss->assoc_sa_query_max_timeout == 0) { wpa_printf(MSG_ERROR, "Line %d: invalid " "assoc_sa_query_max_timeout", line); errors++; } } else if (os_strcmp(buf, "assoc_sa_query_retry_timeout") == 0) { bss->assoc_sa_query_retry_timeout = atoi(pos); if (bss->assoc_sa_query_retry_timeout == 0) { wpa_printf(MSG_ERROR, "Line %d: invalid " "assoc_sa_query_retry_timeout", line); errors++; }#endif /* CONFIG_IEEE80211W */#ifdef CONFIG_IEEE80211N } else if (os_strcmp(buf, "ieee80211n") == 0) { conf->ieee80211n = atoi(pos); } else if (os_strcmp(buf, "ht_capab") == 0) { if (hostapd_config_ht_capab(conf, pos) < 0) { wpa_printf(MSG_ERROR, "Line %d: invalid " "ht_capab", line); errors++; }#endif /* CONFIG_IEEE80211N */ } else if (os_strcmp(buf, "max_listen_interval") == 0) { bss->max_listen_interval = atoi(pos); } else if (os_strcmp(buf, "okc") == 0) { bss->okc = atoi(pos);#ifdef CONFIG_WPS } else if (os_strcmp(buf, "wps_state") == 0) { bss->wps_state = atoi(pos); if (bss->wps_state < 0 || bss->wps_state > 2) { wpa_printf(MSG_ERROR, "Line %d: invalid " "wps_state", line); errors++; } } else if (os_strcmp(buf, "ap_setup_locked") == 0) { bss->ap_setup_locked = atoi(pos); } else if (os_strcmp(buf, "uuid") == 0) { if (uuid_str2bin(pos, bss->uuid)) { wpa_printf(MSG_ERROR, "Line %d: invalid UUID", line); errors++; } } else if (os_strcmp(buf, "wps_pin_requests") == 0) { os_free(bss->wps_pin_requests); bss->wps_pin_requests = os_strdup(pos); } else if (os_strcmp(buf, "device_name") == 0) { if (os_strlen(pos) > 32) { wpa_printf(MSG_ERROR, "Line %d: Too long " "device_name", line); errors++; } os_free(bss->device_name); bss->device_name = os_strdup(pos); } else if (os_strcmp(buf, "manufacturer") == 0) { if (os_strlen(pos) > 64) { wpa_printf(MSG_ERROR, "Line %d: Too long " "manufacturer", line); errors++; } os_free(bss->manufacturer); bss->manufacturer = os_strdup(pos); } else if (os_strcmp(buf, "model_name") == 0) { if (os_strlen(pos) > 32) { wpa_printf(MSG_ERROR, "Line %d: Too long " "model_name", line); errors++; } os_free(bss->model_name); bss->model_name = os_strdup(pos); } else if (os_strcmp(buf, "model_number") == 0) { if (os_strlen(pos) > 32) { wpa_printf(MSG_ERROR, "Line %d: Too long " "model_number", line); errors++; } os_free(bss->model_number); bss->model_number = os_strdup(pos); } else if (os_strcmp(buf, "serial_number") == 0) { if (os_strlen(pos) > 32) { wpa_printf(MSG_ERROR, "Line %d: Too long " "serial_number", line); errors++; } os_free(bss->serial_number); bss->serial_number = os_strdup(pos); } else if (os_strcmp(buf, "device_type") == 0) { os_free(bss->device_type); bss->device_type = os_strdup(pos); } else if (os_strcmp(buf, "config_methods") == 0) { os_free(bss->config_methods); bss->config_methods = os_strdup(pos); } else if (os_strcmp(buf, "os_version") == 0) { if (hexstr2bin(pos, bss->os_version, 4)) { wpa_printf(MSG_ERROR, "Line %d: invalid " "os_version", line); errors++; } } else if (os_strcmp(buf, "ap_pin") == 0) { os_free(bss->ap_pin); bss->ap_pin = os_strdup(pos); } else if (os_strcmp(buf, "skip_cred_build") == 0) { bss->skip_cred_build = atoi(pos); } else if (os_strcmp(buf, "extra_cred") == 0) { os_free(bss->extra_cred); bss->extra_cred = (u8 *) os_readfile(pos, &bss->extra_cred_len); if (bss->extra_cred == NULL) { wpa_printf(MSG_ERROR, "Line %d: could not " "read Credentials from '%s'", line, pos); errors++; } } else if (os_strcmp(buf, "wps_cred_processing") == 0) { bss->wps_cred_processing = atoi(pos); } else if (os_strcmp(buf, "ap_settings") == 0) { os_free(bss->ap_settings); bss->ap_settings = (u8 *) os_readfile(pos, &bss->ap_settings_len); if (bss->ap_settings == NULL) { wpa_printf(MSG_ERROR, "Line %d: could not " "read AP Settings from '%s'", line, pos); errors++; } } else if (os_strcmp(buf, "upnp_iface") == 0) { bss->upnp_iface = os_strdup(pos); } else if (os_strcmp(buf, "friendly_name") == 0) { os_free(bss->friendly_name); bss->friendly_name = os_strdup(pos); } else if (os_strcmp(buf, "manufacturer_url") == 0) { os_free(bss->manufacturer_url); bss->manufacturer_url = os_strdup(pos); } else if (os_strcmp(buf, "model_description") == 0) { os_free(bss->model_description); bss->model_description = os_strdup(pos); } else if (os_strcmp(buf, "model_url") == 0) { os_free(bss->model_url); bss->model_url = os_strdup(pos); } else if (os_strcmp(buf, "upc") == 0) { os_free(bss->upc); bss->upc = os_strdup(pos);#endif /* CONFIG_WPS */ } else { wpa_printf(MSG_ERROR, "Line %d: unknown configuration " "item '%s'", line, buf); errors++; } } fclose(f); if (bss->individual_wep_key_len == 0) { /* individual keys are not use; can use key idx0 for broadcast * keys */ bss->broadcast_key_idx_min = 0; } /* Select group cipher based on the enabled pairwise cipher suites */ pairwise = 0; if (bss->wpa & 1) pairwise |= bss->wpa_pairwise; if (bss->wpa & 2) { if (bss->rsn_pairwise == 0) bss->rsn_pairwise = bss->wpa_pairwise; pairwise |= bss->rsn_pairwise; } if (pairwise & WPA_CIPHER_TKIP) bss->wpa_group = WPA_CIPHER_TKIP; else bss->wpa_group = WPA_CIPHER_CCMP; for (i = 0; i < conf->num_bss; i++) { bss = &conf->bss[i]; bss->radius->auth_server = bss->radius->auth_servers; bss->radius->acct_server = bss->radius->acct_servers; if (bss->wpa && bss->ieee802_1x) { bss->ssid.security_policy = SECURITY_WPA; } else if (bss->wpa) { bss->ssid.security_policy = SECURITY_WPA_PSK; } else if (bss->ieee802_1x) { bss->ssid.security_policy = SECURITY_IEEE_802_1X; bss->ssid.wep.default_len = bss->default_wep_key_len; } else if (bss->ssid.wep.keys_set) bss->ssid.security_policy = SECURITY_STATIC_WEP; else bss->ssid.security_policy = SECURITY_PLAINTEXT; } if (hostapd_config_check(conf)) errors++; if (errors) { wpa_printf(MSG_ERROR, "%d errors found in configuration file " "'%s'", errors, fname); hostapd_config_free(conf); conf = NULL; } return conf;}int hostapd_wep_key_cmp(struct hostapd_wep_keys *a, struct hostapd_wep_keys *b){ int i; if (a->idx != b->idx || a->default_len != b->default_len) return 1; for (i = 0; i < NUM_WEP_KEYS; i++) if (a->len[i] != b->len[i] || os_memcmp(a->key[i], b->key[i], a->len[i]) != 0) return 1; return 0;}static void hostapd_config_free_radius(struct hostapd_radius_server *servers, int num_servers){ int i; for (i = 0; i < num_servers; i++) { os_free(servers[i].shared_secret); } os_free(servers);}static void hostapd_config_free_eap_user(struct hostapd_eap_user *user){ os_free(user->identity); os_free(user->password); os_free(user);}static void hostapd_config_free_wep(struct hostapd_wep_keys *keys){ int i; for (i = 0; i < NUM_WEP_KEYS; i++) { os_free(keys->key[i]); keys->key[i] = NULL; }}static void hostapd_config_free_bss(struct hostapd_bss_config *conf){ struct hostapd_wpa_psk *psk, *prev; struct hostapd_eap_user *user, *prev_user; if (conf == NULL) return; psk = conf->ssid.wpa_psk; while (psk) { prev = psk; psk = psk->next; os_free(prev); } os_free(conf->ssid.wpa_passphrase); os_free(conf->ssid.wpa_psk_file);#ifdef CONFIG_FULL_DYNAMIC_VLAN os_free(conf->ssid.vlan_tagged_interface);#endif /* CONFIG_FULL_DYNAMIC_VLAN */ user = conf->eap_user; while (user) { prev_user = user; user = user->next; hostapd_config_free_eap_user(prev_user); } os_free(conf->dump_log_name); os_free(conf->eap_req_id_text); os_free(conf->accept_mac); os_free(conf->deny_mac); os_free(conf->nas_identifier); hostapd_config_free_radius(conf->radius->auth_servers, conf->radius->num_auth_servers); hostapd_config_free_radius(conf->radius->acct_servers, conf->radius->num_acct_servers); os_free(conf->rsn_preauth_interfaces); os_free(conf->ctrl_interface); os_free(conf->ca_cert); os_free(conf->server_cert); os_free(conf->private_key); os_free(conf->private_key_passwd); os_free(conf->dh_file); os_free(conf->pac_opaque_encr_key); os_free(conf->eap_fast_a_id); os_free(conf->eap_fast_a_id_info); os_free(conf->eap_sim_db); os_free(conf->radius_server_clients); os_free(conf->test_socket); os_free(conf->radius); hostapd_config_free_vlan(conf); if (conf->ssid.dyn_vlan_keys) { struct hostapd_ssid *ssid = &conf->ssid; size_t i; for (i = 0; i <= ssid->max_dyn_vlan_keys; i++) { if (ssid->dyn_vlan_keys[i] == NULL) continue; hostapd_config_free_wep(ssid->dyn_vlan_keys[i]); os_free(ssid->dyn_vlan_keys[i]); } os_free(ssid->dyn_vlan_keys); ssid->dyn_vlan_keys = NULL; }#ifdef CONFIG_IEEE80211R { struct ft_remote_r0kh *r0kh, *r0kh_prev; struct ft_remote_r1kh *r1kh, *r1kh_prev; r0kh = conf->r0kh_list; conf->r0kh_list = NULL; while (r0kh) { r0kh_prev = r0kh; r0kh = r0kh->next; os_free(r0kh_prev); } r1kh = conf->r1kh_list; conf->r1kh_list = NULL; while (r1kh) { r1kh_prev = r1kh; r1kh = r1kh->next; os_free(r1kh_prev); } }#endif /* CONFIG_IEEE80211R */#ifdef CONFIG_WPS os_free(conf->wps_pin_requests); os_free(conf->device_name); os_free(conf->manufacturer); os_free(conf->model_name); os_free(conf->model_number); os_free(conf->serial_number); os_free(conf->device_type); os_free(conf->config_methods); os_free(conf->ap_pin); os_free(conf->extra_cred); os_free(conf->ap_settings); os_free(conf->upnp_iface); os_free(conf->friendly_name); os_free(conf->manufacturer_url); os_free(conf->model_description); os_free(conf->model_url); os_free(conf->upc);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -