From 2baabdbd79ee5929941b08be02bdceb899b50939 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 24 May 2022 18:20:03 +0100 Subject: [PATCH] Add switch for server ID validation: You should add this to [GLOBAL]: VALIDATE_SERVER_IDS: True Please set to True if you are part of FreeDMR network. If you are standalone or private network, You can set it to False if you want. --- config.py | 3 ++- hblink.py | 39 ++++++++++++++++++++------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/config.py b/config.py index 9076b8e..e6cf1f8 100755 --- a/config.py +++ b/config.py @@ -147,7 +147,8 @@ def build_config(_config_file): 'ALLOW_NULL_PASSPHRASE': config.getboolean(section, 'ALLOW_NULL_PASSPHRASE'), 'ANNOUNCEMENT_LANGUAGES': config.get(section, 'ANNOUNCEMENT_LANGUAGES'), 'SERVER_ID': config.getint(section, 'SERVER_ID').to_bytes(4, 'big'), - 'DATA_GATEWAY': config.getboolean(section, 'DATA_GATEWAY') + 'DATA_GATEWAY': config.getboolean(section, 'DATA_GATEWAY'), + 'VALIDATE_SERVER_IDS': config.getboolean(section, 'VALIDATE_SERVER_IDS') }) if not CONFIG['GLOBAL']['ANNOUNCEMENT_LANGUAGES']: diff --git a/hblink.py b/hblink.py index 8d333ed..3a3bf70 100755 --- a/hblink.py +++ b/hblink.py @@ -450,25 +450,26 @@ class OPENBRIDGE(DatagramProtocol): logger.warning('(%s) Packet more than 5s old!, discarding', self._system) return - #Discard bad source server - if ((len(str(int.from_bytes(_source_server,'big'))) < 4) or (len(str(int.from_bytes(_source_server,'big'))) > 7)): - if _stream_id not in self._laststrid: - logger.warning('(%s) Source Server should be between 4 and 7 digits, discarding Src: %s', self._system, int.from_bytes(_source_server,'big')) - self.send_bcsq(_dst_id,_stream_id) - self._laststrid.append(_stream_id) - return - elif (len(str(int.from_bytes(_source_server,'big'))) == 4 or (len(str(int.from_bytes(_source_server,'big'))) == 5)) and ((str(int.from_bytes(_source_server,'big'))[:4]) not in self._CONFIG['_SERVER_IDS'] ): - if _stream_id not in self._laststrid: - logger.warning('(%s) Source Server ID is 4 or 5 digits but not in list: %s', self._system, int.from_bytes(_source_server,'big')) - self.send_bcsq(_dst_id,_stream_id) - self._laststrid.append(_stream_id) - return - elif len(str(int.from_bytes(_source_server,'big'))) > 5 and not self.validate_id(_source_server): - if _stream_id not in self._laststrid: - logger.warning('(%s) Source Server 6 or 7 digits but not a valid DMR ID, discarding Src: %s', self._system, int.from_bytes(_source_server,'big')) - self.send_bcsq(_dst_id,_stream_id) - self._laststrid.append(_stream_id) - return + if self._CONFIG['GLOBAL']['VALIDATE_SERVER_IDS']: + #Discard bad source server + if ((len(str(int.from_bytes(_source_server,'big'))) < 4) or (len(str(int.from_bytes(_source_server,'big'))) > 7)): + if _stream_id not in self._laststrid: + logger.warning('(%s) Source Server should be between 4 and 7 digits, discarding Src: %s', self._system, int.from_bytes(_source_server,'big')) + self.send_bcsq(_dst_id,_stream_id) + self._laststrid.append(_stream_id) + return + elif (len(str(int.from_bytes(_source_server,'big'))) == 4 or (len(str(int.from_bytes(_source_server,'big'))) == 5)) and ((str(int.from_bytes(_source_server,'big'))[:4]) not in self._CONFIG['_SERVER_IDS'] ): + if _stream_id not in self._laststrid: + logger.warning('(%s) Source Server ID is 4 or 5 digits but not in list: %s', self._system, int.from_bytes(_source_server,'big')) + self.send_bcsq(_dst_id,_stream_id) + self._laststrid.append(_stream_id) + return + elif len(str(int.from_bytes(_source_server,'big'))) > 5 and not self.validate_id(_source_server): + if _stream_id not in self._laststrid: + logger.warning('(%s) Source Server 6 or 7 digits but not a valid DMR ID, discarding Src: %s', self._system, int.from_bytes(_source_server,'big')) + self.send_bcsq(_dst_id,_stream_id) + self._laststrid.append(_stream_id) + return #Increment max hops _inthops = _hops +1