From 69c4f826d09537c43394d5d15ff8e44926706827 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 11 Feb 2013 20:30:13 +0000 Subject: [PATCH] FB_checkPw with user git-svn-id: https://svn.fhem.de/fhem/trunk@2691 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/01_FHEMWEB.pm | 8 +++++--- fhem/FHEM/98_telnet.pm | 6 +++++- fhem/FHEM/FritzBoxUtils.pm | 29 ++++++++++++++++++++--------- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 94e6358fd..5a4225c10 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -71,6 +71,7 @@ - feature: userReadings - feature: average supports more than one value in combined readings (T:x H:y) - feature: FHEMWEB serves arbitrary files from the www directory + - feature: FB_checkPw now works with a distinct fritzbox user - 2012-10-28 (5.3) diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index 6cb505a92..f5bd382e3 100755 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -2906,10 +2906,12 @@ FW_htmlEscape($) Example:
attr WEB basicAuth { "$user:$password" eq "admin:secret" }
- attr WEB basicAuth {use FritzBoxUtils;;FB_checkPw("localhost","$password") } + attr WEB basicAuth {use FritzBoxUtils;;FB_checkPw("localhost","$password") }
+
+ or if you defined multiple users on the Fritzbox:
+ + attr WEB basicAuth {use FritzBoxUtils;;FB_checkPw("localhost","$user", "$password") }
- -
diff --git a/fhem/FHEM/98_telnet.pm b/fhem/FHEM/98_telnet.pm index bc3b072c1..a63cc5fdc 100644 --- a/fhem/FHEM/98_telnet.pm +++ b/fhem/FHEM/98_telnet.pm @@ -374,7 +374,11 @@ telnet_Undef($$) Example:
attr tPort password secret
- attr tPort password {use FritzBoxUtils;;FB_checkPw("localhost","$password") } + attr tPort password {use FritzBoxUtils;;FB_checkPw("localhost","$password") }
+
+ or if you defined multiple users on the Fritzbox:
+ + attr tPort password {use FritzBoxUtils;;FB_checkPw("localhost","$user", "$password") }

diff --git a/fhem/FHEM/FritzBoxUtils.pm b/fhem/FHEM/FritzBoxUtils.pm index f76dd3368..b6207932c 100644 --- a/fhem/FHEM/FritzBoxUtils.pm +++ b/fhem/FHEM/FritzBoxUtils.pm @@ -7,12 +7,14 @@ use warnings; use Digest::MD5 "md5_hex"; use HttpUtils; -my ($lastOkPw, $lastOkHost, $lastOkTime) =("", "", 0); +my ($lastOkPw, $lastOkUser, $lastOkHost, $lastOkTime) =("", "", 0); + +sub FB_checkPw(@); sub -FB_doCheckPW($$) +FB_doCheckPW($$$) { - my ($host, $pw) = @_; + my ($host, $user, $pw) = @_; my $data = GetFileFromURL("http://$host/login_sid.lua", undef, undef, 1); return undef if(!$data); @@ -33,7 +35,10 @@ FB_doCheckPW($$) } else { # FritzOS >= 5.50 my @d = ( "response=$chlAnsw", "page=/login_sid.lua" ); $data = join("&", map {join("=", map {urlEncode($_)} split("=",$_,2))} @d); - $data = GetFileFromURL("http://$host/login_sid.lua", undef, $data, 1); + my $url = "http://$host/login_sid.lua"; + $url .= "?username=$user" if($user); + + $data = GetFileFromURL($url, undef, $data, 1); my $sid = $1 if($data =~ /(\w+)<\/SID>/i); $sid = undef if($sid =~ m/^0*$/); return $sid; @@ -41,16 +46,22 @@ FB_doCheckPW($$) } sub -FB_checkPw($$) +FB_checkPw(@) { - my ($host, $pw) = @_; + my ($host, $p1, $p2) = @_; + my $user = ($p2 ? $p1 : ""); # Compatibility mode: no user parameter + my $pw = ($p2 ? $p2 : $p1); + my $now = time(); - return 1 if($lastOkPw eq $pw && $lastOkHost eq $host && + return 1 if($lastOkPw eq $pw && + $lastOkUser eq $user && + $lastOkHost eq $host && ($now - $lastOkTime) < 300); # 5min cache - if(FB_doCheckPW($host, $pw)) { - $lastOkPw = $pw; + if(FB_doCheckPW($host, $user, $pw)) { + $lastOkPw = $pw; + $lastOkUser = $user; $lastOkTime = $now; $lastOkHost = $host; return 1;