From 70c08bfc225e217fbf309387bb9581a166ef24ce Mon Sep 17 00:00:00 2001 From: Dirk Brenken Date: Sun, 13 Nov 2016 19:32:40 +0100 Subject: [PATCH] travelmate: bugfix 0.2.6 * fix two potential race conditions in ap/sta handling Signed-off-by: Dirk Brenken --- net/travelmate/Makefile | 2 +- net/travelmate/files/README.md | 12 +++++++++++- net/travelmate/files/travelmate.sh | 24 +++++++++++++++++++----- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/net/travelmate/Makefile b/net/travelmate/Makefile index 4724e7307..afe8ee6d3 100644 --- a/net/travelmate/Makefile +++ b/net/travelmate/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=travelmate -PKG_VERSION:=0.2.5 +PKG_VERSION:=0.2.6 PKG_RELEASE:=1 PKG_LICENSE:=GPL-3.0+ PKG_MAINTAINER:=Dirk Brenken diff --git a/net/travelmate/files/README.md b/net/travelmate/files/README.md index 652feeab1..2f8084a2e 100644 --- a/net/travelmate/files/README.md +++ b/net/travelmate/files/README.md @@ -69,9 +69,19 @@ config zone [...] -**3. add required wwan stations to your wireless configuration in etc/config/wireless:** +**3. add required ap and wwan stations to your wireless configuration in etc/config/wireless:**

 [...]
+config wifi-iface
+        option device 'radio0'
+        option network 'lan'
+        option ifname 'wlan0'
+        option mode 'ap'
+        option ssid 'example_ap'
+        option encryption 'psk2+ccmp'
+        option key 'abc'
+        option disabled '0'
+[...]
 config wifi-iface
         option device 'radio0'
         option network 'wwan'
diff --git a/net/travelmate/files/travelmate.sh b/net/travelmate/files/travelmate.sh
index ada67d8b2..7987309b3 100755
--- a/net/travelmate/files/travelmate.sh
+++ b/net/travelmate/files/travelmate.sh
@@ -11,7 +11,7 @@
 LC_ALL=C
 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
 trm_pid="${$}"
-trm_ver="0.2.5"
+trm_ver="0.2.6"
 trm_debug=0
 trm_loop=30
 trm_maxretry=3
@@ -29,7 +29,7 @@ trm_prepare()
     local ifname="$(uci -q get wireless."${config}".ifname)"
     local disabled="$(uci -q get wireless."${config}".disabled)"
 
-    if [ "${mode}" = "ap" ] &&
+    if [ "${mode}" = "ap" ] && [ -n "${network}" ] && [ -n "${ifname}" ] &&
         ([ -z "${trm_device}" ] || [ "${trm_device}" = "${device}" ])
     then
         trm_aplist="${trm_aplist} ${ifname}"
@@ -37,7 +37,7 @@ trm_prepare()
         then
             trm_set "none" "${config}" "${network}" "up"
         fi
-    elif [ "${mode}" = "sta" ]
+    elif [ "${mode}" = "sta" ] && [ -n "${network}" ]
     then
         trm_stalist="${trm_stalist} ${config}_${network}"
         if [ -z "${disabled}" ] || [ "${disabled}" = "0" ]
@@ -181,7 +181,7 @@ fi
 if [ -z "${trm_scanner}" ]
 then
     trm_log "error" "no wireless tool for wlan scanning found, please install 'iw' or 'iwinfo'"
-    exit 255
+    exit 1
 fi
 
 # infinitive loop to establish and track STA uplink connections
@@ -195,6 +195,11 @@ do
         config_load wireless
         config_foreach trm_prepare wifi-iface
         trm_set "commit"
+        if [ -z "${trm_aplist}" ]
+        then
+            trm_log "error" "no usable AP configuration found, please add an 'ifname' entry in '/etc/config/wireless'"
+            exit 1
+        fi
         for ap in ${trm_aplist}
         do
             ubus -t 10 wait_for hostapd."${ap}"
@@ -204,15 +209,24 @@ do
             else
                 trm_ssidlist="$(${trm_scanner} "${ap}" scan | awk '/ESSID: ".*"/{ORS=" ";if (!seen[$0]++) for(i=2; i<=NF; i++) print $i}')"
             fi
-            trm_log "debug" "main ::: scan-tool: ${trm_scanner}, ssidlist: ${trm_ssidlist}"
+            trm_log "debug" "main ::: scan-tool: ${trm_scanner}, aplist: ${trm_aplist}, ssidlist: ${trm_ssidlist}"
             if [ -n "${trm_ssidlist}" ]
             then
+                if [ -z "${trm_stalist}" ]
+                then
+                    trm_log "error" "no usable STA configuration found, please add a 'network' entry in '/etc/config/wireless'"
+                    exit 1
+                fi
                 for sta in ${trm_stalist}
                 do
                     trm_config="${sta%%_*}"
                     trm_network="${sta##*_}"
                     trm_ifname="$(uci -q get wireless."${trm_config}".ifname)"
                     trm_ssid="\"$(uci -q get wireless."${trm_config}".ssid)\""
+                    if [ -z "${trm_ifname}" ]
+                    then
+                        trm_ifname="${trm_network}"
+                    fi
                     if [ $((trm_count_${trm_config})) -lt $((trm_maxretry)) ] || [ $((trm_maxretry)) -eq 0 ]
                     then
                         if [ -n "$(printf "${trm_ssidlist}" | grep -Fo "${trm_ssid}")" ]