Skip to content

Commit 287f1ea

Browse files
committed
wifi-scripts: ucode: fix ssid handling
Add proper escaping for ssid values. Use it to fix multi-ap backhaul ssid. Signed-off-by: Felix Fietkau <[email protected]>
1 parent 3786d15 commit 287f1ea

File tree

3 files changed

+44
-12
lines changed

3 files changed

+44
-12
lines changed

package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as libuci from 'uci';
44
import { md5 } from 'digest';
55
import * as fs from 'fs';
66

7-
import { append, append_raw, append_value, append_vars, comment, push_config, set_default, touch_file } from 'wifi.common';
7+
import { append, append_raw, append_value, append_vars, append_string_vars, comment, push_config, set_default, touch_file } from 'wifi.common';
88
import * as netifd from 'wifi.netifd';
99
import * as iface from 'wifi.iface';
1010

@@ -44,17 +44,19 @@ function iface_setup(config) {
4444
config.ap_isolate = 1;
4545

4646
append('bssid', config.macaddr);
47+
config.ssid2 = config.ssid;
48+
append_string_vars(config, [ 'ssid2' ]);
4749

48-
append_vars(config, [
50+
append_vars(config, [
4951
'ctrl_interface', 'ap_isolate', 'max_num_sta', 'ap_max_inactivity', 'airtime_bss_weight',
5052
'airtime_bss_limit', 'airtime_sta_weight', 'bss_load_update_period', 'chan_util_avg_period',
5153
'disassoc_low_ack', 'skip_inactivity_poll', 'ignore_broadcast_ssid', 'uapsd_advertisement_enabled',
52-
'utf8_ssid', 'multi_ap', 'ssid', 'tdls_prohibit', 'bridge', 'wds_sta', 'wds_bridge',
54+
'utf8_ssid', 'multi_ap', 'tdls_prohibit', 'bridge', 'wds_sta', 'wds_bridge',
5355
'snoop_iface', 'vendor_elements', 'nas_identifier', 'radius_acct_interim_interval',
5456
'ocv', 'multicast_to_unicast', 'preamble', 'wmm_enabled', 'proxy_arp', 'per_sta_vif', 'mbo',
5557
'bss_transition', 'wnm_sleep_mode', 'wnm_sleep_mode_no_keys', 'qos_map_set', 'max_listen_int',
5658
'dtim_period',
57-
]);
59+
]);
5860
}
5961

6062
function iface_authentication_server(config) {
@@ -102,11 +104,9 @@ function iface_auth_type(config) {
102104
config.wps_possible = 1;
103105
config.wps_state = 1;
104106

105-
if (config.owe_transition_ssid)
106-
config.owe_transition_ssid = `"${config.owe_transition_ssid}"`;
107-
107+
append_string_vars(config, [ 'owe_transition_ssid' ]);
108108
append_vars(config, [
109-
'owe_transition_ssid', 'owe_transition_bssid', 'owe_transition_ifname',
109+
'owe_transition_bssid', 'owe_transition_ifname',
110110
]);
111111
break;
112112

@@ -200,7 +200,7 @@ function iface_wps(config) {
200200
set_default(config, 'upnp_iface', config.network_bridge);
201201

202202
if (config.multi_ap && config.multi_ap_backhaul_ssid) {
203-
append_vars(config, [ 'multi_ap_backhaul_ssid' ]);
203+
append_string_vars(config, [ 'multi_ap_backhaul_ssid' ]);
204204
if (length(config.multi_ap_backhaul_key) == 64)
205205
append('multi_ap_backhaul_wpa_psk', config.multi_ap_backhaul_key);
206206
else if (length(config.multi_ap_backhaul_key) > 8)

package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/common.uc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,31 @@ export function append(key, value) {
3232
append_raw(key + '=' + value);
3333
};
3434

35+
function escape_string(value) {
36+
let chars = map(split(value, ''), (v) => ord(v));
37+
if (length(filter(chars, (v) => (v < 32 || v >= 128))) > 0)
38+
return hexenc(value);
39+
40+
return `"${value}"`;
41+
}
42+
43+
export function append_string(key, value) {
44+
if (value == null)
45+
return;
46+
47+
append(key, escape_string(value));
48+
};
49+
3550
export function append_vars(dict, keys) {
3651
for (let key in keys)
3752
append(key, dict[key]);
3853
};
3954

55+
export function append_string_vars(dict, keys) {
56+
for (let key in keys)
57+
append_string(key, dict[key]);
58+
};
59+
4060
export function network_append_raw(value) {
4161
network_data += value + '\n';
4262
};
@@ -57,11 +77,23 @@ export function network_append(key, value) {
5777
network_append_raw('\t' + key + '=' + value);
5878
};
5979

80+
export function network_append_string(key, value) {
81+
if (value == null)
82+
return;
83+
84+
network_append_raw('\t' + key + '=' + escape_string(value));
85+
};
86+
6087
export function network_append_vars(dict, keys) {
6188
for (let key in keys)
6289
network_append(key, dict[key]);
6390
};
6491

92+
export function network_append_string_vars(dict, keys) {
93+
for (let key in keys)
94+
network_append_string(key, dict[key]);
95+
};
96+
6597
export function set_default(dict, key, value) {
6698
if (dict[key] == null)
6799
dict[key] = value;

package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/supplicant.uc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
import { append, append_raw, append_vars, network_append, network_append_raw, network_append_vars,
4-
set_default, dump_network, flush_network } from 'wifi.common';
4+
network_append_string_vars, set_default, dump_network, flush_network } from 'wifi.common';
55
import * as netifd from 'wifi.netifd';
66
import * as iface from 'wifi.iface';
77
import * as fs from 'fs';
@@ -157,14 +157,14 @@ function setup_sta(data, config) {
157157

158158
config.basic_rate = ratelist(config.basic_rate);
159159
config.mcast_rate = ratestr(config.mcast_rate);
160-
config.ssid = `"${config.ssid}"`;
161160

161+
network_append_string_vars(config, [ 'ssid' ]);
162162
network_append_vars(config, [
163163
'scan_ssid', 'noscan', 'disabled', 'multi_ap_backhaul_sta',
164164
'ocv', 'key_mgmt', 'psk', 'sae_password', 'pairwise', 'group', 'bssid',
165165
'proto', 'mesh_fwding', 'mesh_rssi_threshold', 'frequency', 'fixed_freq',
166166
'disable_ht', 'disable_ht40', 'disable_vht', 'vht', 'max_oper_chwidth',
167-
'ht40', 'ssid', 'beacon_int', 'ieee80211w', 'basic_rate', 'mcast_rate',
167+
'ht40', 'beacon_int', 'ieee80211w', 'basic_rate', 'mcast_rate',
168168
'bssid_blacklist', 'bssid_whitelist', 'erp', 'ca_cert', 'identity',
169169
'anonymous_identity', 'client_cert', 'private_key', 'private_key_passwd',
170170
'subject_match', 'altsubject_match', 'domain_match', 'domain_suffix_match',

0 commit comments

Comments
 (0)