diff --git a/feeds/ucentral/uspot/files/etc/config/uspot b/feeds/ucentral/uspot/files/etc/config/uspot index e948e8f08..fb44014ae 100644 --- a/feeds/ucentral/uspot/files/etc/config/uspot +++ b/feeds/ucentral/uspot/files/etc/config/uspot @@ -1,2 +1 @@ -config devices devices config webroot def_captive diff --git a/feeds/ucentral/uspot/files/usr/bin/captive b/feeds/ucentral/uspot/files/usr/bin/captive index dbd52274b..32c7491e4 100755 --- a/feeds/ucentral/uspot/files/usr/bin/captive +++ b/feeds/ucentral/uspot/files/usr/bin/captive @@ -10,10 +10,10 @@ function restart() { function interfaces() { let interfaces = []; - let devices = uci.get_all('uspot', 'devices'); - for (let k, v in devices) - if (substr(k, 0, 1) != '.') - push(interfaces, v); + uci.foreach('uspot', 'uspot', (d) => { + if (!d[".anonymous"]) + push(interfaces, d[".name"]); + }); return uniq(interfaces); } diff --git a/feeds/ucentral/uspot/files/usr/share/uspot/accounting.uc b/feeds/ucentral/uspot/files/usr/share/uspot/accounting.uc index 9d5633408..ab943275c 100755 --- a/feeds/ucentral/uspot/files/usr/share/uspot/accounting.uc +++ b/feeds/ucentral/uspot/files/usr/share/uspot/accounting.uc @@ -21,10 +21,10 @@ function session_timeout(interface) { return config[interface].session_timeout || 0; } -let devices = uci.get_all('uspot', 'devices'); -for (let k, v in devices) - if (substr(k, 0, 1) != '.') - clients[v] = {};; +uci.foreach('uspot', 'uspot', (d) => { + if (!d[".anonymous"]) + clients[d[".name"]] = {}; +}); function syslog(interface, mac, msg) { let log = sprintf('uspot: %s %s %s', interface, mac, msg); diff --git a/feeds/ucentral/uspot/files/usr/share/uspot/common.uc b/feeds/ucentral/uspot/files/usr/share/uspot/common.uc index ed7a50035..dcb83ad11 100644 --- a/feeds/ucentral/uspot/files/usr/share/uspot/common.uc +++ b/feeds/ucentral/uspot/files/usr/share/uspot/common.uc @@ -29,12 +29,38 @@ if (file) { file.close(); } -let devices = uci.get_all('uspot', 'devices'); +let devices = {}; +uci.foreach('uspot', 'uspot', (d) => { + function adddev(ifname, sname) { + if (ifname in devices) + warn('uspot: ignoring duplicate entry for ifname: "' + ifname + '"\n'); + else + devices[ifname] = sname; + } + + if (d[".anonymous"]) { + warn('uspot: ignoring invalid anonymous section at index ' + d[".index"] + '\n'); + return; + } + + let spotname = d[".name"]; + if (!d.ifname) { + warn('uspot: missing ifname in section "' + spotname + '"\n'); + return; + } + + if (type(d.ifname) == "array") { + for (let n in d.ifname) + adddev(n, spotname); + } + else + adddev(d.ifname, spotname); +}); function lookup_station(mac) { let wifs = nl.request(nl.const.NL80211_CMD_GET_INTERFACE, nl.const.NLM_F_DUMP); for (let wif in wifs) { - if (substr(wif.ifname, 0, 5) != 'wlanc') + if (!(wif.ifname in devices)) continue; let res = nl.request(nl.const.NL80211_CMD_GET_STATION, nl.const.NLM_F_DUMP, { dev: wif.ifname }); for (let sta in res) {