Fragen zu FHEM.pl

Begonnen von M.Schulze, 12 April 2020, 10:12:54

Vorheriges Thema - Nächstes Thema

M.Schulze

Hallo,

gibt es einen Grund dafür das Szenario #2 keinen 'SecurityCheck()' bekommt ?


if($cfgRet) {
  $attr{global}{autosave} = 0;
  $attr{global}{motd} = "$cfgErrMsg\n$cfgRet\nAutosave deactivated";
  Log 1, $cfgRet;

} elsif($attr{global}{motd} && $attr{global}{motd} =~ m/^$cfgErrMsg/) {
  $attr{global}{motd} = "";

} else {
  SecurityCheck();
}


Gibt es einen Grund warum man Attribut 'motd' speichert, wenn es NICHT 'none' ist?
Das bläht doch nur die cfg auf ...

MfG
Muss ich das Licht aus machen?

rudolfkoenig

Zitatgibt es einen Grund dafür das Szenario #2 keinen 'SecurityCheck()' bekommt ?
Ist vermutlich ein Denkfehler.

ZitatGibt es einen Grund warum man Attribut 'motd' speichert, wenn es NICHT 'none' ist?
Ja, motd war uerspruenglich fuer Benutzermeldungen konzipiert.

Da ich mit der aktuellen motd Handling seit laengerem ungluecklich bin, habe ich es umgebaut:
- fhem.cfg Fehlermeldungen und Security-Meldugen werden in $defs{global}{init_errors} gesammelt.
- autosave wird abgeschaltet bei fhem.cfg Fehlermeldungen.
- bei "attr global motd none" werden keine Meldungen ausgegeben.
- sonst wird beim Start im FHEM-Log init_errors ausgegeben, und in telnet/FHEMWEB motd gefolgt von init_errors.

betateilchen

Gibt es einen zuverlässigen Weg, die Befüllung von init_errors bezüglich des SecurityCheck zu verhindern, wenn man sich bewusst darüber ist, dass das nunmal so ist und dass man das auch so möchte?

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Mit einem global:INITIALIZED notify kann man den Wert auf leer setzen.
Stoert es trotz motd none?

M.Schulze


Hallo,


Ich würde es glaube ich jetzt so machen:

-init_messages statt init_errors oder motd ?  -> Ziel den Nutzer erreichen, Hinweise, Warnungen und Fehler, was im Log nicht sichergestellt ist.
-init_messages=none als Blocker für Warnungen und Hinweise. Aber NICHT für Fehler, die dann das none überschreiben. Es müsste nach Fehlern aktiv NEU auf 'none' gesetzt werden.
- kein Speichern der init_messages wenn nicht 'none' (Ursprüngliche Frage: Warum sollte man das tun ?)

    next if (grep { $_ eq "$d:$a" } @dontSave);
    my $val = $attr{$d}{$a};
    next if ($d eq "global" && $a eq "init_messages" && $val ne "none");  #store no init_messages msg



Hintergrund der ursprünglichen Frage:

Ich habe noch ein Attribut 'banners' in Global hinzugefügt.
Wenn das Attribut banners auf 'info.txt' gesetzt wird, wird diese File als Hinweis in die 'init_messages' eingebunden (wenn nicht none, da nur Hinweis). Wenn nicht gibts ein Eintrag im Log das die im Attribut Banners genannte Datei nicht vorhanden ist. So ein Banner könnte als Info-Kanal genutzt werden wenn FHEM über ein Container betrieben wird, und in einem weiteren Schritt auch über einen Container aktualisiert wird. Möglicherweise in einigen Szenarien auch ohne Wissen des Nutzers (imagePullPolicy -> Always).


MfG
Muss ich das Licht aus machen?

betateilchen

#5
Zitat von: rudolfkoenig am 22 April 2020, 19:54:24
Mit einem global:INITIALIZED notify kann man den Wert auf leer setzen.
Stoert es trotz motd none?

Hallo Rudi,

ich habe ein notify auf global:INITIALIZED, mit dem ich prüfe, ob in init_errors beim FHEM Start irgendwas aufgelaufen ist. Entsprechend dieser Auswertung erfolgen weitere Aktionen. Da ich keine allowed devices benutze, steht aber im Internal init_errors IMMER etwas drin (die Meldung des Security Checks), was die Auswertung unnötig kompliziert macht. Deshalb wäre es schön, wenn man die Meldung des Security Checks unterdrücken könnte. Kann man dazu vielleicht das bereits vorhandene globale Attribut "disableFeatures" erweitern, um den SecurityCheck gar nicht auszuführen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: betateilchen am 23 April 2020, 10:27:16
Deshalb wäre es schön, wenn man die Meldung des Security Checks unterdrücken könnte. Kann man dazu vielleicht das bereits vorhandene globale Attribut "disableFeatures" erweitern, um den SecurityCheck gar nicht auszuführen?

Vorschlag:


Index: fhem.pl
===================================================================
--- fhem.pl     (revision 21760)
+++ fhem.pl     (working copy)
@@ -331,7 +331,7 @@
   blockingCallMax
   commandref:modular,full
   configfile
-  disableFeatures:multiple,attrTemplate
+  disableFeatures:multiple,attrTemplate,SecurityCheck
   dnsHostsFile
   dnsServer
   dupTimeout
@@ -644,7 +644,9 @@
}

my $init_errors_first = ($defs{global}{init_errors} ? 1 : 0);
-SecurityCheck();
+unless (AttrVal('global','disableFeatures','') =~ m/SecurityCheck/i) {
+   SecurityCheck();
+}
if($defs{global}{init_errors}) {
   $attr{global}{autosave} = 0 if($init_errors_first);
   $defs{global}{init_errors} = "Messages collected while initializing FHEM:".   
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Habe securityCheck zu disableFeatures hinzugefuegt, was SecurityCheck komplett abschaltet, nicht nur beim Start.

Wie immer bei Patches: die Doku wird dem geneigten Maintainer ueberlassen....

betateilchen

Zitat von: rudolfkoenig am 23 April 2020, 12:11:36
Wie immer bei Patches: die Doku wird dem geneigten Maintainer ueberlassen....

Die Mühe, eine Doku zu schreiben, mache ich mir nicht, bevor ich weiß, ob und wie Du einen vorgeschlagenen patch einbaust. Die fehlende Doku hätte ich selbstverständlich noch nachgereicht. Auch "wie immer..." :)

Viele Grüße aus dem ICE (3 Fahrgäste im kompletten Großraumwagen, sehr entspanntes Reisen heute)

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: rudolfkoenig am 23 April 2020, 12:11:36
die Doku wird dem geneigten Maintainer ueberlassen....

Auf den ersten Blick würde ich sagen, mit den HTML tags in der neuen Doku stimmt was nicht, aber mangels stabiler Internetverbindung im Zug kann ich es im Moment nicht genauer verifizieren.

Zitat
          <li>securityCheck: to avoid checking if each Server port is secured
            by password. May make sense to avoid warnings, if you know it
            better.</li> </li><br>

das rote markierte tag könnte zuviel sein
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Danke fuer den Hinweis, habs gefixt.