[PATCH] - Verschieben der Uid Ermittlung in Utils.pm

Begonnen von Markus Bloch, 16 Dezember 2014, 22:40:43

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo Rudi,

anlenend an die Diskussion zu http://forum.fhem.de/index.php/topic,30340.msg230707.html#msg230707 brauchen wir zur Verschlüsselung von Werten natürlich einen geeigneten Schlüssel.

Aktuell wird durch fheminfo eine (mehr oder weniger) eindeutige ID für jedes FHEM System generiert, die pro System eindeutig ist und sich damit von anderen FHEM Systemen unterscheidet. Diese ID eignet sich daher perfekt um Passwörter in Attributen zu verschlüsseln.

Ich hatte dazu via Mail mit Martin Fischer Kontakt, der ja momentan laut MAINTAINER.txt der aktuelle Ansprechpartner für fheminfo. Ich fragte, ob es möglich wäre die Uid Funktionalität (Generierung/Einlesen) in eine eigene sub in 99_Utils.pm auszulagern. Er hatte da prinzipiell nichts gegen, nur leider mangels Zeit keine Möglichkeit dies selber durchzuführen.

Daher anbei ein Patch, der diese Funktionalität in eine eigene Sub in 99_Utils.pm auslagert. An der Funktion als solches habe ich nichts geändert.

Die Funktion wurde dennoch explizit auf alle 3 Szenarios getestet:


  • komplett jungfreuliches System => Uid generieren, Uid schreiben/konfigurieren, Uid zurückgeben
  • Uid direkt im Klartext unter "global uniqueID" gesetzt => Uid auf Platte schreiben/umkonfigurieren, Uid zurückgeben
  • Uid ist in Datei auf Festplatte geschrieben (Pfad unter "global uniqueID" gesetzt) => Uid von Platte einlesen, Uid zurückgeben

Desweiteren ist fheminfo entsprechend angepasst worden, welches nun diese Funktion nutzt.

Viele Grüße

Markus

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Danke fuer den Hinweis.

Aus dem Einbau ist ein Umbau geworden, angefangen hat es damit, dass mit deinem Patch getUniqueId immer ein neues ID zurueckgeliefert hat, falls das globale Attribut uniqueID nicht gesetzt war.

Folgendes ist implementiert (rauskopiert aus der Utils.pm Doku):
Zitat

       
  • getUniqueId()
    return the FHEM uniqueID used by the fheminfo command. Uses the getKeyValue / setKeyValue functions.

  •    
  • setKeyValue(keyName, value)
    store the value in the file $modpath/FHEM/FhemUtils/uniqueID (the name is used for backward compatibility), or in the database, if using configDB. value may not contain newlines, and only one value per key is stored. The file/database entry will be written immediately, no explicit save is required.  If the value is undef, the entry will be deleted. Returns an error-string or undef.

  •    
  • getKeyValue(keyName)
    return ($error, $value), stored previously by setKeyValue. $error is undef if there was no error, otherwise $value is undef.

Weiterhin
- das globale uniqueID Attribut wird nicht mehr verwendet (fliegt demnaechsst raus), da ich nicht verstanden habe, wozu es gut war.
- fheminfo habe ich erweitert, damit Module von third-party updates auch in der Statistik erfasst werden. Dazu muss die vom third-party angebotene Control-File-Name den Form control_XXX.txt haben, wobei XXX != fhem ist, da das schon von fhem.de belegt ist.

Markus Bloch

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

Ich würde dennoch vorschlagen, die Datei uniqueID mit dieser Erweiterung umzubenennen. Mir fällt zwar grad kein passender Begriff ein, aber ich denke auf Dauer wäre es nicht umbedingt logisch nachvollziehbar, warum diese Datei uniqueID heißt, obwohl sich dort Passwörter rumtummeln usw.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

und wer mit configDB arbeitet, könnte sich einfach mit "configdb uuid" eine uuid erzeugen, anstatt sie umständlich mit Zufallsgenerator und Zeitinformationen zu "errechnen" ...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

Und wie erzeugst du die UUID? Erscheint sie einfach aus dem nichts, wenn du "configdb uuid" aufrufst?  ???
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

#7
sql Datenbanken haben entsprechende Möglichkeiten von Haus aus im Bauch.


'select lower(hex(randomblob(16)))' # SQLITE
'select uuid()' # MYSQL
'select uuid_generate_v4()' # POSTGRESQL
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

daran ist nichts prinzipiell anders als der selbst erzeugten. genau so gut kann man /dev/random lesen.

der knackpunkt ist das es pro Installation nur ein mal passiert.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Bloch

#9
Hallo Rudi,

ich bin gerade dabei mein Modul entsprechend umzubauen, um die neuen Funktionen zu nutzen. Dabei ist mir aufgefallen, dass es nicht ganz so einfach ist festzustellen, ob ein Wert nicht vorhanden ist, oder ob es einen Fehler beim Lesen des Wertes gab.

Ich würde daher vorschlagen Zeile 36 in 99_Utils.pm folgendermaßen zu ändern:

  return ("Key not found", undef);       =>        return (undef, undef);              # Kein Fehler, aber auch kein Wert vorhanden

Viele Grüße

Markus

edit: bzw. die Zeile einfach komplett streichen.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Habs auf (undef, undef) geaendert und eingecheckt.