From: Dirk Brenken Date: Tue, 16 Jun 2026 19:30:33 +0000 (+0200) Subject: travelmate: release 2.4.6-1 X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=71d92bcc9edbc8f95858ce82a8ff5d52500005a2;p=openwrt-packages.git 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 --- diff --git a/net/travelmate/Makefile b/net/travelmate/Makefile index 127f02d18..ef0fc4738 100644 --- a/net/travelmate/Makefile +++ b/net/travelmate/Makefile @@ -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 diff --git a/net/travelmate/files/travelmate-functions.sh b/net/travelmate/files/travelmate-functions.sh index 9351cadc8..5904bc16a 100644 --- a/net/travelmate/files/travelmate-functions.sh +++ b/net/travelmate/files/travelmate-functions.sh @@ -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}'"