patch, um web und telnet auf bestimmte Interfaces zu binden

Begonnen von daduke, 13 Januar 2015, 20:23:35

Vorheriges Thema - Nächstes Thema

daduke

Hallo zusammen,

gehört nicht unbedingt hier her, aber in FHEM development kann ich keinen neuen Thread eröffnen..

Bei mir läuft FHEM auf dem Router, der natürlich interne und externe Interfaces hat. Web und telnet von FHEM will ich selbverständlich nur im internen Netz anbieten, nicht gegen aussen. global hilft da nicht so recht, da ich ja nicht nur localhost brauche, sondern (in meinem Fall) 192.168.0.1. Ich habe daher TcpServerUtils.pm, 01_FHEMWEB.pm und 98_telnet.pm so gepatched, dass man in der config zusätzlich eine IP mitgeben kann, auf die FHEM bindet. Funzt bei mir seit > 1 Jahr problemlos. Wäre das etwas für upstream?

--- TcpServerUtils.pm.orig      2015-01-13 19:44:56.231081868 +0100
+++ TcpServerUtils.pm   2015-01-13 19:45:29.113924463 +0100
@@ -8,9 +8,9 @@
use Errno qw(:POSIX);

sub
-TcpServer_Open($$$)
+TcpServer_Open($$$$)
{
-  my ($hash, $port, $global) = @_;
+  my ($hash, $port, $global, $address) = @_;
   my $name = $hash->{NAME};

   if($port =~ m/^IPV6:(\d+)$/i) {
@@ -28,6 +28,7 @@
     Domain    => ($hash->{IPV6} ? AF_INET6() : AF_UNSPEC), # Linux bug
     LocalHost => ($global ? undef : "localhost"),
     LocalPort => $port,
+    LocalAddr => $address,
     Listen    => 10,
     Blocking  => ($^O =~ /Win/ ? 1 : 0), # Needed for .WRITEBUFFER@darwin
     ReuseAddr => 1
--- 01_FHEMWEB.pm.orig  2015-01-13 19:45:59.564556647 +0100
+++ 01_FHEMWEB.pm       2015-01-13 19:46:31.383306930 +0100
@@ -225,7 +225,7 @@
FW_Define($$)
{
   my ($hash, $def) = @_;
-  my ($name, $type, $port, $global) = split("[ \t]+", $def);
+  my ($name, $type, $port, $global, $address) = split("[ \t]+", $def);
   return "Usage: define <name> FHEMWEB [IPV6:]<tcp-portnr> [global]"
         if($port !~ m/^(IPV6:)?\d+$/ || ($global && $global ne "global"));

@@ -233,7 +233,7 @@
     FW_readIcons($pe);
   }

-  my $ret = TcpServer_Open($hash, $port, $global);
+  my $ret = TcpServer_Open($hash, $port, $global, $address);

   # Make sure that fhem only runs once
   if($ret && !$init_done) {
--- 98_telnet.pm.orig   2015-01-13 19:47:12.950899616 +0100
+++ 98_telnet.pm        2015-01-13 19:47:24.663911919 +0100
@@ -135,7 +135,7 @@
   my ($hash, $def) = @_;

   my @a = split("[ \t][ \t]*", $def);
-  my ($name, $type, $port, $global) = split("[ \t]+", $def);
+  my ($name, $type, $port, $global, $address) = split("[ \t]+", $def);

   my $isServer = 1 if(defined($port) && $port =~ m/^(IPV6:)?\d+$/);
   my $isClient = 1 if($port && $port =~ m/^(IPV6:)?.*:\d+$/);
@@ -148,7 +148,7 @@

   # Make sure that fhem only runs once
   if($isServer) {
-    my $ret = TcpServer_Open($hash, $port, $global);
+    my $ret = TcpServer_Open($hash, $port, $global, $address);
     if($ret && !$init_done) {
       Log3 $name, 1, "$ret. Exiting.";
       exit(1);


danke und viele Grüße,
-Christian

fhem auf pcengines apu, Philips Hue, MAX!, div. HomeMatic, Spark Core, panstamp, div. eigene Hardware