Message ID | 1511701300-3004-4-git-send-email-freifunk@adrianschmutzler.de |
---|---|
State | Rejected |
Headers | show |
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html index f9186d2..320019b 100755 --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html @@ -1,7 +1,40 @@ -#!/usr/bin/haserl +#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=1000 +<% +# treat post +if [ "$REQUEST_METHOD" == "POST" ] ; then + if [ "$POST_wifiupload" != "" ] ; then + if [ ! -f "$HASERL_nodelist_path" ] ; then + MSG='<span class="red">Node-Datei nicht gefunden!</span>' + elif [ "$(du -k "$HASERL_nodelist_path" | cut -f1)" == "0" ] ; then + MSG='<span class="red">Node-Datei ist leer!</span>' + else + mv "$HASERL_nodelist_path" /tmp/wifinodelist + MSG='<span class="green">Upload erfolgreich!</span>' + fi + fi + if [ "$POST_wifidownload" != "" ] ; then + if /bin/wget -T 10 -O /tmp/wifinodelist "https://monitoring.freifunk-franken.de/api/wifianalall" 2> /dev/null ; then + MSG='<span class="green">Download erfolgreich!</span>' + else + MSG='<span class="red">Download fehlgeschlagen!</span>' + fi + fi +fi +%> <%in /www/ssl/cgi-bin/header %> +<%in /www/ssl/cgi-bin/helpers %> +<% show_msg %> <% +if [ -s /tmp/wifinodelist ] ; then + numentries="$(grep -c '^[^#]' /tmp/wifinodelist)" + filehood="$(grep -e "#Hood:" /tmp/wifinodelist | awk -F" " '{print $2}')" + [ -n "$filehood" ] || filehood="Alle Hoods" + havelist="<span style='color:green'>Ja (Hood: ${filehood}, ${numentries} Einträge)</span>" +else + havelist='<span style="color:red">Nein</span>' +fi + readIWinfo() { local iface=$1 local ssid=$2 @@ -13,6 +46,28 @@ readIWinfo() { "<!-- \\5 --><tr><'${ssid}'>\\2</'${ssid}'><td>\\4</td><td>\\5 dBm</td><td>\\3</td><'${mac}'>\\1</'${mac}'><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&#' # The HTML comment contains the signal quality to allow sorting } + +rewriteIWinfo() { + local data="$1" + + echo "$data" | while read line ; do + mac="$(echo "$line" | sed -e 's#.*<mac>\(.*\)</mac>.*#\1#')" + routerid="$(grep -i -e "$mac" /tmp/wifinodelist | awk -F"|" '{print $2}')" + if [ -n "$routerid" ] ; then + ssid="<span style='color:green'>${routerid}</span>" + else + ssidtmp="$(echo "$line" | sed -e 's#.*<ssid>\(.*\)</ssid>.*#\1#')" + if [ "$ssidtmp" = "unknown" ] ; then + ssid="<span style='color:blue'>${ssidtmp}</span>" + else + ssid="$ssidtmp" + fi + fi + midpart=$(echo "$line" | sed -e 's#.*</ssid>\(.*\)<mac>.*#\1#') + endpart=$(echo "$line" | sed -e 's#.*</mac>\(.*\)</tr>.*#\1#') + echo "<tr><td>${ssid}</td>${midpart}<td>${mac}</td>${endpart}</tr>" + done +} printWifiScan() { local iface=$1 local freq="2.4 GHz" @@ -34,7 +89,12 @@ printWifiScan() { </tr> <% - readIWinfo "$iface" "td" "td" + if [ -s /tmp/wifinodelist ] ; then + firststep="$(readIWinfo "$iface" "ssid" "mac")" + rewriteIWinfo "$firststep" + else + readIWinfo "$iface" "td" "td" + fi %> </table> </fieldset> @@ -44,6 +104,21 @@ printWifiScan() { %> <table style="width: 100%"> +<tr><td> +<form method="post" enctype="multipart/form-data"> +<fieldset> + <legend>Wifi Node File</legend> + <table> + <tr><th style="width: 20em;text-align:left;padding-bottom:10px">Alias Liste vorhanden:</th><td style="padding-bottom:10px"><%= "$havelist" %></td></tr> + <tr><th style="width: 20em;text-align:left">Upload Node-Liste:</th><td><input type="file" name="nodelist" /></td></tr> + <tr><td colspan="2" style="padding:10px 0">Hier kann eine Node-Liste (WiFiAnalyzer-Stil) hochgeladen werden.</td></tr> + <tr><td colspan="2"><input type="submit" name="wifiupload" value="Datei-Upload auf Router" /></td></tr> + <tr><td colspan="2" style="padding-top:20px">Wenn der Router mit dem Internet verbunden ist, kann die Node-Liste vom Monitoring bezogen werden.</td></tr> + <tr><td colspan="2" style="padding:10px 0"><input type="submit" name="wifidownload" value="Datei-Download von Monitoring" /></td></tr> + </table> +</fieldset> +</form> +</td></tr> <% if uci -q get wireless.w2ap > /dev/null ; then printWifiScan "w2ap"
Am Sonntag, den 26.11.2017, 14:01 +0100 schrieb Adrian Schmutzler: > This patch enables labelling of routers in the WebUI's WiFi > scan page, so their hostname is displayed instead of > freifunk.franken.net. The evaluation is performed based on > a WifiAnalyzer style node file /tmp/wifinodelist. > > In the WebUI, this file may be provided by file upload or by > downloading from the Monitoring API (if the router has > internet access). > > > Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > > Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > --- > > Changes in v2: > none > > Changes in v3: > - Put to the end of the patchset > - Use wifianalall API (hood-independent) as this is now available > and eves the file for all hoods has only < 200 kB Was meinst du mit "eves"? Skaliert das mit allen Knoten überhaupt? > - Reduced upload file size to 1MB > --- > .../fff-web/files/www/ssl/cgi-bin/wifiscan.html | 79 +++++++++++++++++++++- > 1 file changed, 77 insertions(+), 2 deletions(-) > > diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > index f9186d2..320019b 100755 > --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > @@ -1,7 +1,40 @@ > -#!/usr/bin/haserl > +#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=1000 Ich sehe hier immer noch ein Sicherheitsrisiko! Können bei dem upload-dir wichtige Status-Files etc überschrieben werden? Sollte ein extra Verzeichnis gewählt werden? Vielleicht mit sowas: mktemp -d, vielleicht geht auch -u (für den Fall, dass gar nicht hochgeladen wurde). > +<% > +# treat post > +if [ "$REQUEST_METHOD" == "POST" ] ; then > > + if [ "$POST_wifiupload" != "" ] ; then > > + if [ ! -f "$HASERL_nodelist_path" ] ; then > > + MSG='<span class="red">Node-Datei nicht gefunden!</span>' > > + elif [ "$(du -k "$HASERL_nodelist_path" | cut -f1)" == "0" ] ; then > > + MSG='<span class="red">Node-Datei ist leer!</span>' > > + else > > + mv "$HASERL_nodelist_path" /tmp/wifinodelist > > + MSG='<span class="green">Upload erfolgreich!</span>' > > + fi > > + fi > > + if [ "$POST_wifidownload" != "" ] ; then > > + if /bin/wget -T 10 -O /tmp/wifinodelist "https://monitoring.freifunk-franken.de/api/wifianalall" 2> /dev/null ; then > > + MSG='<span class="green">Download erfolgreich!</span>' > > + else > > + MSG='<span class="red">Download fehlgeschlagen!</span>' > > + fi > > + fi > +fi > +%> > <%in /www/ssl/cgi-bin/header %> > +<%in /www/ssl/cgi-bin/helpers %> > +<% show_msg %> > <% > +if [ -s /tmp/wifinodelist ] ; then > > + numentries="$(grep -c '^[^#]' /tmp/wifinodelist)" > > + filehood="$(grep -e "#Hood:" /tmp/wifinodelist | awk -F" " '{print $2}')" > + [ -n "$filehood" ] || filehood="Alle Hoods" Achso, die Unterscheidung ist noch nötig, falls jemand eine Liste für nur eine Hood manuell hochgeladen hat.. > + havelist="<span style='color:green'>Ja (Hood: ${filehood}, ${numentries} Einträge)</span>" > +else > > + havelist='<span style="color:red">Nein</span>' > +fi > + > readIWinfo() { > > local iface=$1 > > local ssid=$2 > @@ -13,6 +46,28 @@ readIWinfo() { > > "<!-- \\5 --><tr><'${ssid}'>\\2</'${ssid}'><td>\\4</td><td>\\5 dBm</td><td>\\3</td><'${mac}'>\\1</'${mac}'><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&#' > > # The HTML comment contains the signal quality to allow sorting > } > + > +rewriteIWinfo() { > > + local data="$1" > + > > + echo "$data" | while read line ; do > > + mac="$(echo "$line" | sed -e 's#.*<mac>\(.*\)</mac>.*#\1#')" > > + routerid="$(grep -i -e "$mac" /tmp/wifinodelist | awk -F"|" '{print $2}')" > > + if [ -n "$routerid" ] ; then > > + ssid="<span style='color:green'>${routerid}</span>" > > + else > > + ssidtmp="$(echo "$line" | sed -e 's#.*<ssid>\(.*\)</ssid>.*#\1#')" > > + if [ "$ssidtmp" = "unknown" ] ; then > > + ssid="<span style='color:blue'>${ssidtmp}</span>" > > + else > > + ssid="$ssidtmp" > > + fi > > + fi > > + midpart=$(echo "$line" | sed -e 's#.*</ssid>\(.*\)<mac>.*#\1#') > > + endpart=$(echo "$line" | sed -e 's#.*</mac>\(.*\)</tr>.*#\1#') > > + echo "<tr><td>${ssid}</td>${midpart}<td>${mac}</td>${endpart}</tr>" > > + done > +} > printWifiScan() { > > local iface=$1 > > local freq="2.4 GHz" > @@ -34,7 +89,12 @@ printWifiScan() { > > </tr> > > <% > > - readIWinfo "$iface" "td" "td" > > + if [ -s /tmp/wifinodelist ] ; then > > + firststep="$(readIWinfo "$iface" "ssid" "mac")" > + rewriteIWinfo "$firststep" Ich hab hier ein bisschen Angst, dass ggfs die Command-Line zu lang werden könnte. Tim > + else > > + readIWinfo "$iface" "td" "td" > > + fi > %> > > </table> > > </fieldset> > @@ -44,6 +104,21 @@ printWifiScan() { > > %> > <table style="width: 100%"> > +<tr><td> > +<form method="post" enctype="multipart/form-data"> > +<fieldset> > > + <legend>Wifi Node File</legend> > > + <table> > > + <tr><th style="width: 20em;text-align:left;padding-bottom:10px">Alias Liste vorhanden:</th><td style="padding-bottom:10px"><%= "$havelist" %></td></tr> > > + <tr><th style="width: 20em;text-align:left">Upload Node-Liste:</th><td><input type="file" name="nodelist" /></td></tr> > > + <tr><td colspan="2" style="padding:10px 0">Hier kann eine Node-Liste (WiFiAnalyzer-Stil) hochgeladen werden.</td></tr> > > + <tr><td colspan="2"><input type="submit" name="wifiupload" value="Datei-Upload auf Router" /></td></tr> > > + <tr><td colspan="2" style="padding-top:20px">Wenn der Router mit dem Internet verbunden ist, kann die Node-Liste vom Monitoring bezogen werden.</td></tr> > > + <tr><td colspan="2" style="padding:10px 0"><input type="submit" name="wifidownload" value="Datei-Download von Monitoring" /></td></tr> > > + </table> > +</fieldset> > +</form> > +</td></tr> > <% > if uci -q get wireless.w2ap > /dev/null ; then > > printWifiScan "w2ap" > -- > 2.7.4 >
Hallo Tim, siehe unten. > -----Original Message----- > From: Tim Niemeyer [mailto:tim@tn-x.org] > Sent: Samstag, 20. Januar 2018 12:43 > To: Adrian Schmutzler <freifunk@adrianschmutzler.de>; franken- > dev@freifunk.net > Subject: Re: [PATCH v3 4/4] fff-web: Label Freifunk routers individually in > wifiscan.html > > Am Sonntag, den 26.11.2017, 14:01 +0100 schrieb Adrian Schmutzler: > > This patch enables labelling of routers in the WebUI's WiFi scan page, > > so their hostname is displayed instead of freifunk.franken.net. The > > evaluation is performed based on a WifiAnalyzer style node file > > /tmp/wifinodelist. > > > > In the WebUI, this file may be provided by file upload or by > > downloading from the Monitoring API (if the router has internet > > access). > > > > > Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > > > > Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > > > --- > > > > Changes in v2: > > none > > > > Changes in v3: > > - Put to the end of the patchset > > - Use wifianalall API (hood-independent) as this is now available > > and eves the file for all hoods has only < 200 kB > Was meinst du mit "eves"? Typo: "even" > > Skaliert das mit allen Knoten überhaupt? Die Frage verstehe ich nicht. Hat im Test wunderbar geklappt. > > > - Reduced upload file size to 1MB > > --- > > .../fff-web/files/www/ssl/cgi-bin/wifiscan.html | 79 > > +++++++++++++++++++++- > > 1 file changed, 77 insertions(+), 2 deletions(-) > > > > diff --git > > a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > > b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > > index f9186d2..320019b 100755 > > --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > > +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > > @@ -1,7 +1,40 @@ > > -#!/usr/bin/haserl > > +#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=1000 > Ich sehe hier immer noch ein Sicherheitsrisiko! > > Können bei dem upload-dir wichtige Status-Files etc überschrieben werden? > Sollte ein extra Verzeichnis gewählt werden? > > Vielleicht mit sowas: mktemp -d, vielleicht geht auch -u (für den Fall, dass gar > nicht hochgeladen wurde). Ich habe das so verstanden, dass haserl da eh einen random Namen generiert: http://haserl.sourceforge.net/manpage.html --upload-dir=dirspec Defaults to "/tmp". All uploaded files are created with temporary filename in this directory HASERL_xxx_path contains the name of the temporary file. FORM_xxx_name contains the original name of the file, as specified by the client. Ist nicht ganz eindeutig. Ggf. teste ich mal, was für Namen der so macht, kann die ja ausgeben lassen. Ich verstehe das so, dass der sowas wie mktemp ohnehin intrinsisch macht. Oder habe ich falsch verstanden, worum es dir geht? > > > +<% > > +# treat post > > +if [ "$REQUEST_METHOD" == "POST" ] ; then > > > + if [ "$POST_wifiupload" != "" ] ; then > > > + if [ ! -f "$HASERL_nodelist_path" ] ; then > > > + MSG='<span class="red">Node-Datei nicht > gefunden!</span>' > > > + elif [ "$(du -k "$HASERL_nodelist_path" | cut -f1)" == "0" ] ; > then > > > + MSG='<span class="red">Node-Datei ist > leer!</span>' > > > + else > > > + mv "$HASERL_nodelist_path" /tmp/wifinodelist > > > + MSG='<span class="green">Upload > erfolgreich!</span>' > > > + fi > > > + fi > > > + if [ "$POST_wifidownload" != "" ] ; then > > > + if /bin/wget -T 10 -O /tmp/wifinodelist > "https://monitoring.freifunk-franken.de/api/wifianalall" 2> /dev/null ; then > > > + MSG='<span class="green">Download > erfolgreich!</span>' > > > + else > > > + MSG='<span class="red">Download > fehlgeschlagen!</span>' > > > + fi > > > + fi > > +fi > > +%> > > <%in /www/ssl/cgi-bin/header %> > > +<%in /www/ssl/cgi-bin/helpers %> > > +<% show_msg %> > > <% > > +if [ -s /tmp/wifinodelist ] ; then > > > + numentries="$(grep -c '^[^#]' /tmp/wifinodelist)" > > > + filehood="$(grep -e "#Hood:" /tmp/wifinodelist | awk -F" " '{print > $2}')" > > + [ -n "$filehood" ] || filehood="Alle Hoods" > Achso, die Unterscheidung ist noch nötig, falls jemand eine Liste für nur eine > Hood manuell hochgeladen hat.. Genau. Im Monitoring bleibt beides. > > > + havelist="<span style='color:green'>Ja (Hood: ${filehood}, > ${numentries} Einträge)</span>" > > +else > > > + havelist='<span style="color:red">Nein</span>' > > +fi > > + > > readIWinfo() { > > > local iface=$1 > > > local ssid=$2 > > @@ -13,6 +46,28 @@ readIWinfo() { > > > "<!-- \\5 -- > ><tr><'${ssid}'>\\2</'${ssid}'><td>\\4</td><td>\\5 > dBm</td><td>\\3</td><'${mac}'>\\1</'${mac}'><td>\\6</td></tr>", "g"); > print r;}' | sort -n | sed 's#&#\&#' > > > # The HTML comment contains the signal quality to allow > sorting > > } > > + > > +rewriteIWinfo() { > > > + local data="$1" > > + > > > + echo "$data" | while read line ; do > > > + mac="$(echo "$line" | sed -e > 's#.*<mac>\(.*\)</mac>.*#\1#')" > > > + routerid="$(grep -i -e "$mac" /tmp/wifinodelist | awk -F"|" > '{print $2}')" > > > + if [ -n "$routerid" ] ; then > > > + ssid="<span style='color:green'>${routerid}</span>" > > > + else > > > + ssidtmp="$(echo "$line" | sed -e > 's#.*<ssid>\(.*\)</ssid>.*#\1#')" > > > + if [ "$ssidtmp" = "unknown" ] ; then > > > + ssid="<span > style='color:blue'>${ssidtmp}</span>" > > > + else > > > + ssid="$ssidtmp" > > > + fi > > > + fi > > > + midpart=$(echo "$line" | sed -e > 's#.*</ssid>\(.*\)<mac>.*#\1#') > > > + endpart=$(echo "$line" | sed -e > 's#.*</mac>\(.*\)</tr>.*#\1#') > > > + echo > "<tr><td>${ssid}</td>${midpart}<td>${mac}</td>${endpart}</tr>" > > > + done > > +} > > printWifiScan() { > > > local iface=$1 > > > local freq="2.4 GHz" > > @@ -34,7 +89,12 @@ printWifiScan() { > > > </tr> > > > > <% > > > - readIWinfo "$iface" "td" "td" > > > + if [ -s /tmp/wifinodelist ] ; then > > > + firststep="$(readIWinfo "$iface" "ssid" "mac")" > > + rewriteIWinfo "$firststep" > Ich hab hier ein bisschen Angst, dass ggfs die Command-Line zu lang werden > könnte. Was sind da die Limits? In meinem sehr vollen Netz war das nie ein Problem, aber das muss ja nichts heißen. Hast du eine bessere Idee? Grüße Adrian > > Tim > > > + else > > > + readIWinfo "$iface" "td" "td" > > > + fi > > %> > > > </table> > > > </fieldset> > > @@ -44,6 +104,21 @@ printWifiScan() { > > > > %> > > <table style="width: 100%"> > > +<tr><td> > > +<form method="post" enctype="multipart/form-data"> <fieldset> > > > + <legend>Wifi Node File</legend> > > > + <table> > > > + <tr><th style="width: 20em;text-align:left;padding- > bottom:10px">Alias Liste vorhanden:</th><td style="padding- > bottom:10px"><%= "$havelist" %></td></tr> > > > + <tr><th style="width: 20em;text-align:left">Upload Node- > Liste:</th><td><input type="file" name="nodelist" /></td></tr> > > > + <tr><td colspan="2" style="padding:10px 0">Hier kann eine > Node-Liste (WiFiAnalyzer-Stil) hochgeladen werden.</td></tr> > > > + <tr><td colspan="2"><input type="submit" > name="wifiupload" value="Datei-Upload auf Router" /></td></tr> > > > + <tr><td colspan="2" style="padding-top:20px">Wenn der > Router mit dem Internet verbunden ist, kann die Node-Liste vom Monitoring > bezogen werden.</td></tr> > > > + <tr><td colspan="2" style="padding:10px 0"><input > type="submit" name="wifidownload" value="Datei-Download von > Monitoring" /></td></tr> > > > + </table> > > +</fieldset> > > +</form> > > +</td></tr> > > <% > > if uci -q get wireless.w2ap > /dev/null ; then > > > printWifiScan "w2ap" > > -- > > 2.7.4 > >
Hi Adrian Am Samstag, den 20.01.2018, 23:17 +0100 schrieb mail@adrianschmutzler.de: > Hallo Tim, > > siehe unten. > > > -----Original Message----- > > > > From: Tim Niemeyer [mailto:tim@tn-x.org] > > Sent: Samstag, 20. Januar 2018 12:43 > > > > To: Adrian Schmutzler <freifunk@adrianschmutzler.de>; franken- > > dev@freifunk.net > > Subject: Re: [PATCH v3 4/4] fff-web: Label Freifunk routers individually in > > wifiscan.html > > > > Am Sonntag, den 26.11.2017, 14:01 +0100 schrieb Adrian Schmutzler: > > > This patch enables labelling of routers in the WebUI's WiFi scan page, > > > so their hostname is displayed instead of freifunk.franken.net. The > > > evaluation is performed based on a WifiAnalyzer style node file > > > /tmp/wifinodelist. > > > > > > In the WebUI, this file may be provided by file upload or by > > > downloading from the Monitoring API (if the router has internet > > > access). > > > > > > > > > > > Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > > > Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > > > > > --- > > > > > > Changes in v2: > > > none > > > > > > Changes in v3: > > > - Put to the end of the patchset > > > - Use wifianalall API (hood-independent) as this is now available > > > and eves the file for all hoods has only < 200 kB > > > > Was meinst du mit "eves"? > > Typo: "even" Achso ich war mir nicht ganz sicher, ob das eine Feststellung (die ja nur für den Moment gilt) war, oder ob das ein Ausdruck oder Hoffnung sein sollte. Die Feststellung beruhigt mich, für den Moment, etwas. ;) > > > > > Skaliert das mit allen Knoten überhaupt? > > Die Frage verstehe ich nicht. Hat im Test wunderbar geklappt. Du hast es vielleicht mit 5000 Knoten getestet. Aber was ist, wenn es mal 15000 sind? > > > > > > - Reduced upload file size to 1MB > > > --- > > > .../fff-web/files/www/ssl/cgi-bin/wifiscan.html | 79 > > > +++++++++++++++++++++- > > > 1 file changed, 77 insertions(+), 2 deletions(-) > > > > > > diff --git > > > a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > > > b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > > > index f9186d2..320019b 100755 > > > --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > > > +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > > > @@ -1,7 +1,40 @@ > > > -#!/usr/bin/haserl > > > +#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=1000 > > > > Ich sehe hier immer noch ein Sicherheitsrisiko! > > > > Können bei dem upload-dir wichtige Status-Files etc überschrieben werden? > > Sollte ein extra Verzeichnis gewählt werden? > > > > Vielleicht mit sowas: mktemp -d, vielleicht geht auch -u (für den Fall, dass gar > > nicht hochgeladen wurde). > > Ich habe das so verstanden, dass haserl da eh einen random Namen generiert: > > http://haserl.sourceforge.net/manpage.html > > --upload-dir=dirspec Defaults to "/tmp". All uploaded files are > created with temporary filename in this directory HASERL_xxx_path > contains the name of the temporary file. FORM_xxx_name contains the > original name of the file, as specified by the client. > > Ist nicht ganz eindeutig. Ggf. teste ich mal, was für Namen der so > macht, kann die ja ausgeben lassen. Ich verstehe das so, dass der > sowas wie mktemp ohnehin intrinsisch macht. Oder habe ich falsch > verstanden, worum es dir geht? Mir geht es darum, dass ein möglicher Angreifer ggfs Dateien in /tmp ablegen kann, die aber gerade einen wichtigen System-Zustand speichern. Das ist es jetzt konstruiert, aber z.B. könnte in /tmp/ eine Datei namens 3254jkh2 stehen, in dieser steht: "system operate: normal". Ein script wertet das regelmäßig aus, und wenn da was anderes drin steht machts ein reboot. Das als Verzeichnis /tmp gewählt ist, könnte ein Angreifer ggfs die Datei 3254jkh2 überschreiben und so das System zum restarten zwingen. Wenn du sicher sagen kannst, dass sich das haserl bereits darum kümmert, dass da nichts ausversehen überschrieben wird und und das temporary filename auch auf keinen Fall so sein kann wie eine Datei die eh da grad liegt, dann ist ja alles in Ordnung. Auf der anderen Seite frage ich mich, warum wir da überhaupt ein Risiko eingehen sollten, wenn man es ganz einfach ohne lange Diskussion in einen eigenen Ordner stopfen könnte. > > > [..] > > > <% > > > > > > > > - readIWinfo "$iface" "td" "td" > > > > > > > > + if [ -s /tmp/wifinodelist ] ; then > > > > + firststep="$(readIWinfo "$iface" "ssid" "mac")" > > > > > > + rewriteIWinfo "$firststep" > > > > Ich hab hier ein bisschen Angst, dass ggfs die Command-Line zu lang werden > > könnte. > > Was sind da die Limits? In meinem sehr vollen Netz war das nie ein > Problem, aber das muss ja nichts heißen. Das weiß ich grad nicht, aber es wird sicher welche geben. > Hast du eine bessere Idee? Ja, aber ich weiß nicht genau wie man das umsetzt. Letztlich sollte der Code dann so aussehen: if [ -s /tmp/wifinodelist ]; then readIWinfo "$iface" "ssid" "mac" | rewriteIWinfo fi So wäre das von der Commandline weg und würde sauber über eine Pipe übergeben werden. Da in der rewriteIWinfo eh ein readline gemacht wird, liegt das irgendwie sowie nahe. Aber wie gesagt, wie und ob das mit einer Shell Funktion geht, müsste man sich nochmal eben angucken. Tim
Hi Ich hab grad ein wenig gegrübelt. Eigentlich wäre es im Sinne des Komforts und der Dezentralität irgendwie geiler, wenn die Knoten ihren Namen einfach selber mit im Beacon mitsenden würden. Hat sich da schon mal jemand mit befasst? Platz wäre im Beacon wohl genug da.. Tim Am Sonntag, den 26.11.2017, 14:01 +0100 schrieb Adrian Schmutzler: > This patch enables labelling of routers in the WebUI's WiFi > scan page, so their hostname is displayed instead of > freifunk.franken.net. The evaluation is performed based on > a WifiAnalyzer style node file /tmp/wifinodelist. > > In the WebUI, this file may be provided by file upload or by > downloading from the Monitoring API (if the router has > internet access). > > Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > --- > > Changes in v2: > none > > Changes in v3: > - Put to the end of the patchset > - Use wifianalall API (hood-independent) as this is now available > and eves the file for all hoods has only < 200 kB > - Reduced upload file size to 1MB > --- > .../fff-web/files/www/ssl/cgi-bin/wifiscan.html | 79 > +++++++++++++++++++++- > 1 file changed, 77 insertions(+), 2 deletions(-) > > diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi- > bin/wifiscan.html b/src/packages/fff/fff-web/files/www/ssl/cgi- > bin/wifiscan.html > index f9186d2..320019b 100755 > --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html > @@ -1,7 +1,40 @@ > -#!/usr/bin/haserl > +#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=1000 > > +<% > +# treat post > +if [ "$REQUEST_METHOD" == "POST" ] ; then > + if [ "$POST_wifiupload" != "" ] ; then > + if [ ! -f "$HASERL_nodelist_path" ] ; then > + MSG='<span class="red">Node-Datei nicht > gefunden!</span>' > + elif [ "$(du -k "$HASERL_nodelist_path" | cut -f1)" > == "0" ] ; then > + MSG='<span class="red">Node-Datei ist > leer!</span>' > + else > + mv "$HASERL_nodelist_path" /tmp/wifinodelist > + MSG='<span class="green">Upload > erfolgreich!</span>' > + fi > + fi > + if [ "$POST_wifidownload" != "" ] ; then > + if /bin/wget -T 10 -O /tmp/wifinodelist "https://mon > itoring.freifunk-franken.de/api/wifianalall" 2> /dev/null ; then > + MSG='<span class="green">Download > erfolgreich!</span>' > + else > + MSG='<span class="red">Download > fehlgeschlagen!</span>' > + fi > + fi > +fi > +%> > <%in /www/ssl/cgi-bin/header %> > +<%in /www/ssl/cgi-bin/helpers %> > +<% show_msg %> > <% > +if [ -s /tmp/wifinodelist ] ; then > + numentries="$(grep -c '^[^#]' /tmp/wifinodelist)" > + filehood="$(grep -e "#Hood:" /tmp/wifinodelist | awk -F" " > '{print $2}')" > + [ -n "$filehood" ] || filehood="Alle Hoods" > + havelist="<span style='color:green'>Ja (Hood: ${filehood}, > ${numentries} Einträge)</span>" > +else > + havelist='<span style="color:red">Nein</span>' > +fi > + > readIWinfo() { > local iface=$1 > local ssid=$2 > @@ -13,6 +46,28 @@ readIWinfo() { > "<!-- \\5 -- > ><tr><'${ssid}'>\\2</'${ssid}'><td>\\4</td><td>\\5 > dBm</td><td>\\3</td><'${mac}'>\\1</'${mac}'><td>\\6</td></tr>", "g"); > print r;}' | sort -n | sed 's#&#\&#' > # The HTML comment contains the signal quality to > allow sorting > } > + > +rewriteIWinfo() { > + local data="$1" > + > + echo "$data" | while read line ; do > + mac="$(echo "$line" | sed -e > 's#.*<mac>\(.*\)</mac>.*#\1#')" > + routerid="$(grep -i -e "$mac" /tmp/wifinodelist | > awk -F"|" '{print $2}')" > + if [ -n "$routerid" ] ; then > + ssid="<span > style='color:green'>${routerid}</span>" > + else > + ssidtmp="$(echo "$line" | sed -e > 's#.*<ssid>\(.*\)</ssid>.*#\1#')" > + if [ "$ssidtmp" = "unknown" ] ; then > + ssid="<span > style='color:blue'>${ssidtmp}</span>" > + else > + ssid="$ssidtmp" > + fi > + fi > + midpart=$(echo "$line" | sed -e > 's#.*</ssid>\(.*\)<mac>.*#\1#') > + endpart=$(echo "$line" | sed -e > 's#.*</mac>\(.*\)</tr>.*#\1#') > + echo > "<tr><td>${ssid}</td>${midpart}<td>${mac}</td>${endpart}</tr>" > + done > +} > printWifiScan() { > local iface=$1 > local freq="2.4 GHz" > @@ -34,7 +89,12 @@ printWifiScan() { > </tr> > > <% > - readIWinfo "$iface" "td" "td" > + if [ -s /tmp/wifinodelist ] ; then > + firststep="$(readIWinfo "$iface" "ssid" "mac")" > + rewriteIWinfo "$firststep" > + else > + readIWinfo "$iface" "td" "td" > + fi > %> > </table> > </fieldset> > @@ -44,6 +104,21 @@ printWifiScan() { > > %> > <table style="width: 100%"> > +<tr><td> > +<form method="post" enctype="multipart/form-data"> > +<fieldset> > + <legend>Wifi Node File</legend> > + <table> > + <tr><th style="width: 20em;text-align:left;padding- > bottom:10px">Alias Liste vorhanden:</th><td style="padding- > bottom:10px"><%= "$havelist" %></td></tr> > + <tr><th style="width: 20em;text-align:left">Upload > Node-Liste:</th><td><input type="file" name="nodelist" /></td></tr> > + <tr><td colspan="2" style="padding:10px 0">Hier kann > eine Node-Liste (WiFiAnalyzer-Stil) hochgeladen werden.</td></tr> > + <tr><td colspan="2"><input type="submit" > name="wifiupload" value="Datei-Upload auf Router" /></td></tr> > + <tr><td colspan="2" style="padding-top:20px">Wenn > der Router mit dem Internet verbunden ist, kann die Node-Liste vom > Monitoring bezogen werden.</td></tr> > + <tr><td colspan="2" style="padding:10px 0"><input > type="submit" name="wifidownload" value="Datei-Download von > Monitoring" /></td></tr> > + </table> > +</fieldset> > +</form> > +</td></tr> > <% > if uci -q get wireless.w2ap > /dev/null ; then > printWifiScan "w2ap" > -- > 2.7.4 >