picontrolserver enthält Hashvariablen von piCtory und replace_io Datei

TODO: File-Hash-Werte sollten gegen Inhaltsprüfung getauscht werden
This commit is contained in:
2019-08-25 07:27:53 +02:00
parent e3cedd6f39
commit 43969d8162
4 changed files with 24 additions and 47 deletions

View File

@@ -12,7 +12,7 @@ Modul fuer die Verwaltung der PLC-Slave Funktionen.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>HASH_FAIL</td></tr><tr><td>HASH_NULL</td></tr><tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr> <tr><td>HASH_FAIL</td></tr><tr><td>HASH_NULL</td></tr><tr><td>HASH_PICT</td></tr><tr><td>HASH_RPIO</td></tr><tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -34,6 +34,8 @@ mqttserver.__copyright__?9
mqttserver.__license__?9 mqttserver.__license__?9
picontrolserver.HASH_FAIL?7 picontrolserver.HASH_FAIL?7
picontrolserver.HASH_NULL?7 picontrolserver.HASH_NULL?7
picontrolserver.HASH_PICT?7
picontrolserver.HASH_RPIO?7
picontrolserver.RevPiSlave.check_connectedacl?4() picontrolserver.RevPiSlave.check_connectedacl?4()
picontrolserver.RevPiSlave.disconnect_all?4() picontrolserver.RevPiSlave.disconnect_all?4()
picontrolserver.RevPiSlave.disconnect_replace_ios?4() picontrolserver.RevPiSlave.disconnect_replace_ios?4()

View File

@@ -6,7 +6,6 @@ __license__ = "GPLv3"
import proginit import proginit
import socket import socket
from fcntl import ioctl from fcntl import ioctl
from hashlib import md5
from shared.ipaclmanager import IpAclManager from shared.ipaclmanager import IpAclManager
from threading import Event, Thread from threading import Event, Thread
from timeit import default_timer from timeit import default_timer
@@ -14,6 +13,8 @@ from timeit import default_timer
# Hashvalues # Hashvalues
HASH_NULL = b'\x00' * 16 HASH_NULL = b'\x00' * 16
HASH_FAIL = b'\xff' * 16 HASH_FAIL = b'\xff' * 16
HASH_PICT = HASH_FAIL
HASH_RPIO = HASH_NULL
class RevPiSlave(Thread): class RevPiSlave(Thread):
@@ -409,22 +410,10 @@ class RevPiSlaveDev(Thread):
elif cmd == b'PH': elif cmd == b'PH':
# piCtory md5 Hashwert senden (16 Byte) # piCtory md5 Hashwert senden (16 Byte)
try: proginit.logger.debug(
with open(proginit.pargs.configrsc, "rb") as fh_pic: "send pictory hashvalue: {0}".format(HASH_PICT)
# Hashwert erzeugen und senden )
file_hash = md5(fh_pic.read()).digest() self._devcon.sendall(HASH_PICT)
proginit.logger.debug(
"send pictory hashvalue: {0}"
"".format(file_hash)
)
self._devcon.sendall(file_hash)
except Exception as e:
proginit.logger.error(
"error on pictory hash value transfair: {0}".format(e)
)
break
else:
continue
elif cmd == b'RP': elif cmd == b'RP':
# Replace_IOs Konfiguration senden # Replace_IOs Konfiguration senden
@@ -452,27 +441,10 @@ class RevPiSlaveDev(Thread):
# Replace_IOs md5 Hashwert senden (16 Byte) # Replace_IOs md5 Hashwert senden (16 Byte)
self.got_replace_ios = True self.got_replace_ios = True
replace_ios = proginit.conf["DEFAULT"].get("replace_ios", "") proginit.logger.debug(
try: "send replace_ios hashvalue: {0}".format(HASH_RPIO)
if replace_ios: )
with open(replace_ios, "rb") as fh: self._devcon.sendall(HASH_RPIO)
# Hashwert erzeugen und senden
file_hash = md5(fh.read()).digest()
else:
file_hash = HASH_NULL
proginit.logger.debug(
"send replace_ios hashvalue: {0}"
"".format(file_hash)
)
self._devcon.sendall(file_hash)
except Exception as e:
proginit.logger.error(
"error on replace_ios hash value transfair: {0}"
"".format(e)
)
self._devcon.sendall(HASH_FAIL)
else:
continue
elif cmd == b'EX': elif cmd == b'EX':
# Sauber Verbindung verlassen # Sauber Verbindung verlassen

View File

@@ -77,9 +77,7 @@ class RevPiPyLoad():
# Dateimerker # Dateimerker
self.pictorymtime = 0 self.pictorymtime = 0
self.pictoryhash = b''
self.replaceiosmtime = 0 self.replaceiosmtime = 0
self.replaceiohash = b''
self.replaceiofail = False self.replaceiofail = False
# Berechtigungsmanger # Berechtigungsmanger
@@ -611,11 +609,13 @@ class RevPiPyLoad():
return False return False
self.pictorymtime = mtime self.pictorymtime = mtime
# TODO: Nur "Devices" list vergleich
with open(proginit.pargs.configrsc, "rb") as fh: with open(proginit.pargs.configrsc, "rb") as fh:
file_hash = md5(fh.read()).hexdigest() file_hash = md5(fh.read()).hexdigest()
if self.pictoryhash == file_hash: if picontrolserver.HASH_PICT == file_hash:
return False return False
self.pictoryhash = file_hash picontrolserver.HASH_PICT = file_hash
return True return True
@@ -638,9 +638,10 @@ class RevPiPyLoad():
if not self.replace_ios_config or self.replaceiofail: if not self.replace_ios_config or self.replaceiofail:
# Dateipfad leer, prüfen ob es vorher einen gab # Dateipfad leer, prüfen ob es vorher einen gab
if self.replaceiosmtime > 0 or self.replaceiohash: if self.replaceiosmtime > 0 \
or picontrolserver.HASH_RPIO != picontrolserver.HASH_NULL:
self.replaceiosmtime = 0 self.replaceiosmtime = 0
self.replaceiohash = b'' picontrolserver.HASH_RPIO = picontrolserver.HASH_NULL
return True return True
else: else:
@@ -651,9 +652,11 @@ class RevPiPyLoad():
with open(self.replace_ios_config, "rb") as fh: with open(self.replace_ios_config, "rb") as fh:
file_hash = md5(fh.read()).hexdigest() file_hash = md5(fh.read()).hexdigest()
if self.replaceiohash == file_hash: if picontrolserver.HASH_RPIO == file_hash:
return False return False
self.replaceiohash = file_hash picontrolserver.HASH_RPIO = file_hash
# TODO: Instanz von ConfigParser vergleichen
return True return True