📄 config.c
字号:
} else if (os_strcmp(buf, "logger_stdout") == 0) { bss->logger_stdout = atoi(pos); } else if (os_strcmp(buf, "dump_file") == 0) { bss->dump_log_name = os_strdup(pos); } else if (os_strcmp(buf, "ssid") == 0) { bss->ssid.ssid_len = os_strlen(pos); if (bss->ssid.ssid_len > HOSTAPD_MAX_SSID_LEN || bss->ssid.ssid_len < 1) { wpa_printf(MSG_ERROR, "Line %d: invalid SSID " "'%s'", line, pos); errors++; } else { os_memcpy(bss->ssid.ssid, pos, bss->ssid.ssid_len); bss->ssid.ssid[bss->ssid.ssid_len] = '\0'; bss->ssid.ssid_set = 1; } } else if (os_strcmp(buf, "macaddr_acl") == 0) { bss->macaddr_acl = atoi(pos); if (bss->macaddr_acl != ACCEPT_UNLESS_DENIED && bss->macaddr_acl != DENY_UNLESS_ACCEPTED && bss->macaddr_acl != USE_EXTERNAL_RADIUS_AUTH) { wpa_printf(MSG_ERROR, "Line %d: unknown " "macaddr_acl %d", line, bss->macaddr_acl); } } else if (os_strcmp(buf, "accept_mac_file") == 0) { if (hostapd_config_read_maclist(pos, &bss->accept_mac, &bss->num_accept_mac)) { wpa_printf(MSG_ERROR, "Line %d: Failed to " "read accept_mac_file '%s'", line, pos); errors++; } } else if (os_strcmp(buf, "deny_mac_file") == 0) { if (hostapd_config_read_maclist(pos, &bss->deny_mac, &bss->num_deny_mac)) { wpa_printf(MSG_ERROR, "Line %d: Failed to " "read deny_mac_file '%s'", line, pos); errors++; } } else if (os_strcmp(buf, "ap_max_inactivity") == 0) { bss->ap_max_inactivity = atoi(pos); } else if (os_strcmp(buf, "country_code") == 0) { os_memcpy(conf->country, pos, 2); /* FIX: make this configurable */ conf->country[2] = ' '; } else if (os_strcmp(buf, "ieee80211d") == 0) { conf->ieee80211d = atoi(pos); } else if (os_strcmp(buf, "ieee8021x") == 0) { bss->ieee802_1x = atoi(pos); } else if (os_strcmp(buf, "eapol_version") == 0) { bss->eapol_version = atoi(pos); if (bss->eapol_version < 1 || bss->eapol_version > 2) { wpa_printf(MSG_ERROR, "Line %d: invalid EAPOL " "version (%d): '%s'.", line, bss->eapol_version, pos); errors++; } else wpa_printf(MSG_DEBUG, "eapol_version=%d", bss->eapol_version);#ifdef EAP_SERVER } else if (os_strcmp(buf, "eap_authenticator") == 0) { bss->eap_server = atoi(pos); wpa_printf(MSG_ERROR, "Line %d: obsolete " "eap_authenticator used; this has been " "renamed to eap_server", line); } else if (os_strcmp(buf, "eap_server") == 0) { bss->eap_server = atoi(pos); } else if (os_strcmp(buf, "eap_user_file") == 0) { if (hostapd_config_read_eap_user(pos, bss)) errors++; } else if (os_strcmp(buf, "ca_cert") == 0) { os_free(bss->ca_cert); bss->ca_cert = os_strdup(pos); } else if (os_strcmp(buf, "server_cert") == 0) { os_free(bss->server_cert); bss->server_cert = os_strdup(pos); } else if (os_strcmp(buf, "private_key") == 0) { os_free(bss->private_key); bss->private_key = os_strdup(pos); } else if (os_strcmp(buf, "private_key_passwd") == 0) { os_free(bss->private_key_passwd); bss->private_key_passwd = os_strdup(pos); } else if (os_strcmp(buf, "check_crl") == 0) { bss->check_crl = atoi(pos); } else if (os_strcmp(buf, "dh_file") == 0) { os_free(bss->dh_file); bss->dh_file = os_strdup(pos);#ifdef EAP_FAST } else if (os_strcmp(buf, "pac_opaque_encr_key") == 0) { os_free(bss->pac_opaque_encr_key); bss->pac_opaque_encr_key = os_malloc(16); if (bss->pac_opaque_encr_key == NULL) { wpa_printf(MSG_ERROR, "Line %d: No memory for " "pac_opaque_encr_key", line); errors++; } else if (hexstr2bin(pos, bss->pac_opaque_encr_key, 16)) { wpa_printf(MSG_ERROR, "Line %d: Invalid " "pac_opaque_encr_key", line); errors++; } } else if (os_strcmp(buf, "eap_fast_a_id") == 0) { size_t idlen = os_strlen(pos); if (idlen & 1) { wpa_printf(MSG_ERROR, "Line %d: Invalid " "eap_fast_a_id", line); errors++; } else { os_free(bss->eap_fast_a_id); bss->eap_fast_a_id = os_malloc(idlen / 2); if (bss->eap_fast_a_id == NULL || hexstr2bin(pos, bss->eap_fast_a_id, idlen / 2)) { wpa_printf(MSG_ERROR, "Line %d: " "Failed to parse " "eap_fast_a_id", line); errors++; } else bss->eap_fast_a_id_len = idlen / 2; } } else if (os_strcmp(buf, "eap_fast_a_id_info") == 0) { os_free(bss->eap_fast_a_id_info); bss->eap_fast_a_id_info = os_strdup(pos); } else if (os_strcmp(buf, "eap_fast_prov") == 0) { bss->eap_fast_prov = atoi(pos); } else if (os_strcmp(buf, "pac_key_lifetime") == 0) { bss->pac_key_lifetime = atoi(pos); } else if (os_strcmp(buf, "pac_key_refresh_time") == 0) { bss->pac_key_refresh_time = atoi(pos);#endif /* EAP_FAST */#ifdef EAP_SIM } else if (os_strcmp(buf, "eap_sim_db") == 0) { os_free(bss->eap_sim_db); bss->eap_sim_db = os_strdup(pos); } else if (os_strcmp(buf, "eap_sim_aka_result_ind") == 0) { bss->eap_sim_aka_result_ind = atoi(pos);#endif /* EAP_SIM */#ifdef EAP_TNC } else if (os_strcmp(buf, "tnc") == 0) { bss->tnc = atoi(pos);#endif /* EAP_TNC */#endif /* EAP_SERVER */ } else if (os_strcmp(buf, "eap_message") == 0) { char *term; bss->eap_req_id_text = os_strdup(pos); if (bss->eap_req_id_text == NULL) { wpa_printf(MSG_ERROR, "Line %d: Failed to " "allocate memory for " "eap_req_id_text", line); errors++; continue; } bss->eap_req_id_text_len = os_strlen(bss->eap_req_id_text); term = os_strstr(bss->eap_req_id_text, "\\0"); if (term) { *term++ = '\0'; os_memmove(term, term + 1, bss->eap_req_id_text_len - (term - bss->eap_req_id_text) - 1); bss->eap_req_id_text_len--; } } else if (os_strcmp(buf, "wep_key_len_broadcast") == 0) { bss->default_wep_key_len = atoi(pos); if (bss->default_wep_key_len > 13) { wpa_printf(MSG_ERROR, "Line %d: invalid WEP " "key len %lu (= %lu bits)", line, (unsigned long) bss->default_wep_key_len, (unsigned long) bss->default_wep_key_len * 8); errors++; } } else if (os_strcmp(buf, "wep_key_len_unicast") == 0) { bss->individual_wep_key_len = atoi(pos); if (bss->individual_wep_key_len < 0 || bss->individual_wep_key_len > 13) { wpa_printf(MSG_ERROR, "Line %d: invalid WEP " "key len %d (= %d bits)", line, bss->individual_wep_key_len, bss->individual_wep_key_len * 8); errors++; } } else if (os_strcmp(buf, "wep_rekey_period") == 0) { bss->wep_rekeying_period = atoi(pos); if (bss->wep_rekeying_period < 0) { wpa_printf(MSG_ERROR, "Line %d: invalid " "period %d", line, bss->wep_rekeying_period); errors++; } } else if (os_strcmp(buf, "eap_reauth_period") == 0) { bss->eap_reauth_period = atoi(pos); if (bss->eap_reauth_period < 0) { wpa_printf(MSG_ERROR, "Line %d: invalid " "period %d", line, bss->eap_reauth_period); errors++; } } else if (os_strcmp(buf, "eapol_key_index_workaround") == 0) { bss->eapol_key_index_workaround = atoi(pos);#ifdef CONFIG_IAPP } else if (os_strcmp(buf, "iapp_interface") == 0) { bss->ieee802_11f = 1; os_strlcpy(bss->iapp_iface, pos, sizeof(bss->iapp_iface));#endif /* CONFIG_IAPP */ } else if (os_strcmp(buf, "own_ip_addr") == 0) { if (hostapd_parse_ip_addr(pos, &bss->own_ip_addr)) { wpa_printf(MSG_ERROR, "Line %d: invalid IP " "address '%s'", line, pos); errors++; } } else if (os_strcmp(buf, "nas_identifier") == 0) { bss->nas_identifier = os_strdup(pos); } else if (os_strcmp(buf, "auth_server_addr") == 0) { if (hostapd_config_read_radius_addr( &bss->radius->auth_servers, &bss->radius->num_auth_servers, pos, 1812, &bss->radius->auth_server)) { wpa_printf(MSG_ERROR, "Line %d: invalid IP " "address '%s'", line, pos); errors++; } } else if (bss->radius->auth_server && os_strcmp(buf, "auth_server_port") == 0) { bss->radius->auth_server->port = atoi(pos); } else if (bss->radius->auth_server && os_strcmp(buf, "auth_server_shared_secret") == 0) { int len = os_strlen(pos); if (len == 0) { /* RFC 2865, Ch. 3 */ wpa_printf(MSG_ERROR, "Line %d: empty shared " "secret is not allowed.", line); errors++; } bss->radius->auth_server->shared_secret = (u8 *) os_strdup(pos); bss->radius->auth_server->shared_secret_len = len; } else if (os_strcmp(buf, "acct_server_addr") == 0) { if (hostapd_config_read_radius_addr( &bss->radius->acct_servers, &bss->radius->num_acct_servers, pos, 1813, &bss->radius->acct_server)) { wpa_printf(MSG_ERROR, "Line %d: invalid IP " "address '%s'", line, pos); errors++; } } else if (bss->radius->acct_server && os_strcmp(buf, "acct_server_port") == 0) { bss->radius->acct_server->port = atoi(pos); } else if (bss->radius->acct_server && os_strcmp(buf, "acct_server_shared_secret") == 0) { int len = os_strlen(pos); if (len == 0) { /* RFC 2865, Ch. 3 */ wpa_printf(MSG_ERROR, "Line %d: empty shared " "secret is not allowed.", line); errors++; } bss->radius->acct_server->shared_secret = (u8 *) os_strdup(pos); bss->radius->acct_server->shared_secret_len = len; } else if (os_strcmp(buf, "radius_retry_primary_interval") == 0) { bss->radius->retry_primary_interval = atoi(pos); } else if (os_strcmp(buf, "radius_acct_interim_interval") == 0) { bss->radius->acct_interim_interval = atoi(pos); } else if (os_strcmp(buf, "auth_algs") == 0) { bss->auth_algs = atoi(pos); if (bss->auth_algs == 0) { wpa_printf(MSG_ERROR, "Line %d: no " "authentication algorithms allowed", line); errors++; } } else if (os_strcmp(buf, "max_num_sta") == 0) { bss->max_num_sta = atoi(pos); if (bss->max_num_sta < 0 || bss->max_num_sta > MAX_STA_COUNT) { wpa_printf(MSG_ERROR, "Line %d: Invalid " "max_num_sta=%d; allowed range " "0..%d", line, bss->max_num_sta, MAX_STA_COUNT); errors++; } } else if (os_strcmp(buf, "wpa") == 0) { bss->wpa = atoi(pos); } else if (os_strcmp(buf, "wpa_group_rekey") == 0) { bss->wpa_group_rekey = atoi(pos); } else if (os_strcmp(buf, "wpa_strict_rekey") == 0) { bss->wpa_strict_rekey = atoi(pos); } else if (os_strcmp(buf, "wpa_gmk_rekey") == 0) { bss->wpa_gmk_rekey = atoi(pos); } else if (os_strcmp(buf, "wpa_ptk_rekey") == 0) { bss->wpa_ptk_rekey = atoi(pos); } else if (os_strcmp(buf, "wpa_passphrase") == 0) { int len = os_strlen(pos); if (len < 8 || len > 63) { wpa_printf(MSG_ERROR, "Line %d: invalid WPA " "passphrase length %d (expected " "8..63)", line, len); errors++; } else { os_free(bss->ssid.wpa_passphrase); bss->ssid.wpa_passphrase = os_strdup(pos); } } else if (os_strcmp(buf, "wpa_psk") == 0) { os_free(bss->ssid.wpa_psk); bss->ssid.wpa_psk = os_zalloc(sizeof(struct hostapd_wpa_psk)); if (bss->ssid.wpa_psk == NULL) errors++; else if (hexstr2bin(pos, bss->ssid.wpa_psk->psk, PMK_LEN) || pos[PMK_LEN * 2] != '\0') { wpa_printf(MSG_ERROR, "Line %d: Invalid PSK " "'%s'.", line, pos); errors++; } else { bss->ssid.wpa_psk->group = 1; } } else if (os_strcmp(buf, "wpa_psk_file") == 0) { os_free(bss->ssid.wpa_psk_file); bss->ssid.wpa_psk_file = os_strdup(pos); if (!bss->ssid.wpa_psk_file) { wpa_printf(MSG_ERROR, "Line %d: allocation " "failed", line); errors++; } } else if (os_strcmp(buf, "wpa_key_mgmt") == 0) { bss->wpa_key_mgmt = hostapd_config_parse_key_mgmt(line, pos); if (bss->wpa_key_mgmt == -1) errors++; } else if (os_strcmp(buf, "wpa_pairwise") == 0) { bss->wpa_pairwise = hostapd_config_parse_cipher(line, pos); if (bss->wpa_pairwise == -1 || bss->wpa_pairwise == 0) errors++; else if (bss->wpa_pairwise & (WPA_CIPHER_NONE | WPA_CIPHER_WEP40 | WPA_CIPHER_WEP104)) { wpa_printf(MSG_ERROR, "Line %d: unsupported " "pairwise cipher suite '%s'", bss->wpa_pairwise, pos); errors++; } } else if (os_strcmp(buf, "rsn_pairwise") == 0) { bss->rsn_pairwise = hostapd_config_parse_cipher(line, pos); if (bss->rsn_pairwise == -1 || bss->rsn_pairwise == 0) errors++; else if (bss->rsn_pairwise & (WPA_CIPHER_NONE | WPA_CIPHER_WEP40 | WPA_CIPHER_WEP104)) { wpa_printf(MSG_ERROR, "Line %d: unsupported " "pairwise cipher suite '%s'", bss->rsn_pairwise, pos); errors++; }#ifdef CONFIG_RSN_PREAUTH } else if (os_strcmp(buf, "rsn_preauth") == 0) { bss->rsn_preauth = atoi(pos); } else if (os_strcmp(buf, "rsn_preauth_interfaces") == 0) { bss->rsn_preauth_interfaces = os_strdup(pos);#endif /* CONFIG_RSN_PREAUTH */#ifdef CONFIG_PEERKEY } else if (os_strcmp(buf, "peerkey") == 0) { bss->peerkey = atoi(pos);#endif /* CONFIG_PEERKEY */#ifdef CONFIG_IEEE80211R } else if (os_strcmp(buf, "mobility_domain") == 0) { if (os_strlen(pos) != 2 * MOBILITY_DOMAIN_ID_LEN || hexstr2bin(pos, bss->mobility_domain, MOBILITY_DOMAIN_ID_LEN) != 0) { wpa_printf(MSG_DEBUG, "Line %d: Invalid " "mobility_domain '%s'", line, pos); errors++; continue; } } else if (os_strcmp(buf, "r1_key_holder") == 0) { if (os_strlen(pos) != 2 * FT_R1KH_ID_LEN || hexstr2bin(pos, bss->r1_key_holder, FT_R1KH_ID_LEN) != 0) { wpa_printf(MSG_DEBUG, "Line %d: Invalid " "r1_key_holder '%s'", line, pos); errors++; continue; } } else if (os_strcmp(buf, "r0_key_lifetime") == 0) { bss->r0_key_lifetime = atoi(pos); } else if (os_strcmp(buf, "reassociation_deadline") == 0) { bss->reassociation_deadline = atoi(pos); } else if (os_strcmp(buf, "r0kh") == 0) { if (add_r0kh(bss, pos) < 0) { wpa_printf(MSG_DEBUG, "Line %d: Invalid " "r0kh '%s'", line, pos); errors++; continue; } } else if (os_strcmp(buf, "r1kh") == 0) { if (add_r1kh(bss, pos) < 0) { wpa_printf(MSG_DEBUG, "Line %d: Invalid " "r1kh '%s'", line, pos); errors++; continue; } } else if (os_strcmp(buf, "pmk_r1_push") == 0) { bss->pmk_r1_push = atoi(pos);#endif /* CONFIG_IEEE80211R */ } else if (os_strcmp(buf, "ctrl_interface") == 0) { os_free(bss->ctrl_interface); bss->ctrl_interface = os_strdup(pos); } else if (os_strcmp(buf, "ctrl_interface_group") == 0) {#ifndef CONFIG_NATIVE_WINDOWS struct group *grp; char *endp; const char *group = pos; grp = getgrnam(group); if (grp) { bss->ctrl_interface_gid = grp->gr_gid; bss->ctrl_interface_gid_set = 1; wpa_printf(MSG_DEBUG, "ctrl_interface_group=%d" " (from group name '%s')", bss->ctrl_interface_gid, group); continue; } /* Group name not found - try to parse this as gid */ bss->ctrl_interface_gid = strtol(group, &endp, 10); if (*group == '\0' || *endp != '\0') { wpa_printf(MSG_DEBUG, "Line %d: Invalid group " "'%s'", line, group); errors++; continue; } bss->ctrl_interface_gid_set = 1; wpa_printf(MSG_DEBUG, "ctrl_interface_group=%d", bss->ctrl_interface_gid);#endif /* CONFIG_NATIVE_WINDOWS */#ifdef RADIUS_SERVER } else if (os_strcmp(buf, "radius_server_clients") == 0) { os_free(bss->radius_server_clients); bss->radius_server_clients = os_strdup(pos); } else if (os_strcmp(buf, "radius_server_auth_port") == 0) { bss->radius_server_auth_port = atoi(pos); } else if (os_strcmp(buf, "radius_server_ipv6") == 0) { bss->radius_server_ipv6 = atoi(pos);#endif /* RADIUS_SERVER */ } else if (os_strcmp(buf, "test_socket") == 0) { os_free(bss->test_socket); bss->test_socket = os_strdup(pos); } else if (os_strcmp(buf, "use_pae_group_addr") == 0) { bss->use_pae_group_addr = atoi(pos); } else if (os_strcmp(buf, "hw_mode") == 0) { if (os_strcmp(pos, "a") == 0) conf->hw_mode = HOSTAPD_MODE_IEEE80211A; else if (os_strcmp(pos, "b") == 0) conf->hw_mode = HOSTAPD_MODE_IEEE80211B; else if (os_strcmp(pos, "g") == 0) conf->hw_mode = HOSTAPD_MODE_IEEE80211G; else { wpa_printf(MSG_ERROR, "Line %d: unknown " "hw_mode '%s'", line, pos); errors++; } } else if (os_strcmp(buf, "channel") == 0) { conf->channel = atoi(pos); } else if (os_strcmp(buf, "beacon_int") == 0) { int val = atoi(pos); /* MIB defines range as 1..65535, but very small values * cause problems with the current implementation. * Since it is unlikely that this small numbers are * useful in real life scenarios, do not allow beacon * period to be set below 15 TU. */ if (val < 15 || val > 65535) { wpa_printf(MSG_ERROR, "Line %d: invalid " "beacon_int %d (expected " "15..65535)", line, val); errors++; } else conf->beacon_int = val; } else if (os_strcmp(buf, "dtim_period") == 0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -