FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Markus Bloch am 16 Dezember 2014, 22:40:43

Titel: [PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: Markus Bloch am 16 Dezember 2014, 22:40:43
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:


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

Viele Grüße

Markus

Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: Markus Bloch am 28 Dezember 2014, 12:04:25
*reminder*
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: rudolfkoenig am 29 Dezember 2014, 09:49:38
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.
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: Markus Bloch am 29 Dezember 2014, 10:27:45
Vielen Dank
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: Markus Bloch am 29 Dezember 2014, 17:42:49
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
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: betateilchen am 29 Dezember 2014, 19:17:13
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" ...
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: Markus Bloch am 29 Dezember 2014, 19:44:33
Und wie erzeugst du die UUID? Erscheint sie einfach aus dem nichts, wenn du "configdb uuid" aufrufst?  ???
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: betateilchen am 29 Dezember 2014, 19:49:23
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
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: justme1968 am 29 Dezember 2014, 19:57:53
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.
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: Markus Bloch am 29 Dezember 2014, 20:44:58
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.
Titel: Antw:[PATCH] - Verschieben der Uid Ermittlung in Utils.pm
Beitrag von: rudolfkoenig am 30 Dezember 2014, 08:48:36
Habs auf (undef, undef) geaendert und eingecheckt.