X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=hostapd%2Fconfig.c;h=c0381ea18666851489617bea041bdd5af7df2e68;hb=fda90ab4b73b19d4638e8b7cd4c90458e51f9e3e;hp=3d520f530063124efa2dad68bf4823df5297f4b9;hpb=30b32314eb16e49a0a13e4726ec1824ab44db8b3;p=wpasupplicant diff --git a/hostapd/config.c b/hostapd/config.c index 3d520f5..c0381ea 100644 --- a/hostapd/config.c +++ b/hostapd/config.c @@ -250,8 +250,6 @@ static struct hostapd_config * hostapd_config_defaults(void) conf->send_probe_response = 1; conf->bridge_packets = INTERNAL_BRIDGE_DO_NOT_CONTROL; - os_memcpy(conf->country, "US ", 3); - for (i = 0; i < NUM_TX_QUEUES; i++) conf->tx_queue[i].aifs = -1; /* use hw default */ @@ -476,11 +474,6 @@ int hostapd_setup_wpa_psk(struct hostapd_bss_config *conf) wpa_hexdump(MSG_DEBUG, "PSK (from passphrase)", ssid->wpa_psk->psk, PMK_LEN); ssid->wpa_psk->group = 1; - - os_memset(ssid->wpa_passphrase, 0, - os_strlen(ssid->wpa_passphrase)); - os_free(ssid->wpa_passphrase); - ssid->wpa_passphrase = NULL; } if (ssid->wpa_psk_file) { @@ -975,6 +968,12 @@ static int hostapd_config_check(struct hostapd_config *conf) { size_t i; + if (conf->ieee80211d && (!conf->country[0] || !conf->country[1])) { + wpa_printf(MSG_ERROR, "Cannot enable IEEE 802.11d without " + "setting the country_code"); + return -1; + } + for (i = 0; i < conf->num_bss; i++) { if (hostapd_config_check_bss(&conf->bss[i], conf)) return -1; @@ -1520,8 +1519,9 @@ struct hostapd_config * hostapd_config_read(const char *fname) } 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); + 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) { @@ -1902,6 +1902,7 @@ struct hostapd_config * hostapd_config_read(const char *fname) } else if (os_strcmp(buf, "pmk_r1_push") == 0) { bss->pmk_r1_push = atoi(pos); #endif /* CONFIG_IEEE80211R */ +#ifndef CONFIG_NO_CTRL_IFACE } else if (os_strcmp(buf, "ctrl_interface") == 0) { os_free(bss->ctrl_interface); bss->ctrl_interface = os_strdup(pos); @@ -1933,6 +1934,7 @@ struct hostapd_config * hostapd_config_read(const char *fname) wpa_printf(MSG_DEBUG, "ctrl_interface_group=%d", bss->ctrl_interface_gid); #endif /* CONFIG_NATIVE_WINDOWS */ +#endif /* CONFIG_NO_CTRL_IFACE */ #ifdef RADIUS_SERVER } else if (os_strcmp(buf, "radius_server_clients") == 0) { os_free(bss->radius_server_clients); @@ -2155,6 +2157,7 @@ struct hostapd_config * hostapd_config_read(const char *fname) 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) { @@ -2162,6 +2165,7 @@ struct hostapd_config * hostapd_config_read(const char *fname) "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) { @@ -2169,6 +2173,7 @@ struct hostapd_config * hostapd_config_read(const char *fname) "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) { @@ -2176,6 +2181,7 @@ struct hostapd_config * hostapd_config_read(const char *fname) "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) { @@ -2183,6 +2189,7 @@ struct hostapd_config * hostapd_config_read(const char *fname) "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) { @@ -2190,10 +2197,13 @@ struct hostapd_config * hostapd_config_read(const char *fname) "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)) { @@ -2202,7 +2212,49 @@ struct hostapd_config * hostapd_config_read(const char *fname) 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 " @@ -2408,6 +2460,14 @@ static void hostapd_config_free_bss(struct hostapd_bss_config *conf) 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); #endif /* CONFIG_WPS */ }