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;