From 27d3e144ab2c282b63d11ec77b6b3629bf434ebc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sun, 11 Jun 2023 17:57:51 +0200 Subject: [PATCH] Continued: - .arpa domains are reverse-ip-address domains and should not be used generally - please choose a proper domain name, e.g. lemmy.myhomepage.tld --- fba/commands.py | 9 ++++++++- fba/federation.py | 20 ++++++++++++++++---- fba/instances.py | 2 +- fba/networks/mastodon.py | 6 ++++++ fba/networks/pleroma.py | 8 +++++++- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/fba/commands.py b/fba/commands.py index d71c0ae..669bee9 100644 --- a/fba/commands.py +++ b/fba/commands.py @@ -247,9 +247,16 @@ def fetch_blocks(args: argparse.Namespace): if not validators.domain(blocked): print(f"WARNING: blocked='{blocked}',software='{software}' is not a valid domain name - skipped!") continue + elif blocked.split(".")[-1] == "arpa": + print(f"WARNING: blocked='{blocked}' is a reversed .arpa domain and should not be used generally.") + continue elif not instances.is_registered(blocked): # DEBUG: print("DEBUG: Hash wasn't found, adding:", blocked, blocker) - instances.add(blocked, blocker, inspect.currentframe().f_code.co_name, nodeinfo_url) + try: + instances.add(blocked, blocker, inspect.currentframe().f_code.co_name, nodeinfo_url) + except network.exceptions as exception: + print(f"Exception during adding blocked='{blocked}',blocker='{blocker}': '{type(exception)}'") + continue if not blocks.is_instance_blocked(blocker, blocked, block_level): blocks.add_instance(blocker, blocked, reason, block_level) diff --git a/fba/federation.py b/fba/federation.py index 1e40052..42d847f 100644 --- a/fba/federation.py +++ b/fba/federation.py @@ -60,7 +60,10 @@ def fetch_instances(domain: str, origin: str, software: str, script: str, path: elif domain == "": raise ValueError("Parameter 'domain' is empty") - if not instances.is_registered(domain): + if domain.split(".")[-1] == "arpa": + print(f"WARNING: domain='{domain}' is a reversed .arpa domain and should not be used generally.") + return + elif not instances.is_registered(domain): # DEBUG: print("DEBUG: Adding new domain:", domain, origin) instances.add(domain, origin, script, path) @@ -76,6 +79,7 @@ def fetch_instances(domain: str, origin: str, software: str, script: str, path: print(f"INFO: Checking {len(peerlist)} instances from {domain} ...") for instance in peerlist: + # DEBUG: print(f"DEBUG: instance='{instance}'") if instance is None: # Skip "None" types as tidup.domain() cannot parse them continue @@ -85,17 +89,23 @@ def fetch_instances(domain: str, origin: str, software: str, script: str, path: # DEBUG: print(f"DEBUG: instance='{instance}' - AFTER") if instance == "": - print("WARNING: Empty instance after tidyup.domain(), domain:", domain) + print(f"WARNING: Empty instance after tidyup.domain(), domain='{domain}'") continue elif not validators.domain(instance.split("/")[0]): print(f"WARNING: Bad instance='{instance}' from domain='{domain}',origin='{origin}',software='{software}'") continue + elif instance.split(".")[-1] == "arpa": + print(f"WARNING: instance='{instance}' is a reversed .arpa domain and should not be used generally.") + continue elif blacklist.is_blacklisted(instance): # DEBUG: print("DEBUG: instance is blacklisted:", instance) continue # DEBUG: print("DEBUG: Handling instance:", instance) - if not instances.is_registered(instance): + if instance.split(".")[-1] == "arpa": + print(f"WARNING: instance='{instance}' is a reversed .arpa domain and should not be used generally.") + continue + elif not instances.is_registered(instance): # DEBUG: print("DEBUG: Adding new instance:", instance, domain) instances.add(instance, domain, script) @@ -382,8 +392,10 @@ def determine_software(domain: str, path: str = None) -> str: if "error_message" in data: # DEBUG: print(f"DEBUG: Could not determine software type, domain='{domain}'") if "exception" in data: - raise Exception(f"Cannot fetch nodeinfo from domain='{domain}': '{data['error_message']}'") from data["exception"] + # Continue raising it + raise data["exception"] else: + # Raise generic exception if none is attached raise Exception(f"Cannot fetch nodeinfo from domain='{domain}': '{data['error_message']}'") # DEBUG: print("DEBUG: data():", len(data), data) diff --git a/fba/instances.py b/fba/instances.py index e2da016..d292607 100644 --- a/fba/instances.py +++ b/fba/instances.py @@ -186,7 +186,7 @@ def add(domain: str, origin: str, command: str, path: str = None): raise ValueError(f"command[]='{type(command)}' is not 'str'") elif command == "": raise ValueError("Parameter 'command' is empty") - elif not validators.domain(domain.split("/")[0]): + elif not validators.domain(domain.split("/")[0]) or domain.split(".")[-1] == "arpa": raise ValueError(f"Bad domain name='{domain}'") elif origin is not None and not validators.domain(origin.split("/")[0]): raise ValueError(f"Bad origin name='{origin}'") diff --git a/fba/networks/mastodon.py b/fba/networks/mastodon.py index 0dc62a0..e0525fa 100644 --- a/fba/networks/mastodon.py +++ b/fba/networks/mastodon.py @@ -248,6 +248,9 @@ def fetch_blocks(domain: str, origin: str, nodeinfo_url: str): if not validators.domain(blocked): print(f"WARNING: blocked='{blocked}',software='mastodon' is not a valid domain name - skipped!") continue + elif blocked.split(".")[-1] == "arpa": + print(f"WARNING: blocked='{blocked}' is a reversed .arpa domain and should not be used generally.") + continue elif not instances.is_registered(blocked): # DEBUG: print(f"DEBUG: Domain blocked='{blocked}' wasn't found, adding ..., domain='{domain}',origin='{origin}',nodeinfo_url='{nodeinfo_url}'") instances.add(blocked, domain, inspect.currentframe().f_code.co_name, nodeinfo_url) @@ -259,6 +262,9 @@ def fetch_blocks(domain: str, origin: str, nodeinfo_url: str): if not validators.domain(blocked): print(f"WARNING: blocked='{blocked}',software='mastodon' is not a valid domain name - skipped!") continue + elif blocked.split(".")[-1] == "arpa": + print(f"WARNING: blocked='{blocked}' is a reversed .arpa domain and should not be used generally.") + continue elif not instances.is_registered(blocked): # DEBUG: print("DEBUG: Hash wasn't found, adding:", blocked, domain) instances.add(blocked, domain, inspect.currentframe().f_code.co_name, nodeinfo_url) diff --git a/fba/networks/pleroma.py b/fba/networks/pleroma.py index c1082ad..62cf4c7 100644 --- a/fba/networks/pleroma.py +++ b/fba/networks/pleroma.py @@ -110,6 +110,9 @@ def fetch_blocks(domain: str, origin: str, nodeinfo_url: str): if not validators.domain(blocked): print(f"WARNING: blocked='{blocked}',software='pleroma' is not a valid domain name - skipped!") continue + elif blocked.split(".")[-1] == "arpa": + print(f"WARNING: blocked='{blocked}' is a reversed .arpa domain and should not be used generally.") + continue elif not instances.is_registered(blocked): # DEBUG: print(f"DEBUG: Domain blocked='{blocked}' wasn't found, adding ..., domain='{domain}',origin='{origin}',nodeinfo_url='{nodeinfo_url}'") instances.add(blocked, domain, inspect.currentframe().f_code.co_name, nodeinfo_url) @@ -181,7 +184,10 @@ def fetch_blocks(domain: str, origin: str, nodeinfo_url: str): nodeinfo_url = searchres[2] # DEBUG: print("DEBUG: Looking up instance by domain:", blocked) - if not instances.is_registered(blocked): + if blocked.split(".")[-1] == "arpa": + print(f"WARNING: blocked='{blocked}' is a reversed .arpa domain and should not be used generally.") + continue + elif not instances.is_registered(blocked): # DEBUG: print(f"DEBUG: Domain blocked='{blocked}' wasn't found, adding ..., domain='{domain}',origin='{origin}',nodeinfo_url='{nodeinfo_url}'") instances.add(blocked, domain, inspect.currentframe().f_code.co_name, nodeinfo_url) -- 2.39.5