[v2,1/3] fff-web: Fix two bugs in wifiscan.html

Submitted by Adrian Schmutzler on Oct. 19, 2017, 10:25 p.m.

Details

Message ID 1508451907-49231-1-git-send-email-freifunk@adrianschmutzler.de
State Superseded
Headers show

Commit Message

Adrian Schmutzler Oct. 19, 2017, 10:25 p.m.
Bug 1: If devices with hidden SSID are present, the matched
SSID in the awk contains the newline (="unknown\n\t"). This
destroys the table after the sort.

Bug 2: If SSIDs contain ampersands (yes, people do that),
they are now converted to &.

Changes in v2: none

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
---
 src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

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 a235159..254c24b 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
@@ -18,8 +18,8 @@ 
 <%
 iwinfo w2mesh scan |\
 	awk -v RS='' \
-	'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
-	"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5 dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' | sort -n
+	'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
+	"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5 dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&amp;#'
 	# The HTML comment contains the signal quality to allow sorting
 %>
 	</table>

Comments

Tim Niemeyer Nov. 4, 2017, 2:17 p.m.
Hi

Am Freitag, den 20.10.2017, 00:25 +0200 schrieb Adrian Schmutzler:
> Bug 1: If devices with hidden SSID are present, the matched
> SSID in the awk contains the newline (="unknown\n\t"). This
> destroys the table after the sort.
> 
> Bug 2: If SSIDs contain ampersands (yes, people do that),
> they are now converted to &amp;.
> 
> Changes in v2: none
> 
> > Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> > Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> ---
>  src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html | 4 ++--
>  1 file changed, 2 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 a235159..254c24b 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
> @@ -18,8 +18,8 @@
>  <%
>  iwinfo w2mesh scan |\
> >  	awk -v RS='' \
> > -	'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
> > -	"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5 dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' | sort -n
> +	'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \

Schwer zu verdauen..

Wir suchen aus einem Text die ESSID:

'ESSID: "unknown\n\t"'
'ESSID: "freifunk"'

Mit diesem Ausdruck:
'.*ESSID: "?(unknown|[^"]*)"?.*Mode:'

Der alte Ausdruck hat das gemacht, in dem er nach '...ESSID: ' und dann
nach einem optionalen(?) '"' gesucht hat. Dann hat er entweder
'unknown' oder jedes Zeichen, was kein '"' ist gemerkt. Dann hat er
wieder nach einem optionalen(?) '"' gesucht. Dann nach jedem beliebigen
Zeichen und dann nach 'Mode: ...'.

Ich verstehe gerade nicht, wieso das .* vor dem Mode nötig ist.
Außerdem scheint das mit den Anführuungszeichen komisch zu sein.

Der neue Ausdruck wäre dann:
'.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode:'

Die neue Lösung erwartet jetzt immer, dass nach dem optionalem
Anführungszeichen beliebig viele Leerstellen (also auch keins) und dann
ein Zeilenumbruch gefolgt von beliebigen Zeichen kommt.

Das funktioniert zwar, ist aber für mich nicht so ganz nachvollziehbar.
Ich stell mal ein Gegenvorschlag in den Raum:
'.*ESSID: "?([^"\n]*)"?.*Mode:'


> +	"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5 dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&amp;#'
Jo, ok. Können wir machen. Wirft aber die Frage auf.. Könnte jemand
Schadcode in seine ESSID einbauen?

Tim

>  	# The HTML comment contains the signal quality to allow sorting
>  %>
> >  	</table>
> -- 
> 2.7.4
>