hostapd: add validation rules to wireless handler
[openwrt.git] / package / network / services / hostapd / files / netifd.sh
index dd22565..f06b2ac 100644 (file)
@@ -6,6 +6,12 @@ hostapd_add_rate() {
        [ $sub -gt 0 ] && append $var "."
 }
 
+hostapd_add_basic_rate() {
+       local var="$1"
+       local val="$(($2 / 100))"
+       append $var "$val" " "
+}
+
 hostapd_append_wep_key() {
        local var="$1"
 
@@ -57,7 +63,7 @@ hostapd_prepare_device_config() {
        local base="${config%%.conf}"
        local base_cfg=
 
-       json_get_vars country country_ie beacon_int basic_rate
+       json_get_vars country country_ie beacon_int
 
        hostapd_set_log_options base_cfg
 
@@ -69,8 +75,9 @@ hostapd_prepare_device_config() {
        [ -n "$hwmode" ] && append base_cfg "hw_mode=$hwmode" "$N"
 
        local brlist= br
+       json_get_values basic_rate_list basic_rate
        for br in $basic_rate_list; do
-               hostapd_add_rate brlist "$br"
+               hostapd_add_basic_rate brlist "$br"
        done
        [ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N"
        [ -n "$beacon_int" ] && append base_cfg "beacon_int=$beacon_int" "$N"
@@ -82,7 +89,7 @@ EOF
 }
 
 hostapd_common_add_bss_config() {
-       config_add_string bssid ssid
+       config_add_string 'bssid:macaddr' 'ssid:string'
        config_add_boolean wds wmm hidden
 
        config_add_int maxassoc max_inactivity
@@ -95,9 +102,9 @@ hostapd_common_add_bss_config() {
        config_add_boolean rsn_preauth auth_cache
        config_add_int ieee80211w
 
-       config_add_string auth_server server
+       config_add_string 'auth_server:host' 'server:host'
        config_add_string auth_secret
-       config_add_int auth_port port
+       config_add_int 'auth_port:port' 'port:port'
 
        config_add_string acct_server
        config_add_string acct_secret
@@ -111,15 +118,15 @@ hostapd_common_add_bss_config() {
        config_add_string iapp_interface
        config_add_string eap_type ca_cert client_cert identity auth priv_key priv_key_pwd
 
-       config_add_string key1 key2 key3 key4 password
+       config_add_string 'key1:wepkey' 'key2:wepkey' 'key3:wepkey' 'key4:wepkey' 'password:wpakey'
 
        config_add_boolean wps_pushbutton wps_label ext_registrar
        config_add_string wps_device_type wps_device_name wps_manufacturer wps_pin
 
        config_add_int ieee80211w_max_timeout ieee80211w_retry_timeout
 
-       config_add_string macfilter macfile
-       config_add_array maclist
+       config_add_string macfilter 'macfile:file'
+       config_add_array 'maclist:list(macaddr)'
 
        config_add_int mcast_rate
        config_add_array basic_rate
@@ -294,7 +301,7 @@ hostapd_set_bss_options() {
                [ "$auth_cache" = 0 ] && append bss_conf "disable_pmksa_caching=1" "$N"
 
                # RSN -> allow management frame protection
-               json_get_var ieee80211w
+               json_get_var ieee80211w ieee80211w
                case "$ieee80211w" in
                        [012])
                                json_get_vars ieee80211w_max_timeout ieee80211w_retry_timeout
@@ -447,12 +454,14 @@ wpa_supplicant_add_network() {
 
        local wpa_key_mgmt="WPA-PSK"
        local scan_ssid="1"
+       local freq
 
        [[ "$_w_mode" = "adhoc" ]] && {
                append network_data "mode=1" "$N$T"
-               [ -n "$fixed_frequency" ] || {
+               [ -n "$channel" ] && {
+                       freq="$(get_freq "$phy" "$channel")"
                        append network_data "fixed_freq=1" "$N$T"
-                       append network_data "frequency=$fixed_frequency" "$N$T"
+                       append network_data "frequency=$freq" "$N$T"
                }
 
                scan_ssid=0
@@ -535,7 +544,7 @@ wpa_supplicant_add_network() {
        [ -n "$mcast_rate" ] && {
                local mc_rate=
                hostapd_add_rate mc_rate "$mcast_rate"
-               [ -n "$mcast_rate" ] && append network_data "mcast_rate=$mcast_rate" "$N$T"
+               append network_data "mcast_rate=$mc_rate" "$N$T"
        }
 
        local ht_str