mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-01 00:19:00 +00:00
optional telnet password
git-svn-id: https://svn.fhem.de/fhem/trunk@1612 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
53de545c0e
commit
886863dfb7
@ -33,14 +33,16 @@
|
|||||||
- change: FHEMWEB support for the new www/pgm2 directroy added (M. Fischer)
|
- change: FHEMWEB support for the new www/pgm2 directroy added (M. Fischer)
|
||||||
- change: Makefile support for for the new www/pgm2 directroy and new targets
|
- change: Makefile support for for the new www/pgm2 directroy and new targets
|
||||||
backup and uninstall added. More verbose output. (M. Fischer)
|
backup and uninstall added. More verbose output. (M. Fischer)
|
||||||
- change: backuproutine separated from updatefhem to a new command (M. Fischer)
|
- change: backup separated from updatefhem to a new command (M. Fischer)
|
||||||
- feature: new command backup added (M. Fischer)
|
- feature: new command backup added (M. Fischer)
|
||||||
new global attribute <backupsymlink> added
|
new global attribute <backupsymlink> added
|
||||||
new global attribute <backupcmd> added
|
new global attribute <backupcmd> added
|
||||||
new global attribute <backup_before_update> added
|
new global attribute <backup_before_update> added
|
||||||
- feature: new module 57_Calendar.pm (Boris)
|
- feature: new module 57_Calendar.pm (Boris)
|
||||||
|
- feature: new module 57_Calendar.pm (Boris)
|
||||||
- feature: new parameter <changed> for updatefhem added (M. Fischer)
|
- feature: new parameter <changed> for updatefhem added (M. Fischer)
|
||||||
new global attribute <exclude_from_update> added (M. Fischer)
|
new global attribute <exclude_from_update> added (M. Fischer)
|
||||||
|
- feature: optional telnet password added / telnet port is optional
|
||||||
|
|
||||||
- 2011-12-31 (5.2)
|
- 2011-12-31 (5.2)
|
||||||
- bugfix: applying smallscreen attributes to firefox/opera
|
- bugfix: applying smallscreen attributes to firefox/opera
|
||||||
|
@ -40,9 +40,9 @@ FHEM2FHEM_Define($$)
|
|||||||
my ($hash, $def) = @_;
|
my ($hash, $def) = @_;
|
||||||
my @a = split("[ \t][ \t]*", $def);
|
my @a = split("[ \t][ \t]*", $def);
|
||||||
|
|
||||||
if(@a != 4 || !($a[3] =~ m/^(LOG|RAW):(.*)$/)) {
|
if(@a < 4 || @a > 5 || !($a[3] =~ m/^(LOG|RAW):(.*)$/)) {
|
||||||
my $msg = "wrong syntax: define <name> FHEM2FHEM host[:port] ".
|
my $msg = "wrong syntax: define <name> FHEM2FHEM host[:port] ".
|
||||||
"[LOG:regexp|RAW:device]";
|
"[LOG:regexp|RAW:device] {portpasswort}";
|
||||||
Log 2, $msg;
|
Log 2, $msg;
|
||||||
return $msg;
|
return $msg;
|
||||||
}
|
}
|
||||||
@ -68,6 +68,7 @@ FHEM2FHEM_Define($$)
|
|||||||
$hash->{Host} = $dev;
|
$hash->{Host} = $dev;
|
||||||
}
|
}
|
||||||
$hash->{Host} = $dev;
|
$hash->{Host} = $dev;
|
||||||
|
$hash->{portpassword} = $a[4] if(@a == 5);
|
||||||
|
|
||||||
|
|
||||||
FHEM2FHEM_CloseDev($hash); # Modify...
|
FHEM2FHEM_CloseDev($hash); # Modify...
|
||||||
@ -231,6 +232,8 @@ FHEM2FHEM_OpenDev($$)
|
|||||||
|
|
||||||
$hash->{STATE}= "connected";
|
$hash->{STATE}= "connected";
|
||||||
DoTrigger($name, "CONNECTED") if($reopen);
|
DoTrigger($name, "CONNECTED") if($reopen);
|
||||||
|
syswrite($hash->{TCPDev}, $hash->{portpassword} . "\n")
|
||||||
|
if($hash->{portpassword});
|
||||||
my $msg = $hash->{informType} eq "LOG" ? "inform on" : "inform raw";
|
my $msg = $hash->{informType} eq "LOG" ? "inform on" : "inform raw";
|
||||||
syswrite($hash->{TCPDev}, $msg . "\n");
|
syswrite($hash->{TCPDev}, $msg . "\n");
|
||||||
return undef;
|
return undef;
|
||||||
|
@ -1329,12 +1329,21 @@ A line ending with \ will be concatenated with the next one, so long lines
|
|||||||
will only listen for connections from the localhost per default. If
|
will only listen for connections from the localhost per default. If
|
||||||
there is a second value "global" then the server will listen for
|
there is a second value "global" then the server will listen for
|
||||||
non-localhost connections too.<br><br>
|
non-localhost connections too.<br><br>
|
||||||
|
This attribute is optional starting with fhem 5.3.<br><br>
|
||||||
To use IPV6, specify the port as IPV6:<number>, in this
|
To use IPV6, specify the port as IPV6:<number>, in this
|
||||||
case the perl module IO::Socket:INET6 will be requested.
|
case the perl module IO::Socket:INET6 will be requested.
|
||||||
On Linux you may have to install it with cpan -i IO::Socket::INET6 or
|
On Linux you may have to install it with cpan -i IO::Socket::INET6 or
|
||||||
apt-get libio-socket-inet6-perl; the OSX perl already has this module.
|
apt-get libio-socket-inet6-perl; the OSX perl already has this module.
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
|
<a name="portpassword"></a>
|
||||||
|
<li>portpassword<br>
|
||||||
|
Specify a port password, which has to be entered as the very first
|
||||||
|
string after the connection is established. Note: the password will be
|
||||||
|
visible when you are typing it in a the telnet connection.
|
||||||
|
</li><br>
|
||||||
|
|
||||||
|
|
||||||
<a name="statefile"></a>
|
<a name="statefile"></a>
|
||||||
<a name="statefile"></a>
|
<a name="statefile"></a>
|
||||||
<li>statefile<br>
|
<li>statefile<br>
|
||||||
@ -2785,7 +2794,15 @@ A line ending with \ will be concatenated with the next one, so long lines
|
|||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
<li><a name="hmProtocolEvents">hmProtocolEvents</a><br>
|
<li><a name="hmProtocolEvents">hmProtocolEvents</a><br>
|
||||||
Generate events for HomeMatic protocol messages.
|
Generate events for HomeMatic protocol messages. These are normally
|
||||||
|
used for debugging, by activating "inform timer" in a telnet session,
|
||||||
|
or looking at the "Event Monitor" window in the FHEMWEB frontend.
|
||||||
|
Example:
|
||||||
|
<ul>
|
||||||
|
<code>
|
||||||
|
2012-05-17 09:44:22.515 CUL CULHM RCV L:0B N:81 CMD:A258 SRC:...... DST:...... 0000 (TYPE=88,WAKEMEUP,BIDI,RPTEN)
|
||||||
|
</code>
|
||||||
|
</ul>
|
||||||
</li><br>
|
</li><br>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
@ -8162,7 +8179,7 @@ KlikAanKlikUit, NEXA, CHACON, HomeEasy UK. <br> You need to define an RFXtrx433
|
|||||||
<a name="FHEM2FHEMdefine"></a>
|
<a name="FHEM2FHEMdefine"></a>
|
||||||
<b>Define</b>
|
<b>Define</b>
|
||||||
<ul>
|
<ul>
|
||||||
<code>define <name> FHEM2FHEM <host:portnr> [LOG:regexp|RAW:devicename]
|
<code>define <name> FHEM2FHEM <host:portnr> [LOG:regexp|RAW:devicename] {portpassword}
|
||||||
</code>
|
</code>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
@ -8195,9 +8212,10 @@ KlikAanKlikUit, NEXA, CHACON, HomeEasy UK. <br> You need to define an RFXtrx433
|
|||||||
usually with the device-node "none", so it is only a dummy device. All
|
usually with the device-node "none", so it is only a dummy device. All
|
||||||
necessary attributes (e.g. <a href="#rfmode">rfmode</a> if the remote CUL
|
necessary attributes (e.g. <a href="#rfmode">rfmode</a> if the remote CUL
|
||||||
is in HomeMatic mode) must also be set for the local device.
|
is in HomeMatic mode) must also be set for the local device.
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
The last parameter specifies an optional portpassword, if the remote server
|
||||||
|
activated <a href="#portpassword">portpassword</a>.
|
||||||
<br>
|
<br>
|
||||||
Examples:
|
Examples:
|
||||||
<ul>
|
<ul>
|
||||||
|
32
fhem/fhem.pl
32
fhem/fhem.pl
@ -190,12 +190,13 @@ $init_done = 0;
|
|||||||
$modules{Global}{ORDER} = -1;
|
$modules{Global}{ORDER} = -1;
|
||||||
$modules{Global}{LOADED} = 1;
|
$modules{Global}{LOADED} = 1;
|
||||||
$modules{Global}{AttrList} =
|
$modules{Global}{AttrList} =
|
||||||
"archivecmd allowfrom apiversion archivedir configfile lastinclude logfile " .
|
"archivecmd allowfrom apiversion archivedir configfile lastinclude logfile " .
|
||||||
"modpath nrarchive pidfilename port statefile title userattr " .
|
"modpath nrarchive pidfilename port portpassword statefile title userattr " .
|
||||||
"verbose:1,2,3,4,5 mseclog version nofork logdir holiday2we " .
|
"verbose:1,2,3,4,5 mseclog version nofork logdir holiday2we " .
|
||||||
"autoload_undefined_devices dupTimeout latitude longitude " .
|
"autoload_undefined_devices dupTimeout latitude longitude " .
|
||||||
"backupcmd backupdir backupsymlink backup_before_update " .
|
"backupcmd backupdir backupsymlink backup_before_update " .
|
||||||
"exclude_from_update ";
|
"exclude_from_update ";
|
||||||
|
|
||||||
$modules{Global}{AttrFn} = "GlobalAttr";
|
$modules{Global}{AttrFn} = "GlobalAttr";
|
||||||
|
|
||||||
%cmds = (
|
%cmds = (
|
||||||
@ -333,7 +334,7 @@ while(time() < 2*3600) {
|
|||||||
|
|
||||||
my $ret = CommandInclude(undef, $attr{global}{configfile});
|
my $ret = CommandInclude(undef, $attr{global}{configfile});
|
||||||
Log 1, "configfile: $ret" if($ret);
|
Log 1, "configfile: $ret" if($ret);
|
||||||
die("No port specified in the configfile.\n") if(!$server);
|
#die("No port specified in the configfile.\n") if(!$server);
|
||||||
|
|
||||||
if($attr{global}{statefile} && -r $attr{global}{statefile}) {
|
if($attr{global}{statefile} && -r $attr{global}{statefile}) {
|
||||||
$ret = CommandInclude(undef, $attr{global}{statefile});
|
$ret = CommandInclude(undef, $attr{global}{statefile});
|
||||||
@ -368,7 +369,7 @@ while (1) {
|
|||||||
|
|
||||||
my $timeout = HandleTimeout();
|
my $timeout = HandleTimeout();
|
||||||
|
|
||||||
vec($rin, $server->fileno(), 1) = 1;
|
vec($rin, $server->fileno(), 1) = 1 if($server);
|
||||||
foreach my $p (keys %selectlist) {
|
foreach my $p (keys %selectlist) {
|
||||||
vec($rin, $selectlist{$p}{FD}, 1) = 1;
|
vec($rin, $selectlist{$p}{FD}, 1) = 1;
|
||||||
}
|
}
|
||||||
@ -433,7 +434,7 @@ while (1) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(vec($rout, $server->fileno(), 1)) {
|
if($server && vec($rout, $server->fileno(), 1)) {
|
||||||
my @clientinfo = $server->accept();
|
my @clientinfo = $server->accept();
|
||||||
if(!@clientinfo) {
|
if(!@clientinfo) {
|
||||||
Log 1, "Accept failed: $!";
|
Log 1, "Accept failed: $!";
|
||||||
@ -637,6 +638,18 @@ AnalyzeInput($)
|
|||||||
while($client{$c}{buffer} =~ m/\n/) {
|
while($client{$c}{buffer} =~ m/\n/) {
|
||||||
my ($cmd, $rest) = split("\n", $client{$c}{buffer}, 2);
|
my ($cmd, $rest) = split("\n", $client{$c}{buffer}, 2);
|
||||||
$client{$c}{buffer} = $rest;
|
$client{$c}{buffer} = $rest;
|
||||||
|
|
||||||
|
if($attr{global}{portpassword} && !$client{$c}{pwEntered}) {
|
||||||
|
if($attr{global}{portpassword} eq $cmd) {
|
||||||
|
$client{$c}{pwEntered} = 1;
|
||||||
|
next;
|
||||||
|
} else {
|
||||||
|
syswrite($client{$c}{fd}, "Password required\r\n");
|
||||||
|
DoClose($c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if($cmd) {
|
if($cmd) {
|
||||||
if($cmd =~ m/\\ *$/) { # Multi-line
|
if($cmd =~ m/\\ *$/) { # Multi-line
|
||||||
$client{$c}{prevlines} .= $cmd . "\n";
|
$client{$c}{prevlines} .= $cmd . "\n";
|
||||||
@ -866,7 +879,6 @@ CommandInclude($$)
|
|||||||
if(!open($fh, $arg)) {
|
if(!open($fh, $arg)) {
|
||||||
return "Can't open $arg: $!";
|
return "Can't open $arg: $!";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$init_done &&
|
if(!$init_done &&
|
||||||
$arg ne AttrVal("global", "statefile", "") &&
|
$arg ne AttrVal("global", "statefile", "") &&
|
||||||
$arg ne AttrVal("global", "configfile", "")) {
|
$arg ne AttrVal("global", "configfile", "")) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user