mirror of
https://github.com/openwrt/packages.git
synced 2026-10-13 05:47:27 +04:00
travelmate: release 2.4.6-1
- fix uplink teardown for bssid-pinned stations
the new implementaion reads the sta object once and parses fields by name via jshn
(isolated namespace, single fork). Bug finder: @adam8833 (#29768)
- add a fork-free f_normbssid() helper and normalize all config-side bssids
to upper case before comparison (in f_getcfg(), covering all callers, and
on the direct scan comparisons in f_main()).
- LuCI: adds a normBssid() helper function as well
Signed-off-by: Dirk Brenken <dev@brenken.org>
(cherry picked from commit 71d92bcc9e)
This commit is contained in:
2 files changed
+43
-19
No files matched your search
@@ -6,8 +6,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=travelmate
|
||||
PKG_VERSION:=2.4.5
|
||||
PKG_RELEASE:=3
|
||||
PKG_VERSION:=2.4.6
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ trm_maxautoadd="5"
|
||||
trm_timeout="60"
|
||||
trm_radio=""
|
||||
trm_revradio="0"
|
||||
trm_normbssid=""
|
||||
trm_connection=""
|
||||
trm_ssidfilter=""
|
||||
trm_ovpninfolist=""
|
||||
@@ -205,6 +206,20 @@ f_trim() {
|
||||
printf "%s" "${trim}"
|
||||
}
|
||||
|
||||
# normalize a bssid to upper case
|
||||
#
|
||||
f_normbssid() {
|
||||
local bssid="${1}"
|
||||
|
||||
bssid="${bssid//a/A}"
|
||||
bssid="${bssid//b/B}"
|
||||
bssid="${bssid//c/C}"
|
||||
bssid="${bssid//d/D}"
|
||||
bssid="${bssid//e/E}"
|
||||
bssid="${bssid//f/F}"
|
||||
trm_normbssid="${bssid}"
|
||||
}
|
||||
|
||||
# wifi helper function
|
||||
#
|
||||
f_wifi() {
|
||||
@@ -509,11 +524,15 @@ f_getgw() {
|
||||
f_getcfg() {
|
||||
local t_radio t_essid t_bssid radio="${1}" essid="${2}" bssid="${3}" cnt="0"
|
||||
|
||||
f_normbssid "${bssid}"
|
||||
bssid="${trm_normbssid}"
|
||||
trm_uplinkcfg=""
|
||||
while uci_get "travelmate" "@uplink[${cnt}]" >/dev/null 2>&1; do
|
||||
t_radio="$(uci_get "travelmate" "@uplink[${cnt}]" "device")"
|
||||
t_essid="$(uci_get "travelmate" "@uplink[${cnt}]" "ssid")"
|
||||
t_bssid="$(uci_get "travelmate" "@uplink[${cnt}]" "bssid")"
|
||||
f_normbssid "${t_bssid}"
|
||||
t_bssid="${trm_normbssid}"
|
||||
if [ -n "${radio}" ] && [ -n "${essid}" ] &&
|
||||
[ "${t_radio}" = "${radio}" ] && [ "${t_essid}" = "${essid}" ] && [ "${t_bssid}" = "${bssid}" ]; then
|
||||
trm_uplinkcfg="@uplink[${cnt}]"
|
||||
@@ -1059,7 +1078,7 @@ f_getstatus() {
|
||||
# generate status information
|
||||
#
|
||||
f_genstatus() {
|
||||
local parse s_captive s_proactive s_netcheck s_autoadd s_randomize s_eviltwin s_ntp s_vpn s_mail vpn vpn_iface
|
||||
local sta_json temp_ns s_captive s_proactive s_netcheck s_autoadd s_randomize s_eviltwin s_ntp s_vpn s_mail vpn vpn_iface
|
||||
local section last_date sta_iface sta_radio sta_essid sta_bssid sta_mac dev_status status="${trm_ifstatus}" ntp_done="0" vpn_done="0" mail_done="0"
|
||||
|
||||
# get current connection information
|
||||
@@ -1067,22 +1086,24 @@ f_genstatus() {
|
||||
if [ "${status}" = "true" ]; then
|
||||
status="connected, ${trm_connection:-"-"}"
|
||||
dev_status="$("${trm_ubuscmd}" -S call network.wireless status 2>/dev/null)"
|
||||
parse="$(printf "%s" "${dev_status}" | "${trm_jsoncmd}" \
|
||||
-e '@.*.interfaces[@.config.mode="sta"].section' \
|
||||
-e '@.*.interfaces[@.config.mode="sta"].config.ssid' \
|
||||
-e '@.*.interfaces[@.config.mode="sta"].config.macaddr' \
|
||||
-e '@.*.interfaces[@.config.mode="sta"].config.network[0]' \
|
||||
-e '@.*.interfaces[@.config.mode="sta"].config.bssid')"
|
||||
{
|
||||
IFS= read -r section
|
||||
IFS= read -r sta_essid
|
||||
IFS= read -r sta_mac
|
||||
IFS= read -r sta_iface
|
||||
IFS= read -r sta_bssid
|
||||
} <<-EOF
|
||||
${parse}
|
||||
EOF
|
||||
sta_json="$(printf "%s" "${dev_status}" | "${trm_jsoncmd}" -ql1 -e '@.*.interfaces[@.config.mode="sta"]')"
|
||||
if [ -n "${sta_json}" ]; then
|
||||
json_set_namespace "trm_sta" temp_ns
|
||||
json_load "${sta_json}"
|
||||
json_get_var section "section"
|
||||
if json_select "config" >/dev/null 2>&1; then
|
||||
json_get_var sta_essid "ssid"
|
||||
json_get_var sta_mac "macaddr"
|
||||
json_get_var sta_bssid "bssid"
|
||||
json_select "network" >/dev/null 2>&1 && json_get_var sta_iface "1"
|
||||
fi
|
||||
json_cleanup
|
||||
json_set_namespace "${temp_ns}"
|
||||
fi
|
||||
|
||||
if [ -n "${section}" ]; then
|
||||
f_normbssid "${sta_bssid}"
|
||||
sta_bssid="${trm_normbssid}"
|
||||
sta_radio="$(uci_get "wireless" "${section}" "device")"
|
||||
f_getcfg "${sta_radio}" "${sta_essid}" "${sta_bssid}"
|
||||
fi
|
||||
@@ -1334,7 +1355,8 @@ f_main() {
|
||||
config_essid="${station_id%/*}"
|
||||
config_essid="${config_essid#*/}"
|
||||
config_bssid="${station_id##*/}"
|
||||
config_bssid="${config_bssid//-/}"
|
||||
f_normbssid "${config_bssid//-/}"
|
||||
config_bssid="${trm_normbssid}"
|
||||
f_check "dev" "true"
|
||||
f_log "debug" "f_main-2 ::: config_radio: ${config_radio}, config_essid: \"${config_essid}\", config_bssid: ${config_bssid:-"-"}"
|
||||
else
|
||||
@@ -1364,6 +1386,8 @@ f_main() {
|
||||
sta_radio="$(uci_get "wireless" "${section}" "device")"
|
||||
sta_essid="$(uci_get "wireless" "${section}" "ssid")"
|
||||
sta_bssid="$(uci_get "wireless" "${section}" "bssid")"
|
||||
f_normbssid "${sta_bssid}"
|
||||
sta_bssid="${trm_normbssid}"
|
||||
sta_mac="$(f_mac "get" "${section}")"
|
||||
if [ -z "${sta_radio}" ] || [ -z "${sta_essid}" ]; then
|
||||
f_log "info" "invalid wireless section '${section}'"
|
||||
|
||||
Reference in new issue
Block a user