From ee03357f65d21a68469655703f0f3a99e4f9429d Mon Sep 17 00:00:00 2001 From: Veiko Aasa Date: Thu, 21 Nov 2019 16:28:00 +0300 Subject: [PATCH] diagnostics: fix IPv6 failures - Curl: if an IPv6 zone index is specified, use --interface parameter. This fixes two issues: - Curl in Debian Buster doesn't support an IPv6 zone index in URL - Curl in Debian Bullseye doesn't redirect properly if a zone index is in URL. - Disable IPv6 diagnostics on daemons that don't listen on an IPv6 address: plinth, deluge, transmission Closes #1519 Signed-off-by: Veiko Aasa Reviewed-by: Joseph Nuthalapati --- plinth/action_utils.py | 12 +++++++++++- plinth/modules/deluge/__init__.py | 1 - plinth/modules/diagnostics/__init__.py | 1 - plinth/modules/transmission/__init__.py | 1 - 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/plinth/action_utils.py b/plinth/action_utils.py index 353fb7423..c2f2e725d 100644 --- a/plinth/action_utils.py +++ b/plinth/action_utils.py @@ -20,6 +20,7 @@ Python action utility functions. import logging import os +import re import shutil import socket import subprocess @@ -351,7 +352,16 @@ def _check_port(port, kind='tcp', listen_address=None): def check_url(url, kind=None, env=None, check_certificate=True, extra_options=None, wrapper=None, expected_output=None): """Check whether a URL is accessible.""" - command = ['curl', '--location', '-f', '-w', '%{response_code}', url] + command = ['curl', '--location', '-f', '-w', '%{response_code}'] + + if kind == '6': + # extract zone index + match = re.match(r'(.*://)\[(.*)%(?P.*)\](.*)', url) + if match: + command = command + ['--interface', match.group('zone')] + url = '{0}[{1}]{2}'.format(*match.group(1, 2, 4)) + + command.append(url) if wrapper: command.insert(0, wrapper) diff --git a/plinth/modules/deluge/__init__.py b/plinth/modules/deluge/__init__.py index 08fda23f9..93e515b06 100644 --- a/plinth/modules/deluge/__init__.py +++ b/plinth/modules/deluge/__init__.py @@ -111,7 +111,6 @@ def diagnose(): results = [] results.append(action_utils.diagnose_port_listening(8112, 'tcp4')) - results.append(action_utils.diagnose_port_listening(8112, 'tcp6')) results.extend( action_utils.diagnose_url_on_all('https://{host}/deluge', check_certificate=False)) diff --git a/plinth/modules/diagnostics/__init__.py b/plinth/modules/diagnostics/__init__.py index 78246b4c5..dfc228729 100644 --- a/plinth/modules/diagnostics/__init__.py +++ b/plinth/modules/diagnostics/__init__.py @@ -67,7 +67,6 @@ def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(8000, 'tcp4')) - results.append(action_utils.diagnose_port_listening(8000, 'tcp6')) results.extend( action_utils.diagnose_url_on_all('http://{host}/plinth/', check_certificate=False)) diff --git a/plinth/modules/transmission/__init__.py b/plinth/modules/transmission/__init__.py index 1e43e832e..5dd37b104 100644 --- a/plinth/modules/transmission/__init__.py +++ b/plinth/modules/transmission/__init__.py @@ -122,7 +122,6 @@ def diagnose(): results = [] results.append(action_utils.diagnose_port_listening(9091, 'tcp4')) - results.append(action_utils.diagnose_port_listening(9091, 'tcp6')) results.extend( action_utils.diagnose_url_on_all('https://{host}/transmission', check_certificate=False))