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">
Global Attributes</h3>
<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>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3>

View File

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

View File

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

View File

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