From 5f3bb44c7b9035e4828c7f1069b2427a19586eaa Mon Sep 17 00:00:00 2001 From: example Date: Sun, 6 Mar 2022 11:55:29 +0100 Subject: [PATCH] verarbeitung der statusdaten umgestellt, code verschlankt statusdaten werden jetzt mit den funktionen encode() und decode() verarbeitet, antwort des servers als variable, finaly klausel wieder entfernt --- source/server/apistatusd.py | 41 ++++++++++++------------------------- source/server/setstatus.py | 18 +++++++--------- 2 files changed, 20 insertions(+), 39 deletions(-) diff --git a/source/server/apistatusd.py b/source/server/apistatusd.py index eff1010..a59b555 100755 --- a/source/server/apistatusd.py +++ b/source/server/apistatusd.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 -# file: statusd.py +# file: apistatusd.py # date: 26.07.2019 # email: berhsi@web.de @@ -76,13 +76,12 @@ def display_peercert(cert): def receive_buffer_is_valid(raw_data): ''' Checks validity of the received buffer contents. - param 1: byte + param 1: byte object return: boolean ''' - if raw_data in (b'\x00', b'\x01'): + if raw_data.decode('utf-8', 'strict') in ('0', '1'): logging.debug('Argument is valid: {}'.format(raw_data)) return True - logging.debug('Argument is not valid: {}'.format(raw_data)) return False @@ -90,7 +89,7 @@ def receive_buffer_is_valid(raw_data): def change_status(raw_data, api): ''' Write the new status together with a timestamp into the Space API JSON. - param 1: byte + param 1: byte object param 2: string return: boolean ''' @@ -113,6 +112,7 @@ def change_status(raw_data, api): except Exception as e: logging.error('Failed to change API file') logging.error('{}'.format(e)) + return False logging.debug('API file changed') else: logging.error('API file is not writable. Wrong permissions?') @@ -152,10 +152,10 @@ def set_values(raw_data): ''' Create a timestamp, changes the value of the given byte into a string and returns both. - param 1: byte + param 1: byte object return: tuple ''' - status = True if raw_data == b'\x01' else False + status = True if raw_data.decode('utf-8', 'strict') == '1' else False timestamp = int(str(time()).split('.')[0]) logging.debug('Set values for timestamp: {} and status: {}'.format( @@ -173,6 +173,7 @@ def main(): (cve-2011-3389) ''' + answer = '3'.encode(encoding='utf-8', errors='strict') loglevel = logging.WARNING formatstring = '%(asctime)s: %(levelname)s: %(message)s' logging.basicConfig(format=formatstring, level=loglevel) @@ -196,7 +197,7 @@ def main(): 'template': './api_template' } } - configfile = './statusd.conf' + configfile = './apistatusd.conf' config = configparser.ConfigParser() config.read_dict(default_config) if not config.read(configfile): @@ -273,19 +274,10 @@ def main(): raw_data = conn.recv(1) if receive_buffer_is_valid(raw_data) is True: if change_status(raw_data, config['api']['api']) is True: - logging.debug('Send {} back'.format(raw_data)) - conn.send(raw_data) - # change_status returns false: - else: - logging.info('Failed to change status') - if conn: - conn.send(b'\x03') - # receive_handle returns false: - else: - logging.info('Invalid argument received: {}'.format(raw_data)) - logging.debug('Send {} back'.format(b'\x03')) - if conn: - conn.send(b'\x03') + answer = raw_data + if conn: + logging.debug('Send {} back'.format(raw_data)) + conn.send(answer) sleep(0.1) # protection against dos except KeyboardInterrupt: logging.info('Keyboard interrupt received') @@ -293,13 +285,6 @@ def main(): except Exception as e: logging.error('{}'.format(e)) continue - finally: - if mySocket: - logging.info('Shutdown socket') - try: - mySocket.shutdown(socket.SHUT_RDWR) - except Exception as e: - logging.error(f'Error while shutdown socket: {e}') return 0 diff --git a/source/server/setstatus.py b/source/server/setstatus.py index fc615be..e0a36d2 100755 --- a/source/server/setstatus.py +++ b/source/server/setstatus.py @@ -60,15 +60,10 @@ class SetStatus: """ return: boolean """ - try: - self.status = int(self.status) - except Exception as e: - self.log.error('Status argument does not represent a integer') - return False - if self.status in (0, 1): - self.log.debug('Set value to {}'.format(self.status)) - self.status = bytes([self.status]) + if self.status in ('0', '1'): + self.log.debug('Set status to {}'.format(self.status)) return True + self.log.debug('{} is not a valid status'.format(self.status)) return False def set_config(self): @@ -197,7 +192,6 @@ class SetStatus: # check given status if self.check_status() is False: - self.log.error('No valid status given') exit(1) # log config if level is debug @@ -222,12 +216,14 @@ class SetStatus: # send status try: self.log.debug('Send new status: {}'.format(self.status)) - self.connection.send(self.status) + self.connection.send(self.status.encode(encoding='utf-8', + errors='strict')) except Exception as e: self.log.error('Error: {}'.format(e)) exit(6) try: - response = self.connection.recv(1) + response = self.connection.recv(1).decode(encoding='utf-8', + errors='strict') self.log.debug('Server returns: {}'.format(response)) if response == self.status: self.log.info('Status sucessfull updated')