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

Tim Niemeyer tim at tn-x.org
Sa Nov 4 15:17:58 CET 2017


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 &.
> 
> Changes in v2: none
> 
> > Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
> 
> > Tested-by: Adrian Schmutzler <freifunk at 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#&#\&#'
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
> 
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 488 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20171104/73855525/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev